基于阿里云IoT平台和HAAS210云模组的OTA
最近开发了一款嵌入式物联网门锁, 用到了阿里云IoT平台的OTA能力, 设备端用了阿里云的HAAS210模组, 有些收获, 在此做个分享.
1.云平台的选型
作为一个小微企业, 自建云平台不现实, 因此一个靠谱的做法就是在诸多物联网平台之间做一个选择.
考虑到近年来相继多个小型物联网平台的停服的事件, 我们要选只能在头部几个大平台之间选择, 即阿里, 华为, 亚马逊, 微软等.
我们的产品需要用到OTA服务, 因此我们在各大平台的OTA服务之间做了一个对比. 我们需要支持多种推送方式, 包括主动推送/被动请求/单设备多模块等OTA能力, 同时在推送方面又希望有多种参数的配置, 比如超时时间/单批次推送个数设置等能力. 综合易用性和性价比, 我们选择阿里的物联网平台, 里面的免费的公共实例提供了入门级的服务, 方便我们这样的小微企业接入.
选择其他头部平台, 要实现这些功能理论上也是可行的, 但是需要我们自己再自购一些服务器和云资源, 招相应的后端开发人员, 加上开发调试的成本, 这个对于我们希望短平快交付的企业不是非常现实.
2.模组的选型
我们的设备简单, 是典型的MCU+WiFi模组架构. WiFi模组有多个选择, 包括乐鑫/汉枫/庆科/涂鸦/小米等.
涂鸦/小米等厂家的模组功能跟他们云平台深度绑定, 同时我们的场景中也用不上他们的移动端能力, 因此不在我们的考虑之列.
剩下的只有通用模组. 通用模组中, 功能每家都是大同小异, 主要分为下面两种情况:
- 有些提供了通用的MQTT AT指令,我们需要根据阿里物联网平台的协议格式自己去组报文
- 有些提供了专用于连接阿里云平台的MQTT基础指令, 省去了基础的身份认证和消息通信的报文的组装, 但是上层业务, 比如OTA/物模型/设备影子等功能, 需要自己组装报文.
有没有一个提供了阿里云平台高阶能力(包含OTA等能力)的AT指令的WiFi模组? 考虑到我们MCU的ROM空间的限制, 以及开发时间/人力的不足, 我们倾向于在市面上找这样一款模组.
在阿里云的物联网平台上浏览新功能, 看到了他们关于云模组HAAS210的介绍, 基本符合我们的预期.我们主要用到OTA/物模型/一型一密等功能都有封装好的AT指令, 配网的话他们也提供了AT命令直接配网/蓝牙配网/设备热点等能力. 经询价, 价格基本与主流的WiFi模组相当, 甚至略有优势.
3.开发实践
3.1 购买模组样品
通过阿里云官网的链接, 联系阿里云IoT解决方案的有关人员, 购买到几个样品, 按照他们官网资料, 连接起来, 如下图.
其中上面的串口是AT口(波特率115200), 下面的串口是debug口(波特率2000000).
3.2 WiFi配网
我们用的配网方式很简单, 用AT命令直接传送ssid/passwd给设备端,
输入:AT+IWIFICONNECT=,,[save_to_flash]
AT+IWIFICONNECT=myssid,mypasswd,0OK
配网成功后, AT口返回如下日志, 提示已经成功接入WiFi路由器
OK+INETSTAT:4,192.**.**.101,B4:**:**:**:6a:7b
3.3 接入物联网平台
设备证书设置:
为了让工厂烧录设备身份的时候更加简单, 我们采用了一型一密(动态注册)的方式, 即让产品出厂的时候使用统一的产品秘钥, 设备连云的时候自己指定设备名称(比如填写mac地址), 平台根据建连信息自动为该设备创建身份信息, 并下发秘钥给设备.
设置认证方式: AT+IMQTTPARA=<para_key>, <para_value>
设置设备身份: AT+IDMAUTH=<product_key>,<device_name>,<device_secret>,<product_secret>
参考交互
AT+IMQTTPARA=AUTHMODE,2
//这里2表示设备首次连云的时候在云平台注册身份. 需要在控制台开启动态注册的选项.OK
AT+IDMAUTH=c1***a1l,c1_***_dev,1**1*,dc****m
//四个参数都要输入, 由于选择了一型一密, 云端会在认证成功后下发真实的device_secret, 因此这里的device_secret可以暂时填写随机字符OK
除了上述通用的一型一密的认证方式外, 模组也支持其他认证方式, 比如一机一密(用户预先在控制台创建设备, 在模组中直接输入product_key, device_name, device_secret). 用户请参考模组AT手册.
设备接入物联网平台:
AT+IDMCONN=< host>,< port>
AT+IDMCONN=iot-05****al.mqtt.iothub.aliyuncs.com,1883+IDMSTATE:1OK
IDMSTATE返回1, 表示MQTT已经连接上
3.4 MQTT消息收发
发消息:
AT+IMQTTPUB=< topic>,< qos>, < payload>
参考上行: 上报helloworld
AT+IMQTTPUB=/ab8*****1U/t01_**_001/user/update,0,helloworld+IMQTTPUB:0OK
收消息:
云模组有免订阅能力, 对于阿里云物联网平台的系统级的topic, 不用订阅即可收到下行消息.
参考下行: 控制台设置设备影子后, 设备收到的下行报文
+IMQTTRCVPUB:/shadow/get/gb80***u1U/eng_**_005,258,{"method":"control","payload":{*****},"timestamp":1650447219,"version":1}
3.5 物模型的使用
物模型的协议是阿里云物联网平台自定义的一套数据格式, 用于标识设备的属性/事件/服务, 功能上类似于涂鸦的DP点.
属性上报:
格式如:
AT+IDMPP=< message>
参考输入:
AT+IDMPP={"LightStatus":1}+IDMPP:8OK
属性下发:
格式如
+IDMPS:<msg_id>,<msg_len>,
OK
参考输出:
+IDMPS:238420054,17,{"LightStatus":1}
事件上报:
格式如:
AT+IDMEP=<event_id>,<event_payload>
参考输入:
AT+IDMEP=OnSync,{"SyncTime":1}+IDMEP:15OK
3.6 OTA命令
云模组集成了阿里云LinkSDK中的OTA能力, 用户可以在控制台部署OTA任务, 为连接在云模组上的MCU下推升级固件. 交互步骤如下:
3.6.1 控制台部署OTA任务后, 模组收到了OTA消息, 告知MCU:
+IOTASTATE:< state>,< version>,<image_size>
参考交互:
+IOTASTATE:0,2.0.1,521540
3.6.2 MCU收到上述消息后, 通知模组是否接受OTA升级:
AT+IOTASTART=< enable>
模组响应: OK
参考交互:
AT+IOTASTART=1OK
+IOTASTATE:1
如果接受, 模组就开始下载固件.
3.6.3 模组下载完固件, 通知MCU去收取:
+IOTASTATE:< state>,< version>,<image_size>
参考交互:
+IOTASTATE:2 //模组在校验固件
+IOTASTATE:5 //模组已经收完固件,通知MCU去分片读取
3.6.4 MCU查询固件的分片详情:
AT+IOTASHO
模组响应: +IOTASHO:<total_frame>, <frame_size>,, <image_size>,<digest_method>, <expect_digest>
参考交互:
AT+IOTASHO+IOTASHO:2038,256,2.0.1,521540,0,fe52d2203d3406160f440a55fa7e6073
3.6.5 MCU获取其中某个分片:
AT+IOTASTX=< frame>
模组响应: +IOTASTX:< frame>,< data_size>, < crc16>,< data>
AT+IOTASTX=0+IOTASTX:0,256,27069,**********************
MCU要持续请求(frame数值持续增加,直到total_frame-1), 取到的固件要存到MCU的flash里面.
3.6.6 升级结束, 上报新的固件版本号, 以确认固件升级成功:
AT+IOTAVER=2.0.0 //2.0.0表示新的固件版本号. 控制台收到后进行校验, 如果一致则更新任务状态
3.6.7 设备主动查询云端是否有OTA任务:
AT+IOTAQUERY //如果服务端有部署OTA任务, 会收到3.6.1中提到的下行报文
4.总结
对于需要开发一些自定义功能的物联网厂家来说, 阿里云物联网平台提供了不错的原子化能力, 厂家可以基于这些能力快速实现自己的功能, 而使用他们的云模组可以快速实现端侧功能, 比通用的WiFi模组性价比要高.
基于阿里云IoT平台和HAAS210云模组的OTA相关推荐
- 基于阿里云IoT平台OTA进行APP确认升级的方案——业务架构类
简介: 对于家居类及个人消费电子类的物联设备,基于用户体验的考虑,生产企业一般会为消费者提供通过手机APP进行确认升级的功能,典型的使用场景是通过手机APP对手环进行升级.本文主要介绍APP确认升级的 ...
- 如何使用华为云IoT平台实现远程控制无人机,资深物联网从业者手把书一步一步教你!
我目前从事的行业是无人机应用开发,每天都是跟物联网打交道,所以看到了华为云推出的关于物联网相关的技术就来了兴趣.在我的研究领域中,物模型已经是一个非常基础.非常常见的模型了. 如果没有物模型,那么最直 ...
- 阿里IOT云平台(二)---10分钟物联网设备接入阿里云IoT平台
本文转载自:https://www.geek-workshop.com/thread-37883-1-1.html.基于VS Code和Node.js 我替换了原文中的温度.湿度属性图(主要是修正了标 ...
- NodeMCU-ESP8266连接阿里云Iot平台进行数据监测
简介 本教程中主要讲解使用阿里云Iot监测控制NodeMCU的方法. 设备从MQTT数据上传.监测.控制的全流程如下图所示,本教程仅仅讲解从设备与Aliyun平台之间的交互,业务服务器部分(App开发 ...
- 阿里云IoT平台CoAP接入 3 了解下物模型
关于阿里云IoT平台CoAP接入,可见笔记阿里云IoT平台CoAP接入 小能手另外分享了NB-IoT的应用开发心得,先从模组端对几个常见模块进行试用分析,接着对更上层具体的CoAP协议进行研究,并且演 ...
- 10分钟虚拟设备接入阿里云IoT平台实战
10分钟虚拟设备接入阿里云IoT平台实战 1. 准备工作 1.1 注册阿里云账号 使用个人淘宝账号或手机号,开通阿里云账号,并通过实名认证(可以用支付宝认证) 1.2 免费开通IoT物联网套件 产品官 ...
- 【ODYSSEY-STM32MP157C】上报数据到阿里云 IoT 平台
我们在上一节<[ODYSSEY-STM32MP157C]驱动 UART 读取传感器数据> 已经成功读取到 PMS5003ST 传感器的数据,本节我们将学习如何将设备接入阿里云 IoT 平台 ...
- 电信NB-IoT设备对接阿里云IoT平台实战——实践类
众所周知,中国电信的NB-IoT设备必须直连电信CTWing平台,无法直接在阿里云IoT,AWS IoT,腾讯云IoT 管理中国电信的NB-IoT设备. 今天我们就给大家介绍如何通过阿里云IoT企业物 ...
- 4G Modbus Json边缘网关接入阿里云IoT平台
LTE-669P 4G边缘网关系列 阿里云平台连接教程 今天介绍物联设备 LTE-669P 4G边缘网关如何接入阿里云平台系列. LTE-669P是一款工业级4G JSON无线边缘解析网关,支持RS4 ...
最新文章
- 缓存击穿、缓存穿透、缓存雪崩
- epoch如何设置_使用TFRecordDataset时如何设置epoch计数器?
- ReadResolve方法与序列化
- Android内存优化(三)避免可控的内存泄漏
- glCullFace,GL_CULL_FACE
- 简便的chrome插件安装
- Steps to install Domino Server 8.5.1 on AIX 6
- 小积累-生成固定位数的随机数
- Netty工作笔记0011---Channel应用案例2
- 复杂多目录的Makefile模板及示例-转
- Vant中List组件immediate-check=false无效
- signature=111f58ddc27ff0fab1746b92b27414e9,DDCTF2019官方Write Up——MISC篇
- IDE工具(17) eclipse创建ftl文件具体步骤
- ShadowGun 的学习笔记 - GodRays
- JPA的cannot simultaneously fetch multiple bags异常的解决
- 毛笔书法艺术作品,能不能写简化字?
- 计算机专业考研的好学校排名2015,计算机类专业考研最好的学校排名
- 随笔记录——numpy4(伪随机数生成)
- 面向对象分析与设计--遛狗玩
- 学生实验室常见升压降压芯片电路介绍
热门文章
- python做电磁场计算_加速Python中的计算(模拟磁场中的粒子)
- 微信小程序中禁止当前页面的上下滑动处理
- BC高精确度函数使用。
- 朴素贝叶斯算法以及案例
- 无法为数据库 'xxx' 中的对象 'dbo.yyy'.'PK_yyy' 分配空间,因为 'PRIMARY' 文件组已满
- 三相逆变器双pi控制器参数如何调节_学术简报基于内模原理的并网逆变器双模PI控制...
- html中加入姓名学号的代码,让moodle增加学号(示例代码)
- Babel是如何读懂JS代码的
- Linux解决“未预期的符号“(“附近有语法错误”的问题方法
- N皇后问题 (c++)