2016-10-29 3 views
0

Arduino Nano Serial을 통해 ESP8266-07과 통신하려고합니다. AT 명령을 사용하여 재설정, wifi 연결, TCP 서버 연결 등. 하나의 기능 스크립트가 있으므로 ESP8266이 올바르게 연결되어 있다는 것을 알고 있습니다. 나는 5V 로직 변환기 3.3V를 사용하고 등등 ...이 이전 기능 스크립트입니다직렬 AT 명령어가있는 ESP8266

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

코드가 완벽하게 작동하고 있으며 무선 랜에 연결하기에는 너무 짧은 시간 초과였습니다. 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 일 때만 실행됩니다.