ota到底是个啥功能,其实我也不一定理解的很准确,我认为就是网络升级功能,连上wifi升级程序,就这样。
传统的嵌入式想升级确实比较费劲,因为没有文件管理系统,所以就得考虑专门给ota的分区,直接整个bin都重新烧录引导,这部分比较复杂,我也只是看个皮毛,说的不一定准,当然也不是今天的主题。
所以我就在想,咱大MPY需要这种OTA么,好像并不需要,就是更新个py的事儿嘛,哪有这么复杂呢?结合uruquests库弄就完了!也省得搭服务器,直接建立个库多好啊。
现在比较新的固件,我印象1.17以后都是了,官方固件自带urequests库,不过这个库也就一个文件,光杆司令,你完全可以直接拷贝到开发板上。
然后github找了个类似的项目, senko。好家伙两年没更新了,也没啥大问题,可能关注度也不高。
这个项目本来是用来更新github库的,我必须给他本土化一下,改成咱csdn的库,主要是不用看网络爸爸的脸色。
我建了库,你们可以测试用
库里啥也没有就一个main.py用来验证是否可行。
折腾一晚上,开始卡在urequests.py总报错,后来才发现链接地址没搞对。。。

总体步骤跟我来一遍:
1 改boot.py这个是板子启动的第一个东西,我们把设置弄进去:

import gc
import machine
import networkdef connect_wlan(ssid, password):sta_if = network.WLAN(network.STA_IF)ap_if = network.WLAN(network.AP_IF)sta_if.active(True)ap_if.active(False)if not sta_if.isconnected():print("Connecting to WLAN ({})...".format(ssid))sta_if.active(True)sta_if.connect(ssid, password)while not sta_if.isconnected():passreturn Truedef main():gc.collect()# Wi-Fi credentialsSSID = "jd_work"PASSWORD = "800080008000"connect_wlan(SSID, PASSWORD)# Install Senko from PyPi#upip.install("micropython-senko")import senkoOTA = senko.Senko(user="jd3096", repo="micropython-ota-test", working_dir="app", files=["main.py"])print('ota init')if OTA.update():print("Updated to the latest version!")machine.reset()if __name__ == "__main__":main()

其实就是运行main.py之前,联网,并尝试用senko库更新
核心就一句话:

OTA = senko.Senko(user="jd3096", repo="micropython-ota-test", working_dir="app", files=["main.py"])

更加详细的参数可以自己看库,不大也不难

2 官方用的是upip的方法安装senko库,但是网络是爹,何必求爸爸呢,所以直接放进去一个senko.py也一样,我做了一些适配csdn库的修改。

import urequests
import uhashlib
import gc
gc.collect()class Senko:#https://gitcode.net/jd3096/micropython-ota-test.gitraw = "https://gitcode.net"#github = "https://gitcode.net"def __init__(self, user, repo, url=None, branch="-/raw/master", working_dir="app", files=["boot.py", "main.py"], headers={}):"""Senko OTA agent class.Args:user (str): GitHub user.repo (str): GitHub repo to fetch.branch (str): GitHub repo branch. (master)working_dir (str): Directory inside GitHub repo where the micropython app is.url (str): URL to root directory.files (list): Files included in OTA update.headers (list, optional): Headers for urequests."""self.base_url = "{}/{}/{}".format(self.raw, user, repo) if user else url.replace(self.github, self.raw)self.url = url if url is not None else "{}/{}/{}".format(self.base_url, branch, working_dir)self.headers = headersself.files = filesprint(self.base_url,self.url,self.headers,self.files)def _check_hash(self, x, y):x_hash = uhashlib.sha1(x.encode())y_hash = uhashlib.sha1(y.encode())x = x_hash.digest()y = y_hash.digest()if str(x) == str(y):return Trueelse:return Falsedef _get_file(self, url):gc.collect()print(url)payload = urequests.get(url)code = payload.status_codeif code == 200:return payload.textelse:return Nonedef _check_all(self):changes = []for file in self.files:latest_version = self._get_file(self.url + "/" + file)if latest_version is None:continuetry:with open(file, "r") as local_file:local_version = local_file.read()except:local_version = ""if not self._check_hash(latest_version, local_version):changes.append(file)return changesdef fetch(self):"""Check if newer version is available.Returns:True - if is, False - if not."""if not self._check_all():return Falseelse:return Truedef update(self):"""Replace all changed files with newer one.Returns:True - if changes were made, False - if not."""changes = self._check_all()for file in changes:with open(file, "w") as local_file:local_file.write(self._get_file(self.url + "/" + file))if changes:return Trueelse:return False

3 板子的工作完事儿了,剩下的就是改变仓库的内容。真心方便,优雅!!!

做这玩意有啥用呢?
以前写程序的方式:
板子连接电脑——打开thonny——修改代码——保存
现在的方式:
首次设置后
电脑端改好代码——push到仓库——板子上按一下重启

