- 机器人等级考试
ESP32 for Arduino 串行通信学习笔记
- 2025-7-24 16:39:40 @
ESP32 for Arduino 串行通信学习笔记
一、串行通信基础
(一)串行与并行通信区别
- 串行通信:基于单条数据线,数据一位一位依次传输 。只需少数几根线,适合低速率、远距离传输,像 ESP32 主控板通过 USB 连电脑就是串行通信,常见方式有 UART、IIC、SPI 。
- 并行通信:一组数据的各数据位在多条数据线上同时传输,适合短距离、高速率传输 。
(二)UART 关键概念
- 定义:通用异步接收器/发送器,集成在主控器中,发送数据无需额外时钟信号,能节省引脚资源,还有缓冲区存通信数据 。
- 连接:用 TX(发送端)、RX(接收端)、GND(地)信号线,设备间连接时 TX 和 RX 交叉,GND 相连 。注意别把 5V 和 3.3V 设备的 UART 端口接反,会损坏设备 。
二、ESP32 的 UART 接口
ESP32 有 3 个 UART 端口,在 Arduino 环境里对应名称及引脚如下: | UART 端口 | Arduino 中名称 | TX 引脚 | RX 引脚 | 特殊说明 | | ---- | ---- | ---- | ---- | ---- | | UART0 | Serial | 1 | 3 | 开发板 Micro USB 经 USB 转 UART 芯片(如 CH340N )连到此端口,用于上传程序、和电脑交互 | | UART1 | Serial1 | 10 | 9 | 一般用于 Flash 读写,平时少用 | | UART2 | Serial2 | 17 | 16 | 可用于自定义串行通信场景 |
三、UART 数据发送(Arduino 函数及代码)
(一)常用函数
Serial.begin(speed, config)
:初始化串口 。speed
填波特率(如 115200 ,数值越大传输越快,需收发双方一致 );config
选数据位、校验位、停止位配置,默认8N1
(8 位数据位、无校验、1 位停止位 ),示例:Serial.begin(115200);
。Serial.print(val)
/Serial.print(val, format)
:以 ASCII 码形式输出数据 。val
是要输出的数据;format
对浮点数指定小数位数(默认 2 位 ),对整数指定进制(BIN
二进制、OCT
八进制、DEC
十进制、HEX
十六进制 ) 。比如Serial.print(10, BIN);
输出十进制 10 的二进制形式 。Serial.println(val)
/Serial.println(val, format)
:功能和print
类似,输出后自动换行 ,示例:Serial.println("Hello, ESP32!");
。Serial.write(val)
/Serial.write(str)
等:val
是字符/字符串时,功能同print
;val
是整数时,直接输出数据本身 。str
是要输出的字符串 ,示例:Serial.write(65);
输出 ASCII 码对应字符A
。
(二)完整代码示例(Arduino 环境 )
void setup() {
// 初始化串口,波特率 115200,默认 8N1 配置
Serial.begin(115200);
// 1. 整数的不同进制/格式输出(以数字 10 为例)
Serial.println(10, 2); // 尝试特定格式输出(结合函数逻辑理解结果)
Serial.println(10, 4); // 特定格式输出
Serial.println(10, 16); // 特定格式输出
Serial.println(10, 8); // 特定格式输出
Serial.println(10, BIN); // 输出二进制:1010
Serial.println(10, OCT); // 输出八进制:12
Serial.println(10, HEX); // 输出十六进制:A
Serial.println(10, DEC); // 输出十进制:10
// 2. 浮点数的小数位控制输出(以 3.1415926 为例)
Serial.println("----------------");
Serial.println(3.1415926, 2); // 保留 2 位小数,输出:3.14
Serial.println(3.1415926, 3); // 保留 3 位小数,输出:3.142
Serial.println(3.1415926, 1); // 保留 1 位小数,输出:3.1
// 3. Serial.write 函数使用
Serial.println("----------------");
Serial.write("65"); // 输出字符串 "65"
Serial.println(); // 换行,让输出更清晰
Serial.write(65); // 输出 ASCII 码 65 对应的字符 'A'
}
void loop() {
// loop 函数里暂时没重复执行的串口发送任务,保持空循环
delay(1000); // 延迟 1 秒,可根据需要调整或添加逻辑
}
(三)代码说明
setup
函数:程序启动时执行一次,完成串口初始化、各种格式的数据输出演示 。先初始化串口,再分别用不同函数、格式输出整数和浮点数,最后用Serial.write
演示字符/ASCII 码输出 。loop
函数:这里主要是空循环,加了delay
避免程序无意义地快速重复运行,实际项目里可添加持续发送数据等逻辑 。
四、数据格式与 ASCII 码
(一)UART 数据格式
UART 发送数据由起始位(低电平,标志数据开始传输 )、数据位(7 或 8 位等,可设置,从低位开始传 )、校验位(可选,用于检查数据错误 )、停止位(1 或 2 位,可设置,标志数据传输结束 )组成 。我们编程常用 8N1
格式,就是 8 位数据位、无校验位、1 位停止位 。
(二)ASCII 码作用
美国标准学会制定的单字节编码系统,解决串行通信里信息一致问题 。计算机里字母、数字、符号都用 0 和 1 存储,ASCII 码规定了它们对应的 0/1 组合 。比如字母 A
对应 ASCII 码 65 ,通信双方都用 ASCII 码规则,才能正确收发字符内容 。
通过学习这些,就能用 ESP32 在 Arduino 环境里灵活进行 UART 串行通信啦,多动手改改代码、试试不同参数,会理解得更透彻 !
0 条评论
目前还没有评论...