赞
踩
1、esp32接入阿里云物联网平台,实现天猫精灵语音控制;
2、esp8266直连接入阿里云物联网平台,实现天猫精灵找队友零配网功能和语音控制;
3、esp32 sdk 直连接入天猫精灵IOT开放平台,实现天猫精灵找队友零配网功能和语音控制;
4、如何在天猫精灵IOT开放平台二次开发智能设备的 H5控制面板;
5、分享可商用的ESP8266 SDK连接阿里云物联网生活平台的在线远程升级OTA笔记。
我写过很多物联网控制的博文系列,包括微信公众号、微信小程序控制硬件,私有云对接天猫精灵服务器,抑或是硬件端 esp8266/esp32
等系列博文,这是一个一个专题是写下我们如何在阿里云物联网上全栈开发我们的应用专题,让我们无须企业账号也可以体验设备-云端-App” 的过程;让我们变得更强,一个人担任一个公司的全部职责,全栈开发物联网攻城狮前进;
我会带领大家轻轻松松地把自己的设备接入天猫精灵,告别 “单机时代”,走进语音控制物联网时代。 有疑问请留言区留言,或者加群大伙们讨论;写总结,写博文不容易,望大家多多体谅!
java
、vue.js
开发语言,AndroidStudio
环境;应各位小伙伴需求,《乐鑫esp8266直连天猫精灵iot开放平台》教学视频已经推出,只需学过51单片机即可入门,欢迎前来学习:传送门
2020年如愿以偿地到来了,随着年龄不断地增长,能做的,只有不断用新心态去适应新的生活,剩下的,交给命运;
这个月应该少发表博文了,要忙些自己的事情,过年了,谁都比较忙!今年将是全新一年,我要思考如何把qq群建设起来,让大家活跃起来,2019年的在乐鑫芯片的技术存储达到了愿望,但还需要不断学习,wifi组网和蓝牙组网,都是物联网很前沿的技术;
这篇为2020开门篇,是阿里云专题,前面的文章或视频,我们已经入门如何在ESP8266/ESP32实现数据上报下发解析天猫精灵语音控制的代码,这篇,我为大家讲讲如何实现ESP8266 SDK连接阿里云物联网生活平台的在线远程升级OTA!
至于什么是远程在线升级ota功能?这里我不在啰嗦。
上周,用了下午学习了阿里云物联网的ota升级,总得有一番心得,为了避免以后再次睬坑,这次我给大家画详细的这个流程图,也为自己以后找得到笔记,如下:
这里,分享下mermaidjs在线画图,大家学起来哦!
我开始翻阅代码时候,发现乐鑫已经适配了 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
群,不喜的朋友勿喷勿加:434878850Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。