手把手教你STM32的远程升级 ota升级详细流程( 二 )



手把手教你STM32的远程升级 ota升级详细流程

文章插图
2.进入远程升级OTA界面,选择需要升级的模块;然后点击右上角的添加升级包按钮 。FOTA升级:对设备中的模组进行升级 。SOTA升级:对设备中的应用程序进行升级,我这里选用的是SOTA,因为我要对MCU的应用程序升级 。

手把手教你STM32的远程升级 ota升级详细流程

文章插图
3.在添加升级包对话框中,输入固件信息,上传固件包文件 。产品选你要升级的设备,全部设备也可以;厂商名称选其他,主要是与之后发的对应上即可;模组型号同理;目标版本是你要更新到的版本号,比如你现在是V01,你这里添加的固件是V02的,这个版本号就要填V02;然后上传升级包,只支持Bin和压缩包格式的 。

手把手教你STM32的远程升级 ota升级详细流程

文章插图
4.点击验证升级按钮,选择验证类型(完整包或者差分包),选择进行测试升级的设备,进行验证 。一般跳过验证就行,我这里选的是整包,差分包原理一样 。

手把手教你STM32的远程升级 ota升级详细流程

文章插图

手把手教你STM32的远程升级 ota升级详细流程

文章插图
5.单击升级设备列表,进入升级队列模块,在右上角单击添加升级设备按钮,新增设备升级任务 。在添加待升级设备对话框中输入对应参数值 。初始版本:就是升级前的版本,也是上次升级的版本;升级范围就是你需要给哪些设备升级;升级时机:就是立即升级或是定时在什么时段升级;重试策略:不重试就是如果升级失败就完事了,重试那就失败了还能重试;信号强度和剩余电量只是一个信息的接口,有需要的可以读取来用 。

手把手教你STM32的远程升级 ota升级详细流程

文章插图

手把手教你STM32的远程升级 ota升级详细流程

文章插图

手把手教你STM32的远程升级 ota升级详细流程

文章插图
6.上述完成后,会出现“待升级”的设备,服务器这边就算配置完了,后续要我们M客户端进行操作了 。

手把手教你STM32的远程升级 ota升级详细流程

文章插图

七.客户端(MCU)API访问服务端进行OTA升级
无线模组用的是ESP8266,由于OneNet的OTA服务用的是HTTP协议,但是ESP8266没有HTTP协议,所以我使用TCP协议,封装成HTTP的报文格式 。
1.ESP8266初始化;连接Wifi,AP_SSID,AP_PASS是WiFi的账号和密码;SERVER_IP和SERVER_PORT是OneNet的Ip和端口号 。
复制
#defineSERVER_IP \"183.230.40.50\"#defineSERVER_PORT 80uint8_tpro = 0; uint8_tESP8266_Init(void) { switch(pro) { case0: //printf(\"+++\");Uart2_Send(\"+++\"); Delay_S(2); if(ESP8266_SoftReset(50) == 0) pro = 1; break; case1: if(ESP8266_AT_Send(\"ATE0\\r\\n\",10) == 0) pro = 2; break; case2: if(ESP8266_AT_Send(\"AT+CWMODE=1\\r\\n\",50) == 0) //设置8266为STA模式pro = 3; break; case3: if(ESP8266_ConnectionAP(AP_SSID,AP_PASS,200) == 0) //8266连接APpro = 4; break; case4: if(ESP8266_AT_Send(\"AT+CIPMODE=1\\r\\n\",50) == 0) //8266开启透传模式pro = 5; break; case5: if(ESP8266_Connect_Server(SERVER_IP,SERVER_PORT,50) == 0) //8266连接TCP服务器{ pro = 0; //USART1_Clear(); //清除串口数据return1; } break; } return0; } 2.上报版本号;dev_id是设备ID,authorization是鉴权参数,ver要上报的版本号,timeout发送超时时间

手把手教你STM32的远程升级 ota升级详细流程

文章插图
复制
//上报版本号uint8_tReport_Version(char*dev_id,char*authorization,char*ver,uint16_ttimeout) { uint16_ttime=0; charsend_buf[296]; USART1_Clear(); //清除串口数据 snprintf(send_buf, sizeof(send_buf), \"POST /ota/device/version?dev_id=%s HTTP/1.1\\r\\n\"\"Authorization:%s\\r\\n\"\"Host:ota.heclouds.com\\r\\n\"\"Content-Type:application/json\\r\\n\"\"Content-Length:%d\\r\\n\\r\\n\"\"{\\\"s_version\\\":\\\"%s\\\"}\", dev_id, authorization, strlen(ver) + 16, ver); Uart2_Send(send_buf); while(time<timeout) { if(strstr( (constchar*)usart_info.buf , (constchar*)\"\\\"errno\\\":0\")) break; Delay_Ms(100); time++; } if(time>=timeout) return1; elsereturn0; }