概述
ESP32的基于硬件的串行通信接口总共有3个串口(3个串口管脚都是可以重映射),默认定义在了如下的GPIO口:
名称 | IO口的对应关系 | 系统默认的对象名 |
UART0 | GPIO1 - TX0 GPIO3 - RX0 | Serial |
UART1 | GPIO10 - TX1 GPIO9 - RX1 | Serial1 |
UART2 | GPIO17 - TX2 GPIO16 - RX2 | Serial2 |
Serial1由于占用了GPIO9和GPIO10,而这两个IO口已被开发板用在了SPI Flash上。因此实际Serial1我们也是用不上的,因此我们选用Serial、Serial2,采用Serial2时发现接收数据不理想,于是我们采用重新映射端口的方法。波特率一般采用9600或者115200.
HardwareSerial库
HardwareSerial库就可以将串口RX映射到几乎所有IO口上,TX映射到GPIO0~31上。
注意:1、GPIO6,7,8,9,10,11已被用于SPI Flash,所以在定义串口TX和RX时请避开这些引脚。
2、由于ESP32开发板的GPIO36、39、34、35是纯输入口,因此最好不要把串口通讯IO口的TX定义在上面这四个口。RX则可以随便定义。
原理图如下:
代码如下:
#include <Arduino.h>
#include "HardwareSerial.h"
HardwareSerial mySerial(1);//串口1
void setup() {
Serial.begin(115200);
mySerial.begin(115200, SERIAL_8N1, 5, 18); //修改引脚映射 RXD:GPIO5 TXD:GPIO18
Serial.println("Hello");
mySerial.println("He");
}
void loop() {
while (mySerial.available() > 0) {
Serial.println(mySerial.read());
}
while (Serial.available() > 0) {
mySerial.println(Serial.read());
}
}
输出结果如下: