2016-10-29 11 views
0

私はESP8266-07とArduino Nano Serialを使って通信しようとしています。私はリセットするためにATコマンドを使用して、無線LANに接続し、TCPサーバーに接続します。私は1つの機能的なスクリプトを持っているので、私はESP8266が正しく配線されていることを知っています。私は3.3V〜5Vロジックコンバータなどを使用しています...これは古い関数スクリプトです:ESP8266とシリアルATコマンド

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()の使用法は正しいですか?

答えて

0

コードが完全に動作していて、間違いが無線LANに接続するためのタイムアウトが短すぎることがわかりました。 ESP8266では2秒間が短すぎました。かなり間違った間違い...

1

if/else statementsはまったく正しくありません。例えば

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

まずif条件は、最後にセミコロン;を持つべきではないと/それ以外は、ちょうどifはそれを形にする必要があれば、あなたは本当にテストしていません

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

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

お知らせ感嘆符!これは論理NOTです。したがって、括弧内のコードは、ステートメントがFALSEの場合にのみ実行されます。

関連する問題