ESP32串口通信 双机串口通信
ESP32串口
ESP32双机串口通信
环顾论坛居然无使用uart进行双击通信的案例或者讲解!!!
还是自己摸索吧!环境依旧是arduino(熟练使用ESP32后必得用vs code,这个IDE居然有时候函数不能跳转!!!)
双向通信代码
先贴代码(使用串口2,GPIO16、17):
esp32发送端
void setup() {// 启动串口调试输出Serial.begin(115200);// 初始化 ESP32 的串口2Serial2.begin(921600);
}void loop() {// 发送一串数据到 ESP32 的串口2byte sendData[] = {0xF1, 0xF2, 0xF3, 0xF4, 0xFF, 0xF1};Serial2.write(sendData, sizeof(sendData));// 输出发送的数据Serial.print("Sent data: ");for (int i = 0; i < sizeof(sendData); i++) {Serial.print(sendData[i], HEX);Serial.print(" ");}Serial.println();delay(1000);
}
esp32接收端
// 中断处理函数
void serial2ISR() {// 检查是否有可用数据从 ESP32 的串口2 接收if (Serial2.available()) {byte receivedData[6];// 读取 6 个字节到 receivedData 数组中Serial2.readBytes(receivedData, 6);// 输出接收到的数据Serial.print("Received data: ");for (int i = 0; i < 6; i++) {Serial.print(receivedData[i], HEX);Serial.print(" ");}Serial.println();}
}void setup() {// 启动串口调试输出Serial.begin(115200);// 初始化 ESP32 的串口2Serial2.begin(921600);// 配置串口2的RX引脚为中断模式pinMode(16, INPUT_PULLUP);attachInterrupt(digitalPinToInterrupt(16), serial2ISR, FALLING);
}void loop() {// do nothing
}
注意:接收端不采用循环,目的当然是为了进行其他程序,必须cpu循环判断串口缓冲区的状态!
真心不推荐下列写法: 阻塞式代码是指会导致程序停止运行,直到某个操作完成的代码。
while (!Serial.available()) {
// 等待串口有可用数据
}
串口常用函数介绍
好了,进入串口函数使用
1. 初始化串口
首先设置波特率以及数据位、检验位和停止位,然后设置收发引脚以及参数是否反转信号和超时时间。
// 启动串口调试输出Serial.begin(115200);// 初始化 ESP32 的串口2Serial2.begin(921600);
//void HardwareSerial::begin(unsigned long baud, uint32_t config, int8_t rxPin, int8_t txPin, bool invert, unsigned long timeout_ms)//baud参数是波特率,config参数是数据位、校验位和停止位的设置,rxPin和txPin参数是接收和发送数据的引脚,invert参数是是否反转信号,timeout_ms参数是超时时间。
// Serial2.begin(115200, SERIAL_8N1, 16, 17);
2. 串口打印
Serial.print(" ");
Serial.println();
区别在于print打印不换行,println打印换行
共同点:打印数值(可打印进制数)、字符、字符串
3. 串口输出数据
Serial2.write(sendData, sizeof(sendData));
//原型:write(const uint8_t *buffer, size_t size)
可以使用该串口输出数据,第一个参数是数据指针,size当然就是数据大小
还有一种简单方法输出数据
Serial.print();
Serial.println();
4. 串口缓冲区状态
Serial.available()
判断串口缓冲区的状态, 可以检查是否有数据可用
5. 读取串口字节
Serial.read();
读取串口一个字节, 如果已经接收到数据,则返回值为接收到的字节;否则返回 -1。
6. 读取串口字符串数据
Serial.readString();
读取字符串数据。该函数没有参数。如果已经接收到数据,则返回一个 String 对象,其中包含接收到的字符串;否则返回空字符串。
7. 读取多个字节数据
Serial.readBytes(buffer, length)
Serial.readBytesUntil(terminator, buffer, length);
读取多个字节的数据。buffer 参数是一个字节数组,用于存储读取到的数据;length 参数指定要读取的字节数。readBytes() 函数会一直阻塞程序,直到读取到指定长度的数据;而 readBytesUntil() 函数会在读取到终止字符(如\n)或达到最大长度时停止读取数据。这两个函数返回值为实际读取的字节数。
Serial.setTimeout(timeout)
设置在调用 readBytesUntil() 函数时等待数据到达的最长时间(以毫秒为单位)。timeout 参数是一个整数,表示最长等待时间。该函数没有返回值。
字符串简单示例:
发送端:
void setup() {// put your setup code here, to run once:Serial.begin(115200);Serial2.begin(921600);Serial.println("init success!");
}void loop() {// put your main code here, to run repeatedly:char *payload_char = "0xE0,0x5A,0x1B,0x6C,0x45,0x78";Serial.println(payload_char);Serial2.println(payload_char);delay(2000);
}
接收端:
void task1_uart2(void *pvParameters) {// Task 1 code herefor (;;) {if (Serial2.available()) {String receivedData = Serial2.readString();Serial.print("receivedData: ");Serial.println(receivedData);}vTaskDelay(5);}//正常不会执行到这里vTaskDelete(NULL);
}
ESP32串口通信 双机串口通信相关推荐
- 基于51单片机的双机串口通信排队叫号系统(LCD显示)设计
基于51单片机的双机串口通信排队叫号系统(LCD显示)设计 1 开发环境 视频讲解 2 功能说明介绍 3 仿真图 4 程序 5 原理图 6 视频讲解 7 设计报告 7.1 设计目的 7.2 设计要求及 ...
- 基于proteus软件仿真AT89C52的双机串口通信 附工程包
计算机与外界的信息交换称为通信,常用的通信方式有两种:并行通信和串行通信. 51 单片机用 4 个接口与外界进行数据输入与数据输出就是并行通信,并行通信的特点是传输信号的速度快,但所用的信号线较多,成 ...
- c语言串口通信_stm32 串口通信收发说明
很多网友在stm32 串口通信收发中,发现接收发送函数中,数据都是指针指向首字符的字符串中,下一步进行后续操作就非常吃力了.其实这是对C语言指针的不能熟练应用有关.指针是C语言的灵魂,也是最难的部分, ...
- android spi串口调试,PIC入门3,SPI通信和串口调试实验
原标题:PIC入门3,SPI通信和串口调试实验 MSSP模块工作于SPI主控方式,这个可以直接在实验板上执行. 程序: //适合3EPIC实验板,配置PIC的MSSP模块工作于SPI主控方式下, // ...
- s7300plc串口通信_s7-300串口通讯.ppt
s7-300串口通讯 串口通信特点 1:点到点连接 2:串形通信 信息字节的每个位按照固定的次序一个连接一个传输 3:通信双方约定统一的传输速率.数据位.奇偶校验.停止位 4:半双工.全双工操作 串口 ...
- cubemx stm32 陶晶驰 串口屏 基于YXY通信原理的串口屏驱动代码
陶晶驰串口屏 资料 陶晶驰串口屏是本质是一个MCU,屏幕是MCU的模块,一般是一块TFT屏幕.在串口屏厂商提供的软件上面编写界面,然后通过串口直接烧到串口屏的MCU上,然后在屏幕上展示出来. 串口屏资 ...
- STM32开发,串口和PC机通信(串口中断、FIFO机制),安富莱+正点原子程序合并
STM32开发,串口和PC机通信(串口中断.FIFO机制),安富莱+正点原子程序合并 1 概述 1.1 资源概述 1.2 实现功能 2 软件实现 2.1实现步骤 2.2 main()函数代码 2.3 ...
- 【genius_platform软件平台开发】第九十三讲:串口通信(485通信)
485通信 1. 485通信 1.1 termios结构 1.2 头文件 1.3 函数讲解 1.3.1 tcgetattr 1.3.2 tcsetattr 1.4 示例工程 1.5 参考文献 1.5. ...
- STM32串口通信、串口调试助手
STM32系列博客: STM32学习之旅① 开发环境搭建 STM32学习之旅② 固件库的使用及工程模板的建立 STM32学习之旅③ 从点灯到代码移植 STM32学习之旅④ USART串口和上位机通信 ...
最新文章
- 移动磁盘由于IO设备错误,要怎样寻回文件
- kerberos java实现,基于kerberos实现jaas登录
- python pdf处理 图片_python PDF文件合并、图片处理
- 查看安卓keystore别名
- Hbuilder开发HTML5 APP之打开新页面
- ros轮式小车学习链接
- hive 小文件数据合并
- 临时手机验证码_实用网站(一)短信验证码 临时网盘 临时邮箱
- 前端学习(2468):echart复习电商管理通过路由加载数据
- mongodb java报授权,mongoDB 3.0用户创建与授权
- android打包闪退,使用最新hx 进行android打包闪退
- 百度网盘欲分拆闯关科创板?
- 用枚举法实现单例设计模型
- php7使用什么缓存,PHP7 opcache缓存清理问题
- 【训练计划】--2019-04
- GB2312、GB18030、GBK、UNICODE、BIG5之间兼容关系
- 北京内推 | 微软亚洲研究院机器学习组招聘NLP/语音合成等方向全职研究员
- 守护进程杀手(测试)
- oracle视图、函数、循环、case when
- java系统化基础-day02-运算符、选择结构、循环结构