我正在创建一个人员计数器,只需简单计算房间内的输入/输出然后将其上传到我的数据库中,我使用Arduino MEGA2560和ESP8266作为我服务器的通信器。
但是当我在服务器上发送HTTP GET请求时遇到了麻烦。一旦我发送HTTP GET请求,我的计数器功能就不会工作,直到HTTP GET请求完成,只是想知道在Arduino中是否存在易于使用和支持的async函数,或者使用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 :(得分:1)
这种串行库与您的自定义请求的灵活性相差甚远。当您使用ESP8266设备而非串行时,它上面有一个嵌入式软件来处理您的请求。那是固件。
如果你使用AT命令,它将无助于你的情况,因此它上面没有非阻塞的TCP实现来处理异步HTTP请求。
基于Arduino的ESP8266用户可以使用async TCP library解决方案,您可以在其中调整代码库,这是灵活性的好处。
答案 1 :(得分:0)
对于那些在2017年之后访问此帖子的人:
您可以在以下情况下使用此库:ESP8266AsyncHttpClient
它是使用ESPAsyncTCP库的ESP8266的异步HTTP客户端。
它是我写的,您只能发送请求,但仍无法取回响应以进行进一步处理。但是我将来会实施。