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串口通信 双机串口通信相关推荐

  1. 基于51单片机的双机串口通信排队叫号系统(LCD显示)设计

    基于51单片机的双机串口通信排队叫号系统(LCD显示)设计 1 开发环境 视频讲解 2 功能说明介绍 3 仿真图 4 程序 5 原理图 6 视频讲解 7 设计报告 7.1 设计目的 7.2 设计要求及 ...

  2. 基于proteus软件仿真AT89C52的双机串口通信 附工程包

    计算机与外界的信息交换称为通信,常用的通信方式有两种:并行通信和串行通信. 51 单片机用 4 个接口与外界进行数据输入与数据输出就是并行通信,并行通信的特点是传输信号的速度快,但所用的信号线较多,成 ...

  3. c语言串口通信_stm32 串口通信收发说明

    很多网友在stm32 串口通信收发中,发现接收发送函数中,数据都是指针指向首字符的字符串中,下一步进行后续操作就非常吃力了.其实这是对C语言指针的不能熟练应用有关.指针是C语言的灵魂,也是最难的部分, ...

  4. android spi串口调试,PIC入门3,SPI通信和串口调试实验

    原标题:PIC入门3,SPI通信和串口调试实验 MSSP模块工作于SPI主控方式,这个可以直接在实验板上执行. 程序: //适合3EPIC实验板,配置PIC的MSSP模块工作于SPI主控方式下, // ...

  5. s7300plc串口通信_s7-300串口通讯.ppt

    s7-300串口通讯 串口通信特点 1:点到点连接 2:串形通信 信息字节的每个位按照固定的次序一个连接一个传输 3:通信双方约定统一的传输速率.数据位.奇偶校验.停止位 4:半双工.全双工操作 串口 ...

  6. cubemx stm32 陶晶驰 串口屏 基于YXY通信原理的串口屏驱动代码

    陶晶驰串口屏 资料 陶晶驰串口屏是本质是一个MCU,屏幕是MCU的模块,一般是一块TFT屏幕.在串口屏厂商提供的软件上面编写界面,然后通过串口直接烧到串口屏的MCU上,然后在屏幕上展示出来. 串口屏资 ...

  7. STM32开发,串口和PC机通信(串口中断、FIFO机制),安富莱+正点原子程序合并

    STM32开发,串口和PC机通信(串口中断.FIFO机制),安富莱+正点原子程序合并 1 概述 1.1 资源概述 1.2 实现功能 2 软件实现 2.1实现步骤 2.2 main()函数代码 2.3 ...

  8. 【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. ...

  9. STM32串口通信、串口调试助手

    STM32系列博客:  STM32学习之旅① 开发环境搭建 STM32学习之旅② 固件库的使用及工程模板的建立 STM32学习之旅③ 从点灯到代码移植 STM32学习之旅④ USART串口和上位机通信 ...

最新文章

  1. 移动磁盘由于IO设备错误,要怎样寻回文件
  2. kerberos java实现,基于kerberos实现jaas登录
  3. python pdf处理 图片_python PDF文件合并、图片处理
  4. 查看安卓keystore别名
  5. Hbuilder开发HTML5 APP之打开新页面
  6. ros轮式小车学习链接
  7. hive 小文件数据合并
  8. 临时手机验证码_实用网站(一)短信验证码 临时网盘 临时邮箱
  9. 前端学习(2468):echart复习电商管理通过路由加载数据
  10. mongodb java报授权,mongoDB 3.0用户创建与授权
  11. android打包闪退,使用最新hx 进行android打包闪退
  12. 百度网盘欲分拆闯关科创板?
  13. 用枚举法实现单例设计模型
  14. php7使用什么缓存,PHP7 opcache缓存清理问题
  15. 【训练计划】--2019-04
  16. GB2312、GB18030、GBK、UNICODE、BIG5之间兼容关系
  17. 北京内推 | 微软亚洲研究院机器学习组招聘NLP/语音合成等方向全职研究员
  18. 守护进程杀手(测试)
  19. oracle视图、函数、循环、case when
  20. java系统化基础-day02-运算符、选择结构、循环结构

热门文章

  1. 关于DDK中的编译知识
  2. Mace-micro引擎编译与测试
  3. jsp常见面试题(1)
  4. dhrystone测试结果_测试cpu的简单工具-dhrystone | 学步园
  5. U8 数据库服务器和应用服务器 分离后出现 登陆系统管理 远程组件初始化 失败 解决方案!
  6. Centos7开机自启动手册
  7. 数据库系统--码,超码,候选码,主属性,非主属性,主码,全码,外码基本概念
  8. windchill安全标签客制化
  9. java 面试概念题 笔记
  10. oracle索引的事