關於Arduino使用軟串口讀取ESP8266模塊數據不穩定的解決辦法
這篇文章是本人在做ESP8266和Arduino進行串口通信時發現,在ESP8266給Arduino發送數據時,Arduino接收數據不穩定,這使困惑了很久,後來在讀了一篇文章後找到了原因,在Arduino使用軟串口接收數據時,如果波特率較高時會出現數據接收不穩定的情況,本人總結了以下兩種辦法,希望可以解決各位的疑惑。
接收不到有效數據時會出現很多亂碼,如圖:
方法一:更換Arduino板型號
本方法是最簡單,最無腦的解決辦法將Arduino UNO更換成ArduinoMega 2560
因爲arduinoMega 2560有四個硬串口,本次使用TX1和RX1串口可以完美解決軟串口不能穩定接收數據
Arduino | ESP8266 |
---|---|
TX1 | RX |
RX1 | TX |
3.3V | VCC |
3.3V | CH_PD |
GND | GND |
下面將程序奉上
void setup() {
// Open serial communications and wait for port to open:
Serial.begin(115200);
while (!Serial)
{
; // wait for serial port to connect. Needed for native USB port only
}
while(Serial.read()>=0){} //清空串口緩存
Serial.println("Goodnight moon!"); // set the data rate for the SoftwareSerial port
Serial1.begin(115200);
Serial1.println("AT");
}
void loop() { // run over and over
if (Serial1.available()) //判斷串口1是否接收到數據(這裏串口1指的是TX1和RX1)
{
Serial.write(Serial1.read()); //將串口1讀到的數據發送給串口0(串口0指的是RX0)
}
if (Serial.available()) //判斷串口0是否接收到數據
{
Serial1.write(Serial.read()); //將串口0讀到的數據發送給串口1
}
}
發送AT+CWJAP?後,可以完整接收到當前熱點信息
方法二:將ESP8266的波特率降低
本方法即是通過USB-TTL,將ESP8266的波特率降低從而使軟串口可以接收穩定信息
降低波特率方法我不在贅述 可以參考鏈接用Arduino和esp8266檢測WIFI信號強度
只需在串口監視器中發送改爲AT+CIOBAUD<9600>加空格後點擊發送即可
Arduino程序如下
void setup() {
// Open serial communications and wait for port to open:
Serial.begin(9600);
while (!Serial)
{
; // wait for serial port to connect. Needed for native USB port only
}
while(Serial.read()>=0){} //清空串口緩存
Serial.println("Goodnight moon!"); // set the data rate for the SoftwareSerial port
Serial1.begin(9600);
Serial1.println("AT");
}
void loop() { // run over and over
if (Serial1.available()) //判斷串口1是否接收到數據(這裏串口1指的是TX1和RX1)
{
Serial.write(Serial1.read()); //將串口1讀到的數據發送給串口0(串口0指的是RX0)
}
if (Serial.available()) //判斷串口0是否接收到數據
{
Serial1.write(Serial.read()); //將串口0讀到的數據發送給串口1
}
}
打開串口監視器,將波特率改爲9600,將格式改爲NL和CR
然後在串口監視器輸入AT,看到串口界面返回OK即可
以上即是本人的愚見,如有不對的地方請多多指正
不懂的話可以加本人私聊我,QQ:1149484183