如何永久更改ESP8266(12e)的波特率?


11

重要:请勿使用AT+IPR=9600!(请参阅更新)

我有一个ESP8266 12E模块,通讯速率为115,200波特。由于我将其与具有SoftwareSerial的Arduino Nano一起使用,因此情况变得混乱。因此,我发现应该降低ESP模块的波特率。

我找到了有关此操作的链接

我想知道

  • 这是永久性的更改吗?还是在每次模块通电后都需要执行此操作?

  • 我可以通过SoftSerial从Arduino发送命令来达到相同的目的吗?好吧,我想这不是因为我尝试过而我总是在AT+CIOBAUD=9600或上遇到错误AT+IPR=9600

  • 我在某处读到,在较新的ESP8266固件版本中,波特率默认为9,600。任何人都可以确认这一点,如果可以,那么更新该较新的固件是否更好?

模块的供应商:

Ai-Thinker Technology Co.,Ltd.

我认为该固件的当前版本为0.3.0。如果我发送, AT+GMR我得到:

sending AT+GMR

response: ?AT¥TJÕ¨H(Q�²•ÉÍ¥½¹é‚r¢‚r‚r‚BÕ��Â’‚ŠªŠ¢Ò¢ªÒªÂJm
 SDK versioo:0.3.0
 Ai�½½
 ‚Šj

再次由于波特率太高而产生一些垃圾。

有关该模块的其他信息:

sending AT+RST
response: ?AT+RST
OK
WRT
"%M
<99CT
 ets Jan  8 2013,rst catse:2, boot lode:(3,7)
load 0x40100000ntail 4
chksum 0x89
ld tail 4
chm3 tail 8 r 0 aM
 ón't use rtc mem dat`
sl��oÌÿ
Ai-Thinker Technology Co.,Ltd.

更新

(*)我使用了FTDI232模块发送AT+IPR=9600到我的ESP8266-12E模块,然后将其固定了

请勿AT+IPR=9600在ESP8266(-12E)上使用。

到目前为止,我还没有设法恢复它!我尝试重新刷新它,但收到无效的头部异常。

在一个新模块上,我发送了AT+CIOBAUD=9600命令,该命令起作用了。永久性!

我的模块规格:

AT+GMR 
AT version:0.40.0.0(Aug  8 2015 14:45:58)
SDK version:1.3.0
Ai-Thinker Technology Co.,Ltd.
Build:1.3.0.2 Sep 11 2015 11:48:04
OK 

您可以尝试硬件串行吗?或者将复位引脚拉低,然后直接通过USB与ESP通讯。可能检查那些是否有效。
保罗,

@Paul:nano只有一组硬件串行端口。因此,如果使用这些设备,我将无法再将数据发送到Arduino串行监视器,这将使您难以理解正在发生的事情……猜猜我将需要进行固件升级。
mvermand's

那么您可以利用软件串行端口进行调试吗?不过,您将需要一条“ usb-serial / ttl”电缆。
保罗


1
似乎使用AT + IPR = 9600设置波特率也会使ESP01变砖。我在此线程中尝试了一些建议以将其恢复。Marco Andre Silva提供的链接中的解决方案对我有用。
Steffe

Answers:


10

根据您的芯片的AT指令集解释器版本的最新程度,您尝试的两条指令可能无效。它们未在Espressif的ESP8266 AT指令集文档中列出。在当前文档(1.5.3版)中搜索“ CIOBAUD”或“ IPR”不会返回任何结果。

波特率命令现在为“ AT + UART_CUR”和“ AT + UART_DEF”,它们分别为当前会话或当前和将来的会话配置整个UART。该命令的手册原型为:

AT+UART_DEF=<baudrate>, <databits>, <stopbits>, <parity>, <flow control>
Example:
AT+UART_DEF=115200, 8, 1, 0, 3

我已经使用了这些并且可以确认它们是否有效。

我使用软件串行发现,它可以很好地推动115200波特以将命令发送到设备(尽管我不会构建依赖于它的应用程序),但它只能可靠地读取高达9600波特。通过软件序列,我已经能够将设备的波特率从115200波特更改为9600;您只需要期待垃圾会回来而忽略它:

// Set ESP8266 baud rate to 9600. You only need to do this once per device
set software serial baud to 115200;
send "AT+UART_DEF=9600,8,1,0,0";
set software serial baud to 9600;
// From now on, communicate with your device at 9600 baud.

3

我以115200波特连接了FTDI232模块,现在可以阅读ESP8266模块的规格信息:

AT+GMR 
AT version:0.40.0.0(Aug  8 2015 14:45:58)
SDK version:1.3.0
Ai-Thinker Technology Co.,Ltd.
Build:1.3.0.2 Sep 11 2015 11:48:04
OK 

之后,我发送了AT+IPR=9600命令,该命令似乎很有效。但是在重启模块之后,我得到的只是垃圾响应,无论波特率如何。

不要将AT + IPR = 9600发送到您的ESP8266(12e)模块

AT+UART_DEF就像JRobert提到的那样,也许该命令起作用了,但是我使用了该 AT+CIOBAUD=9600命令并且它起作用了。永久性!

我希望这可以帮助其他人。


3

我也用相同的命令来修改我的Esp。经过数小时的搜索,我找到了一种重置积木esp的方法。https://developer.mbed.org/users/sschocke/code/WiFiLamp/wiki/Updating-ESP8266-Firmware我必须将波特率设置为115200而不是9600,并且在上传文件之间我必须断开esp的电源。希望对您和其他通过Google找到您的信息的人有所帮助。


在每个文件之间重新启动ESP也是我的关键-其他站点将所有文件组合到一个esptool.py命令中,但这对我不起作用。只有将其分解为单独的命令(每个文件一个,并在每个文件之间循环)后,我才终于能够还原AT固件。感谢您的提示!
davidA

另外,我尝试使用esptool.py自带的ESP32 IDF(V2.1-β1),并与一个作品成功的单一命令闪烁在我的ESP8266的所有文件(它也支持) -所以只有一个电源周期+ GPIO0-需要GND。
davidA


0

看起来您正在遇到电源问题。您的电源等级是多少?并尝试在vcc和地面之间添加一个小电容器。将固件更新到0.9已解决了波特率问题,这也是一个好主意。

您可以在https://github.com/espressif/esp8266_at找到新固件


我认为这不是电源问题。我有一个功能强大的外部电源。我尝试之前没有尝试过,然后Arduino不断重启...我在一个论坛上发现这是由于电源问题引起的。所以现在我很好。我真的认为问题是SoftSerial无法应付115k的波特率。
mvermand '16

1
esp确实很挑剔,请在vcc和地面之间添加一个小电容器。我也通过外部电源为我的矿井供电,并且正在重新启动。
NccWarp9
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.