向 ESP8266 发送 AT+CWJAP_DEF 命令时出错
Error on sending AT+CWJAP_DEF commands to ESP8266
我正在尝试向 ESP8266
发送 AT
命令以通过 Wifi 连接到互联网。
当我在串口监视器上发送 AT
和 AT+RST
命令时,我得到了 OK 和准备好的响应,这看起来很完美。
然后我发送 AT+CWLAP
以获取可用的 wifi 网络列表,该列表也正在正确执行。
AT+CWLAP
+CWLAP:(3,"Moto",-42,"a4:70:d6:7a:fa:6c",1,25,0)
+CWLAP:(4,"PRANJAL",-95,"1c:a5:32:3d:f5:c4",1,-16,0)
+CWLAP:(2,"VIHAN",-94,"c8:3a:35:2f:1d:81",1,-21,0)
+CWLAP:(3,"Tenda",-93,"c8:3a:35:20:a9:b1",9,-4,0)
OK
然后我发了AT+CWMODE?
也很完美
AT+CWMODE?
+CWMODE:1
OK
现在我正尝试使用此命令将 ESP8266
连接到上面列出的 Wifi,它在串行监视器上发送错误。
AT+CWJAP_DEF="Moto","reset1234"
错误
⸮=IRe"Moto","reset1234"
ERROR
谁能告诉我这个问题的原因是什么?
#include "SoftwareSerial.h"
SoftwareSerial esp8266(2, 3); // RX, TX
void setup()
{
Serial.begin(9600); // serial port used for debugging
esp8266.begin(9600); // your ESP's baud rate might be different
}
void loop()
{
if(esp8266.available()) // check if the ESP is sending a message
{
while(esp8266.available())
{
char c = esp8266.read(); // read the next character.
Serial.write(c); // writes data to the serial monitor
}
}
if(Serial.available())
{
delay(10); // wait to let all the input command in the serial buffer
// read the input command in a string
String cmd = "";
while(Serial.available())
{
cmd += (char)Serial.read();
}
// send to the esp8266
esp8266.println(cmd);
}
}
目前官方的AT指令集好像在https://github.com/espressif/ESP8266_AT/wiki/AT_Description上有记载
http://espressif.com/sites/default/files/documentation/4a-esp8266_at_instruction_set_en.pdf
https://www.itead.cc/wiki/ESP8266_Serial_WIFI_Module#AT_Commands
如果要将模块配置为客户端,即连接到接入点,则必须发送以下 AT 命令(11500 波特率 8N1,CR-LF 线路终止):
AT+RST
AT+CWMODE=3
(1 仅 "Station"(wifi 客户端),3 是混合模式 "Station and Access-Point",两者都应该有效)
AT+CWJAP="Moto","reset1234"
AT+CWJAP_CUR="Moto","reset1234"
(临时)或
AT+CWJAP_DEF="Moto","reset1234"
(存储)
作为参考,"success story"(带 USB-UART 的 ESP8266 模块,软件:HTerm,带 WPA2 的接入点(均经过 TKIP / CCMP 测试)):
AT<\r><\r><\n><\r><\n>
OK<\r><\n>
AT+RST<\r><\r><\n><\r><\n>
OK<\r><\n>
<\r><\n>
ets Jan 8 2013,rst cause:2, boot mode:(3,6)<\r><\n>
<\r><\n>
load 0x40100000, len 1856, room 16 <\r><\n>
tail 0<\r><\n>
chksum 0x63<\r><\n>
load 0x3ffe8000, len 776, room 8 <\r><\n>
tail 0<\r><\n>
chksum 0x02<\r><\n>
load 0x3ffe8310, len 552, room 8 <\r><\n>
tail 0<\r><\n>
chksum 0x79<\r><\n>
csum 0x79<\r><\n>
<\r><\n>
2nd boot version : 1.5<\r><\n>
SPI Speed : 40MHz<\r><\n>
SPI Mode : DIO<\r><\n>
SPI Flash Size & Map: 32Mbit(512KB+512KB)<\r><\n>
jump to run user1 @ 1000<\r><\n>
<\r><\n>
??r?d?l<18>?<31><[=10=]><\f>?l`<3>??s?l?<28>?<19>?<4><4><4>$ <2>??r?$<4>??<27>?<4><4>ll`<3>r$?<18>?"<[=10=]>????"<4>l?cs|<\f>?`?22???<27>BB<18>c??o??<18>NN?<16><2><[=10=]><2>d$??<2>d??<[=10=]>?<4>d??<[=10=]>ll????d??l`<2>?<2>N?<[=10=]>????"<4>d??<28>p<4><4><2><2>???"b<4>$<4>?"prlrl<\r><\n>
Ai-Thinker Technology Co. Ltd.<\r><\n>
<\r><\n>
ready<\r><\n>
WIFI DISCONNECT<\r><\n>
AT+CWMODE?<\r><\r><\n>+CWMODE:3<\r><\n>
<\r><\n>
OK<\r><\n>
AT+CWJAP_CUR="Moto","reset1234"<\r><\r><\n>
WIFI CONNECTED<\r><\n>
WIFI GOT IP<\r><\n>
<\r><\n>
OK<\r><\n>
AT+CIFSR<\r><\r><\n>+CIFSR:APIP,"0.0.0.0"<\r><\n>
+CIFSR:APMAC,"00:00:00:00:00:00"<\r><\n>
+CIFSR:STAIP,"0.0.0.0"<\r><\n>
+CIFSR:STAMAC,"00:00:00:00:00:00"<\r><\n>
<\r><\n>
OK<\r><\n>
AT+GMR<\r><\r><\n>AT version:1.1.0.0(May 11 2016 18:09:56)<\r><\n>
SDK version:1.5.4(baaeaebb)<\r><\n>
Ai-Thinker Technology Co. Ltd.<\r><\n>
Jun 13 2016 11:29:20<\r><\n>
OK<\r><\n>
这也适用于 mode=1。
主要改写。
要测试的问题和想法:
- 你的模块固件版本是多少?
- 接入点问题(例如MAC地址限制)?
- 电源好吗?
- 模块上可能有任何旧配置或其他代码运行?
- 错误信息中
⸮
的字节码是多少-是两个字节0x2E2E吗?
- 您是否使用 Arduino 串行监视器进行通信?
与我的评论相反,也许arduino确实有影响(时间?)。尝试通过
排除这种情况
- 基于字符而不是基于行进行传递,例如:
(列表结尾,否则没有代码:)
loop(){
if( esp8266.available() )
Serial.write(esp8266.read());
if( Serial.available() )
esp8266.write(Serial.read());
}
- 保持 AVR 处于复位状态并将 ESP8266 串行线直接连接到 USB-UART 转换器
好的!我只是尝试连接不同的 wifi,它已经连接上了。移动热点有点问题。
我正在尝试向 ESP8266
发送 AT
命令以通过 Wifi 连接到互联网。
当我在串口监视器上发送 AT
和 AT+RST
命令时,我得到了 OK 和准备好的响应,这看起来很完美。
然后我发送 AT+CWLAP
以获取可用的 wifi 网络列表,该列表也正在正确执行。
AT+CWLAP
+CWLAP:(3,"Moto",-42,"a4:70:d6:7a:fa:6c",1,25,0)
+CWLAP:(4,"PRANJAL",-95,"1c:a5:32:3d:f5:c4",1,-16,0)
+CWLAP:(2,"VIHAN",-94,"c8:3a:35:2f:1d:81",1,-21,0)
+CWLAP:(3,"Tenda",-93,"c8:3a:35:20:a9:b1",9,-4,0)
OK
然后我发了AT+CWMODE?
也很完美
AT+CWMODE?
+CWMODE:1
OK
现在我正尝试使用此命令将 ESP8266
连接到上面列出的 Wifi,它在串行监视器上发送错误。
AT+CWJAP_DEF="Moto","reset1234"
错误
⸮=IRe"Moto","reset1234"
ERROR
谁能告诉我这个问题的原因是什么?
#include "SoftwareSerial.h"
SoftwareSerial esp8266(2, 3); // RX, TX
void setup()
{
Serial.begin(9600); // serial port used for debugging
esp8266.begin(9600); // your ESP's baud rate might be different
}
void loop()
{
if(esp8266.available()) // check if the ESP is sending a message
{
while(esp8266.available())
{
char c = esp8266.read(); // read the next character.
Serial.write(c); // writes data to the serial monitor
}
}
if(Serial.available())
{
delay(10); // wait to let all the input command in the serial buffer
// read the input command in a string
String cmd = "";
while(Serial.available())
{
cmd += (char)Serial.read();
}
// send to the esp8266
esp8266.println(cmd);
}
}
目前官方的AT指令集好像在https://github.com/espressif/ESP8266_AT/wiki/AT_Description上有记载
http://espressif.com/sites/default/files/documentation/4a-esp8266_at_instruction_set_en.pdf
https://www.itead.cc/wiki/ESP8266_Serial_WIFI_Module#AT_Commands
如果要将模块配置为客户端,即连接到接入点,则必须发送以下 AT 命令(11500 波特率 8N1,CR-LF 线路终止):
AT+RST
AT+CWMODE=3
(1 仅 "Station"(wifi 客户端),3 是混合模式 "Station and Access-Point",两者都应该有效)AT+CWJAP="Moto","reset1234"
AT+CWJAP_CUR="Moto","reset1234"
(临时)或AT+CWJAP_DEF="Moto","reset1234"
(存储)
作为参考,"success story"(带 USB-UART 的 ESP8266 模块,软件:HTerm,带 WPA2 的接入点(均经过 TKIP / CCMP 测试)):
AT<\r><\r><\n><\r><\n>
OK<\r><\n>
AT+RST<\r><\r><\n><\r><\n>
OK<\r><\n>
<\r><\n>
ets Jan 8 2013,rst cause:2, boot mode:(3,6)<\r><\n>
<\r><\n>
load 0x40100000, len 1856, room 16 <\r><\n>
tail 0<\r><\n>
chksum 0x63<\r><\n>
load 0x3ffe8000, len 776, room 8 <\r><\n>
tail 0<\r><\n>
chksum 0x02<\r><\n>
load 0x3ffe8310, len 552, room 8 <\r><\n>
tail 0<\r><\n>
chksum 0x79<\r><\n>
csum 0x79<\r><\n>
<\r><\n>
2nd boot version : 1.5<\r><\n>
SPI Speed : 40MHz<\r><\n>
SPI Mode : DIO<\r><\n>
SPI Flash Size & Map: 32Mbit(512KB+512KB)<\r><\n>
jump to run user1 @ 1000<\r><\n>
<\r><\n>
??r?d?l<18>?<31><[=10=]><\f>?l`<3>??s?l?<28>?<19>?<4><4><4>$ <2>??r?$<4>??<27>?<4><4>ll`<3>r$?<18>?"<[=10=]>????"<4>l?cs|<\f>?`?22???<27>BB<18>c??o??<18>NN?<16><2><[=10=]><2>d$??<2>d??<[=10=]>?<4>d??<[=10=]>ll????d??l`<2>?<2>N?<[=10=]>????"<4>d??<28>p<4><4><2><2>???"b<4>$<4>?"prlrl<\r><\n>
Ai-Thinker Technology Co. Ltd.<\r><\n>
<\r><\n>
ready<\r><\n>
WIFI DISCONNECT<\r><\n>
AT+CWMODE?<\r><\r><\n>+CWMODE:3<\r><\n>
<\r><\n>
OK<\r><\n>
AT+CWJAP_CUR="Moto","reset1234"<\r><\r><\n>
WIFI CONNECTED<\r><\n>
WIFI GOT IP<\r><\n>
<\r><\n>
OK<\r><\n>
AT+CIFSR<\r><\r><\n>+CIFSR:APIP,"0.0.0.0"<\r><\n>
+CIFSR:APMAC,"00:00:00:00:00:00"<\r><\n>
+CIFSR:STAIP,"0.0.0.0"<\r><\n>
+CIFSR:STAMAC,"00:00:00:00:00:00"<\r><\n>
<\r><\n>
OK<\r><\n>
AT+GMR<\r><\r><\n>AT version:1.1.0.0(May 11 2016 18:09:56)<\r><\n>
SDK version:1.5.4(baaeaebb)<\r><\n>
Ai-Thinker Technology Co. Ltd.<\r><\n>
Jun 13 2016 11:29:20<\r><\n>
OK<\r><\n>
这也适用于 mode=1。
主要改写。
要测试的问题和想法:
- 你的模块固件版本是多少?
- 接入点问题(例如MAC地址限制)?
- 电源好吗?
- 模块上可能有任何旧配置或其他代码运行?
- 错误信息中
⸮
的字节码是多少-是两个字节0x2E2E吗? - 您是否使用 Arduino 串行监视器进行通信?
与我的评论相反,也许arduino确实有影响(时间?)。尝试通过
排除这种情况- 基于字符而不是基于行进行传递,例如:
(列表结尾,否则没有代码:)
loop(){
if( esp8266.available() )
Serial.write(esp8266.read());
if( Serial.available() )
esp8266.write(Serial.read());
}
- 保持 AVR 处于复位状态并将 ESP8266 串行线直接连接到 USB-UART 转换器
好的!我只是尝试连接不同的 wifi,它已经连接上了。移动热点有点问题。