尧图精选

PyCharm+miniconda搭建MicroPython开发环境及固件烧录

🕒 发布时间:2026/9/17 3:41:34 📁 来源:尧图网络
先说一个很多 MicroPython 玩家都会遇到的尴尬用 Thonny 写小程序很爽设备一插、点一下就运行但项目一旦上了几百行函数跳转、批量重构、Git 协同这些需求全来了Thonny 就有点顶不住。于是我把开发环境换成了 PyCharm配合 miniconda 做工具链隔离再把固件烧录和脚本上传的整条链路串起来前后折腾了几个晚上最终整理出一套稳定的流程。这篇文章把这套流程完整写出来从 miniconda 装环境、PyCharm 配置 MicroPython 插件、esptool 烧录固件再到用 mpremote 把代码跑上开发板。十分钟是保守估计真正动手一次之后以后每次重建环境都能在这个时间内完成。1. 为什么是 PyCharm MicroPython miniconda 这个组合1.1 从 Thonny 切到 PyCharm 的真实动机MicroPython 刚入门的时候Thonny 确实是神器插上开发板右下角选好解释器打开 main.py 点运行代码直接跑在板子上REPL 也在同一个窗口里。很多新手教程都用它因为它把“开发工具”和“硬件设备”之间的距离压缩到了几乎为零。但等你开始认真做项目问题就来了。MicroPython 本质上还是 Python项目里的文件会越来越多——主逻辑、传感器驱动、页面显示、网络连接、配置项往往要拆成十几个 .py 文件。这时候你需要的不只是“能运行”而是代码跳转、全局搜索、重构、继承关系可视化、Git 集成这些工程化能力。Thonny 在这些方面基本是空白。VS Code 也可以做但它更像是“工具箱”需要自己拼装Python 插件、串口监控插件、MicroPython 插件、远程开发插件每一块都要单独配置。对刚接触硬件开发的人来说这套拼装的试错成本不低。PyCharm 的好处是它本身就是一个完整的 IDEMicroPython 插件是官方出的装完之后语法检查、代码补全、烧录入口、REPL 面板全部集成在一个界面里。环境搭好之后日常开发体验确实比 Thonny 和 VS Code 都舒服。1.2 miniconda 在这里扮演什么角色很多人不理解写 MicroPython 为什么还要装 miniconda这里需要先厘清一个概念你写的代码是给开发板上的 MicroPython 解释器跑的但搭建这个开发环境的过程里PC 上还需要一堆工具软件来帮你操作开发板比如烧录固件的 esptool、往板子上传文件的 mpremote、读取串口的 pyserial。这些工具是跑在 PC 的 Python 环境里的。如果你直接用系统自带的 Python 去装这些工具时间一长会很难受系统里可能同时存在好几个项目的依赖今天装了这个包明天升级了那个包某个工具突然就不能用了。miniconda 可以把整套工具链装在一个独立的虚拟环境里互不干扰。这就好比厨房里每个灶台有自己的调料架做饭的时候不会拿错调料。还有一个现实原因PyCharm 本身需要一个解释器来完成代码分析和语法提示。对于 MicroPython 项目我们通常不会直接指定开发板上的解释器而是给 IDE 指定一个 PC 上的 Python 环境。用 miniconda 单独建一个环境既能让 IDE 正常分析代码又能在这个环境里安装 esptool、mpremote 这些操作工具一举两得。2. 先用 conda 建一个干净的工具环境esptool 与 mpremote 都住这里2.1 安装 miniconda 时的两个小决定miniconda 的安装本身不复杂官网上有对应平台的安装包。我用的 Windows装的时候有两个选择值得认真考虑。第一个是安装路径。安装器默认会装到 C 盘用户目录下如果你的 C 盘空间紧张建议在安装界面里手动改到 D 盘或者其他数据盘。这一步不然后面改起来很麻烦因为 conda 环境的路径会被写进各种配置里搬动容易出一堆连锁问题。第二个是安装完成后是否初始化 shell。Windows 安装器会问要不要把 conda 加入 PATH我建议选上。不然后面你在 PowerShell 或 CMD 里敲 conda 命令系统会一直提示“conda 不是内部或外部命令”又得去改环境变量平白多一步。Linux 和 macOS 下安装更简单一条 bash 安装脚本搞定默认会装到用户目录下的 miniconda3 文件夹。装完记得重开终端让 shell 重新加载配置。2.2 创建隔离环境并安装 MicroPython 工具链miniconda 装好之后打开终端先创建一个专门的虚拟环境。我习惯给它起个跟项目相关的名字比如 mpyconda create -n mpy python3.11 -y conda activate mpy这里 python 版本我选了 3.11主要原因是兼容性。esptool、mpremote、pyserial 这几个核心包对 3.11 支持得非常稳定有些底层依赖的二进制轮子在比较新的 Python 版本上不一定有现成的装的时候可能会现场编译反而浪费时间。对于这种“工具链型”环境求稳比求新重要得多。环境激活之后安装核心工具pip install esptool mpremote pyserialesptool 负责烧录 ESP 系列芯片的固件和读取芯片信息mpremote 负责连接 MicroPython 设备、运行脚本、拷贝文件pyserial 是底层串口通信库esptool 和 mpremote 都会依赖它。早期很多人还会装 adafruit-ampy它也具备上传文件和运行脚本的能力但个人体验下来mpremote 是 MicroPython 官方团队维护的工具命令设计更清晰功能也更新现在已经完全能替代 ampy。所以这里我只装了 mpremote没必要再装一个重复功能的工具。2.3 验证环境命令行里先跑通 esptool装完之后先别急着打开 PyCharm在终端里先验证一下工具本身能不能正常工作esptool version如果能看到类似esptool.py v4.x的版本号输出说明 esptool 已经在这个 conda 环境里待命了。再验证 mpremotempremote --help这一步很重要它确认了“工具安装成功”这个前提。很多人后面在 PyCharm 里点烧录按钮没反应回过头来查其实就是 esptool 根本没装到 PyCharm 使用的那套 Python 环境里。通过命令行先验证一遍等于把变量拆出来逐个排除。我把这套流程做成了一个速查表方便以后重建环境的时候不用靠记忆步骤命令作用创建环境conda create -n mpy python3.11 -y建独立 Python 3.11 环境激活环境conda activate mpy进入环境安装工具pip install esptool mpremote pyserial装核心工具链验证esptool version确认工具可用3. PyCharm 项目配置让 IDE 真正认识你的开发板3.1 安装 MicroPython 插件社区版同样可用PyCharm 分社区版和专业版MicroPython 插件对两个版本都开放这一点不用纠结。打开 PyCharm进入File Settings Plugins在 Marketplace 里搜“MicroPython”认准 JetBrains 官方出品的那个插件点击 Install 安装。装完之后重启 IDE这一步偶尔会被忽略。插件系统在安装新组件后很多配置项要等 IDE 重启之后才会加载出来。装完发现菜单里找不到 MicroPython 设置先重启再说。3.2 解释器指向 conda 环境PyCharm 新建项目之后第一件事是把项目解释器指到刚才建好的 mpy 环境。位置在File Settings Project Python Interpreter点击右上角的齿轮图标选择Add Interpreter Add Local Interpreter然后在左侧选择Conda Environment选Existing environment下拉列表里应该能看到mpy选中即可。这一步决定了 PyCharm 在调用操作工具esptool、mpremote时用的是哪个 Python 环境。如果这里选错了比如选了系统自带的 Python那么即使你刚才在终端里已经把工具装好了PyCharm 依然会报找不到模块。这是整个配置过程中最容易踩的坑没有之一。3.3 设备与串口的关联配置接下来进入 MicroPython 插件的核心设置页面Settings Languages Frameworks MicroPython。先勾选Enable MicroPython support然后在Device type下拉框里选择对应你的开发板类型。我手头是 ESP32就选 ESP32如果你用的是 ESP8266、RP2040 或者 STM32也都有对应选项。下面还有一个Device path或者类似的串口选择项需要指定开发板连接的串口。Windows 上是 COM 口比如 COM3、COM4Linux 上一般是/dev/ttyUSB0或者/dev/ttyACM0macOS 上是/dev/cu.usbserial-xxxx这样的路径。怎么确认当前板子占用的是哪个端口Windows 可以在设备管理器里看“端口 (COM 和 LPT)”分类插拔开发板时观察新增的 COM 口编号。Linux 可以直接在终端敲ls /dev/ttyUSB* /dev/ttyACM*插板子前后各执行一次就能看到新增的设备节点。配置完这两项PyCharm 就算真正“认识”你的开发板了。此时它已经知道目标设备类型和通信端口语法检查会按照对应设备的 MicroPython 固件版本来分析代码一些设备专属模块比如machine、esp、bluetooth也不会再被标红。这比写代码时满屏红色波浪线舒服太多了。4. 烧录固件esptool 在 PyCharm 里的两种落地方式4.1 命令行烧录推荐新手先手敲一遍固件烧录是整个流程里最让人紧张的一步但实际操作起来没那么玄乎。先去 MicroPython 官网的下载页找到自己板子对应的固件下载 .bin 文件。ESP32 系列通常选 GENERIC 版本如果板子带 SPIRAM 就选带 SPIRAM 的变体ESP8266 则选对应 flash 大小的版本。拿到固件之后先在终端里用命令行的方式烧一次把整个流程跑通。以 Windows 的 COM3 为例esptool --port COM3 erase_flash这一步会把芯片原有的 flash 内容清空。新买的板子可能出厂自带 AT 固件或者其他程序先擦除能避免后面写入时出现偏移错误。然后写入 MicroPython 固件esptool --port COM3 --baud 460800 write_flash --flash_mode dio --flash_size detect 0x1000 firmware.bin这里的0x1000是 ESP32 的 bootloader 偏移地址不是随便写的是 ESP32 芯片的硬件规定。ESP8266 则通常用0x0如果你用的是 ESP8266地址要改成 0 开头。--flash_size detect让 esptool 自动识别 flash 大小--baud 460800是烧录波特率比默认的 115200 快不少省时间。看到输出里出现Hash of data verified就说明写入成功没有校验错误。4.2 把烧录做成 PyCharm 外部工具命令行烧录虽然可靠但每次都要打开终端敲一长串命令频率高了还是觉得繁琐。更顺手的方式是把擦除和烧录分别配成 PyCharm 的外部工具以后点击菜单就能执行。打开File Settings Tools External Tools点击加号新增。一个工具配置示例如下Name:ESP32 FlashProgram: esptool 的完整路径Windows 下一般是C:\Users\你的用户名\miniconda3\envs\mpy\Scripts\esptool.exeLinux/macOS 则是一长串到envs/mpy/bin/esptoolArguments:--port COM3 --baud 460800 write_flash --flash_mode dio --flash_size detect 0x1000 D:\path\to\firmware.binWorking directory: 固件所在目录配好之后以后烧录只需要点击Tools External Tools ESP32 Flash输出会直接显示在 PyCharm 的 Run 窗口里无需手动开终端。有一点提醒外部工具里的 esptool 路径必须是 conda 环境里的绝对路径因为外部工具不会自动激活 conda 环境如果你在 Program 里只写esptoolPyCharm 可能找到的是系统里另一个版本的 esptool甚至会直接提示找不到程序。这个细节很容易被忽略但排查起来也快。4.3 固件烧完怎么确认成功烧录成功之后别急着写代码先确认设备真的跑起了 MicroPython。最简单的验证方式是用 mpremote 连接串口mpremote connect COM3连接成功后会进入 MicroPython 的 REPL 提示符此时敲一句import sys sys.implementation如果输出类似(namemicropython, ...)的信息说明固件已经正确运行。顺便敲一句import machine machine.freq()能看到 CPU 频率说明机器相关模块也正常。这一步既验证了固件又验证了串口通信链路为后面的代码上传打好了基础。5. 代码上板从编写到运行的完整闭环5.1 mpremote 才是 MicroPython 侧的瑞士军刀固件烧好之后日常操作就集中在怎么把 PC 上的 .py 文件传到板子上、怎么在板子上运行脚本。这里主力工具是 mpremote。最常用的是 run 命令直接把本地文件交给开发板执行不一定要先存到板子里mpremote connect COM3 run main.py这条命令在调试阶段特别方便代码改完一行命令就在设备上跑一遍输出直接回到终端。不用先拷贝再复位省掉很多步骤。如果确实需要把文件常驻在板子上用 cp 命令mpremote connect COM3 cp main.py :main.py注意冒号后面的路径是设备上的文件路径。拷贝完再运行就需要先断开或者直接配合复位操作。mpremote 还支持像操作本地文件系统一样浏览板子上的文件用mpremote ls就能列出设备根目录。5.2 创建运行配置直接启动脚本用 mpremote 在终端里敲命令已经很快了但我习惯更进一步把它做成 PyCharm 的外部工具实现“点击按钮直接运行板子上的脚本”。配置方式跟烧录外部工具类似新增一个外部工具Name:Run on DeviceProgram:mpremote的完整路径同样是 conda 环境 Scripts/bin 目录下的那个Arguments:connect COM3 run $FilePath$Working directory:$ProjectFileDir$$FilePath$是 PyCharm 的宏会自动替换成当前编辑的文件路径。这样我在 IDE 里打开任何一个 .py 文件点击外部工具就能一键把文件推到开发板运行。这个方案比 MicroPython 插件自带的运行按钮可控性更好因为你可以完全控制传给 mpremote 的参数。比如某些场景需要先切换波特率、需要指定不同的串口都可以在这个外部工具里灵活配置。5.3 REPL 联调边写边验证硬件逻辑MicroPython 开发里最常用的联调手段是直接操作 REPL。PyCharm 装了 MicroPython 插件之后也集成了 REPL 面板可以在 IDE 底部直接打开一个连接到开发板的交互式终端。进入 REPL 后就能像在 Python 交互模式里一样逐行调试硬件。比如想确认一个引脚能否正常读到传感器数据直接在 REPL 里写from machine import Pin p Pin(34, Pin.IN) p.value()不用写完整的 main.py不用上传、运行、看串口输出一行一行试确认逻辑正确了再整合到正式代码里。这种调试节奏对硬件开发非常高效也是我为数不多觉得“集成环境确实比命令行香”的时刻。REPL 面板和串口工具是互斥的REPL 面板打开时其他程序如果再尝试打开同一个串口就会报错。所以联调完记得关掉 REPL 面板再执行上传或者外部工具的烧录操作。6. 搭完一星期后我重新梳理的避坑清单6.1 串口占用与驱动问题整个环境搭建过程中遇到最频繁的问题就是串口被占用。Windows 下常见的提示是could not open port COM3: PermissionError。原因通常是另一个程序正在使用这个串口——可能是你之前开的串口监视器也可能是 Thonny 还挂着没退出甚至可能是某个后台进程把板子的串口当成了调试器接口。排查办法是先把所有可能占用串口的软件关掉再试。Windows 下可以用设备管理器确认设备还在正常枚举必要时直接拔插 USB 线让设备重新上电。驱动问题的表现则是设备管理器里出现黄色感叹号端口号根本不出现。ESP32 开发板常见的 USB 转串口芯片是 CP2102 或 CH340Windows 10/11 多数情况下会自动安装驱动但某些精简版系统或者芯片版本比较老时可能识别不了。这种情况只能去芯片厂商官网找对应驱动手动装上。6.2 conda 环境与系统 Python 的混淆这个问题出现频率极高而且很隐蔽。你明明已经用pip install esptool装好了工具但在 PyCharm 的外部工具或插件里执行烧录时提示ModuleNotFoundError: No module named serial或者直接说 esptool 未安装。原因只有一个PyCharm 用的是系统 Python 环境而不是刚才配置的 conda 环境。比如你在终端里执行过conda activate mpy然后在终端里装 esptool这时候工具装在了 mpy 环境。可 PyCharm 项目解释器如果没有指向 mpy它自然找不到。解决思路很简单但很关键在 PyCharm 的终端面板里先手动执行conda activate mpy再运行命令测试确认命令能跑通以后再检查设置里的解释器是否指向 mpy。外部工具配置里的 Program 路径也可以直接指到 conda 环境 Scripts 目录下的具体 exe这样环境就不可能混淆。6.3 插件偶发不识别设备的对策MicroPython 插件偶尔会出现设备列表里看不到你的板子的情况。我的经验是先检查三处串口是否真的被系统识别还是驱动问题。串口是否被其他程序占用。当前项目里的 MicroPython 设置是否被重置为默认值。有些 PyCharm 自动更新之后会把插件的行为重置或者配置被 UI 改动带偏这时重新进Languages Frameworks MicroPython看一眼设备类型和串口路径重新选一次再 Apply基本就能恢复。如果仍然不行手动重选端口然后重启 IDE。这个办法能在大多数情况下解决问题虽然不优雅但确实有效。6.4 文件上板不完整或乱码的处理用 mpremote cp 上传比较大的 .py 文件时偶尔会碰到设备端文件不完整的情况表现出来是上板后 import 报语法错误或者文件内容缺行。这可能跟串口传输中断、flash 剩余空间不足都有关系。先检查设备上的可用空间在 REPL 里执行import os fs_stat os.statvfs(/) print(fs_stat)重点关注可用空间大小如果剩余空间很小则需要先删除设备上不需要的旧文件腾出地方。删除命令同样在 REPL 里执行os.remove(旧文件名)即可。至于 REPL 输出乱码九成是波特率不匹配。MicroPython 的 REPL 默认波特率就是 115200但有些串口终端默认是 9600 或者其他值切换到 115200 就能恢复正常。还有一类乱码是 USB 转串口芯片质量问题引起的在板子供电不稳或者线材过长时更容易出现换成短线短接、单独供电通常能缓解。整套环境搭到现在我个人的体会是最核心的流程其实不复杂——conda 建环境、装工具、PyCharm 指认解释器、配置设备、烧录固件、运行脚本逻辑上一条线串下来。真正花时间的反而是那些环境混淆和串口占用问题。所以最后再分享一个小技巧每次新配完环境我都会把mpremote connect COM3 run main.py这种最基础的命令先跑通确认板子通信链路没问题再去折腾 IDE 里那些更高级的集成功能。底层的链路是通的上层的所有封装都只是锦上添花。
上一篇/下一篇内容由系统自动关联 返回资讯列表 →