【问题标题】:Http GET request non blocking ArduinoHttp GET 请求非阻塞 Arduino
【发布时间】:2017-03-19 13:11:34
【问题描述】:

我正在创建一个人员计数器,只需简单地计算房间内的进出数,然后将其上传到我的数据库中,我使用 Arduino MEGA2560 和 ESP8266 作为我服务器的通信器。

但是当我在我的服务器上发送 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 中使用 arduino fw 吗?您的问题中有 arduino-esp8266 标签。
  • 我正在使用 arduino 和 esp8266,如果我的标签不正确,请纠正我 :)
  • 不,没问题。只是想弄清楚你在 esp8266 上使用 arduino fw
  • 只要您使用串行库进行连接,您将不够灵活,无法在此类问题上获得支持。 ESP8266 Arduino 固件有一个异步 HTTP 库,仅供参考。
  • @cagdas 你能告诉我什么是 fw,我只是一个初学者请原谅我:),所以如果我使用 serial.write AT 命令,你告诉我会更好吗?

标签: arduino embedded esp8266


【解决方案1】:

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

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

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

【讨论】:

  • 嗨,当我试图编译示例程序时,我收到了这个错误。 C:\Users\zxcet\Documents\Arduino\libraries\ESPAsyncTCP-master\src/ESPAsyncTCP.h:27:22:致命错误:功能:没有这样的文件或目录#include ^ 编译终止。退出状态 1 为板 Arduino/Genuino Mega 或 Mega 2560 编译错误。
  • 这适用于 esp8266 设备。您将直接编程 ESP8266,而不是 arduino mega。所以你需要从board manager导入esp8266作为设备。
  • 如果您的情况需要 arduino mega,您可能还需要进行串行连接,但要编写自己的协议并调用自己的函数。确实有点难。
  • 在我的情况下,我非常需要 arduino,我正在使用其他模块,而不仅仅是 wifi,但感谢您在我的情况下对我的启发。我只是试一试
【解决方案2】:

对于那些在 2017 年之后访问此帖子的人:

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

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

它是由我编写的,您只能发送请求,但您还不能取回响应以进行进一步处理。但我会在未来实现它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-10-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-12
    • 2021-08-28
    • 2020-03-04
    • 1970-01-01
    相关资源
    最近更新 更多