基于ESP32的MicroPython项目量产烧写指南
背景
前段时间用MicroPython开发了一个项目,硬件是ESP32-C3,目前准备量产,我需要提供固件以供加工厂批量烧录,需要把我有程序的板子里的程序读出来,然后下到别的板子上,以下做这件事情的过程记录。
1.固件读取烧录
在准备ESP32-C3硬件的量产过程中,将MicroPython程序固化到设备中,有以下步骤:
1.读出固件:
对于已经烧录到某个ESP32-C3板子上的固件,要读出并复制到其他板子上,可以使用esptool.py或其他串行通信工具来做这个工作。以下是使用esptool.py读取固件的一个基本示例:
esptool.py --chip esp32c3 --port /dev/ttyUSB0 read_flash 0x10000 0x100000 firmware.bin
--chip esp32c3指定了芯片类型;
--port /dev/ttyUSB0指定了ESP32-C3连接到计算机的串行端口;
read_flash是要执行的操作,0x10000是开始读取的起始地址,0x100000是要读取的长度(这个长度需要您根据实际的固件大小来决定);
firmware.bin是读取的内容保存到的文件;
2.烧录到新的ESP32-C3板子:
在获取了固件镜像文件后,您可以使用esptool.py将这个镜像烧录到新的ESP32-C3板子上。烧录命令类似于:
esptool.py --chip esp32c3 --port /dev/ttyUSB0 write_flash 0x10000 firmware.bin
在这里,write_flash是烧录操作,0x10000是烧录的起始地址,firmware.bin是固件文件。
2.烧录图形界面
接下来,要用PysimpleGUI来做个烧录界面,包含串口设置,文件选择,擦除和烧录的按钮,用于执行以上的烧录代码。
要使用 PySimpleGUI 创建一个图形界面,用于设置串口,选择文件以及执行擦除和烧录操作,可以参考下面的代码示例。这个示例提供了一个基本的界面框架,并使用了 esptool.py 的命令行操作。

