Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从Arduino向plotly传输数据的正确POST请求_Post_Arduino_Plotly_Esp8266 - Fatal编程技术网

从Arduino向plotly传输数据的正确POST请求

从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

我使用ESP8266模块将感官数据推送到网上。我为thingspeak设置了它,并使用一个简单的GET请求发送值

现在我试图用plotly数据流服务复制这个过程,但我不知道我的请求有什么问题

传统的库(Wifi、以太网等)有一个println()方法,可以打印到套接字。我必须为ESP实现我自己的库,因为我找不到任何可靠的东西,并注意到设备在向套接字发送某些内容后经常会处于“忙碌”状态,这使我无法按如下方式逐块发送请求:

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 }