关于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即可