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 客户端。
这是我写的,你只能发送请求,但你还不能得到响应以供进一步处理。不过我以后会实现的。
我正在创建一个人数统计器,只是简单地计算房间里的 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 客户端。
这是我写的,你只能发送请求,但你还不能得到响应以供进一步处理。不过我以后会实现的。