前言
? ? ? ? OTA功能是产品的必备功能,但是如果又不想自己搭建平台,可以选择了阿里云的平台,基于阿里云对自己的设备进行版本管理。
硬件准备
1.广和通L610模组(opencpu,二次开发)
代码实现
1.升级流程图
2.设备上报版本信息,如果有新版本会下发升级信息
设备端通过MQTT协议推送当前设备OTA模块版本号到Topic:/ota/device/inform/${YourProductKey}/${YourDeviceName} 。消息格式如下:
{
"id": "123",
"params": {
"version": "1.0.1",
"module": "MCU"
}
}
参数 | 类型 | 说明 |
---|
id | String | 消息ID号。String类型的数字,取值范围0~4294967295,且每个消息ID在当前设备中具有唯一性。 | version | String | OTA模块版本。 | module | String | OTA模块名。说明
- 上报默认(default)模块的版本号时,可以不上报module参数。
- 设备的默认(default)模块的版本号代表整个设备的固件版本号。
|
3.设备下发升级包信息
设备端订阅Topic:/ota/device/upgrade/${YourProductKey}/${YourDeviceName} 。物联网平台对设备发起OTA升级请求后,设备端会通过该Topic收到升级包的存储地址URL。
消息格式如下:
- 单个文件的OTA升级包信息:
{
"id": "123",
"code": 200,
"data": {
"size": 93796291,
"sign": "f8d85b250d4d787a9f483d89a974****",
"version": "1.0.1.9.20171112.1432",
"isDiff": 1,
"url": "https://the_firmware_url",
"signMethod": "MD5",
"md5": "f8d85b250d4d787a9f483d89a9747348",
"module": "MCU",
"extData":{
"key1":"value1",
"key2":"value2",
"_package_udi":"{"ota_notice":"升级底层摄像头驱动,解决视频图像模糊的问题。"}"
}
}
}
参数 | 类型 | 说明 |
---|
id | Long | 消息ID号。每个消息ID在当前设备中具有唯一性。 | message | String | 结果信息。 | code | String | 状态码。 | version | String | 设备升级包的版本信息。 | size | Long | 升级包文件大小,单位:字节。 OTA升级包中仅有一个升级包文件时,包含该参数。 | url | String | 升级包在对象存储(OSS)上的存储地址。 OTA升级包中仅有一个升级包文件时,包含该参数。 | isDiff | Long | 仅当升级包类型为差分时,消息包含此参数。 取值为1,表示仅包含新版本升级包与之前版本的差异部分,需要设备进行差分还原。 | sign | String | 升级包签名。 OTA升级包中仅有一个升级包文件时,包含该参数。 | signMethod | String | 签名方法。取值:
对于Android差分升级包类型,仅支持MD5签名方法。 | md5 | String | 当签名方法为MD5时,除了会给sign赋值外还会给md5赋值。 OTA升级包中仅有一个升级包文件时,包含该参数。 | module | String | 升级包所属的模块名。 说明?模块名为default时,物联网平台不下发module参数。 | extData | Object | 升级批次标签列表和推送给设备的自定义信息。 _package_udi表示自定义信息的字段。 单个标签格式:"key":"value" 。 | files | Array | 多个升级包文件的信息列表。 OTA升级包中有多个升级包文件时,包含该参数。 单个升级包文件信息为:
- fileSize:升级包文件大小。
- fileName:升级包文件的名称。
- fileUrl、fileMd5、fileSign:含义与url、md5、sign相同。
|
4.设备上报升级进度(可选)
Topic:/ota/device/progress/${YourProductKey}/${YourDeviceName} 。
{
"id": "123",
"params": {
"step": "-1",
"desc": "OTA升级失败,请求不到升级包信息。",
"module": "MCU"
}
}
参数 | 类型 | 说明 |
---|
id | String | 消息ID号。String类型的数字,取值范围0~4294967295,且每个消息ID在当前设备中具有唯一性。 | step | String | OTA升级进度。 取值范围:
- 1~100的整数:升级进度百分比。
- -1:升级失败。
- -2:下载失败。
- -3:校验失败。
- -4:烧写失败。
设备上报的进度值及其描述信息,可根据设备实际升级场景在设备端配置。设备端配置方法,请参见设备端Link SDK的OTA升级。 | desc | String | 当前步骤的描述信息,长度不超过128个字符。如果发生异常,此字段可承载错误信息。 | module | String | 升级包所属的模块名。模块的更多信息,请参见添加升级包。 说明?上报默认(default)模块的OTA升级进度时,可以不上报module参数。 |
5.设备端完成OTA升级后,推送最新的版本信息到Topic:/ota/device/inform/${YourProductKey}/${YourDeviceName} 。如果上报的版本与OTA服务要求的版本一致就认为升级成功,反之失败。
|