我有一个正在运行的本地网站,它接受HTML表单数据。
字段为:
温度湿度
服务器成功接收数据,并吐出一个用新条目更新的图。
使用浏览器工具,我能够捕获实际的POST请求,如下所示:
http://127.0.0.1:5000/add_data
温度=25.4&湿度=52.2
内容长度:30
现在,我想从使用手动输入的人机界面浏览器迁移到使用AT命令的ESP01设备。
根据ESP AT命令文档,POST请求使用以下命令执行:
AT+HTTPCPOST=
查找下面的链接以获取该命令的完整描述。
我似乎无法让这个POST请求工作。ESP01设备立即返回一个"0";错误";没有任何延迟的消息,就好像它甚至没有尝试发送请求一样,表明语法可能是错误的。
在许多变体中,以下是我最好的尝试:
AT+HTTPCPOST=";http://MYIPADDR:5000/add_data",30,2,";温度:25.4〃"湿度:52.2〃;
用我的IP地址替换了上面的MYIPADDR。
如何将post请求转换为ESP01 AT命令格式?执行这样的请求是否需要任何先决条件?
我确实将ESP01设备连接到了WiFi网络。
以下是POST AT命令描述的链接:
https://docs.espressif.com/projects/esp-at/en/release-v2.2.0.0_esp8266/AT_Command_Set/HTTP_AT_Commands.html#cmd-httpcpost
文档中写道:
AT+HTTPCPOST=url,length[,<http_req_header_cnt>][,<响应:
OK
符号>表示AT已准备好接收串行数据,您现在可以输入数据。当消息长度要求满足由参数确定的条件时,传输开始。…
参数
:HTTP网址:到POST的HTTP数据长度。最大长度等于系统可分配的堆大小。<http_req_header_cnt>:<http_req_header>参数。[<http_req_header>]:可以向服务器
您正在发送:
AT+HTTPCPOST="http://MYIPADDR:5000/add_data",30,2,"Temperature: 25.4","Humidity: 52.2"
长度是30。问题是,长度之后的所有内容都是HTTP头字段;您需要发送正文中的变量。所以命令是:
AT+HTTPCPOST="http://MYIPADDR:5000/add_data",30
随后在下一行上在ESP-01之后发送>字符:
Temperature=25.4&Humidity=52.2
因为您传递了30作为正文长度,所以ESP-01将在AT
命令结束后读取正好30个字符,并将该数据作为post正文发送。如果数据的大小发生变化(例如,温度可能是2.2,所以少了一位数(,您需要发送新的长度,而不是30。