CEM5826-M11 开发板获取数据并控灯

分享作者:CSXSXSXS
作者昵称:MUHHHH
评测品牌:萤火工场
评测型号:CEM5826-M11
发布时间:2025-01-06 08:51:23
0
概要
转载自创作者“奋斗的白开水”萤火工场CEM5826-M11测评【2】开发板获取数据并控灯
开源口碑分享内容

上一篇讲了如何通过usb转ttl连接雷达板子并通过串口命令设置雷达板子的灵敏度等操作,这一篇来讲如何使用esp8266来获取雷达传过来的数据并控制板载led灯亮灭,并对需要的数据进行截取为下一篇显示到SSD1306的i2c协议的led屏幕上做准备。

   首先需要一块esp8266开发板,看图可知有UART0和USRT1两个串口,UART1直接连接flash的只可以烧写程序,不可以发送数据。所以我们用UATR0也就是默认的串口来和电脑通信,进行数据发送和接收。然后还需要一个串口需要和雷达板进行通信,但是只有uart1了还不可以发送数据,这该咋办呢?

   我们可以在库管理中搜索espsoftwareserial进行安装,这库可以把常规引脚模拟成串口引脚,如果以后项目上有串口资源不够的情况可以使用这个库模拟一下。

   现在问题解决了可以连接开发板进行操作了。ttl串口连接开发板,然后再把雷达板和开发板连接,连线不清楚可以对照上面引脚图看一下。

   连接完没问题就可以开始编写代码了,下面是实现代码,功能为实现雷达板信息传到esp8266,esp8266获取到信息后开始处理,获取v的值和str的值,并连同原始值一起传到电脑,如果有人时雷达out引脚输出低电平并点亮板载led。代码注释写的很详细,能力强的朋友可以跳过,能力弱一些的可以学习一下。

#include <SoftwareSerial.h>

// 定义软件串口的 RX 和 TX 引脚

#define MYPORT_RX 4

#define MYPORT_TX 5

//定义IO状态判断引脚,直接接到雷达out引脚设置led_iflag=1就可以实现有人灯亮无人灯灭了

#define M11_START 16

SoftwareSerial M11 (MYPORT_RX, MYPORT_TX);

void setup() {

 // 启动硬件串口

 Serial.begin(115200);

 // 启动软件串口

 M11.begin(115200);

}

void loop() {

 // 从雷达模块读取数据并发送到8266

 if (M11.available()) {

   // 读取一行数据,直到遇到换行符'\n'

   String data = M11.readStringUntil('\n');

   //打印到串口监视器

   Serial.println("data: "+data);

   //定义v str

   float v;

   int str;


   // 查找并提取 v 的值

   /**

   *************方法说明*************

   *data.indexOf() 是 Arduino String 类中的一个成员函数,用于查找指定子字符串或字符在字符串中首次出现的位置。

   *它返回的是子字符串或字符的起始索引(从0开始计数),如果未找到,则返回 -1。

   *用法一 int index = data.indexOf(substring);参数可以是字符也可以是字符串

   *用法二 int index = data.indexOf(substring, fromIndex);第一个参数一样可以是字符也可以是字符串;第二个参数是从该索引位置开始查找写整数。

   *

   *data.substring() 是 Arduino String 类中的一个成员函数,用于从字符串中提取子字符串。

   *用法一 String Str = data.substring(from); 提取从指定索引 from 开始直到字符串末尾的所有字符。

   *用法二 String Str = data.substring(from, to) 提取从索引 from 开始到(但不包括)索引 to 的所有字符。

   *

   *vStr.toFloat()将截取的值转换为float类型,不想转换v设置为String类型直接赋值也行。

   */

   //例:v=1.0 km/h, str=2867

   //获取到字符串v=的索引为0(开头就是)字符串v=的长度为2所以+2就是v的值的开始的索引

   int vIndex = data.indexOf("v=") + 2;

   //输出完 v的值后会有一个空格并且是第一个空格,直接获取空格的索引

   int spaceIndex = data.indexOf(" ");

   //然后对接受到的数据进行制定截取就获取到了v的值

   String vStr = data.substring(vIndex, spaceIndex);

   v = vStr.toFloat();


   // 查找并提取 str 的值

   int strIndex = data.indexOf("str=") + 4;

   String strStr = data.substring(strIndex);

   str = strStr.toInt();


   // 打印结果到串口监视器

   Serial.println("v: "+String(v));

   Serial.println("str: "+String(str));

   // 清除字符串对象以释放内存

   data = String();

 

 }

 // 从8266接受数据发送到雷达模块

 if (Serial.available()) {

   M11.write(Serial.read());

 }

}

下面是视频展示。



全部评论
暂无评论
0/144