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

ESP8266_01搭建开发环境

ESP8266_02程序的编译与下载

ESP8266_03SDK与Makefile的基本用法

ESP8266_04管脚控制与软件定时器

ESP8266_05 ESP8266有几个串口?

ESP8266_06硬件定时器与IO中断

ESP8266_07基于PWM的呼吸灯

ESP8266_08基于flash的数据掉电保护

ESP8266_09基于IIC控制的OLED屏幕

ESP8266_10 ESP8266的STATION模式

ESP8266_11 ESP8266的UDP广播

ESP8266_12 ESP8266客户端模式下的TCP通信

ESP8266_13服务器端模式下的TCP通信

ESP8266_14 SOFTAP模式下的服务器端和客户端

ESP8266_15天气预报之TCP的GET操作

ESP8266_16天气预报之JSON数据的生成与解析

ESP8266_17简单网络时间协议-SNTP

ESP8266_18 MQTT协议接入ONENET平台

ESP8266_19MQTT协议接入ONENET平台_订阅主题

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

ESP8266_21基于ESP8266的一键配网

ESP8266_22基于自身ADC的电压采样

ESP8266_23基于硬件定时器的红外遥控器解码

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

ESP8266_20 基于ONENET平台的数据上传之TCP的POST操作_第1张图片

这是要收费了么,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

上传的数据内容如下:

ESP8266_20 基于ONENET平台的数据上传之TCP的POST操作_第2张图片

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

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

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

ESP8266_20 基于ONENET平台的数据上传之TCP的POST操作_第3张图片

除了要选择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的方式发出去。  

 

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

ESP8266_20 基于ONENET平台的数据上传之TCP的POST操作_第4张图片

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

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

ESP8266_20 基于ONENET平台的数据上传之TCP的POST操作_第5张图片

点开之后,效果如下:

ESP8266_20 基于ONENET平台的数据上传之TCP的POST操作_第6张图片

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

ESP8266_20 基于ONENET平台的数据上传之TCP的POST操作_第7张图片

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

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

 

链接:https://pan.baidu.com/s/1xIrRVN5eToR24vb4n65-yQ

提取码:m1cs

你可能感兴趣的:(ESP8266,TCP,POST,ONENET)