ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

PyCharm+MicroPython环境搭建:从零到烧录的完整避坑指南

PyCharm+MicroPython环境搭建:从零到烧录的完整避坑指南 PyCharm MicroPython 环境搭建十分钟上手但坑我替你踩完了做嵌入式开发的朋友应该都有这种体会写 MicroPython 代码最烦的不是语法而是没有一个顺手的 IDE。Thonny 轻量但补全弱VS Code 插件多但配置折腾而很多人电脑里其实早就装了 PyCharm却不知道它也能干这活儿。这篇文章就专门讲怎么用 PyCharm 跑 MicroPython顺便把 miniconda 环境隔离和固件烧录配置一起搞定。先说明白这套组合能干什么用 PyCharm 写 MicroPython 代码语法高亮、代码补全、自动格式检查一个不少用 miniconda 给 MicroPython 相关工具链esptool、mpremote 这些单独建一个虚拟环境不污染你电脑上原有的 Python最后通过 PyCharm 的 MicroPython 插件直接烧录固件到开发板运行和调试都在一个界面里完成。适合谁看适合刚入手 ESP32、树莓派 Pico 这类单片机又不想同时装好几个软件的人。也适合已经在用 PyCharm 写 Python、想顺手试试嵌入式开发的玩家。我下面会按实际操作的顺序来写每一步都有出处遇到坑的地方我会单独标出来。先说个实话标题里的“十分钟”指的是“配置动作本身十分钟”不包括下载安装那几个大文件的时间。我第一次搞这套连下载带踩坑花了一个下午。但你要是按这篇文章走十分钟真的够因为大部分坑都写在后面了。1. 为什么是 PyCharm MicroPython miniconda 这套组合1.1 三个工具分别解决什么问题先理清楚三者的分工不然你会困惑“我一个单片机干嘛要装 Python 环境管理器”。PyCharm 是你的代码编辑器和项目入口。它负责代码高亮、补全、git 管理、终端集成这些基础功能。但 PyCharm 本身不认识 MicroPython需要装一个官方插件才能识别.py文件是跑在开发板上的这是后面第三节要讲的重点。miniconda 的作用是给你电脑上的 Python 环境做隔离。很多人会问写 MicroPython 不是直接用板子上的解释器吗跟电脑上的 Python 有什么关系因为烧录工具 esptool、文件传输工具 mpremote、固件下载脚本等等都是跑在电脑上的 Python 程序。不同工具依赖的 Python 包版本可能互相冲突用 conda 单独建一个环境就像给每个项目开了一个独立的小房间东西再乱也不影响其他房间。MicroPython 固件是烧到开发板里的运行时。它是一套精简版的 Python 解释器跑在单片机上让你能用 Python 语法操作 GPIO、I2C、WiFi 这些硬件资源。三个东西是三层关系PyCharm 管代码编辑miniconda 管工具链环境固件管板子运行。1.2 相比 VS Code、Thonny 和 Mu优势在哪我知道肯定有人要说VS Code 也有 MicroPython 插件Thonny 更是开箱即用干嘛非得折腾 PyCharm三个理由。第一如果你本来就在用 PyCharm 写 Python那你的快捷键习惯、代码风格配置、颜色主题都是现成的没必要为了单片机再换一个编辑器。第二PyCharm 的远程解释器和部署功能成熟后面你想把开发板接到服务器上做交叉编译或者同时在多个板子上调试PyCharm 的处理方式更顺手。第三PyCharm 的调试器对 MicroPython 的支持虽然不像桌面 Python 那么完善但至少能看输出、能跑终端命令比 Thonny 强不少。代价就是配置步骤多一点。Thonny 确实装完就能用但它的代码补全和项目管理能力都偏弱写超过两百行的项目就会觉得费力。PyCharm 的社区版免费功能足够我们用这也是我推荐它的一个重要原因。如果你完全没用过 PyCharm也不用有压力。我接下来会把每一步都拆开讲照着操作即可。2. 准备工作从零开始装好三件套2.1 装好 miniconda 并创建隔离环境先装 miniconda不要装 anaconda。Anaconda 自带几百个包体积四五个G大部分你用不上。miniconda 只有几十M装完只有一个基础的 Python 和 conda 命令需要什么包再自己装干净又可控。去 miniconda 官网下载对应系统的安装包。Windows 用户下载.exeLinux 用户下载.shmacOS 用户下载.pkg或.sh按自己电脑架构选 x86_64 或 arm64。Windows 安装的时候有一个勾选项“Add Miniconda3 to my PATH environment variable”。我建议第一次装不要勾。勾了虽然命令行里直接用conda但 conda 的 Python 会抢占系统 PATH后面如果你电脑上有别的 Python 环境容易出乱子。不勾的话从“开始菜单”打开 “Anaconda Prompt (miniconda3)” 这个终端来用 conda两者互不干扰。装完后打开终端验证一下conda --version接着创建一个 MicroPython 工具链专用的虚拟环境。Python 版本选 3.9 或 3.10 都行esptool 和 mpremote 对版本不挑但别选最新的 3.13有些包还没跟上。conda create -n micropython python3.10 -y conda activate micropython激活后终端前面会显示(micropython)说明你已经在这个隔离环境里了。这时候装 esptool 和 mpremotepip install esptool mpremoteesptool 是乐鑫官方出的烧录工具针对 ESP32/ESP8266 系列芯片。如果你用的是树莓派 Pico不需要 esptoolPico 烧录是按住 BOOTSEL 键拖拽文件那种方式后面我会提到。mpremote 是 MicroPython 官方出的命令行工具用来跟板子交互、传文件后面验证环境好不好用全靠它。装完之后可以看一眼都装了哪些东西pip list | grep -i -E esptool|mpremote2.2 安装 PyCharm 并打通 conda 环境PyCharm 社区版是免费的功能足够不用去找什么“激活码”。直接去 JetBrains 官网下载社区版安装过程一路下一步就行。装完打开 PyCharm新建一个项目。注意项目路径不要有中文和空格后面烧录工具处理路径时中文路径偶尔会出各种诡异问题我吃过亏。新建项目时会有解释器配置界面。这里要选 “Previously configured interpreter”然后点 “Add Interpreter”选 “Conda Environment”。PyCharm 会自动检测到 miniconda 的路径环境那一栏选我们刚创建的micropython。之所以把解释器指到micropython这个环境是因为这样 PyCharm 的终端也会自动激活这个环境你在 PyCharm 里跑 esptool 命令就不用手动conda activate了。很多人在这里图省事选了系统自带的 Python后面烧录时esptool命令找不到就是因为装到了别的环境里。此时 PyCharm 里新建一个main.py随便写一行print(hello)右键运行如果控制台输出了 hello说明 PyCharm 和 miniconda 环境已经打通。3. PyCharm 里的 MicroPython 配置3.1 安装 MicroPython 插件PyCharm 自己不认 MicroPython需要在插件商店里装一个官方插件。打开File - Settings - Plugins搜索 “MicroPython”找到 JetBrains 官方的那个插件点 Install然后重启 PyCharm。装完插件后Settings - Languages Frameworks下面会出现一个 “MicroPython” 配置项。点进去勾选 “Enable MicroPython support”然后选择设备类型。如果你用 ESP32 或 ESP8266选 ESP32用树莓派 Pico选 Pyboard 或 RP2040 相关选项。这里面有个细节要注意插件要把你的项目识别为 MicroPython 项目你必须在项目设置里选择正确的设备类型。如果选了之后代码补全没生效多数情况是设备类型选错了或者插件版本和 PyCharm 版本不兼容。插件一般会跟随 PyCharm 版本自动更新但偶尔也会滞后遇到问题先看插件日志。3.2 配置解释器与设备端口插件的配置项里需要填两个关键信息设备端口和固件烧录相关参数。设备端口在 Windows 上是 COM 号在 Linux 和 macOS 上是/dev/ttyUSB0或/dev/ttyACM0这样的路径。怎么看端口Windows 在设备管理器里展开“端口”能看到类似COM3 - USB Serial这样的条目。Linux 在终端跑ls /dev/tty*。macOS 跑ls /dev/cu.*。如果插上板子但设备管理器里没有端口说明驱动没装好。ESP32 这类板子多用 CP2102 或 CH340 芯片做 USB 转串口去芯片厂商官网下载对应驱动。CH340 的驱动在 Linux 下经常要自己装Windows 一般自动识别。这个端口号必须跟板上实际的串口对上。如果 PyCharm 里选错了端口后面的烧录和终端交互全都连不上而且报错信息不太直观最常见的表现是“连接超时”或者“could not open port”。3.3 Flash 烧录与固件下载PyCharm 的 MicroPython 插件提供了一个烧录入口在Tools - MicroPython - Flash MicroPython Firmware。点击后会弹出一个对话框让你选择设备端口、固件文件路径、烧录地址和擦除方式。原理上这个烧录动作就是调用 esptool 把固件写进板子的 flash。所以前面在 miniconda 环境里装 esptool 是必不可少的。但我在实操中发现PyCharm 自带的烧录界面有个限制它对 esptool 的封装比较浅某些高级选项比如指定 flash 频率、改分区表不开放。所以我的习惯是第一次烧录用命令行跑 esptool调通了之后再用 PyCharm 的界面按钮来做日常更新。原因很简单烧录这个动作咱们要的是可控。命令行里你能清楚看到每一步的输出出了问题知道往哪个方向查。PyCharm 界面里的日志有时候不够详细新手看到报错也不知道是驱动问题还是固件问题。4. 实操记录ESP32 开发板从擦除到烧录4.1 准备工作与固件选择以最常见的 ESP32 开发板为例。这种板子大概三十块钱一块带 WiFi 和蓝牙MicroPython 官方对它的支持非常成熟。先去 MicroPython 官网下载固件。官网的 Downloads 页面按芯片系列分组织找到 ESP32 系列会看到一个.bin文件。下载的时候注意选对板子型号ESP32 和 ESP32-S3 的固件不能通用S3 还分带 USB host 支持的版本和不带的版本下载前看一眼板子上的丝印字母。我这里用的是 ESP32-S3 开发板所以选的是带 USB host 支持的固件。这个版本支持在板子上直接插 USB 设备做 HID 设备交互、读 U 盘都方便但如果你用普通 ESP32就选标准 ESP32 固件别选错。固件下载回来后建议放在一个纯英文路径下方便后续命令行操作。4.2 完整烧录流程现场先把开发板用 USB 线连到电脑。注意要用数据线不要用那种只能充电的线。很多朋友折腾半天连不上设备最后发现是线的问题——这种坑我至少见过三次包括我自己第一次就栽在这上面。连接后在终端里确认端口# Windows 看端口号 mode # Linux / macOS ls /dev/tty*假设端口是/dev/ttyUSB0先擦除整个 flashesptool.py --port /dev/ttyUSB0 erase_flash擦除 flash 是为了清掉板子上可能存在的旧固件。如果是全新的板子这步可以跳过但建议还是做一遍清得干净。擦除完成后烧录固件esptool.py --port /dev/ttyUSB0 --baud 460800 write_flash -z 0x1000 ESP32_S3_GENERIC-20240602-v1.23.0.bin这里有几个参数要解释一下。--baud 460800是烧录波特率设高了烧得快但如果你的 USB 转串口芯片质量一般可以降到230400或115200稳定优先。write_flash -z 0x1000的意思是从 flash 地址0x1000开始写入后面跟的固件文件名要换成你自己下载的实际名字。0x1000这个地址是 ESP32 的 bootloader 起始地址是出厂规定的不要改。固件文件名的前缀代表板型比如ESP32_GENERIC是通用型号ESP32_GENERIC_S3是 S3 专用别弄混。烧录成功的标志是终端里出现这样几行Hash of data verified. Leaving... Hard resetting via RTS pin...到这一步固件就算烧进去了。开发板会自动重启进入 MicroPython 的 REPL 环境。4.3 验证环境是否真的跑通烧录完别急着写代码先用 mpremote 验证一下板子和电脑的通信mpremote connect /dev/ttyUSB0连接成功后会进入板子的 Python 交互终端。输入import sys sys.platform能输出esp32说明 MicroPython 固件正常运行。再试一下点亮板载 LEDfrom machine import Pin led Pin(2, Pin.OUT) led.value(1)ESP32 开发板上标着 GPIO2 的 LED 应该亮了。如果你的板子 LED 不在 GPIO2看下板子背面的丝印说明。退出 mpremote 后回到 PyCharm打开Tools - MicroPython - MicroPython REPL如果也能进到那个提示符说明 PyCharm 和开发板的连接已经打通。最后一步在 PyCharm 里写一个main.py测试文件右键运行。如果运行方式还是普通的本地 Python说明 MicroPython 插件的支持没有真正生效。正确的情况下PyCharm 会把代码推送到板子上执行输出显示在控制台。这一步是整套环境配置的最终验证很多人在前面每一步都对但main.py还是本地跑就是因为插件设置里的设备类型没选对。5. 常见问题排查与避坑经验5.1 串口相关的经典翻车现场先整理一个速查表照着排查能省一多半时间。现象可能原因排查方法设备管理器看不到端口USB 线只能充电换数据线看电脑是否有插入提示音端口是感叹号驱动没装或不对按 USB 转串口芯片型号装驱动能识别端口但连接超时端口被占用关掉串口监视器、其他 IDE 的 REPL烧录时卡在 Connecting板子没进入下载模式按住 BOOT 键再插 USB或按复位键重试macOS 上/dev/tty有设备但连不上权限不够sudo chmod 666 /dev/cu.usbserial-xxx“端口被占用”这条要重点说。PyCharm 的 REPL、mpremote、esptool、串口监视器同一时刻只能有一个程序占用串口。很多人烧录时报错是因为 PyCharm 里还开着 MicroPython REPL 没关。先把所有可能占用串口的程序和终端都关掉再跑烧录命令。还有一件事Linux 上烧录时esptool.py报权限错误多半是当前用户不在dialout用户组里。执行sudo usermod -a -G dialout $USER然后注销重新登录问题解决。5.2 miniconda 环境相关的坑用 miniconda 最大的坑就是环境搞混。常见的一种情况是系统里已经装了 PythonPyCharm 创建项目时自动选了系统解释器然后你在这个解释器里装 esptool装到了系统的 Python 包里。下次在 PyCharm 终端里跑esptool.py因为终端激活的是 miniconda 的micropython环境自然找不到命令。建议每次在新终端里操作前先看一眼提示符前面有没有(micropython)。没有的话就执行conda activate micropython。还有一种情况是 conda 的 base 环境里装了某个包把 esptool 依赖的 pyserial 版本搞坏了。症状是 esptool 报ImportError: No module named serial。解决方法是重新安装 pyserialpip install --upgrade pyserial如果还不行直接把整个环境删了重建。反正我们在这个环境里只装了 esptool 和 mpremote重建成本极低这也是用 conda 隔离环境的好处——随便折腾坏了就重来完全不影响系统里的其他软件。5.3 给新手的几条实测建议第一先跑通最小链路再追求自动化。我的建议顺序是先用命令行烧录成功一次再用 PyCharm 的 REPL 连上板子最后才在 PyCharm 里写代码运行。跨过中间任何一步都容易让你搞不清楚问题出在哪个环节。第二main.py命名要谨慎。MicroPython 的固件上电后会自动执行板子存储里的main.py。在 PyCharm 里写main.py并点击运行时PyCharm 会把文件推送到开发板存储。这意味着你的代码会在电脑端触发“推送到板子”而不是在电脑上运行。如果你只是想测试本地逻辑文件名别叫main.py。第三固件版本和芯片型号要对上。我曾经拿 S3 的固件烧到普通 ESP32 上结果板子完全没反应。这类问题不太容易排查因为烧录过程是成功的但固件运行不起来。购买开发板时看清楚芯片型号下载固件前再核对一遍。第四用 mpremote 做文件同步很顺手。日常开发中写完代码往板子上传文件我用的是 mpremotempremote connect /dev/ttyUSB0 cp main.py :main.py mpremote connect /dev/ttyUSB0 reset这个命令组合可以从命令行完成“传文件 重启板子”的操作配合 PyCharm 的文件保存自动触发脚本体验接近一键部署。写在最后的个人体会这套环境我用了快两年从最初在 PyCharm 和 Thonny 之间反复切换到最后稳定在这套组合上。中间最大的心得是工具链的配置本质上是一种投资前期花一小时搭好环境后面每写一行代码都在享受它带来的便利。如果你第一次操作没成功不要急着怀疑自己。嵌入式开发里百分之六十的故障是物理层的问题线材、驱动、端口占用这些都和代码无关。按着上面的排查表一项一项过大多数问题都能解决。最后送大家一个小技巧配置完成后把烧录命令保存成一个脚本放在项目目录里下次刷固件就不用翻历史命令了。我自己的脚本长这样esptool.py --port /dev/ttyUSB0 --baud 460800 write_flash -z 0x1000 ./firmware/current.bin后续换固件只需要把新的.bin文件放到firmware目录并改名成current.bin一条命令就搞定了。这就是配置环境的意义——把花时间的部分提前解决把精力留给真正的开发。
返回列表