0

Arduino Nano Serial を介して ESP8266-07 と通信しようとしています。AT コマンドを使用して、リセット、wifi の接続、TCP サーバーの接続などを行っています。機能するスクリプトが 1 つあるので、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();
  }

感嘆符!は論理 NOT であることに注意してください。したがって、括弧内のコードは、ステートメントが FALSE の場合にのみ実行されます。

于 2016-10-29T19:46:38.577 に答える
0

コードが完全に機能していることがわかりました。間違いは、wifi に接続するにはタイムアウトが短すぎることでした。ESP8266 にとって 2 秒は短すぎました。かなりアホなミス…

于 2016-11-02T19:11:47.670 に答える