ESP8266上有两组串口,Serial(UART0)和Serial1(UART1)。UART1只能用于写数据,不能用于接收数据,因为它的RX引脚被用于flash芯片连接
串口UART0
Serial使用UART0,默认对应引脚是GPIO1(TX)和GPIO3(RX)。
在Serial.begin执行之后,调用Serial.swap()可以将Serial重新映射到GPIO15(TX)和GPIO13(RX)。再次调用Serial.swap()将Serial重新映射回GPIO1和GPIO3。
void setup() { // 这里开始写初始化代码,只会执行一次
Serial.begin(115200);
Serial.println("GPIO1(TX),GPIO3(RX)"); //调用映射方法
Serial.swap();
Serial.println("GPIO15(TX),GPIO13(RX)"); //重新映射回来
Serial.swap();
Serial.println("GPIO1(TX),GPIO3(RX)");
}
void loop() { //这里写运行代码,重复执行}
对于需要使用两个串口的项目来说,可以使用Serial引脚的映射切换,来实现两个串口的通讯。
串口UART1
Serial1使用UART1,默认对应引脚是GPIO2(TX)
void setup() {
// 这里开始写初始化代码,只会执行一次
SerialConfig config = SerialConfig::SERIAL_8N1;
SerialMode mode = SerialMode::SERIAL_TX_ONLY;
// put your setup code here, to run once:
Serial1.begin(9600,config,mode);
Serial1.println("Hello Serial1");
}
void loop() {
//这里写运行代码,重复执行
}
串口引脚的使用
引脚 | UART0 | UART1 |
---|---|---|
1 | TXD(默认) | |
2 | TXD(Serial.set_tx(2)) | TXD(默认,且当UART0未使用时可用) |
3 | RXD(默认) | |
13 | RXD(swap后) | |
15 | TXD(swap后) |
UART0可以使用的引脚组合由(1,3)(2,3)(15,13)
UART1只能有写入功能,只能使用2引脚,且在UART0未使用(2,3)组合时可用
如果串口不够用怎么办?
方法一、切换引脚
//初始化时指定写入引脚
Serial.begin(9600,config,mode,2);
//使用swap切换
Serial.swap(2);
//使用set_tx切换
Serial.set_tx(2);
//使用pins切换
Serial.pins(15,13);
方法二、使用软件模拟串口
#include <SoftwareSerial.h>
//自定义串口
SoftwareSerial MySerial;
int incomingByte = 0;
void setup() {
// 这里开始写初始化代码,只会执行一次
Config conf = Config::SWSERIAL_8N1;
//设置引脚5为rxd 2为txd
MySerial.begin(9600,conf,5,2);
}
void loop() {
//这里写运行代码,重复执行
if(MySerial.available()>0){
incomingByte = MySerial.read();
MySerial.print("U1接收数据: 0x");
MySerial.println(incomingByte, HEX);
}
}
需要安装 SoftwareSerial 的函数库 EspSoftwareSerial