【阿里云生活物联网架构师专题 ④】分享可商用的ESP8266 SDK连接阿里云物联网生活平台的在线远程升级OTA笔记。


  • 本系列博客学习由非官方人员 半颗心脏 潜心所力所写,仅仅做个人技术交流分享,不做任何商业用途。如有不对之处,请留言,本人及时更改。

1、esp32接入阿里云物联网平台,实现天猫精灵语音控制;
2、esp8266直连接入阿里云物联网平台,实现天猫精灵找队友零配网功能和语音控制;
3、esp32 sdk 直连接入天猫精灵IOT开放平台,实现天猫精灵找队友零配网功能和语音控制;
4、如何在天猫精灵IOT开放平台二次开发智能设备的 H5控制面板;
5、分享可商用的ESP8266 SDK连接阿里云物联网生活平台的在线远程升级OTA笔记。

一、博主寄言


       我写过很多物联网控制的博文系列,包括微信公众号、微信小程序控制硬件,私有云对接天猫精灵服务器,抑或是硬件端 esp8266/esp32 等系列博文,这是一个一个专题是写下我们如何在阿里云物联网上全栈开发我们的应用专题,让我们无须企业账号也可以体验设备-云端-App” 的过程;让我们变得更强,一个人担任一个公司的全部职责,全栈开发物联网攻城狮前进;

       我会带领大家轻轻松松地把自己的设备接入天猫精灵,告别 “单机时代”,走进语音控制物联网时代。 有疑问请留言区留言,或者加群大伙们讨论;写总结,写博文不容易,望大家多多体谅!

  • 自带资料:
    • git 分布式管理软件的基本使用;
    • 硬件开发:乐鑫 esp8266、esp32模块一个;具备 c 语言基础 ,不需要很熟练;
    • 移动端开发:android 端具备 javavue.js 开发语言,AndroidStudio 环境;
    • 服务器端开发:php 开发,熟悉 服务器运行、部署等原理操作;

       应各位小伙伴需求,《乐鑫esp8266直连天猫精灵iot开放平台》教学视频已经推出,只需学过51单片机即可入门,欢迎前来学习:传送门


二、前言


       2020年如愿以偿地到来了,随着年龄不断地增长,能做的,只有不断用新心态去适应新的生活,剩下的,交给命运;

       这个月应该少发表博文了,要忙些自己的事情,过年了,谁都比较忙!今年将是全新一年,我要思考如何把qq群建设起来,让大家活跃起来,2019年的在乐鑫芯片的技术存储达到了愿望,但还需要不断学习,wifi组网和蓝牙组网,都是物联网很前沿的技术;

      这篇为2020开门篇,是阿里云专题,前面的文章或视频,我们已经入门如何在ESP8266/ESP32实现数据上报下发解析天猫精灵语音控制的代码,这篇,我为大家讲讲如何实现ESP8266 SDK连接阿里云物联网生活平台的在线远程升级OTA


三、过程


       至于什么是远程在线升级ota功能?这里我不在啰嗦。
       上周,用了下午学习了阿里云物联网的ota升级,总得有一番心得,为了避免以后再次睬坑,这次我给大家画详细的这个流程图,也为自己以后找得到笔记,如下:

       这里,分享下mermaidjs在线画图,大家学起来哦!

升级失败
升级成功
用户点击设备详情
检查设备固件版本
设备当前是否最新固件版本
不需要固件升级
结束
需要固件升级
获取最新固件的信息,包括url版本等
开始http请求固件升级
下载固件完毕,开始升级固件
上传当前版本信息,云端判断升级是否成功
软件重启,再上报当前版本信息,云端判断升级成功

       我开始翻阅代码时候,发现乐鑫已经适配了 ota 升级的代码,在 example/solutions/ota,有兴趣的同学可以去看看。

       当我在天猫精灵例程跑起ota时候,发现是成功的,但是在云端依然判断升级超时,即为失败的结果。我很纳闷,于是乎,我从它的ota例程去观察琢磨,发现,流程不完全,导致云端检查ota失败;

       排除的思路很总要,首先,通过文档可以知道每次下发ota时候都是要版本对比,如果不一致则要向设备发送最新的固件url,让设备主动去拉取升级。

       而我在跑这个例程时候,版本怎么样都是0.0.1,我猜到应该是没上报版本信息给云端吧。翻了翻,果然是,哈哈!

       So,当升级成功与否,都要上报给云端,恰恰是这一步没做到位,导致了这个天猫精灵例程即使是远程升级成功,但是云端依然判断是升级失败。


