熟悉了HTTP协议上传数据到OneNET云之后,发现基于HTTP协议的传输过程在向服务器传送数据时是最简单的方案。但安全性也是最差的,明文传输,而且基于文本的协议传输量挺大。例程中也没有实现长连接特性,每次发送数据,直接POST,稳定性也比较差。刚使用的几天里,经常出现发送错误的状况,使得计数达到上限,网络重启。
说起物联网,用得最多的就是MQTT协议,在网络容量占用方面确实有很大优化,长连接的协议也使得数据实时性更好。不像HTTP,网络延迟时间不能保证。协议内容比较简单,主要是对消息的订阅,发布,和接收推送的消息。发布者能上传数据,订阅者能接收服务器转发的消息。MQTT发展也有很多版本了,大体结构都这样。OneNET云官方文档:http://open.iot.10086.cn/doc/art253.html#68
图 一、MQTT协议交互
图 二、OneNET MQTT框架
MQTT例程和HTTP的最大不同就是协议层。如下图:mqtt.c,mqtt_buffer.c是官方协议SDK提供的,mqtt_app.c则是接口应用的具体实现。生成协议帧也是直接调用这里的函数,然后在调用发送函数。
创建MQTT协议设备,得到设备ID,apikey,产品ID(在产品概况里),鉴权信息,然后oneNET.c中修改对应参数即可。
上传成功得到数据流:
解析下发指令的函数:开始有点错误,修改成这样子。只解析倒数第二位数字。
按照解析指令的函数构造一条命令:打开红色led灯。
串口输出如下:Recv the command, packet id is 0, cmduuid is d019ae79-6f48-5541-899a-664465c4a48d, qos=0, dup=0。红色灯亮起则操作成功执行。
|