ESP32在Arduino IDE中使用Serial2与HardwareSerial的区别及选型场景
ESP32 UART2两种使用方法的区别与场景选择
两种方法的核心区别
1. 引脚配置灵活性
- 第一种方法:
Serial2是Arduino ESP32核心预先定义好的硬件串口对象,默认绑定固定引脚(通常Rx2为16、Tx2为17,不同开发板可能略有差异)。初始化时只需指定波特率,无需手动设置引脚,适合直接用默认引脚的场景。 - 第二种方法:通过
HardwareSerial SerialPort(2)手动实例化UART2对象,初始化时可在begin()方法里自定义Rx和Tx引脚(只要该GPIO支持UART功能),比如你代码里指定的16和17,也能换成其他可用引脚,灵活性更高。
2. 对象命名与可读性
- 第一种方法:只能用固定的
Serial2作为对象名,项目串口少的时候没问题,但如果同时用多个串口(比如UART0、UART1、UART2),外设多了容易混淆。 - 第二种方法:可以自定义对象名,比如改成
GPSSerial,当同时连接GPS、蓝牙等多个串口外设时,代码可读性会好很多,一眼就能区分对应设备。不过需要手动引入<HardwareSerial.h>头文件(新版ESP32核心可能自动包含,写上更稳妥)。
3. 初始化参数的直观性
- 第一种方法:
Serial2.begin(115200)只传波特率时,默认使用SERIAL_8N1(8位数据位、无校验、1位停止位)模式。如果要修改模式,得用带参数的重载,比如Serial2.begin(115200, SERIAL_7E1)。 - 第二种方法:
begin()方法里可以一次性指定波特率、串口模式、Rx/Tx引脚,参数更完整,初始化步骤更直观,不用后续再调整。
场景选择建议
优先选第一种方法的情况
- 使用ESP32默认的UART2引脚,不需要修改引脚
- 项目简单,只用到1-2个串口,无需复杂区分
- 作为新手想快速上手,代码更简洁,不用额外处理头文件和对象实例化
优先选第二种方法的情况
- 默认UART2引脚被其他外设占用,需要更换引脚
- 项目里有多个串口外设,自定义对象名能让代码逻辑更清晰
- 需要一次性配置所有串口参数,减少后续修改的麻烦
两种方法的代码示例
第一种方法代码
void setup() { Serial.begin(115200); Serial2.begin(115200); } void loop() { Serial.print(Serial2.read()); }
第二种方法代码
#include <HardwareSerial.h> HardwareSerial SerialPort(2); // 绑定UART2 void setup() { Serial.begin(115200); SerialPort.begin(115200, SERIAL_8N1, 16, 17); } void loop() { Serial.print(SerialPort.read()); }
内容的提问来源于stack exchange,提问作者abdul_muneeb
相关产品推荐
相关产品推荐

