首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >在ESP32上读取串口数据

在ESP32上读取串口数据

原创
作者头像
谭广健
发布2025-06-20 11:20:48
发布2025-06-20 11:20:48
4130
举报
文章被收录于专栏:谭广健的专栏谭广健的专栏

话说之前研究ESP32 MCU单片机的开发也略有长足。这次有个项目是需要判断人的距离,于是使用了24G的人体存在感应雷达模块。为什么使用人体感应雷达而不是使用超声波雷达呢?因为超声波雷达只是判断物体远近而有时候蚊子或其他物体移动都会触发所以误报率毕竟高,而这次使用的人体感应雷达就只对人有判断。

一开始人体感应雷达也比较容易上手因为有个DO的引脚,只要打开扫描读取就可以判断是否有人存在。但这个只是判断人,无法判断人的距离,那怎么办呢?好在看到它说明书说有个串口输出距离。当无人时反馈为OFF,有个则反馈为distance:130,130为距离单位为厘米,那就好办了,就读个串口数据判断上传即可。。

代码语言:txt
复制
void setup() {
  Serial.begin(115200);       // 主串口,用于调试输出
  Serial1.begin(115200, SERIAL_8N1, 20, 21); // UART1,使用引脚20(RX)和21(TX)
  Serial.println("========================");
  Serial.println("UART Reader Initialized");
  pinMode(led, OUTPUT);
}

搞掂,打开串口捕获相关参数。。

代码语言:txt
复制
void readAndPrintUartData() {
  static String buffer = "";
  static bool lastWas0D = false; // 标记前一个字节是否为0D
 
  // 读取UART数据
  while (Serial1.available() > 0) {
    char data = Serial1.read();
    
    // 检查是否为0D(回车)
    if (data == 0x0D) {
      lastWas0D = true;
    } 
    // 检查是否为0A(换行)且前一个字节是0D
    else if (data == 0x0A && lastWas0D) {
      Serial.print("Received: ");
      Serial.println(buffer);  // 打印整段数据
      buffer = ""; // 清空缓冲区
      lastWas0D = false; // 重置标记
      return; // 结束读取
    } 
    // 普通数据,追加到缓冲区
    else {
      buffer += data;
      lastWas0D = false; // 重置标记
    }
  }
}

OK,再写一个判断传输到服务器就完成了。。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档