0

我正在尝试通过 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,所以我只需像 ESP8266 一样输入“OK”和“OK”。但是当我将它连接到 ESP8266 时,没有任何效果。我的脚本中的错误在哪里?我对 Serial.find() 的使用是否正确?

4

2 回答 2

1

您的if/else 语句根本不正确。例如

  if(Serial.find("ready")); 
  else esp_connect();

首先,条件末尾if不应有分号,并且您并没有真正测试 if/else,因此它应该采用以下形式;if

  if(!Serial.find("ready")) {
    esp_connect();
  }

  if(!Serial.find("OK")) {
    esp_connect();
  }

请注意感叹号,!这是逻辑非 - 因此括号中的代码仅在语句为 FALSE 时执行。

于 2016-10-29T19:46:38.577 回答
0

我发现代码运行良好,错误是连接到 wifi 的超时时间太短。对于 ESP8266 来说,两秒的时间太短了。真是个愚蠢的错误……

于 2016-11-02T19:11:47.670 回答