缘起
在2023年的时候,我在使用vscode制作一个micropython项目。当时我使用了ampy作为与micropython设备的交互工具。
随着这个项目越做越大,目录结构、代码和其它文件体积也随之增大,很快ampy的不足之处便显现出来了——
- 不支持目录级别的操作,如创建、删除文件夹,在这种情况很多时候需要在micropython REPL手敲代码
- 速度只有可怜的≈1KB/s,传输一个大小≈68.5KB的大文件需要等上1分钟左右
灵感
与此同时,看到这段代码:
from machine import UART
uart=UART(1,baudrate=115200,tx=1,rx=3)
# 作用:使设备占用REPL的串口,并返回UART对象uart
于是心里有了灵感,并编写了一个简易的实现:
电脑首先以 rtscts=False,dsrdtr=False 模式(任意一个为True都会导致设备无法通过串口控制重启)连接micropython设备的串口
然后执行一次 ser.dtr=False;time.sleep(0.01);self.ser.dtr=True 使设备重启
之后以0.05秒的间隔循环发送 Ctrl+C(的信号) 直到设备进入REPL
设备进入REPL后,发送 exec("...(神秘代码)", globals()) 到设备的REPL,然后发送换行符(注意是\r\n而不是\n)
此时神秘代码会占用REPL串口,然后按照我预先编写好的的命令逻辑接收命令码然后执行对应的操作
其中关于文件内容传输的命令逻辑大概是这样的:(仅供参考,不代表实际命令逻辑)
注:发送方和接收方分别代表电脑和设备的其中一个,但发送方和接受方不代表同一个
电脑向设备发送“文件读”或“文件写”命令和块大小(取决于具体需求)
设备接收到之后,接收块大小,接收方发送文件大小
然后发送方按照块大小分块发送数据,接收方按照块大小逐块接收数据(剩余数据量 < 块大小时例外)
本以为文件传输速度与ampy差不多,结果,原本用ampy需要1分钟左右才能传输完成的大文件,使用自己写的东西居然只花了十几秒!
我甚至被自己写的东西惊呆了!
作为一个初中生,这对我而言已是史无前例的重大成就,甚至有人调侃道:
“micropython官方:明天来上班!”
于是花了数月的时间,将它继续完善,成为了一个带有GUI的较为完整的工具(甚至连按钮等控件都是基于文本组件高度定制化的):
(名称:掌控板文件操作工具)

当时不知道什么是git,什么是markdown,什么是项目目录结构规范,所以就没开源。后来想过开源,但是整个东西的目录结构乱七八糟,不值得开源。
这个工具在群里影响力很大(毕竟显著提高了传输速度和操作效率)
但是它还有一些显著的问题尚未解决:
- 界面用tkinter写的,所以在性能不好的电脑上贼卡(想过使用html重写但是放弃了)
- 命令逻辑上缺少异常处理机制,一旦设备抛出几个错误(如OSError、MemoryError)就得重连
- and more ...
但勉强能用,所以我以及群u都在用着这个工具。
MpyFileOpt正式立项
2024年底突发奇想,如果它能被开源,就意味着micropython文件系统操作工具界达到了史无前例的传输速度。但如果想开源就必须重构。
于是以MpyFileOpt为名正式重构原本的工具。
其中重构的点包括:
- 作为CLI(命令行界面)或库使用而非作为GUI工具
- 重写并优化命令逻辑,大幅优化异常处理
-
增强兼容性,从掌控板扩展到全体micropython设备
-
and more ...
MpyFileOpt正式入驻PyPI并开源
从2024.12一直搞到2025.2,期间编写核心交互部分、打磨CLI(命令行交互界面)、折腾setup.py花了不少心血,最终在2025.2.7的时候(也就是昨天),MpyFileOpt-Python正式入驻PyPI并开源
实测得,文件上传平均速度高达8.70KB/s,下载平均速度高达11.00KB/s,远高于ampy和大部分同类工具。(注:1K=1024, 测试用设备:掌控板)
长达几个月的努力,正是为这一天的正式开源和入驻PyPI做准备。为表庆祝,特此发表这篇文章。
若需体验这个工具,请参照MpyFileOpt-Python仓库的说明使用:
1万+

被折叠的 条评论
为什么被折叠?



