正确的POST请求从Arduino流式传输数据

时间:2015-09-04 18:13:47

标签: post arduino plotly esp8266

我正在使用ESP8266模块在线推送感官数据。我为thingspeak设置它并使用一个简单的GET请求来发送值。

现在我试图用情节数据流服务复制这个过程,但我无法弄清楚我的请求有什么问题。

传统的库(Wifi,以太网等)有一个println()方法,可以打印到套接字。我不得不为ESP实现我自己的库,因为我找不到任何可靠的东西,并注意到设备在向socket发送内容后会将自己置于“忙”状态,这阻止了我发送请求块像这样的块:

client.println("POST / HTTP/1.1")
client.println("Host: arduino.plot.ly")
client.println("{\"x\":15, \"y\": 3, \"streamtoken\": \"urqcbfmjot\"\"}")

所以我试着一次写下请求。我通过潜入plotly的arduino图书馆找到了请求的参数,这依赖于Wifi的工作(这就是为什么我不能将它与ESP一起使用)。到目前为止,我没有推送任何数据。以下是发送请求的代码块:

void pushData(String temp, String humid, String pres, String lum)
{
    bool status = esp8266.openTCPConnection(IP, PORT);

    char call[] = "POST / HTTP/1.1\r\n";
    strcat(call, "Host: arduino.plot.ly\r\n");
    strcat(call, "User-Agent: Arduino\r\n");
    strcat(call, "Transfer-Encoding: chunked\r\n");
    strcat(call, "Connection: close\r\n");
    strcat(call, "\r\n");
    strcat(call, "\r\n{\"x\":15, \"y\": 3, \"streamtoken\": \"urqcbfmjot\"\"}\n\r\n");

    if (!status) return;

    esp8266.send(call);
}

void Esp8266::send(String content)
{
    String cmd;
    String msg = "Sent : ";
    bool status;

    printDebug("Writing to TCP connection");
    printDebug("Content to write :");
    printDebug(content);
    cmd = "AT+CIPSEND=" + String(content.length());
    espSerial.println(cmd);
    printDebug("Sent : " + cmd);

    status = checkResponse(">", 10);
    if (status)
    {
        espSerial.print(content);
        printDebug("Content sent");

        } else {
        printDebug("Cursor error");
        closeTCPConnection();
    }

}

我可以补充一点,我已经成功测试了documentation中使用cUrl提供的请求,但在我的实现中也失败了。请求是:

POST  HTTP/1.1
Host: stream.plot.ly
plotly-streamtoken: urqcbfmjot

{ "x": 10, "y": 2 }

非常感谢任何帮助。对于参考,这是我的项目的repository

随意使用我的图表进行测试。主机是stream.plot.ly(来自doc)或arduino.plot.ly(来自库)。我的流令牌是 urqcbfmjot ,这里是the link to the plot

0 个答案:

没有答案