ESP-8266 串口通信(Serial)
ESP8266的串口通信與傳統(tǒng)的Arduino設(shè)備完全一樣。除了硬件FIFO(128字節(jié)用于TX和RX)之外,硬件串口還有額外的
256字節(jié)的TX和RX緩存。發(fā)送和接收全都由中斷驅(qū)動。當(dāng)FIFO/緩存滿時,write函數(shù)會阻塞工程代碼的執(zhí)行,等待空閑空間。
當(dāng)FIFO/緩存空時,read函數(shù)也會阻塞工程代碼的執(zhí)行,等待串口數(shù)據(jù)進(jìn)來。
NodeMcu上有兩組串口,Serial和Serial1。
Serial使用UART0,默認(rèn)對應(yīng)引腳是GPIO1(TX--D10)和GPIO3(RX--D9)
在Serial.begin執(zhí)行之后,調(diào)用Serial.swap()可以將Serial重新映射到GPIO15(TX---D8)和GPIO13(RX---D7)。再次調(diào)用Serial.swap()將Serial重新映射回GPIO1--D10和GPIO3--D9。不過,一般
情況下,默認(rèn)就好
例子一:映射
void setup() {
Serial.begin(115200);
Serial.println("GPIO1(TX),GPIO3(RX)");
Serial.swap();//調(diào)用映射方法
Serial.println("GPIO15(TX1),GPIO13(RX1)");
Serial.swap();
Serial.println("GPIO1(TX),GPIO3(RX)");
}
void loop() {
}
Serial1使用UART1,默認(rèn)對應(yīng)引腳是GPIO2(TX----D4)。Serial1不能用于接收數(shù)據(jù),因為它的RX引腳被用于flash芯片連接---D3。
要使用Serial1,請調(diào)用Serial.begin(baudrate)
如果不使用Serial1并且不映射串口,可以將UART0的TX映射到GPIO2,具體操作是:在Serial.begin()之后調(diào)用
Serial.set_tx(2)或者直接調(diào)用Serial.begin(baud,config,mode,2)。
默認(rèn)情況下,當(dāng)調(diào)用Serial.begin后,將禁用WiFi庫的診斷輸出。要想再次啟動調(diào)試輸出,請調(diào)用
Serial.setDebugOutput(true)。要將調(diào)試輸出映射到Serial1時,需要調(diào)用Serial1.setDebugOutput(true)
調(diào)用Serial.setRxBufferSize(size_t size)允許定義接收緩沖區(qū)的大小,默認(rèn)值是256(緩沖區(qū)也是使用內(nèi)存,意味著不能一
味地去增大這個值)。 Serial和Serial1對象都支持5,6,7,8個數(shù)據(jù)位,奇數(shù)(O)、偶數(shù)(E)和無(N)奇偶校驗,以
及1或者2個停止位。要設(shè)置所需的模式,請調(diào)用Serial.begin(baudrate, SERIAL_8N1), Serial.begin(baudrate, SERIAL_6E2)
等
Serial和Serial1都實(shí)現(xiàn)了一種新方法用來獲取當(dāng)前的波特率設(shè)置。要獲取當(dāng)前的波特率,請調(diào)用Serial.baudRate(),
Serial1.baudRate()
例子:---獲取波特率
void setup() {
Serial.begin(57600);
int br = Serial.baudRate(); //獲取當(dāng)前波特率
Serial.printf("當(dāng)前波特率是 %d bps
", br);
}
void loop() {
}
串口用處
一般來說,串口通信用在兩個方面:
1.與外圍串口設(shè)備傳輸數(shù)據(jù),比如藍(lán)牙模塊、Arduino等等;
2.開發(fā)過程中用來調(diào)試代碼,通過串口輸出Debug信息了解程序運(yùn)行信息
天子驕龍
總結(jié)
以上是生活随笔為你收集整理的ESP-8266 串口通信(Serial)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mysql dba 视频_MySQL D
- 下一篇: 计算机网络中internet是什么意思