一.介绍
ESP32支持3个串行端口,因此您无需像通常的Arduino那样使用SoftwareSerial。在本教程中,我们只关心使用如何在Arduino ESP32上使用多个串行端口将调试信息打印到终端。
二.元器件清单
- ESP32开发板
三.代码设计
我们使用“ HardwareSerial ”类进行串行通信。它有一些重要的接口:
HardwareSerial(int uart_nr)
这是HardwareSerial的构造函数,其中uart_nr是0,1或2所以我们有最多3个串口。
void begin(unsigned long baud, uint32_t config=SERIAL_8N1, int8_t rxPin=-1, int8_t txPin=-1, bool invert=false);
使用波特率,串行模式(默认为SERIAL_8N1),rxPin和txPin 初始化串行端口(如果将这些参数留空库将使用默认引脚)。以下是此函数的代码:
void HardwareSerial::begin(unsigned long baud, uint32_t config, int8_t rxPin, int8_t txPin, bool invert)
{
if(0 > _uart_nr || _uart_nr > 2) {
log_e("Serial number is invalid, please use 0, 1 or 2");
return;
}
if(_uart) {
end();
}
if(_uart_nr == 0 && rxPin < 0 && txPin < 0) {
rxPin = 3;
txPin = 1;
}
if(_uart_nr == 1 && rxPin < 0 && txPin < 0) {
rxPin = 9;
txPin = 10;
}
if(_uart_nr == 2 && rxPin < 0 && txPin < 0) {
rxPin = 16;
txPin = 17;
}
_uart = uartBegin(_uart_nr, baud, config, rxPin, txPin, 256, invert);
}
以下是一些常用的函数:
– available():获取可从串行端口读取的字节数(字符数)。
– print():将数据作为ASCII文本打印到串行端口。
– println():将数据作为ASCII文本打印到串行端口,后跟回车符(ASCII 13或’ r’)和换行符(ASCII 10或’ n’)。
– read():读取Rx引脚上的输入串行数据。
– readStringUntil():将串行缓冲区中的字符读入字符串,直到面向终结符字符。
由于Arduino库创建了一个默认实例HardwareSerial Serial(0),因此您可以直接使用创建的Serial对象(在下面的示例中)而无需自己创建实例。
– 为了使用更多串行端口,您只需创建另一个HardwareSerial实例,例如:HardwareSerial Serial1(1)或HardwareSerial Serial2(2),然后照常使用它们。
我们将制作一个简单的演示,在终端上每1秒打印一个字符串“hello ESP32”。这个演示很简单。要监控“打印”数据,只需转到工具>串行监视器
四.结果
非常感谢楼主,教程很详细
你好,这个多串口设置成功了吗?
楼主写的很好
谢谢楼主
谢谢楼主分享
學生想要學,謝謝
加油
不知道哪些引脚,板子上只标了两个
正常是GPIO1-GPIO3和GPIO16-GPIO17 其它的可模拟软串口
谢谢楼主分享
谢谢分享
楼主写得不错,正在为ESP8266和ESP32中的串口函数不统一而发愁
如果你要兼容两个 也许你可以这样:
#ifdef ESP32
XXXXX
#elif defined(ESP8266)
XXXX
#endif
学习下,感谢楼主分享
谢谢楼主
这个教程真的太实用了 一下子让我豁然开朗
谢谢楼主!
感谢楼主
感谢楼主分享!
感谢
感谢
谢谢楼主!