要用到 PySimpleGUI 和 pyserial 库。如果没有安装,可以使用 pip 进行安装:
pip install PySimpleGUI pyserial
接下来是代码示例:
import os
try:import PySimpleGUI as sgimport serial
except:os.system('pip install PySimpleGUI pyserial')import PySimpleGUI as sgimport serial
import subprocess
from serial.tools import list_ports # 修正导入# 获取系统中的串口列表
def get_serial_ports():ports = list_ports.comports() # 修正使用list_portsreturn [port.device for port in ports]# 获取系统中的串口列表
def get_serial_ports():ports = list_ports.comports() # 修正使用list_portsreturn [port.device for port in ports]# 执行esptool的命令
def run_esptool_cmd(cmd):try:process = subprocess.run(cmd, shell=True, check=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)return process.stdout.decode()except subprocess.CalledProcessError as e:return e.stderr.decode()# GUI Layout
layout = [[sg.Text('串口:'), sg.Combo(get_serial_ports(), size=(10, 1), key='PORT'), sg.Button('刷新串口')],[sg.Text('固件文件:'), sg.Input("./firmware.bin",size=(25, 1), key='FIRMWARE'), sg.FileBrowse('浏览')],[sg.Button('读取'), sg.Button('擦除'), sg.Button('烧录')],[sg.Output(size=(60, 5))]
]# Create the window
window = sg.Window('ESP32-C3 烧录工具', layout)# Event Loop
while True:event, values = window.read()if event == sg.WIN_CLOSED:breakelif event == '刷新串口':window['PORT'].update(values=get_serial_ports())elif event == '擦除':if values['PORT']:cmd = f'esptool.py --chip esp32c3 --port {values["PORT"]} erase_flash'print("发送擦除指令"+cmd+run_esptool_cmd(cmd)我想用PYSIMPLEGUI来做个烧录界面,包含串口设置,文件选择,擦除和烧录的按钮,用于执行以上的烧录代码,请给出代码示例)else:print("请先选择一个串口")elif event == '读取':if values['PORT'] and values['FIRMWARE']:cmd = f'esptool.py --chip esp32c3 --port {values["PORT"]} read_flash 0x10000 0x100000 {values["FIRMWARE"]}'print("读取返回"+cmd+run_esptool_cmd(cmd))else:print("请先选择一个串口和文件保存路径")elif event == '烧录':if values['PORT'] and values['FIRMWARE'] and os.path.exists(values['FIRMWARE']):firmware_path = values['FIRMWARE']cmd = f'esptool.py --chip esp32c3 --port {values["PORT"]} write_flash 0x10000 "{firmware_path}"'print("发送烧录指令"+cmd+run_esptool_cmd(cmd))else:print("请确保选择了串口和固件文件,并且固件文件路径正确")# Close the window
window.close()
代码说明:
-
list_ports.comports()函数用来获取当前系统上可用的串口。 -
run_esptool_cmd函数用来执行esptool.py的相关命令并捕捉输出。 -
界面布局定义了串口选择、文件选择和操作按钮。
-
事件循环在接收到事件时执行相关操作,比如刷新串口列表,执行擦除和烧录操作。
如果有任何疑问,可以微信联系我,全网同名。
相关文章:
基于ESP32的MicroPython项目量产烧写指南
背景 前段时间用MicroPython开发了一个项目,硬件是ESP32-C3,目前准备量产,我需要提供固件以供加工厂批量烧录,需要把我有程序的板子里的程序读出来,然后下到别的板子上,以下做这件事情的过程记录。 1.固件…...
线性规划的标准型转换
对于任意给定的线性规划的问题,其实其本身可能是不符合线性规划标准型的需求的,但是如果通过一系列的等价变化的话,是可以将该问题转换为标准型的线性规划问题,例如如下的线性规划问题: 添加图片注释,不超过 140 字&am…...
机器学习:探寻智能化时代的科技奇迹
在数字化浪潮席卷全球的今天,机器学习已然成为科技领域的一颗璀璨明星,引领着人工智能不断向前发展。那么,机器学习究竟是什么?它为何能在众多科技中脱颖而出,成为改变世界的力量?本文将带您一探究竟&#…...
《Flask入门教程》学习笔记
《Flask入门教程》官网:https://tutorial.helloflask.com/ 目录 第一章:准备工作第二章:Hello, Flask!第三章:模板第四章:静态文件第五章:数据库第六章:模板优化第七章:表单第八章&a…...
go语言基础 -- map的定义与使用
map的定义与使用 map声明基础语法map的基本使用map的遍历map切片map排序 map声明基础语法 // map的声明 var xxx_map map[key_type]value_typemap的key可以是基本数据类型,channel,接口,结构体,数组,但不能是slice&am…...
讯方·智汇云校第五期名师班火热报名中!
第三期名师班回顾 授课情况 课堂上,同学们热情高涨,积极参与互动。他们紧跟名师的步伐,深入探索云服务的奥秘。张梁老师在为同学们讲述完知识点后,会根据所讲知识给同学们布置对应的实验,由同学们分组讨论练习。 每…...
为什么企业需要使用云电子邮箱?
作为一家机构的负责人,您比大多数人都清楚,您的工作日不会在下午5点就结束。很可能,当您的员工已经打卡下班回家很久之后,您还在以这样或那样的方式继续工作。作为一名企业主,埋头苦干对您来说并不是什么新鲜事&#x…...
[DEBUG] spring boot-如何处理链接中的空格等特殊字符
问题: get或者post中提交的内容可能有空格、#等特殊字符,不做处理的话可能解析错误。 解决: html中: <a th:href"{/listSgrna(id${item.getGeneId()},geneName${item.getGeneName()},genome${genome},sgrnaNum${sgrnaN…...
通过配置数据库事件(Event)来实现定时导出 MySQL 数据库
首先,确保 MySQL 服务器已启用事件调度器功能。你可以通过以下 SQL 语句查询: SHOW VARIABLES LIKE event_scheduler; 如果 event_scheduler 的值为 ON,则表示事件调度器已启用;如果为 OFF,则可以使用以下语句启用&…...
基于x86架构的OpenHarmony应用生态挑战赛等你来战!
为了更快速推进OpenHarmony在PC领域的进一步落地,加快x86架构下基于OpenHarmony的应用生态的繁荣,为北向应用开发者提供一个更加便捷的开发环境,推动OpenHarmony北向应用开发者的增加,助力OpenHarmony在PC领域实现新的突破&#x…...
LeetCode每日一题2673. Make Costs of Paths Equal in a Binary Tree
文章目录 一、题目二、题解 一、题目 You are given an integer n representing the number of nodes in a perfect binary tree consisting of nodes numbered from 1 to n. The root of the tree is node 1 and each node i in the tree has two children where the left ch…...
贝叶斯分类器
贝叶斯分类器 1. 引言 贝叶斯分类器是一种基于贝叶斯定理的分类算法,它利用特征之间的关系和类别的先验概率来进行分类。贝叶斯分类器在文本分类、垃圾邮件过滤、医学诊断等领域有着广泛的应用。 贝叶斯分类算法是统计学的一种分类方法,是一类利用概率…...
游戏服务之会话管理
会话的概念与作用 游戏服务器 Session(会话)是指在游戏服务器和客户端之间建立的一个临时的连接。它可以用于存储和管理用户的游戏状态和信息。 当用户登录游戏时,服务器会为该用户创建一个 Session,可用于记录用户的登录状态、角色信息等个人信息。服务器会为每个会话分…...
LeetCode20 有效的括号
题目 给定一个只包括 (,),{,},[,] 的字符串 s ,判断字符串是否有效。有效字符串需满足:1、左括号必须用相同类型的右括号闭合。 2、左括号必须以正确的顺序闭合。 3、每个右括号都有一个对应的相…...
sql实战_基于某推荐比值问题
将一个月内某PL对应的MBLX出现的最高的频次的占比值最大的值统计出来,并且还要把XHLX,MBLX字段添加上作为最终的推荐字段 Select * from(select *,row_number( ) over (partition by PL order by 占比最大值 desc ) rn from 表) where rn 1;…...
协议的概念+本质+作用+最终表现形式,网络问题(技术+应用+解决的协议+存在原因),主机的对称性
目录 协议 概念 示例 -- 摩斯密码 介绍 作用 协议的本质 作用 网络问题 引入 技术问题 应用问题 主机的对称性 问题对应的协议 问题出现的原因 理解协议(代码层面) 举例 -- 快递单 协议的最终表现形式 协议被双方主机认知的基础 协议 概念 协议是在计算机通信…...
iOS中卡顿产生的主要原因及优化思路
卡顿本质上是一个UI体验上的问题,而UI的渲染及显示,主要涉及CPU和GPU两个层面。若 CPUGPU渲染耗时超过16.7ms,就会在屏幕vsync信号到来时无法更新屏幕内容,进而导致卡顿。 iOS中UI渲染主要包含Layout->Draw->Prepare->Co…...
spring boot集成Elasticsearch 7.16.3
环境:Elasticsearch 版本 7.16.3 Elasticsearch for windows下载地址 windows 若依 spring boot版本 2.6.0 pom文件添加 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-elasticsearch<…...
HTML5+CSS3小实例:环绕小球弹性loading动画
实例:环绕小球弹性loading动画 技术栈:HTML+CSS 效果: 源码: 【HTML】 <!DOCTYPE html> <html lang="zh-CN"><head><meta charset="UTF-8" /><meta http-equiv="X-UA-Compatible" content="IE=edge&quo…...
SpringBoot 自定义注解实现操作日志记录
文章目录 前言正文一、项目结构介绍二、核心类2.1 核心注解2.1.1 CLog 日志注解2.1.2 ProcessorBean 处理器bean 2.2 切面类2.3 自定义线程池2.4 工具类2.4.1 管理者工具类 2.5 测试2.5.1 订单创建处理器2.5.2 订单管理者2.5.3 订单控制器2.5.4 测试报文2.5.5 测试结果 附录1、…...
儿童护眼大路灯哪个牌子好用?全网高赞的护眼大路灯十大品牌排行
护眼大路灯通过上下发光能够呈现出舒适且接近太阳光的光线,这样也伴随着护眼落地灯迅速得到众多人的认可火爆市场,护眼灯品牌越来越多,质量参差不齐,存在着一些可能会造成刺眼、眩光以及频闪的劣质护眼灯,所以我们不能…...
从零解析AlexNet:逐层维度推导与PyTorch实战复现
1. AlexNet的前世今生:为什么它改变了计算机视觉 第一次看到AlexNet的论文时,我正坐在实验室的旧电脑前啃着三明治。那是2012年的一个普通下午,谁也没想到这篇论文会成为深度学习革命的导火索。当时主流的图像识别方法还在用SIFT特征SVM分类器…...
5步魔法:将Python代码瞬间转化为Android应用
5步魔法:将Python代码瞬间转化为Android应用 【免费下载链接】python-for-android Turn your Python application into an Android APK 项目地址: https://gitcode.com/gh_mirrors/py/python-for-android 为什么Python开发者需要Android开发魔法?…...
题解:洛谷 P1073 [NOIP 2009 提高组] 最优贸易
本文分享的必刷题目是从蓝桥云课、洛谷、AcWing等知名刷题平台精心挑选而来,并结合各平台提供的算法标签和难度等级进行了系统分类。题目涵盖了从基础到进阶的多种算法和数据结构,旨在为不同阶段的编程学习者提供一条清晰、平稳的学习提升路径。 欢迎大家订阅我的专栏:算法…...
从零到一:用Metabase构建你的第一个数据看板
1. 为什么选择Metabase作为你的第一个数据看板工具 第一次接触数据可视化工具时,我被市面上各种复杂的BI工具搞得晕头转向。直到遇到Metabase,才发现原来搭建数据看板可以这么简单。作为一个完全开源的工具,Metabase最吸引我的是它"开箱…...
3步搞定Nginx反向代理管理:nginx-proxy-manager-zh中文版终极指南
3步搞定Nginx反向代理管理:nginx-proxy-manager-zh中文版终极指南 【免费下载链接】nginx-proxy-manager-zh 基于nginx-proxy-manager翻译的中文版本 项目地址: https://gitcode.com/gh_mirrors/ng/nginx-proxy-manager-zh nginx-proxy-manager-zh是基于Ngin…...
如何用单一应用终结RGB控制器的混乱时代?OpenRGB深度技术解析
如何用单一应用终结RGB控制器的混乱时代?OpenRGB深度技术解析 【免费下载链接】OpenRGB Open source RGB lighting control that doesnt depend on manufacturer software. Supports Windows, Linux, MacOS. Mirror of https://gitlab.com/CalcProgrammer1/OpenRGB.…...
别再只测理论值了!手把手教你用ZCU104实测AXI DMA真实带宽(附Vivado工程与源码)
ZCU104实战:AXI DMA真实带宽测试与性能优化全解析 在FPGA开发中,AXI DMA的性能直接影响着视频流处理、高速数据采集等关键应用的实时性。很多开发者习惯依赖理论峰值带宽作为设计依据,却在实际部署时遭遇性能瓶颈。本文将带您深入ZCU104开发板…...
如何用AMLL打造媲美Apple Music的动态歌词体验:3步实现沉浸式音乐播放器
如何用AMLL打造媲美Apple Music的动态歌词体验:3步实现沉浸式音乐播放器 【免费下载链接】applemusic-like-lyrics An Apple Music style lyric player component, with React & Vue support. 一个类 Apple Music 歌词显示组件,同时提供 React 和 Vu…...
H5playerV2.1.2实战:5分钟搞定跨域播放器集成(含常见报错解决方案)
H5playerV2.1.2实战:5分钟搞定跨域播放器集成(含常见报错解决方案) 在视频监控、在线教育、直播平台等Web应用中,H5player凭借其无需插件、跨平台兼容的特性成为主流播放方案。但实际集成时,开发者常被跨域配置、HTTPS…...
