• haas506 2.0开发教程-hota(仅支持2.2以上版本)


    1.hota.py升级

    案例说明

    使用HTTP协议实现OTA空中升级,更新开发板的python程序。只需要获取存储位置相应的URL就可以进行更新。(案例使用阿里云OSS进行演示,用户根据需要自行更改存储位置)

    (1)获取URL

    将最新程序上传阿里云OSS。获取存储位置的URL。

    1. 将main.py和board.json文件压缩成zip格式文件
      在这里插入图片描述
    2. 阿里云创建Bucket

    在这里插入图片描述

    1. 上传文件zip文件

    在这里插入图片描述

    1. 点击详情 - 复制文件URL(可适当加长时间,超时后URL将会失效)

    在这里插入图片描述

    (2)功能代码

    将复制的url填入代码
    main.py

    import utime as time
    from modem import net
    import hota
    import network
    import sntp
    from modem import info
    import system
    
    pyversion="202204281243"
    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 netw,on_4g_cb,g_connect_status
        netw = network.NetWorkClient()
        g_register_network = False
        if netw._stagecode is not None and netw._stagecode == 3 and netw._subcode == 1:
            g_register_network = True
        else:
            g_register_network = False
        if g_register_network:
            netw.on(1,on_4g_cb)
            netw.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
        #初始化
        hot = hota.client()
        #修改url
        #########################################################################
        ota_url = "填入复制的url替换"
        #########################################################################
        ota_flag = 0
        if hot.fotaPy(ota_url) == 0:  #py固件下载成功,重启设备
            print('------------------htp.pyfotaPy')
            time.sleep_ms(1000)
            system.reset()
        else:
            print('pyota failed!')
    
    
    if __name__ == '__main__':
        connect_network()#连接网络
        pacversion = info.getDevFwVersion()
        print('---------------------------pacversion={}'.format(pacversion))
        sntp.settime()#SNTP对时
        print("csq:",net.getCsq())
        print('pyversion:{}'.format(pyversion))
        time.sleep(5)
        ota_py_app()
        while True:
            print('httpota test')
            time.sleep(3)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69

    (3)输出log

    network register successed
    csq: 31
    pyversion:202203281800
    ------------------htp.pyfotaPy
    
    #重启
    #最新程序的log
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    2.hota.pac升级

    案例说明

    • 固件pac包有需要可以私聊支持
    • 具体升级步骤和py升级类似

    (1)获取URL

    获取到pac固件包后,如上方法,将pac包存入oss,复制url。

    (2)功能代码

    将复制的url填入代码
    main.py

    import utime as time
    from modem import net
    import hota
    import network
    import sntp
    from modem import info
    import system
    
    pyversion="202204281243"
    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 netw,on_4g_cb,g_connect_status
        netw = network.NetWorkClient()
        g_register_network = False
        if netw._stagecode is not None and netw._stagecode == 3 and netw._subcode == 1:
            g_register_network = True
        else:
            g_register_network = False
        if g_register_network:
            netw.on(1,on_4g_cb)
            netw.connect(None)
        else:
            print('network register failed')
        while True:
            if g_connect_status:
                print('network register successed')
                break
            time.sleep_ms(20)
    
    
    #pac升级包里包含的是haas506的pac差分升级包,.pack格式的文件
    def ota_pac_app():
        global ota_flag
        #初始化
        hot = hota.client()
        #填入url
        #########################################################################
        ota_url = "填入复制的url替换"
        #########################################################################
        if hot.fotaSys(ota_url) == 0:  #pac固件下载成功,重启设备
            print('------------------htp.pacfotaPy')
            time.sleep_ms(1000)
            system.reset()
        else:
            print('pacota failed!')
       
    
    if __name__ == '__main__':
        connect_network()#连接网络
        pacversion = info.getDevFwVersion()
        print('---------------------------pacversion={}'.format(pacversion))
        sntp.settime()#SNTP对时
        print("csq:",net.getCsq())
        print('pyversion:{}'.format(pyversion))
        time.sleep(5)
        ota_pac_app()
        while True:
            print('httpota test')
            time.sleep(3)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69

    (3)输出log

    network register successed
    csq: 31
    pyversion:202203281800
    ------------------------------------htp.pacfotaPy
    #重启
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    (4)查看固件版本

    运行以下程序,查看当前固件版本。

    from modem import info
    
    print("设备固件版本",info.getDevFwVersion())
    
    • 1
    • 2
    • 3

    3.Class-hota

    clientfotaPyfotaSys
    初始化py固件升级pac固件升级

    hota - 固件升级模块

    • 模块功能:用于py固件升级,或者pac固件升级

    client - 初始化固件升级

    • 函数功能: 初始化,创建一个固件升级

    • 函数原型:

    hota.client()

    • 参数说明: 无

    fotaPy - py固件升级

    • 函数功能: py固件升级

    • 函数原型:

    hota.fotaPy(url)

    • 参数说明:
    参数说明
    urlurl是固件地址,支持http,不支持https

    fotaSys - pac固件升级

    • 函数功能: pac固件升级

    • 函数原型:

    hota.fotaSys(url)

    • 参数说明:
    参数说明
    urlurl是固件地址,支持http,不支持https
  • 相关阅读:
    input输入表头保存excel文件
    autoware之轮式里程计计算
    STM32F4VGT6-DISCOVERY:uart1驱动
    一步步来, 分析下如果在社交网络中建立自己品牌
    React 高阶组件 和 受控组件
    PN结与二极管的特性
    文本分类方案,飞浆PaddleNLP涵盖了所有
    【JavaWeb】JSP快速入门
    iNFTnews | 虚拟租赁是Web3的下一个发展方向
    MyBatis动态SQL
  • 原文地址:https://blog.csdn.net/w_hizyf_m/article/details/125410631