| 本帖最后由 望风阁 于 2024-3-27 11:18 编辑 
 首先感谢安信可论坛举办的活动,感谢园长
 本来是打算用雷达改造卫生间的照明灯的,无奈连续两周出差,耽搁了大把时间,回来准备交作业时发现HA中的ESPHome崩溃了,无法启动,先前在交流群里做到功课也就用不上了。
 
 
ESPHome崩溃   
 
 ESPhome崩溃本着态度第一位的原则,先给园长大人交作业,决定用手上的小零件先点个灯。
 总体思路是用esp8266接受雷达的串口数据并解析,通过解析出来的距离判断灯的亮与灭
 结合群里各位大佬的交流,很快接受到数据。
 
 
 调试数据 
 通过检测到0xAA的开头读取4个字节,前两个字节为小端格式的距离,在这里有一个小bug还未解决,如图8266已经接受到0xAA后的4个字节,但是通过串口输出到电脑时只能输出前3个字节,这个问题一直还吴姐,好在读取距离还没问题。大家有空可以探讨一下 
 复制代码void readserialdata() {
        
      if(Serial.available()){
              int n=Serial.readBytesUntil(0x55, serialBuff, 5);
              //串口显示,调试用.
//              Serial.println(n);
//              for (i = 0; i < 5; i++) {        
//                    Serial.print(serialBuff[i],HEX);// 输出serialBuff接收到的内容,这里有BUG,
//              }
             if (serialBuff[0] == 0xAA) {                  //校验帧头是否为AA
                    //小端距离换算
                    distance = serialBuff[1] + serialBuff[2] * 256;  //计算距离值
                    Serial.print("distance=");
                    Serial.println(distance);  //输出距离值
              } 
        }
}
读出距离就是主函数判断控灯了
 最后成品图如下:随手搭建,有点凌乱复制代码void loop() {
  readserialdata();
  if (distance>100) {
    // turn LED off:
    //delay(1000);
    digitalWrite(ledPin, HIGH);
    Serial.println("LOW");
  } else {
    // turn LED on:
    digitalWrite(ledPin, LOW);
     Serial.println("HIGH");
  }
          // delay in between reads for stability
}
 
 
 
 
 
 |