ESP8266_20基于ONENET平台的数据上传之TCP的POST操作

前面两节说了MQTT协议的简单用法,本意是希望你们多练习,结果今天登陆平台,收到了系统提示:

360截图20191029185544410

这是要收费了么,so sad!

算了,尽人事听天命吧!

前面两节的内容,实现的效果都是设备和设备之间的通信,物联网平台只是作为一个传输的媒介。但如果我想把数据传回物联网平台,应该怎么搞?

这就是这次要说的内容,TCP的POST操作!如何实现?先看一下官网的文档:

https://open.iot.10086.cn/doc/book/application-develop/api/TCP/15.%E4%B8%8A%E4%BC%A0%E6%95%B0%E6%8D%AE%E7%82%B9.html

该链接中说了上传数据点的方法,示例如下:

POST http://api.heclouds.com/devices/device_id/datapoints HTTP/1.1

device_id:需要替换为设备ID

上传的数据内容如下:

数据内容比较多,我就截了一部分,只要知道上传的数据是JSON格式即可。那么具体如何实现呢?和第15节内容类似,需要先对链接进行解析,得到主机、端口和路径等参数,然后结合API_KEY等其他信息,组成特定的数据格式,上传给平台即可。

如果忘了15节的内容,建议先复习一下。

开始之前,还是要以多协议接入的方式添加产品、添加设备,但这次要使用HTTP的方式。

360截图20191029203541428

除了要选择HTTP,其它内容没什么变化。

        1、接下来是具体的操作流程,简单来说,过程分四步:

对URL链接进行解析

链接上面说了,格式如下:

http://api.heclouds.com/devices/535407318/datapoints

其中的535407318是我的设备ID。解析函数和第15节一样,使用的是:

http_parse_request_url( )

解析后,得到主机、端口、路径信息。

        2、整理要上传的数据

前面说了,数据是以JSON格式上传的,为了方便演示,我这里只写一个简单的数据:

{
       "datastreams":[{
              "id": "temperature",
              "datapoints": [
              {
                     "value": %d
              }
              ]
       }
       ]
}

 

对上面的格式进行整理,得到C语言下的内容:

{\r\n\"datastreams\":[{\r\n\"id\": \"temperature\",\r\n\"datapoints\": [\r\n{\r\n\"value\": %d\r\n}\r\n]\r\n}\r\n]\r\n}

        3、整理要上传的POST信息

信息格式如下:

"POST " + filename+ " HTTP/1.1\r\n" +
   "Accept: */*\r\n" +
   "Content-Length:"+ %d+"\r\n"+                 //JSON数据长度
   "Content-Type: application/json\r\n"+
   "Host: "+%s+"\r\n"+                           //主机名
    %s+"\r\n"+                                   //API_KEY
    "Connection: Keep-Alive\r\n\r\n"+
    %s                                           //第2步整理好的数据

这样看起来可能有点乱,建议大家在用的时候整理成宏定义的形式,直接调用,比较方便。

        4、发送数据

这一步就比较简单了,在WIFI已经连接好的情况下,将第3步整理好的信息通过TCP的方式发出去。

程序修改完成,保存、清理、编译、下载一条龙,然后重新上电。这里借助串口助手来查看效果。效果如下所示:

360截图20191029184341730

如图所示,红色框住的信息是物联网平台返回的信息,0错误,说明发送成功。我这里一直在发送固定值50.我在程序里做了一个软件定时器,每隔10秒发送一次。

然后打开ONENET物联网平台,查看是否收到数据。在设备列表页面,点击“数据流”:

360截图20191030115701483

点开之后,效果如下:

360截图20191030120043699

如上所示,显示了上传的数据名称,最新的数据值,点击temperature右上角的省略号,可以看到数据值随时间变化的曲线:

360截图20191029184244522

如图,前面7月份的数据是我之前做测试的时候上传的值。这次的值都显示在2019年10月29日,伴随着上传的时间。

至此,TCP方式下的POST上传数据聊完了,感兴趣的可以下载源码试一下。

完整工程源码,请关注公众号:单片机爱好者,回复关键字:ESP8266,即可获取。

发表评论

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据