本帖最后由 腿毛利小五郎 于 2024-4-22 23:54 编辑
基于Beetle ESP32 C6实现串口透传 前言Beetle ESP32 C6体积小串口资源丰富。探索串口数据透传功能,意在可添加DTU模组,作为中继实现获取其他传感器数据发送至DTU模块透传数据,本文将探索实现Beetle ESP32 C6的串口数据透传。
所需材料
一、Beetle ESP32 C6开发板 二、USB转TTL * 2 三、杜邦线若干
硬件连接
typeC线接电脑监视, 现测试中使用2个串口工具作为传感器和DTU模块。如下:
代码
- #include <Arduino.h>
- #include <HardwareSerial.h>
-
- unsigned short i;
- uint8_t temp;
- uint8_t received_data[2048]; // 创建一个全局数组来保存接收到的数据
- uint8_t received_data2[2048]; // 创建一个全局数组来保存接收到的数据
- uint32_t send_type = 0;
- unsigned long lastPacketTime = 0;
-
- // 清理串口读取缓存区的缓存
- void clear_usart_buffer() {
- i = Serial0.available();
- if(i != 0) {
- Serial.print("清空串口接收区的缓存......");
- Serial.println(Serial0.available());
- while(i--) Serial0.read(); // 读取并删除一个数据
- for(int j = 0; j < sizeof(received_data); j++) { // 清空数组
- received_data[j] = 0;
- }
- } else {
- //Serial.println("串口接收区的缓存为空!!!");
- }
- }
-
- // 读取串口数据并保存到数组
- void read_usart() {
- i = Serial0.available(); // 返回目前串口接收区内的已经接受的数据量
- int index = 0; // 创建一个索引来跟踪数组的当前位置
-
- if(i != 0) {
- Serial.print("串口接收到的数据量为:");
- Serial.println(Serial0.available());
- while(i--) {
- temp = Serial0.read(); // 读取并删除一个数据
- received_data[index] = temp; // 将数据保存到数组中
- index++; // 增加索引
- Serial.print(temp);
- }
- received_data[index] = '\0'; // 在数组的末尾添加一个空字符,以标记字符串的结束
- Serial.println("");
- Serial.print("接收到的数据为: ");
- for(int j = 0; j < index; j++) { // 打印接收到的数据
- Serial.print(received_data[j], HEX);
- Serial.print(" ");
- }
- Serial.println("");
- Serial1.write(received_data,index);//向上传发送
- } else {
- Serial.println("串口接收区没有数据!");
- }
- }
-
- void setup() {
- Serial.begin(115200); // 开启串口,设置波特率为115200
- Serial0.begin(9600, SERIAL_8N1, /*rx =*/17, /*Tx =*/16);//传感器吐得数据
- Serial1.begin(9600,SERIAL_8N1,/*rx =*/4,/*Tx =*/5);//DTU
- clear_usart_buffer(); // 清空接收区缓存
- }
-
- void loop() {
- Serial.println("usart test!!!");
- read_usart();
- clear_usart_buffer();
- delay(10);
- }
-
复制代码
上位机调试显示
总结
Beetle ESP32 C6串口资源丰富,串口数据传输稳定,适合查询其他传感器数据然后发送至DTU模块透传数据,如果串口转接485模块,还可以利用根据485地址设置查询更多485并联的传感器设备做透传。
|