
ESP8266的串口通信與傳統的Arduino設備完全一樣。除了硬件FIFO(128字節用於TX和RX)之外,硬件串口還有額外的
256字節的TX和RX緩存。發送和接收全都由中斷驅動。當FIFO/緩存滿時,write函數會阻塞工程代碼的執行,等待空閑空間。
當FIFO/緩存空時,read函數也會阻塞工程代碼的執行,等待串口數據進來。
NodeMcu上有兩組串口,Serial和Serial1。
Serial使用UART0,默認對應引腳是GPIO1(TX--D10)和GPIO3(RX--D9)
在Serial.begin執行之后,調用Serial.swap()可以將Serial重新映射到GPIO15(TX---D8)和GPIO13(RX---D7)。再次調用Serial.swap()將Serial重新映射回GPIO1--D10和GPIO3--D9。不過,一般
情況下,默認就好
例子一:映射
void setup() { Serial.begin(115200); Serial.println("GPIO1(TX),GPIO3(RX)"); Serial.swap();//調用映射方法 Serial.println("GPIO15(TX1),GPIO13(RX1)"); Serial.swap(); Serial.println("GPIO1(TX),GPIO3(RX)"); } void loop() { }
Serial1使用UART1,默認對應引腳是GPIO2(TX----D4)。Serial1不能用於接收數據,因為它的RX引腳被用於flash芯片連接---D3。
要使用Serial1,請調用Serial.begin(baudrate)
如果不使用Serial1並且不映射串口,可以將UART0的TX映射到GPIO2,具體操作是:在Serial.begin()之后調用
Serial.set_tx(2)或者直接調用Serial.begin(baud,config,mode,2)。
默認情況下,當調用Serial.begin后,將禁用WiFi庫的診斷輸出。要想再次啟動調試輸出,請調用
Serial.setDebugOutput(true)。要將調試輸出映射到Serial1時,需要調用Serial1.setDebugOutput(true)
調用Serial.setRxBufferSize(size_t size)允許定義接收緩沖區的大小,默認值是256(緩沖區也是使用內存,意味着不能一
味地去增大這個值)。 Serial和Serial1對象都支持5,6,7,8個數據位,奇數(O)、偶數(E)和無(N)奇偶校驗,以
及1或者2個停止位。要設置所需的模式,請調用Serial.begin(baudrate, SERIAL_8N1), Serial.begin(baudrate, SERIAL_6E2)
等
Serial和Serial1都實現了一種新方法用來獲取當前的波特率設置。要獲取當前的波特率,請調用Serial.baudRate(),
Serial1.baudRate()
例子:---獲取波特率
void setup() { Serial.begin(57600); int br = Serial.baudRate(); //獲取當前波特率 Serial.printf("當前波特率是 %d bps\n", br); } void loop() { }
串口用處
一般來說,串口通信用在兩個方面:
1.與外圍串口設備傳輸數據,比如藍牙模塊、Arduino等等;
2.開發過程中用來調試代碼,通過串口輸出Debug信息了解程序運行信息
天子驕龍