2017-03-19 4 views
1

방에있는 인/아웃을 계산하고 내 데이터베이스에 업로드하기 만하면됩니다. 내 서버에 Communicator로 ESP8266과 함께 Arduino MEGA2560을 사용하고 있습니다.Http GET request non blocking Arduino

하지만 내 서버에서 HTTP GET 요청을 보낼 때 문제가 있습니다. 일단 HTTP GET 요청을 보내면 HTTP GET 요청이 완료 될 때까지 카운터 기능이 작동하지 않습니다. Arduino에서 비동기 함수가 사용하기 쉽고 서 있을지 궁금하거나 HTTP GET 요청을 사용하는 올바른 방법이 있습니까?

void loop{ 
    counter(); // let's assume that this function is just counting in and out person in the room 
    // changing the value of variable count 
    uint8_t buffer[1024] = {0}; 

    if (wifi.createTCP(HOST_NAME, HOST_PORT)) { 
     Serial.print("create tcp ok\r\n"); 
    } else { 
     Serial.print("create tcp err\r\n"); 
    } 

    char hello[]; 
    strcpy(hello, "GET /vbus/insert.php?coount="); 
    strcat(hello, count); 
    strcat(hello," HTTP/1.1\r\nHost: www.test.com\r\nConnection:close\r\n\r\n"); 
    wifi.send((const uint8_t*)hello, strlen(hello)); 
    wifi.send((const uint8_t*)hello, strlen(hello)); 

    uint32_t len = wifi.recv(buffer, sizeof(buffer), 10000); 
    if (len > 0) { 
     Serial.print("Received:["); 
     for(uint32_t i = 0; i < len; i++) { 
      Serial.print((char)buffer[i]); 
     } 
     Serial.print("]\r\n"); 
    } 
} 

PS :

여기 내 코드의 나는 내가 말한 위의 단지 하나의 HTTP GET 요청을 전송 문제가 없습니다.

+0

esp8266에서 arduino fw를 사용하고 있습니까? 질문에 arduino-esp8266 태그가 있습니다. – cagdas

+0

내가 arduino를 esp8266과 함께 사용하고 있는데, 내 태그가 잘못되어 있으면 나를 수정하십시오. – zxcetera

+0

아니요, 문제 없습니다. esp8266에서 arduino fw를 사용하려고합니다. – cagdas

답변

1

이러한 종류의 직렬 라이브러리는 사용자 정의 요청에 대한 유연성에서 멀리 떨어져 있습니다. ESP8266 장치를 직렬로 사용하는 동안에는 요청을 처리 할 수있는 임베디드 소프트웨어가 있습니다. 그것은 펌웨어입니다.

AT 명령을 사용하면 비동기 HTTP 요청을 처리하기 위해 비 차단 TCP 구현이 없으므로 AT 명령을 사용하면 도움이되지 않습니다.

Arduino 기반 ESP8266 사용자를위한 async TCP library 솔루션이 있습니다. 여기에 코드 기반을 적용 할 수 있으며 여기에는 유연성이 있습니다.

+0

안녕하세요, 샘플 프로그램을 컴파일하려고 할 때이 오류가 발생합니다. C : \ 사용자 \ zxcet 문서 \ \ 아두 이노 \ 라이브러리 \ ESPAsyncTCP 마스터 \의 SRC/ESPAsyncTCP.h : 27 : 22 : 치명적인 오류 : 기능 : 그런 파일이나 디렉토리 사용법 #include ^ 컴파일 종료하지 . 종료 상태 1 보드 Arduino/Genuino Mega 또는 Mega 2560 용으로 컴파일하는 중 오류가 발생했습니다. – zxcetera

+1

esp8266 장치 용입니다. 당신은 arduino 메가가 아닌 ESP8266을 직접 프로그래밍 할 것입니다. 따라서 보드 관리자에서 esp8266을 장치로 가져와야합니다. – cagdas

+1

다음은 좋은 출발점입니다. https://learn.sparkfun.com/tutorials/esp8266-thing-hookup-guide/installing-the-esp8266-arduino-addon – cagdas