当前位置: 首页 > news >正文

基于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-如何处理链接中的空格等特殊字符

问题&#xff1a; get或者post中提交的内容可能有空格、#等特殊字符&#xff0c;不做处理的话可能解析错误。 解决&#xff1a; html中&#xff1a; <a th:href"{/listSgrna(id${item.getGeneId()},geneName${item.getGeneName()},genome${genome},sgrnaNum${sgrnaN…...

通过配置数据库事件(Event)来实现定时导出 MySQL 数据库

首先&#xff0c;确保 MySQL 服务器已启用事件调度器功能。你可以通过以下 SQL 语句查询&#xff1a; SHOW VARIABLES LIKE event_scheduler; 如果 event_scheduler 的值为 ON&#xff0c;则表示事件调度器已启用&#xff1b;如果为 OFF&#xff0c;则可以使用以下语句启用&…...

基于x86架构的OpenHarmony应用生态挑战赛等你来战!

为了更快速推进OpenHarmony在PC领域的进一步落地&#xff0c;加快x86架构下基于OpenHarmony的应用生态的繁荣&#xff0c;为北向应用开发者提供一个更加便捷的开发环境&#xff0c;推动OpenHarmony北向应用开发者的增加&#xff0c;助力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. 引言 贝叶斯分类器是一种基于贝叶斯定理的分类算法&#xff0c;它利用特征之间的关系和类别的先验概率来进行分类。贝叶斯分类器在文本分类、垃圾邮件过滤、医学诊断等领域有着广泛的应用。 贝叶斯分类算法是统计学的一种分类方法&#xff0c;是一类利用概率…...

游戏服务之会话管理

会话的概念与作用 游戏服务器 Session(会话)是指在游戏服务器和客户端之间建立的一个临时的连接。它可以用于存储和管理用户的游戏状态和信息。 当用户登录游戏时,服务器会为该用户创建一个 Session,可用于记录用户的登录状态、角色信息等个人信息。服务器会为每个会话分…...

LeetCode20 有效的括号

