2016-06-16 5 views
0

Я успешно подключаю свой сервер, но я не могу обрабатывать данные ответа. esp8266.find ("+ PID") не работает. Мой код цикла ниже:Arduino & ESP8266 HTTP GET Обработка ответов

void loop() { 
    String cmd = "AT+CIPSTART=\"TCP\",\""; //make this command: AT+CPISTART="TCP","192.168.88.35",80 
    cmd += DST_IP; 
    cmd += "\",80\r\n"; 
    esp8266.print(cmd); 
    //wait a little while for 'Linked' 
    delay(3000); 

    //This is our HTTP GET Request change to the page and server you want to load. 
    cmd = "GET /~atolye/wifiModule.php?id=123 HTTP/1.0\r\n"; 
    cmd += "Host: 159.122.115.70\r\n\r\n"; 
    esp8266.print("AT+CIPSEND=63\r\n"); 
    if(esp8266.find(">")) { 
    //Send our http GET request 
    Serial.println("SENDING THE REQUEST"); 
    esp8266.print(cmd); 
    if(esp8266.find("+IPD,")) { 
     Serial.println("\r\nIPD FOUND"); 
     if(esp8266.find("\"1")) { 
     int value = esp8266.read()-48; 
     Serial.println("\r\nVALUE FOUND"); 
     Serial.println(value); 
     esp8266.println(value); 
     } 
    } else { 
     Serial.println("\r\n!! IPD NOT FOUND"); 
    } 
    } 
    else { 
    Serial.println("\r\nERROR > DOESN'T EXIST"); 
    //Something didn't work... 
    esp8266.print("AT+CIPCLOSE\r\n"); 
    } 

} 

И это выход: Как вы можете заметить, IPD НЕ НАЙДЕНО выполняется до прибытия РЕАКЦИИ. Что я должен сделать, чтобы поймать эти данные? Заранее спасибо.

AT+CIPSTART="TCP","159.122.115.70",80 

CONNECT 

OK 
SENDING THE REQUEST 

!! IPD NOT FOUND 
START="TCP","159.122.115.70",80 

busy s... 

Recv 103 bytes 

SEND OK 

+IPD,205:HTTP/1.1 200 OK 
Date: Thu, 16 Jun 2016 08:33:19 GMT 
Server: Apache/2.4.16 (Unix) OpenSSL/1.0.1e-fips mod_bwlimited/1.4 
X-Powered-By: PHP/5.5.30 
Connection: close 
Content-Type: application/json 

"12"CLOSED 
+0

Вам, вероятно, придется ждать получения данных. Я не знаю библиотеки, но может быть какая-то функция типа 'dataAvailable', которую вы могли бы назвать. Не могли бы вы ссылаться на документацию библиотеки? –

+0

Я использую только SofwareSerial.h. Я не знаю, где ждать моих данных. Можете ли вы объяснить немного больше? – eden

+0

Запрос занимает некоторое время. Я не был уверен, как работает Serial.find, некоторые поисковые системы показывают, что он действительно ждет данных, но имеет тайм-аут в 1000 мс. Если установка вашего соединения и ожидание ответа с сервера занимает больше времени, чем 1000 мс, это может быть причиной. –

ответ

0

Проблема была не в отклике. Предположим, что существует соединение TCP открыт с помощью AT + CIPSTART и запрос, который имеет длину 42 символов, как показано ниже:

GET/HTTP/1.0\r\nHost: 77.223.129.195\r\n 

Перед выполнением следует установить на символ CIPSEND рассчитывать. Проблема в том, что \ r \ n подсчитывается как 1 байт каждый, не следует считать 2 символа. Запроса состоит из 4-х символов 42-4 = 38.

AT+CIPSEND=38\r\n 

Исключая 2 байта решить эту проблему и успешно отображаются перед моей проверкой коды, если есть какой-либо «+ PID» s.

+0

Строка 'GET/HTTP/1.0 \ r \ nHost: 77.223.129.195 \ r \ n' не длинна 42 символа, а 38 (' \ r' и '\ n' - только один символ) –

+0

О, вы имели в виду 40 символы. Верный! – eden

+0

Нет, у вас есть всего 4 '\ r' или' \ n'. Я бы предположил, что ваше объяснение неверно, количество ваших персонажей было совсем рядом –