2016-10-29 2 views
0

Я пытаюсь связаться с моим ESP8266-07 через Arduino Nano Serial. Я использую AT-команды для сброса, подключения Wi-Fi, подключения TCP-сервера и т. Д. У меня есть один функциональный скрипт, поэтому я знаю, что ESP8266 правильно подключен. Я использую 3.3V до 5V логического преобразователя и так далее ... Это старший функциональный скрипт:ESP8266 с командами Serial 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, поэтому просто набираю «OK» и «OK», как ESP8266. Но когда я подключаю его к ESP8266, ничего не работает. Где ошибка в моем сценарии? Является ли использование Serial.find() правильным?

ответ

0

Я нашел, что код работает отлично, и ошибка была слишком коротким таймаутом для подключения к Wi-Fi. Две секунды были слишком короткими для ESP8266. Довольно глупая ошибка ...

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.

Смежные вопросы