题目 给定一个只包括 (&#xff0c;)&#xff0c;{&#xff0c;}&#xff0c;[&#xff0c;] 的字符串 s &#xff0c;判断字符串是否有效。有效字符串需满足&#xff1a;1、左括号必须用相同类型的右括号闭合。 2、左括号必须以正确的顺序闭合。 3、每个右括号都有一个对应的相…...

sql实战_基于某推荐比值问题

将一个月内某PL对应的MBLX出现的最高的频次的占比值最大的值统计出来&#xff0c;并且还要把XHLX&#xff0c;MBLX字段添加上作为最终的推荐字段 Select * from(select *,row_number( ) over (partition by PL order by 占比最大值 desc ) rn from 表) where rn 1&#xff1b…...

协议的概念+本质+作用+最终表现形式,网络问题(技术+应用+解决的协议+存在原因),主机的对称性

目录 协议 概念 示例 -- 摩斯密码 介绍 作用 协议的本质 作用 网络问题 引入 技术问题 应用问题 主机的对称性 问题对应的协议 问题出现的原因 理解协议(代码层面) 举例 -- 快递单 协议的最终表现形式 协议被双方主机认知的基础 协议 概念 协议是在计算机通信…...

iOS中卡顿产生的主要原因及优化思路

卡顿本质上是一个UI体验上的问题&#xff0c;而UI的渲染及显示&#xff0c;主要涉及CPU和GPU两个层面。若 CPUGPU渲染耗时超过16.7ms&#xff0c;就会在屏幕vsync信号到来时无法更新屏幕内容&#xff0c;进而导致卡顿。 iOS中UI渲染主要包含Layout->Draw->Prepare->Co…...

spring boot集成Elasticsearch 7.16.3

环境&#xff1a;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、…...

从WWDC看苹果产品发展的规律

WWDC 是苹果公司一年一度面向全球开发者的盛会&#xff0c;其主题演讲展现了苹果在产品设计、技术路线、用户体验和生态系统构建上的核心理念与演进脉络。我们借助 ChatGPT Deep Research 工具&#xff0c;对过去十年 WWDC 主题演讲内容进行了系统化分析&#xff0c;形成了这份…...

PHP和Node.js哪个更爽?

先说结论&#xff0c;rust完胜。 php&#xff1a;laravel&#xff0c;swoole&#xff0c;webman&#xff0c;最开始在苏宁的时候写了几年php&#xff0c;当时觉得php真的是世界上最好的语言&#xff0c;因为当初活在舒适圈里&#xff0c;不愿意跳出来&#xff0c;就好比当初活在…...

day52 ResNet18 CBAM

在深度学习的旅程中&#xff0c;我们不断探索如何提升模型的性能。今天&#xff0c;我将分享我在 ResNet18 模型中插入 CBAM&#xff08;Convolutional Block Attention Module&#xff09;模块&#xff0c;并采用分阶段微调策略的实践过程。通过这个过程&#xff0c;我不仅提升…...

可靠性+灵活性:电力载波技术在楼宇自控中的核心价值

可靠性灵活性&#xff1a;电力载波技术在楼宇自控中的核心价值 在智能楼宇的自动化控制中&#xff0c;电力载波技术&#xff08;PLC&#xff09;凭借其独特的优势&#xff0c;正成为构建高效、稳定、灵活系统的核心解决方案。它利用现有电力线路传输数据&#xff0c;无需额外布…...

django filter 统计数量 按属性去重

在Django中&#xff0c;如果你想要根据某个属性对查询集进行去重并统计数量&#xff0c;你可以使用values()方法配合annotate()方法来实现。这里有两种常见的方法来完成这个需求&#xff1a; 方法1&#xff1a;使用annotate()和Count 假设你有一个模型Item&#xff0c;并且你想…...

el-switch文字内置

el-switch文字内置 效果 vue <div style"color:#ffffff;font-size:14px;float:left;margin-bottom:5px;margin-right:5px;">自动加载</div> <el-switch v-model"value" active-color"#3E99FB" inactive-color"#DCDFE6"…...

Linux-07 ubuntu 的 chrome 启动不了

文章目录 问题原因解决步骤一、卸载旧版chrome二、重新安装chorme三、启动不了&#xff0c;报错如下四、启动不了&#xff0c;解决如下 总结 问题原因 在应用中可以看到chrome&#xff0c;但是打不开(说明&#xff1a;原来的ubuntu系统出问题了&#xff0c;这个是备用的硬盘&a…...

土地利用/土地覆盖遥感解译与基于CLUE模型未来变化情景预测;从基础到高级,涵盖ArcGIS数据处理、ENVI遥感解译与CLUE模型情景模拟等

&#x1f50d; 土地利用/土地覆盖数据是生态、环境和气象等诸多领域模型的关键输入参数。通过遥感影像解译技术&#xff0c;可以精准获取历史或当前任何一个区域的土地利用/土地覆盖情况。这些数据不仅能够用于评估区域生态环境的变化趋势&#xff0c;还能有效评价重大生态工程…...

GitHub 趋势日报 (2025年06月08日)

&#x1f4ca; 由 TrendForge 系统生成 | &#x1f310; https://trendforge.devlive.org/ &#x1f310; 本日报中的项目描述已自动翻译为中文 &#x1f4c8; 今日获星趋势图 今日获星趋势图 884 cognee 566 dify 414 HumanSystemOptimization 414 omni-tools 321 note-gen …...

LLM基础1_语言模型如何处理文本

基于GitHub项目&#xff1a;https://github.com/datawhalechina/llms-from-scratch-cn 工具介绍 tiktoken&#xff1a;OpenAI开发的专业"分词器" torch&#xff1a;Facebook开发的强力计算引擎&#xff0c;相当于超级计算器 理解词嵌入&#xff1a;给词语画"…...