haas506 2.0开发教程-高级组件库-http ota
HTTP OTA
案例说明:
使用HTTP协议实现OTA空中升级,更新开发板的python程序。只需要获取存储位置相应的URL就可以进行更新。(案例使用阿里云OSS进行演示,用户根据需要自行更改存储位置)
(1)获取URL
将最新程序上传阿里云OSS。获取存储位置的URL。
- 将main.py和board.json文件压缩成zip格式文件
- 阿里云创建Bucket
- 上传文件zip文件
- 点击详情 - 复制文件URL(可适当加长时间,超时后URL将会失效)
(2)功能代码
将URL复制到48行代码进行替换。
mian.py
#!/usr/bin/env python
# -*- encoding: utf-8 -*-
import utime as time
import net as mynet
import usys
import http
import network
import sntp
import modem
pyversion="202203281800"
#pyversion="202203281620"
g_connect_status = False
def on_4g_cb(args):
global g_connect_status
pdp = args[0]
netwk_sta = args[1]
if netwk_sta == 1:
g_connect_status = True
else:
g_connect_status = False
def connect_network():
global net,on_4g_cb,g_connect_status
net = network.NetWorkClient()
g_register_network = False
if net._stagecode is not None and net._stagecode == 3 and net._subcode == 1:
g_register_network = True
else:
g_register_network = False
if g_register_network:
net.on(1,on_4g_cb)
net.connect(None)
else:
print('network register failed')
while True:
if g_connect_status:
print('network register successed')
break
time.sleep_ms(20)
#py升级包里包含的是haas506的python脚本升级包,.zip格式的文件
def ota_py_app():
global ota_flag
ota_url = "http://202203281731.oss-cn-shanghai.aliyuncs.com/pyamp.zip?Expires=1648462591&OSSAccessKeyId=TMP.3KjfBRzFQ6wyCt59iQrgHV5ZT4Tcsa9d88fCeFfyazy2SPBVNmVGBiCwgAuzL3tLVLoYcYz4uRdJubM4DLa8Th4am9Lhiu&Signature=UsAmTC0XPDaLN0Z1b7NN1FIq3VA%3D"
htp = http.client()
ota_flag = 0
if htp.fotaPy(ota_url) == 0: #py固件下载成功,重启设备
print('------------------htp.pyfotaPy')
time.sleep_ms(1000)
modem.reboot()
else:
print('pyota failed!')
#pac升级包里包含的是haas506的pac差分升级包,.pack格式的文件
def ota_pac_app():
global ota_flag
htp = http.client()
ota_url = "http://E0lmIQu5DJu66cIg%3D"
if htp.fotaSys(ota_url) == 0: #pac固件下载成功,重启设备
print('------------------htp.pacfotaPy')
time.sleep_ms(1000)
modem.reboot()
else:
print('pacota failed!')
if __name__ == '__main__':
connect_network()#连接网络
pacversion = modem.getDevFwVersion()
print('---------------------------pacversion={}'.format(pacversion))
sntp.settime()#SNTP对时
print("csq:",mynet.csqQueryPoll())
print('pyversion:{}'.format(pyversion))
time.sleep(5)
ota_py_app()
# ota_pac_app()
while True:
print('httpota test')
time.sleep(3)
(3)日志输出
- 程序更新成功后会重启
- 重启后运行更新程序
network register successed
csq: 31
pyversion:202203281800
------------------htp.pyfotaPy
#重启
start led test
总结
代码中包含上传整包和pac差分包,上传整包操作如上,上传pac差分包需要安装工具比较麻烦,有需要后续会更新。