1 Star 1 Fork 0

Walkline / Micropython Online Updater

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
贡献代码
同步代码
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
Loading...
README
MIT

Micropython Online Updater

项目介绍

Online Updater模块在开发板联网后可用于检查、下载项目中需要更新的文件,免去手动上传文件的麻烦(感谢 jd3096 提供的思路)

特别注意:需要将项目文件编译到固件中,或转换为.mpy格式并手动上传到开发板中,对于.py格式的文件无法提供在线更新功能

实现方法

在线更新项目文件的原理十分简单,只需要联网下载最新版并覆盖本地文件即可

但实际操作中可能会出现一些意外情况导致更新失败甚至项目无法正常运行,此时需要一个在线更新配置文件,配置文件中提供每个更新文件的基本属性,可用于检查文件版本和校验文件完整性,这些基本属性包括:

  • 文件路径(path
  • 文件名(filename)
  • 文件大小(size
  • 下载路径(url
  • 版本号(version

客户端下载在线更新配置文件后根据每个文件的版本号判断是否需要下载更新文件,需要下载的文件首先下载到一个临时目录中,并根据文件大小判断文件是否下载成功,在所有文件全部成功下载后再移动(覆盖)到目标文件路径,这样做以避免本次更新的文件中存在相互依赖的情况下,只更新部分文件可能会导致项目运行出现异常(当然,最好的做法是避免文件互相依赖的情况出现)

项目中使用.mpy格式文件的原因见下图

文件大小比较

如何使用

使用在线更新功能需要完成以下五个步骤的操作:

  1. 在项目文件中增加必要的版本号信息
  2. 本地生成在线更新配置文件
  3. 上传配置文件和转换后的项目文件到资源服务器
  4. 调用OnlineUpdater模块检查并下载更新文件
  5. 其它文件调用更新后的项目文件

1.增加版本号信息

在项目文件头部增加版本号信息

# update.py
__version_info__ = (0, 1)

每次修改文件后都需要对版本号进行手动递增,以保证新的版本号大于之前的,以下列出的都是大于(0, 1)版本号

  • (0, 1, 1)
  • (0, 2, 0)
  • (1, 0)

2.生成配置文件

转换.mpy格式文件需要用到mpy-cross工具

# 安装 mpy-cross
pip install mpy-cross

# 更新 mpy-cross
pip install --upgrade mpy-cross

使用项目中提供的配置文件生成工具可自动生成配置文件

cd path/to/root/
python ./updatting/config_generator.py

在运行生成工具之前,需要根据项目实际情况修改参数设置

# updating/config_generator.py

# 按需选择更新文件
INPUT_FILE_LIST = ('/update.py',)

# 资源服务器地址
URL_PREFIX = 'https://path/to/resource/server/'

3.上传更新文件

最终生成的文件位于updating目录下,将该文件夹上传到URL_PREFIX指定的资源服务器即可

4.开发板下载更新文件

至此,配置文件和更新文件已准备完毕,下一步是在开发板中使用update.py文件提供的OnlineUpdater模块检查和下载更新文件

首先需要修改update.py中的资源服务器地址,使之与在线更新配置文件中的地址匹配即可

# update.py
URL_PREFIX = 'https://path/to/resource/server/'

把修改后的文件上传至开发板,使用如下代码检查并下载更新文件:

import network
from update import OnlineUpdater

def update_callback(result:int, msg:str, files:dict):
    print(f'- update result: {msg}')
    print(f'    files: {files}')

if network.WLAN(network.STA_IF).isconnected():
    updater = OnlineUpdater(update_callback)
    updater.check()

具体示例参考update.py文件中提供的测试代码

5.调用更新后的文件

更新后的文件存储在用户分区内,所以使用时需要优先导入用户分区内的文件

# main.py
try:
    from test.tools import TestingToolsClass
except ImportError:
    TestingToolsClass = __import__('test/tools').TestingToolsClass


if __name__ == '__main__':
    print(TestingToolsClass().add(1, 2))

具体示例参考main.pytest文件夹中提供的测试代码

合作交流

走线物联扇贝物联

MIT License Copyright (c) 2023 Walkline Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

简介

为项目提供在线更新功能 展开 收起
Python
MIT
取消

发行版

暂无发行版

贡献者

全部

近期动态

加载更多
不能加载更多了
Python
1
https://gitee.com/walkline/micropython-online-updater.git
git@gitee.com:walkline/micropython-online-updater.git
walkline
micropython-online-updater
Micropython Online Updater
master

搜索帮助