esp32 arduino 串口函数
时间: 2025-07-20 13:30:13 浏览: 2
在使用 Arduino 开发 ESP32 项目时,串口通信是一个非常基础且重要的部分。ESP32 支持多个硬件串口(UART),并且可以通过软件模拟额外的串口,这为开发者提供了更大的灵活性。
### 使用硬件串口
ESP32 拥有三个硬件 UART 接口:UART0、UART1 和 UART2。其中 UART0 通常用于与计算机进行通信(即通过 USB 转串口芯片连接到 PC 的串口监视器),而 UART1 和 UART2 可以用于与其他设备通信,例如传感器、显示屏或其他微控制器。
基本的串口函数包括:
- `Serial.begin(baud_rate)`:初始化串口通信并设置波特率。例如 `Serial.begin(115200);`。
- `Serial.print()` / `Serial.println()`:发送数据到串口监视器,适用于调试信息输出。
- `Serial.read()`:读取从串口接收到的数据。
- `Serial.available()`:检查是否有可用的串口数据可供读取。
对于其他硬件串口(如 UART1 和 UART2),可以使用 `HardwareSerial` 类来操作,示例代码如下:
```cpp
#include <HardwareSerial.h>
// 创建 HardwareSerial 对象,分别对应 UART1 和 UART2
HardwareSerial MySerial1(1);
HardwareSerial MySerial2(2);
void setup() {
// 初始化 UART1 和 UART2
MySerial1.begin(9600, SERIAL_8N1, 16, 17); // RX, TX 引脚分别为 GPIO16 和 GPIO17
MySerial2.begin(9600, SERIAL_8N1, 18, 19); // RX, TX 引脚分别为 GPIO18 和 GPIO19
// 向串口发送调试信息
Serial.begin(115200);
Serial.println("Serial communication initialized.");
}
void loop() {
if (MySerial1.available()) {
char incomingByte = MySerial1.read();
Serial.print("Received from UART1: ");
Serial.println(incomingByte);
}
if (MySerial2.available()) {
char incomingByte = MySerial2.read();
Serial.print("Received from UART2: ");
Serial.println(incomingByte);
}
}
```
### 使用软件串口
如果硬件串口资源不足,也可以使用软件串口(SoftwareSerial 库)。需要注意的是,软件串口的性能和稳定性通常不如硬件串口。
```cpp
#include <SoftwareSerial.h>
// 定义软件串口使用的引脚
#define RX_PIN 4
#define TX_PIN 5
SoftwareSerial mySoftwareSerial(RX_PIN, TX_PIN); // RX, TX
void setup() {
// 初始化调试串口
Serial.begin(115200);
Serial.println("SoftwareSerial Example");
// 初始化软件串口
mySoftwareSerial.begin(9600);
Serial.println("Software serial port initialized.");
}
void loop() {
if (mySoftwareSerial.available()) {
char incomingByte = mySoftwareSerial.read();
Serial.print("Received from SoftwareSerial: ");
Serial.println(incomingByte);
}
}
```
### 注意事项
- 在选择串口引脚时,请确保所选引脚没有被其他功能占用,否则可能导致冲突。
- 波特率需要与目标设备匹配,否则会导致通信失败。
- 硬件串口的性能优于软件串口,建议优先使用硬件串口[^3]。
---
阅读全文
相关推荐


















