Http GET 请求非阻塞 Arduino

Http GET request non blocking Arduino

我正在创建一个人数统计器,只是简单地计算房间里的 In/Out 然后将其上传到我的数据库,我正在使用带有 ESP8266 的 Arduino MEGA2560 作为我服务器的通信器。

但是当我在我的服务器上发送 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 请求没有任何问题,只是我上面说的那个。

这种串行库与您的自定义请求的灵活性相去甚远。当您通过串口使用 ESP8266 设备时,它上面有一个嵌入式软件来处理您的请求。那就是固件。

如果您使用 AT 命令,它对您的情况没有帮助,因此没有非阻塞 TCP 实现来处理异步 HTTP 请求。

async TCP library为基于Arduino的ESP8266用户提供了一个解决方案,您可以在其中调整您的代码库,这里是为了灵活性。

对于 2017 年以后post访问这里的人:

您可以在这种情况下使用此库:ESP8266AsyncHttpClient

它是一个使用 ESPAsyncTCP 库的 ESP8266 的异步 HTTP 客户端。

这是我写的,你只能发送请求,但你还不能得到响应以供进一步处理。不过我以后会实现的。