从Arduino向plotly传输数据的正确POST请求
我使用ESP8266模块将感官数据推送到网上。我为thingspeak设置了它,并使用一个简单的GET请求发送值 现在我试图用plotly数据流服务复制这个过程,但我不知道我的请求有什么问题 传统的库(Wifi、以太网等)有一个println()方法,可以打印到套接字。我必须为ESP实现我自己的库,因为我找不到任何可靠的东西,并注意到设备在向套接字发送某些内容后经常会处于“忙碌”状态,这使我无法按如下方式逐块发送请求:从Arduino向plotly传输数据的正确POST请求,post,arduino,plotly,esp8266,Post,Arduino,Plotly,Esp8266,我使用ESP8266模块将感官数据推送到网上。我为thingspeak设置了它,并使用一个简单的GET请求发送值 现在我试图用plotly数据流服务复制这个过程,但我不知道我的请求有什么问题 传统的库(Wifi、以太网等)有一个println()方法,可以打印到套接字。我必须为ESP实现我自己的库,因为我找不到任何可靠的东西,并注意到设备在向套接字发送某些内容后经常会处于“忙碌”状态,这使我无法按如下方式逐块发送请求: client.println(“POST/HTTP/1.1”) client
client.println(“POST/HTTP/1.1”)
client.println(“主机:arduino.plot.ly”)
client.println(“{“x\”:15,“y\”:3,“streamtoken\”:“urqcbfmjot\”\“}”)
因此,我尝试一次编写所有请求。我通过潜入plotly的arduino库找到了请求的参数,该库依赖Wifi工作(这就是我无法将其用于ESP的原因)。到目前为止,我无法推送任何数据。以下是发送请求所需的代码块:
void pushData(管柱温度、管柱湿度、管柱压力、管柱高度)
{
bool status=esp8266.OpenTCP连接(IP,端口);
char call[]=“POST/HTTP/1.1\r\n”;
strcat(调用“主机:arduino.plot.ly\r\n”);
strcat(调用“用户代理:Arduino\r\n”);
strcat(调用,“传输编码:分块\r\n”);
strcat(调用“连接:关闭”\r\n);
strcat(调用“\r\n”);
strcat(调用“\r\n{”x\”:15,“y\”:3,“streamtoken\:“urqcbfmjot\”}\n\r\n”);
如果(!状态)返回;
esp8266.发送(呼叫);
}
void Esp8266::发送(字符串内容)
{
字符串cmd;
字符串msg=“已发送:”;
布尔状态;
printDebug(“写入TCP连接”);
printDebug(“要写入的内容:”);
打印调试(内容);
cmd=“AT+CIPSEND=“+String(content.length());
espSerial.println(cmd);
printDebug(“发送:”+cmd);
状态=检查响应(“>”,10);
如果(状态)
{
espSerial.print(内容);
printDebug(“发送的内容”);
}否则{
printDebug(“光标错误”);
closeTCPConnection();
}
}
我可以补充一点,我已经用cUrl成功地测试了他们的应用程序中提供的请求,但在我的实现中也失败了。请求是:
POST HTTP/1.1
主持人:stream.plot.ly
plotly streamtoken:urqcbfmjot
{“x”:10,“y”:2}
任何帮助都将不胜感激。作为参考,这里是我的项目简介
请随意使用我的图表进行测试。主机为stream.plot.ly(来自文档)或arduino.plot.ly(来自库)。我的流令牌是urqcbfmjot,这里是您需要发送数据的 具有单个数据更新的HTTP请求应如下所示:
char call[]=“POST/HTTP/1.1\r\n”;
strcat(调用“Host:stream.plot.ly\r\n”);
strcat(调用,“传输编码:分块\r\n”);
strcat(调用“plotly streamtoken:urqcbfmjot\r\n”);
strcat(调用“\r\n”);
strcat(调用“11\r\n”);//11是十六进制格式的JSON字符串+“\n”的长度
strcat(调用“{\'x\':15,\'y\':3}\n\r\n”);
要发送另一个数据点,无需进行另一个连接。如果保持现有流连接打开,则只需发送下一个数据块
esp8266.send(“12\r\n{\'x\':30,\'y\':10}\n\r\n”);
但根据文件记载
客户端停止写入数据的时间超过一分钟。如果一分钟后没有从客户端接收到任何数据,则流连接将关闭。(连接可以通过在60秒窗口内写入心跳来维持,心跳只是一条换行)
如果您在一分钟内没有发送任何内容,服务器将关闭连接。如果不需要在一分钟内发送任何内容,您可以发送一个只包含新行字符“1\r\n\r\n”
的数据块
但是,如果连接因任何其他原因中断,您可能仍然需要检测到断开连接,然后尝试重新连接
POST / HTTP/1.1
Host: stream.plot.ly
Transfer-Encoding: chunked
plotly-streamtoken: urqcbfmjot
14
{ "x": 10, "y": 2 }