ESP8266

一、STM32+AT指令+HTTP协议连接ONENET

        移值了安信可官方的例程,可保证稳定连接,不过需要注意每次上电连接后,复位并不能使用8266断开连接,因为8266供电还在,依然保持在透传模式和ONENET服务器的连接,若要重新连接,需要断电后重新上电。加入了串口1来看ESP8266的连接状态。

发送的AT指令顺序为

AT+RESTORE        初始化ESP8266

AT+CWMODE=1     配置为STA模式

AT+CWJAP=“XXX”,"123456789"  连接网络

AT+CIPMUX=0        配置为单连接

AT+CIPSTART="TCP","183.230.40.33",80        连接ONENET服务器

AT+CIPMODE=1

AT+CIPSEND        进入透传模式

随后即可向服务器发HTTP报文来实现向服务器传数据,HTTP协议一般用于简单的实时数据上传

HTTP报文说明

名词:①数据流:就是要上传的数据名字,比如temp,可以再ONENET创建,也可以在报文发送,ONENET会自动创建没有的数据流。②数据点:就是数据流的值, 数据点中的value表示具体的值,其值为JSON对象,可以为整型、字符串多种类型。如果value部分用双引号括起来,则其在设备云存储为字符串,如果不用双引号括起来,则其表示数字。

报文格式如下 

HTTP报文由请求行、请求头部、报文数据组成

请求行包含HTTP方法、URL和协议版本组成

下面的实例

POST /devices/7058xxx72/datapoints?type=3 HTTP/1.1
api-key:XNmVBSWyYSxxxxxxxxxxxLXA3KM=
Host:api.heclouds.com
Content-Length:59

{"hum":25,"temp":65}

POST就是HTTP方法(新增资源信息),/devices/7058xxx72/datapoints?type=3是URL,HTTP/1.1是协议版本,如果是1.0版本,发送完数据后会断开连接,但1.1版本不会。

api-key:XNmVBSWyYSxxxxxxxxxxxLXA3KM=
Host:api.heclouds.com
Content-Length:59

是请求头部,包含api-key和Host请求主机名。Content-Length是数据内容长度

报文数据完整写法如下

{"datastreams":[{"id":"val1", "datapoints":[{"value":10}]},{"id":"val2", "datapoints":[{"value":20}]},{"id":"val3", "datapoints":[{"value":30}]}]}

即发送三个数据流datastreams,分别是val1,值为10;val2,值为20;val3,值为30

也有简写的方式,有三种简写的方式,对应URL最后的type=3,4,5

/<API_ADDRESS>/devices/<device_id>/datapoints?type=3

{"temperature":22.5,"humidity":"95.2%"}

表示在数据流temperature中增加一个数据点22.5,在humidity中增加一个数据点95.2%。

//<API_ADDRESS>/devices/<device_id>/datapoints?type=4

{"temperature":{"2015-03-22T22:31:12":22.5}}

表示在数据流temperature中加一个数据点,在2015年2月22日22点31分12秒的值为22.5

 //<API_ADDRESS>/devices/<device_id>/datapoints?type=5

,;temperature,2015-03-22T22:31:12,22.5;102;pm2.5,89;10

消息中最前面两位为用户自定义的域中分隔符和域间分隔符,这两个分隔符不能相同。比如采用逗号作为域中分隔符,分号作为域间分隔符的格式如下:

,;feild0;feild1;…;feildn

其中,每个field格式支持3种,下面以逗号作为域中分隔符进行说明:

field格式1: 3个子字段,分别是数据流ID,时间戳,数据值。通用格式:

Datastream_id,datetime,value

field格式2: 2个子字段,分别是数据流ID和数据值,省略时间戳。通用格式:

Datastream_id,value

field格式3: 1个子字段,省略了数据ID和时间戳,只传输数据值,平台将用该域所在的位置号(从0开始)作为数据流ID。

示例:

(1),;temperature,2015-03-22T22:31:12,22.5;102;pm2.5,89

此段数据一共包括3个数据点,改写为基本格式为:

{

    "datastreams": [

        {

            "id": "temperature",

            "datapoints": {

                "at": "2015-03-22T22:31:12",

                "value": "22.5"

            }

        },

        {

            "id": "1",

            "datapoints": {

                "value": "102"

            }

        },

        {

            "id": "pm2.5",

            "datapoints": {

                "value": "89"

            }

        }

    ]

}

在移值中遇到的问题:处理串口接收中断,未限制好数组的可行域范围,导致访问越界,进入HardFault。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值