本帖最后由 1055173307 于 2024-4-2 16:18 编辑
前情提要
之前参加的雷达活动完成的雷达应用,发的贴子 【雷达灯控】安信可 Rd-03E+ 氛围灯 + 灯随人动 里提到的画饼计划,说要向大佬们学习一下,接入HA和画一块PCB。回来圆一部分的饼。
PCB设计
完成毕设的中期答辩回来之后就开始着手画这一块板子,因为之前的主控用的是比雷达还贵的ESP32-S3的开发板,稍微有点浪费的意思在。所以翻了一下库存之后决定用之前氛围灯留下的ESP-02,这个模组用的8266的芯片而且是个乐鑫几乎淘汰的老东西了(目前推荐用ESP8684替代)。
然后感觉功能稍微单一,又加了一颗光敏电阻接到模组的TOUT引脚检测桌面的光照强度,计划到时候可以上传到HA的MQTT服务器上。为了省点成本和缩小PCB的体积,没有用TYPE-C和类似的接口,全用直接焊线的办法,实测也挺好用,没有乱动的话线也不会断。大概成品如下一批图。
焊接完的成品还是挺好看的,整体就比雷达大一小圈,以后做3D打印的外壳应该很不错。 从群里大佬学到了用牙线盒遮挡一下雷达会有不错的效果,于是:
软件更改
最开始想着直接全套代码移植过来就能用了,因为硬件接口跟我的逻辑处理是完全分离的,.cpp和.h两个文件一复制再完善一下就能用了。 但是因为8266只有一个半的串口,Serial0用于串口下载和调试串口,Serial1只有TX。所以只能调软件串口库来实现,这时候就遇到了第一个问题,雷达串口默认256000,远超软件串口的建议最高波特率,这就导致了接收到的数据误码率非常的高,有时候一百多帧数据连下来没一帧的帧头帧尾能对上。所以被迫中断,等待技术大佬泽哥的固件发布。 等到泽哥的固件后,烧录了9600波特率的固件后,又遇到了第二个问题,就是最开始用硬件串口中断接收的方式,在软件串口库上好像遇到了bug,半天都不进中断回调,于是换了轮询的接收方式,因为雷达的数据回报周期50ms,控制每50ms接一次数据,一番调试后串口接收功能才好用。接收代码如下: - SoftwareSerial RD_serial(12,13);
- if(uart_cnt==5)
- {//50ms 处理串口数据
- memset(rec_buf,0x00,sizeof(rec_buf));
- available = RD_serial.available();
- RD_serial.readBytes(rec_buf,7);
- RD_serial.flush();
- // Serial.printf("ava:%d,rec:%d\n",available,rec_ptr);
- // for(uint8_t i=0;i<7;i++){
- // Serial.printf("%02x ",rec_buf[i]);
- // }
- // Serial.println();
- Radar.DataConversion(rec_buf);
- Radar.ModeUpdate();
-
- uart_cnt=0;
- }
复制代码
其他的代码就跟之前没有变化。另外加入了ADC检测光照的部分代码,就是直接读取引脚的电压值。灯光的效果跟之前的也是一样的,就是更换了主控和接了一块PCB 持续画饼计划 在等低波特率固件的过程中,已经在闲置树莓派上安装好了HAOS,下一步打算先在HA上把MQTT服务器搞起来,把氛围灯接入MQTT服务器之后跟我的毕设结合一下再来水一次帖子/doge
|