ESP8266 串口 AT 命令
ESP8266 with Serial AT commands
我正在尝试通过 Arduino Nano Serial 与我的 ESP8266-07 通信。我正在使用 AT 命令来重置、连接 wifi、连接 TCP 服务器等。我有一个功能脚本,所以我知道 ESP8266 接线正确。我正在使用 3.3V 到 5V 逻辑转换器等...这是较旧的功能脚本:
void esp_connect() {
Serial.println("AT+RST");
delay(2);
esp_timefuse = millis();
while(Serial.find("ready") == false) {
if(esp_timefuse - millis() >= 5000)
esp_connect();
}
Serial.println("AT+CWMODE=3");
delay(2);
esp_timefuse = millis();
while(Serial.find("OK") == false) {
if(esp_timefuse - millis() >= 2000)
esp_connect();
}
Serial.println("AT+CWJAP=\"WiFi 7-pekiel\",\"43664366\"");
delay(2);
esp_timefuse = millis();
while(Serial.find("OK") == false) {
if(esp_timefuse - millis() >= 2000)
esp_connect();
}
Serial.println("AT+CIPMUX=1");
delay(2);
esp_timefuse = millis();
while(Serial.find("OK") == false) {
if(esp_timefuse - millis() >= 2000)
esp_connect();
}
Serial.println("AT+CIPSTART=0,\"TCP\",\"10.10.10.6\",3600");
delay(2);
esp_timefuse = millis();
while(Serial.find("OK") == false) {
if(esp_timefuse - millis() >= 2000)
esp_connect();
}
}
但我并不满意。我正在努力做到最好。所以我写了这个脚本:
void esp_connect() {
Serial.println("AT+RST");
Serial.flush();
Serial.setTimeout(5000);
if(Serial.find("ready"));
else esp_connect();
Serial.println("AT+CWMODE=3");
Serial.flush();
Serial.setTimeout(2000);
if(Serial.find("OK"));
else esp_connect();
Serial.println("AT+CWJAP=\"WiFi 7-pekiel\",\"43664366\"");
Serial.flush();
if(Serial.find("OK"));
else esp_connect();
Serial.println("AT+CIPMUX=1");
Serial.flush();
if(Serial.find("OK"));
else esp_connect();
Serial.println("AT+CIPSTART=0,\"TCP\",\"10.10.10.6\",3600");
Serial.flush();
if(Serial.find("OK"));
else esp_connect();
}
当我通过串行监视器测试这个新脚本时,一切正常。我正在模拟 ESP8266,所以我只输入 "OK" 和 "OK" 就像 ESP8266 一样。但是当我将它连接到 ESP8266 时,没有任何效果。我的脚本中的错误在哪里?我对 Serial.find() 的用法正确吗?
您的 if/else statements 根本不正确。例如
if(Serial.find("ready"));
else esp_connect();
首先,if
条件不应该在末尾有分号 ;
并且您并不是真正在测试 if/else,只是 if
所以它应该是形式为
if(!Serial.find("ready")) {
esp_connect();
}
if(!Serial.find("OK")) {
esp_connect();
}
注意感叹号 !
这是合乎逻辑的 NOT - 因此括号中的代码仅在语句为 FALSE 时执行。
我发现代码运行良好,错误是连接到 wifi 的超时时间太短。两秒对于 ESP8266 来说太短了。相当愚蠢的错误...
我正在尝试通过 Arduino Nano Serial 与我的 ESP8266-07 通信。我正在使用 AT 命令来重置、连接 wifi、连接 TCP 服务器等。我有一个功能脚本,所以我知道 ESP8266 接线正确。我正在使用 3.3V 到 5V 逻辑转换器等...这是较旧的功能脚本:
void esp_connect() {
Serial.println("AT+RST");
delay(2);
esp_timefuse = millis();
while(Serial.find("ready") == false) {
if(esp_timefuse - millis() >= 5000)
esp_connect();
}
Serial.println("AT+CWMODE=3");
delay(2);
esp_timefuse = millis();
while(Serial.find("OK") == false) {
if(esp_timefuse - millis() >= 2000)
esp_connect();
}
Serial.println("AT+CWJAP=\"WiFi 7-pekiel\",\"43664366\"");
delay(2);
esp_timefuse = millis();
while(Serial.find("OK") == false) {
if(esp_timefuse - millis() >= 2000)
esp_connect();
}
Serial.println("AT+CIPMUX=1");
delay(2);
esp_timefuse = millis();
while(Serial.find("OK") == false) {
if(esp_timefuse - millis() >= 2000)
esp_connect();
}
Serial.println("AT+CIPSTART=0,\"TCP\",\"10.10.10.6\",3600");
delay(2);
esp_timefuse = millis();
while(Serial.find("OK") == false) {
if(esp_timefuse - millis() >= 2000)
esp_connect();
}
}
但我并不满意。我正在努力做到最好。所以我写了这个脚本:
void esp_connect() {
Serial.println("AT+RST");
Serial.flush();
Serial.setTimeout(5000);
if(Serial.find("ready"));
else esp_connect();
Serial.println("AT+CWMODE=3");
Serial.flush();
Serial.setTimeout(2000);
if(Serial.find("OK"));
else esp_connect();
Serial.println("AT+CWJAP=\"WiFi 7-pekiel\",\"43664366\"");
Serial.flush();
if(Serial.find("OK"));
else esp_connect();
Serial.println("AT+CIPMUX=1");
Serial.flush();
if(Serial.find("OK"));
else esp_connect();
Serial.println("AT+CIPSTART=0,\"TCP\",\"10.10.10.6\",3600");
Serial.flush();
if(Serial.find("OK"));
else esp_connect();
}
当我通过串行监视器测试这个新脚本时,一切正常。我正在模拟 ESP8266,所以我只输入 "OK" 和 "OK" 就像 ESP8266 一样。但是当我将它连接到 ESP8266 时,没有任何效果。我的脚本中的错误在哪里?我对 Serial.find() 的用法正确吗?
您的 if/else statements 根本不正确。例如
if(Serial.find("ready"));
else esp_connect();
首先,if
条件不应该在末尾有分号 ;
并且您并不是真正在测试 if/else,只是 if
所以它应该是形式为
if(!Serial.find("ready")) {
esp_connect();
}
if(!Serial.find("OK")) {
esp_connect();
}
注意感叹号 !
这是合乎逻辑的 NOT - 因此括号中的代码仅在语句为 FALSE 时执行。
我发现代码运行良好,错误是连接到 wifi 的超时时间太短。两秒对于 ESP8266 来说太短了。相当愚蠢的错误...