四、相关方法


      乐鑫已经为我们做了大量的适配工作,所以我们也不需要怎么适配了,只是稍微改动一下当升级成功与否,都要上报给云端。 这个步骤;

  • 上报设备固件版本信息给服务器方法:
/**
 * @brief 上报设备固件版本信息给服务器(可选).
 *        NOTE: please
 *
 * @param [in] handle: OTA升级所需的句柄
 * @param [in] version: 固件版本信息,字符串格式
 *
 * @retval   0 : Successful.
 * @retval < 0 : Failed, the value is error code.
 * @see None.
 */
 int IOT_OTA_ReportVersion(void *handle, const char *version);
  • 升级进度上报给服务器的方法:
/**
 * @brief Report detail progress to OTA server (optional).
 *        NOTE: please
 *
 * @param [in] handle: specify the OTA module.
 * @param [in] progress: specify the progress defined by 'IOT_OTA_Progress_t'.
 * @param [in] msg: detail progress information in string.
 *
 * @retval   0 : Successful.
 * @retval < 0 : Failed, the value is error code.
 * @see None.
 */
DLL_IOT_API int IOT_OTA_ReportProgress(void *handle, IOT_OTA_Progress_t progress, const char *msg);

五、如何使用


      因为商用时候,我们在得到客户的一些bug分析定位,需要得到当前设备的固件版本,所以,我就在 mqtt 连接服务器成功之后,主动上报固件版本给服务器,这样的话,服务器就可以记录当前设备的版本了。

      这里必须提到的是,阿里云物联网的设备固件版本是否一致,所以,请务必主动上传当前版本信息给服务器!

       mqtt连接成功的回调都在 linkkit_solo.c有具体的实现,所以,我的做法就是当ota升级会重启设备待mqtt连接成功后,主动上报设备版本和设备状态信息比如亮度给服务器。


//这里宏定义固件版本,格式为 1.0 / 1.2 /2.1 这样的格式
#define DEVICE_FW_VERSION "2.1"

/**
 * @description: MQTT连接成功返回函数
 * @param {type} 返回的句柄
 * @return: 
 */
void tmall_clouds_mqtt_connected(void *ota_handle)
{
    //上报固件版本
    IOT_OTA_ReportVersion(ota_handle, DEVICE_FW_VERSION);
    //每次连接服务器之后,主动上报状态
    char property_payload[100] = {0};
    HAL_Snprintf(property_payload, sizeof(property_payload), "{\"LightSwitch\": %d ,\"ColorTemperature\": %d ,\"Brightness\": %d}", dev_status.Power, dev_status.Colortemp, dev_status.Brightness);
    vTaskDelay(500 / portTICK_RATE_MS);
    int code = IOT_Linkkit_Report(0, ITM_MSG_POST_PROPERTY, (unsigned char *)property_payload, strlen(property_payload));
    ESP_LOGI(TAG, "Property first post property_payload[code:%d]: %s", code, property_payload);
}

/** cloud connected event callback */
static int user_connected_event_handler(void)
{
    EXAMPLE_TRACE("Cloud Connected");
    g_user_example_ctx.cloud_connected = 1;

    /* 获取 句柄*/
    void *ota_handle = NULL;
    int res = dm_ota_get_ota_handle(&ota_handle);
    if (res == SUCCESS_RETURN)
    {
        tmall_clouds_mqtt_connected(ota_handle);
    }
    return 0;
}

六、阿里云物联网后台具体操作


       要进去阿里云物联网 在线升级后台 ,然后添加上传固件:

在这里插入图片描述

       首先要验证下固件是否正常等情况,我们通过升级指定设备;
在这里插入图片描述

       成功通过之后,就允许你批量升级了!

在这里插入图片描述
参考文献:

另外,不要把我的博客作为学习标准,我的只是笔记,难有疏忽之处,如果有,请指出来,也欢迎留言哈!

  • 玩转esp8266带你飞、加群付费QQ群,不喜的朋友勿喷勿加:434878850
  • esp8266源代码学习汇总(持续更新,欢迎star):https://github.com/xuhongv/StudyInEsp8266
  • esp32源代码学习汇总(持续更新,欢迎star):https://github.com/xuhongv/StudyInEsp32
  • 关注下面微信公众号二维码,干货多多,第一时间推送!
发布了152 篇原创文章 · 获赞 785 · 访问量 79万+

猜你喜欢

转载自blog.csdn.net/xh870189248/article/details/103779637