【Micropython Esp32 OTA升级功能的摸索与验证】

OTA是什么

OTA是英文Over-the-Air首字母缩写,中文意思是空中下载技术,是通过网络远程对设备程序进行修改,主要进行漏洞修补和程序升级、优化。
做一个项目,由于时间仓促,加之对采用的技术不是很熟悉,又要马上推出项目,急需预留修复程序bug的预案,好在采用了ESP32作核心控制器,此模块具备wifi联网功能,具备了OTA先天条件,而且支持micropython编程。MicroPython是运行在微控制器硬件之上的完全的Python编译器和运行时系统。除了包括选定的核心Python库,MicroPython还包括了给予编程者访问低层硬件的模块,除了实现一系列核心Python库之外,MicroPython还包括用于访问低级硬件的“机器”等模块。

交流分享

** 很多网友、大佬慷慨地贡献出自己在研究过程中的一些心得,使得象我这样的新手,也按着前人的路子,往前走,走到了想要去地方,找到了自己想要的东西。搜索了很文章,下面先介绍几篇对自己开发研究很有帮助的文章,分享出来,并在此表示深深的感谢。

第一篇:手机远程向ESP32推送代码

** 原文链接:https://www.bilibili.com/read/cv15317865/, 作者:天与地-谦信 出处:bilibili**
这篇幅文章短小、简洁,表达清晰,让我感到按着方法能够实现OTA,对开发升级程序将会是非常方便,完全按照作者的办法和示例的代码,我没有实现OTA,连最简单的读取文件 操作都没有做到。但是, 从这篇文章中,我学到两个知识点:
1)需要一个专门的文件 :urequests.py,来实现联网,本文提到的urequests.py进行调试,会报错,因为是新手,我也不知道如何解决。
2)需要有个地方放自己的程序,如文中提到的url=“https://gitee.com/tianyudi/esp32/raw/master/webpush/main.py” 这样才可以OTA。通过模仿学习,我自己也在网上存放自己的测试程序文件:url=“https://gitee.com/wangcj001/rfid-ota/raw/master/main.py”。
期间,为得到一个纯粹的文件链接,还花了很精力的探索。在以下网站注册一自己的账户,上传自己测试代码,点击红圈1 处,有会出现上传的文件源文件,浏览器地址栏就有纯粹的文件链接。真是会者不难,难者不会。
在这里插入图片描述

第二篇:micropython,用esp32联网,然后调用urequests.get函数出现错误-202如何解决

** 原文链接:https://ask.csdn.net/questions/7681064,**
我也到官网上下载urequests.py文件,下载时会报错,自己也找不原因, 看不出两个文件的差别,在这篇文章里我完全拷贝了他的urequests.py,没有做任何更改,直接传送到ESP32中,没有报错,也是用这个文件把自己放在网络上的测试文件提取下来了。

成果分享

我建立了三个文件,urequests.py,boot.py,main.py,下图圈黄圈处

在这里插入图片描述
在boot.py中增加了两条命令:
exec(open(‘urequests.py’).read(),globals())
exec(open(‘main.py’).read(),globals())

main.py采用以上提到的“第一篇:手机远程向ESP32推送代码”的大部分代码结构,实现wifi连网和提取文件。

main.py

import urequests
from micropython import *
from machine import Pin,Timer
import time
import network

led=Pin(2, Pin.OUT)                 #将led引脚定义为输出


def blink(t):
  led.value(not led.value())

tim = Timer(1)        #创建Timer对象
tim.init(period=1000,mode=Timer.PERIODIC, callback=blink) #不断实现呼吸灯功能,持续10毫秒

try:
  import usocket as socket
except:
  import socket
# 热点名字
#essid = 'CMCC-c4um'
essid = '要连接的wifi名称'              #根据自己的情况修改
# 热点密码
password = '要连接的wifi密码'      #根据自己的情况修改
wlan = network.WLAN(network.STA_IF)
wlan.active(True)

def do_connect(essid, password):
  if not wlan.isconnected():
    print('connecting to network...')
  wlan.connect(essid, password)
  while not wlan.isconnected():
    print('connecting to network failed...')
    time.sleep(2)  
  print('network config:', wlan.ifconfig()) 
    
  #  作者:天与地-谦信 https://www.bilibili.com/read/cv15317865 出处:bilibili
 
do_connect(essid, password) 
time.sleep(2)    

url="https://gitee.com/wangcj001/rfid-ota/raw/master/main.py"                               #测试的文件链接
#url="https://gitee.com/tianyudi/esp32/raw/master/webpush/main.py"                    #测试的文件链接
# 访问ip地址 api
r = urequests.get(url)
#print(r)                                                             #这条语句会报错,待探索
#print(r.content)  # 返回响应的内容                   #这条语句会报错,待探索
print(r.text)  # 以文本方式返回响应的内容,得到文件内容
#print(r.json())  # 返回响应的json编码内容并转为dict类型, #这条语句会报错,待探索
r.close()
wlan.active(False)

在这里插入图片描述
在uPyCraft的调试窗中,看到自己放在网络上文件的内容,上图“圈中的内容”是我的代码的最后一条指令,只要得到代码,下面如何做就简单啦!

初步成功,感谢诸位!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值