- 博客(27)
- 收藏
- 关注
原创 基于树莓派和Home Assistant的智能家居系统设计
硬件传感器怎么访问到树莓派?因为需要保证处于同一局域网,所以需要用到WiFi通信模块,比如ESP8266,ESP8266本身也是一个单片机,在各个传感器连接到它之后,它可以把获取到的数据通过MQTT通讯协议传输出去(ESP8266这里有两个作用:连接各个传感器,上传各传感器的数据)是去树莓派官网下载烧录器,然后烧录时选择特定型号的特定HA版本的专用系统,烧录至内存卡中,然后插卡,联网,再用电脑访问,并配置。在烧录完后,第一次访问HA时,需要等很久,这是正常现象,保持网络连接,然后等待一晚上即可。
2024-11-20 15:31:01
1110
原创 python安装ESPHome
3. 根据报错信息找到esphome的安装目录,我的是C:\Users\wxc\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.12_qbz5n2kfra8p0\LocalCache\local-packages\Python312\Scripts 在该目录下找到esphome.exe就算成功。6. 后续每次访问ESPHome都需要进入该目录,打开终端,输入命令,浏览器访问。5.浏览器访问localhost:6052。
2024-05-15 23:09:49
394
1
原创 对嵌入式系统的初步理解
1、嵌入式系统硬件的限制(CPU处理能力不如电脑、存储空间小、网络带宽小不利于传输、安全性不如电脑、能耗问题)2、交叉编译的定义:在X86PC机上,编译出能够在目标机上运行的程序代码(如ARM :arm-linux-)3、交叉编译工具常用:gcc(GNU Compiler Collection,简称GCC)、GNU工具集(编译工具+调试工具+协助开发工具make等+其他工具如链接)
2024-01-30 20:02:06
648
原创 系统移植 day2 bootloader->u-boot 移植
1、满栈:当堆栈指针SP总是指向最后压入堆栈的数据,称为满栈;2、空栈:当堆栈指针SP总是指向下一个将要放入数据的空位置,称为空栈;满栈状态下,先移动指针,后赋值. 空栈状态下,先赋值,后移动指针(记忆:空栈已经是指向下个元素了,肯定就只能先赋值,后移动。相应的,满栈就是先移动)1、升栈:随着数据的入栈,SP指针从低地址向高地址移动,称为升栈;上面先出2、降栈:随着数据的入栈,SP指针从高地址向低地址移动,称为降栈;下面先出ARM处理器S3C2440采用的是满栈、降栈。
2024-01-24 20:28:29
1047
原创 系统移植 day1 tftp简单文件传输协议和nfs网络文件系统的环境搭建
这里的“内核”是指操作系统内核,而不是开发板的CPU。3.点击 网络图标 -> 有线设置 -> + -> mac地址 -> ipv4 -> 自动/手动 -> 确定//学会设置手动和自动ip。1.编辑 -> 虚拟网络编辑器 -> 桥接模式 -> 桥接至(有线网卡) -> 选择USB -> 确定 //别选成网络了。2.虚拟机 -> 设置 -> 网络适配器 -> 自定义 -> 桥接模式 -> 确定。存储器(如:ROM,FLASH,SD,微硬盘):存储程序。1)有os(操作系统)的软件组成。
2024-01-24 19:21:12
1122
原创 ARM day7 day8 UART串口、PWM蜂鸣器、WDT看门狗、ADC数模转换
在系统运行以后也就启动了看门狗的计数器,看门狗就开始自动计数,如果到了一定的时间还不去清看门狗,那么看门狗计数器就会溢出从而引起看门狗中断,造成系统复位。看门狗的作用就是防止程序发生死循环,或者说程序跑飞。练习:串口控制LED 输入0时灯亮 输入1时灯灭。
2024-01-24 01:14:08
1430
原创 ARM day4 汇编及硬件编程
load -- 加载 读store -- 存储 写在ARM 架构下, 数据从内存到cpu 直接的移动只能通过 LDR/STR来完成mov 只能在寄存器之间移动数据 ,或把立即数移动到寄存器 ,并且数据长度不能超过 8 位str r2, [r0] //把r2 的数据 存储(写)到 r0 地址 *((int *) r0) = r2往右写ldr r1, [r0] // 把r0 地址中的数据 加载(读)到 r1 中 r1 = *((int *) r0)往左读。
2024-01-16 20:37:07
1897
1
原创 ARM day2、day3 汇编
其中,操作码、条件码、寄存器索引和位移量总共占据了大部分的指令位数,因此,一个 ARM 指令中只有少部分(通常为 8 位)是用来表示立即数的。实质是做 与运算, 通常用于 测试某一位或几位是0 还是1 结果 CPSR 'Z' 位来判断, Z 位位 1 表明结果为0。tst r0, #0x8 表示判断r0的第三位(8的二进制1000,也就是从右往左的第四位(0 1 2 3))是否为0。tst r0, #0x10 //测试 第4位是否为 0, if((r0 &(0x10)) == 0)
2024-01-15 20:28:59
1833
1
原创 ARM day1
T = 1, j = 0, 处于 thumb 状态 (一条指令 2 字节 16 位)5*SPSR(saved program status register保存之前的程序状态寄存器)+T = 0, j = 0, 处于 ARM 状态 (一条指令 4 字节 32 位)CPSR(current program status register当前程序状态寄存器)+T = 1, j = 1, 处于 thumbEE 状态。PC(program counter程序计数器)+
2024-01-11 20:26:44
1181
1
原创 Qt day6 绘图 文件类
1.需要用到的函数//重写虚函数//重写虚函数update() --- 手动刷新,界面重绘,触发paintEvent事件,可以配合定时器事件timerEvent一起使用QPainter: //画家QPen: //笔QBrush: //刷子//set this 表示设置主窗口为画布//设置画笔//设置画刷//画线//画矩形//画椭圆//画圆//画图片//将画家的坐标系的原点移动到主窗口的中心点位置p.save();
2024-01-03 20:11:20
381
1
原创 Qt day5 -- QmainWindow主窗口 事件 事件过滤器
QMenuBar:菜单栏QMenu: 菜单QAction: 动作QToolBar: 工具栏QStatusBar: 状态栏//cpp文件(本程序只需要写cpp文件即可)
2024-01-02 20:00:08
528
原创 C++ day8、day9 异常、转换函数、智能指针、STL标准模板库
public:public:const char *what() const noexcept{ //重写基类的虚函数return ptr;后续的错误语句就是这里的ptrprivate:if (y!=0 && x!!");//自定义派生异常else!");//标准异常try{return 0;四、
2024-01-02 18:41:11
403
原创 C++ day7 多态
重写--覆盖(override):重写虚函数,名字、参数、返回值都必须相同(虚函数、不同作用域,其他相同,相当于覆盖继承来的虚成员函数的函数体内容)重载(overload):成员函数重载(同域同名)重定义-隐藏:(不同域,同名),参数不同。此时,不论有无 virtual 关键字,基类的函数将被隐藏(因为不同域不能重载,所以称为隐藏)参数相同,但是基类函数没有 virtual关键字。此时,基类的函数被隐藏(注意与覆盖的区别)(基类有virtual就是覆盖了)总结:同域,同名重载。
2023-12-21 20:27:55
839
原创 C++ day5 模板、面试题、重载string类
泛型编程:编写与类无关的代码 //主函数使用举例:add(m,n);(而库函数不在编译器的控制权限之内)头部声明:template 外部friend函数定义:template 头部声明:template 外部定义:template 外部定义:template 头部声明:template
2023-12-19 20:43:05
983
原创 C++ day3 day4 -- static\const关键字 运算符重载
声明在类(private),定义在外,而非主函数创建对象;所有对象共享static成员变量,均可擅自更改!声明在类(public),定义在外;以访问static成员;所有对象共享static成员变量;声明加static,定义不需要;主函数中使用时,通过类名::访问!!
2023-12-18 21:41:54
368
1
原创 C++ day1 和C的差异、作用域、链接性、动态内存
int a = 1;int &b = a;//给a取别名为b,不占地址空间,可以理解为b是int &类型eg:引用传参(取别名传参 -- 效率最高)
2023-12-13 19:10:15
784
1
原创 网络编程 -day5-poll select复习-getsockopt()-广播
while(1){select(nfds=maxfd+1,&tmp,NULL,NULL,&timeout)}函数原型:int getsockopt (int sockfd, int level, int optname,void *optval, socklen_t *optlen);//参数:(sockfd,SOL_SOCKET,SO_BROADCAST,&timeout,sizeof(timeout)//poll的三个参数:结构体首地址、元素个数、超时(-1表示阻塞等待事件)
2023-12-06 22:01:18
888
1
原创 4WD PWM控制
void car_turn_right(uint16_t leftspeed,uint16_t rightspeed) //右转。void car_go_front(uint16_t leftspeed,uint16_t rightspeed) // 前进。void car_turn_left(uint16_t leftspeed,uint16_t rightspeed) //左转。
2023-07-01 16:51:05
57
原创 4WD循迹
else if(IN2==1 && IN1==1 && IN3==0 && IN4==1) //1101 灯1脱离黑线 小车左偏 直行右偏 左轮加速。else if(IN2==0 && IN1==1 && IN3==1 && IN4==1) //0111 小车大幅度右偏 小车直行左偏 右轮加速。else if(IN2==1 && IN1==1 && IN3==1 && IN4==0) //1110 小车大幅度左偏 小车直行右偏 左轮加速。//黑线灯亮 灯亮IN为0 小车灯序2134。
2023-07-01 16:44:06
67
原创 4WD智能小车 红外避障
/ 判断右侧是否有障碍物。// 判断左侧是否有障碍物。void Redlight_Init(void) // 初始化。//判断右侧是否有障碍物。//判断左侧是否有障碍物。
2023-06-30 08:13:41
130
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人