记 ESP8266 在 AT+UART_DEF 后无响应

起因和症状

我将 ESP8266 与 Arduino UNO 的软串口连接,搭配 AT 指令进行使用。但由于 Arduino 的软串口无法到达 115200 波特率的传输速度,于是我参考乐鑫的文档1,根据其对 UART 配置描述提供的指令样例,给 ESP8266 发送了如下指令:

1
AT+UART_DEF=4800,8,1,0,3

紧接着,在 ESP8266 回复了一句 OK 后——ESP8266,完全沉默了。

在任何波特率,都无法获得 ESP8266 的响应。除了在 74880 波特率下能获得上电的系统日志信息。

问题梳理

在浏览了 Arduino 社区中遇到同样问题的相关讨论2,以及 StackOverflow3 中的相关问答后,我意识到,问题可能出在指令中最后一个参数上。

我重新翻阅了乐鑫的文档。文档中对 AT+UART_DEF 是这样描述的:

1
AT+UART_DEF=<baudrate>,<databits>,<stopbits>,<parity>,<flow control>

其中,<flow control> 为流控设置参数:

0:不使能流控
1:使能 RTS
2:使能 CTS
3:同时使能 RTS 和 CTS

文档关于这点也给出了相应的注意提示:

使用流控需要硬件支持流控:
MTCK 为 UART0 CTS;
MTDO 为 UART0 RTS

我使用的 ESP8266 是由安信可(Ai-Thinker)生产的 ESP-01S 模块。模块仅有的 8 个引脚中,没有 RTS 和 CTS 引脚。也就是说,在我设置了使能 RTS 和 CTS 进行流控后,在硬件上我却无法使用 RTS 和 CTS,所以 ESP8266 也就没有了响应

解决方案

刷机 刷固件。

总结

ESP8266 不使能 CTS 和 RTS 流控,设置波特率可使用:

1
AT+UART_DEF=9600,8,1,0,0

也可以使用:

1
AT+CIOBAUD=9600

参考链接

[1] Espressif. ESP8266 Non-OS SDK AT 指令集
[2] Arduino Forum. I changed ESP8266 Baud rate to 9600 - Now No communication !!!
[3] StackOverflow. Set baud rate to esp8266 at 9600