ESP8266带有串行AT命令

时间:2016-10-29 12:18:03

标签: arduino at-command 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()的使用是否正确?

2 个答案:

答案 0 :(得分:1)

您的if/else statements根本不正确。 e.g。

  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时执行。

答案 1 :(得分:0)

我发现代码工作正常,错误是连接到wifi的超时太短。两秒钟ESP8266的持续时间太短。相当愚蠢的错误......