再也不用线了,只要板子有网就行,多优雅。
还有很重要的一点,如果部署一个板子,插线连接ok,如果要同时更新几十个几百个板子,而且板子分散在各种,这种ota的优势就凸显出来了。
评论区提到的配网问题,也是一个方向,目前我所了解的配网就是esp32建立服务器热点,其他设备连接,打开指定ip的浏览器,输入配网信息,还不够优雅,有个叫强制门户的技术,类似机场的wifi,连接自动弹出网页填写信息,这个能更好些,当然除了mpy,esp32可以微信小程序配网之类的,关于配网,有时间我专门开一期。

micropython实现mpy的ota(有用,推荐)相关推荐

  1. LPC55S69 IoT Kit专属 Micropython模组和库函数简介

    §01 概览 Micropython是一个开源项目,目标是在微控制器和小型嵌入式系统上实现Python3.x的语法,和部分标准的Python库,可在资源受限的系统中运行. Micropython实现了 ...

  2. 机器学习模型在携程海外酒店推荐场景中的应用

    导读 互联网企业的核心需求是"增长",移动互联时代下的在线旅游业也不例外.随着大数据.云计算和人工智能等技术的不断进步,通过算法和模型来实现增长已成为核心. 近年来推荐系统迅速崛起 ...

  3. 干货 | 机器学习模型在携程海外酒店推荐场景中的应用

    "关于作者:Louisa,携程算法工程师,热爱前沿算法和技术在个性化推荐和广告建模等业务的性能优化和落地. 大数据产业创新服务媒体 --聚焦数据 · 改变商业 导读 互联网企业的核心需求是& ...

  4. 基于单片机、RTOS玩MicroPython

    关注+星标公众号,不错过精彩内容 来源 | RTThread物联网操作系统 当下MicroPython 变得越来越流行,RT-Thread 也提供了对应的软件包的支持.那么,相比官方原生的 Micro ...

  5. micripython手册_RTT MicroPython VS 官方原生MicroPython

    原标题:RTT MicroPython VS 官方原生MicroPython 当下MicroPython 变得越来越流行,RT-Thread 也提供了对应的软件包的支持.那么,相比官方原生的 Micr ...

  6. 简单上手Raspberry Pi Pico(Ubuntu+MicroPython)

    关于raspberry pi pico的信息我就不多介绍了,直接给几个关键词吧 售价4$ 微控制器 MicroPython/C/C++ 树莓派基金会自研RP2040芯片 两本官方推荐的书: Micro ...

  7. es统计有多少个分组_ES 24 - 如何通过Elasticsearch进行聚合检索 (分组统计)

    1 普通聚合分析 1.1 直接聚合统计 (1) 计算每个tag下的文档数量, 请求语法: GET book_shop/it_book/_search { "size": 0, // ...

  8. Windows常用快捷键整理

    快捷键 前言:这是个人编程生涯中的快捷键总结,如有遗漏的常用快捷键欢迎大家补充,加粗的内容则是重中之重,大家一定要掌握 1:功能区按键 F1 - F10 功能区键 F1 :显示帮助 F2:重命名文件夹 ...

  9. 小米手机刷android one,小米手机(Mi One)刷机教程详解完整版 (刷MIUI官方刷机包)...

    升级方法一:MIUI在线完整包升级 MIUI完整包升级不需要清除数据,降级需要清除数据. MIUI在线完整包升级推荐在WLAN或3G环境下进行,点击小米手机桌面上系统更新程序. 登陆你的小米帐户,米聊 ...

最新文章

  1. TextView文本折叠Three
  2. linux嵌入式开发遇到坑不用慌 让你快速提升进度
  3. android ------- 开发者的 RxJava 详解
  4. SourceInsight 常用快捷键
  5. 一文告诉你雾计算与云计算的区别及对物联网的价值!
  6. MySQL中的四种Key
  7. python中国大学慕课平台_乐学Python,中国大学MOOC(慕课)答案公众号搜题
  8. Python笔记03:python中用import导入包的机制原理是什么?
  9. 操作系统——进程的状态与转换
  10. 网络服务器是指带有大容量硬盘的计算机,中国人民大学网络教育201812统考计算机模拟题...
  11. matlab编程入门实例,matlab编程实例100例
  12. miui7+android系统版本,用户升级完MIUI 7之后发现居然是Android 4.4,然后就疯了
  13. 串口助手发送数据到单片机并显示在液晶上
  14. 中科大日常交流英语期末考试话题汇总
  15. 使用Python办公自动化:将文本、表格及图片写入到Word
  16. cmd窗口输入java命令执行无反馈
  17. c++Primer5,总览与IO库和泛型算法
  18. WIN10一直提示自动修复,无法进入系统
  19. 中南大学2016考研复试分数线(已公布)
  20. OpenCV 常用函数汇总(normalize、getStructuringElement、erode、dilate)

热门文章

  1. java数据透视表算法_java – 在数据透视表上对数组进行分区
  2. JS 中关于Promise的用法,状态,执行顺序详解,面试可用(原创)
  3. MySQL安装与启动
  4. java中的日志处理
  5. 网络篇 网络设备的基本配置09
  6. 使用distpicker的简单测试页面
  7. tesseract 识别图片应用一
  8. 电商专题-电商项目开发规模
  9. js之清除Cookie
  10. scaffold-dbcontext 命令使用说明