Thonny(6-2 见过的那个入门 IDE)对 Pico 有内置支持——同一个软件,从【写树莓派上的 Python】变成【写芯片里的 MicroPython】:刷固件 → 选解释器 → 写代码 → 存进板子,四步打通。
6-2 第一次用 Thonny 是在本机写 Python;这一节还是它,只是【解释器】从本机换成了板子——换解释器,不换软件,这是 Thonny 对新手最大的友好。8-2 装 Arduino 环境时最大的坑是【libfuse2/dialout 组】;这一步没有那些坑——刷固件走 U 盘拖文件,连接走 USB 串口,不需要装任何额外包。9-1 建的那张【固件选型卡】在这里派上用场。
一、为什么是 Thonny:一个软件管两头的 Python
Thonny 树莓派系统自带(6-2 验证过,桌面菜单直接开)。它对 Pico 的支持是官方内置的:
- 右下角的解释器选择器可以切【Local Python 3】↔【MicroPython (Raspberry Pi Pico)】
- 切到 MicroPython 后,Shell 区就是板子的 REPL
- 保存文件时它会问你【存到这台电脑还是板子】——存板子就是写进 Flash
树莓派上用它、Windows 上也能用(thonny.org 下载 4.x 版)——也就是说,你在哪台电脑上都能开发 Pico,这也是 Pico 生态比【必须装 IDE 的 Arduino】更轻的地方之一。
二、第一步:刷固件(MicroPython 不预装!)
出厂的 Pico 是空板——没有 MicroPython(对照 8-1:Arduino 出厂倒是预烧了 Blink)。第一次用必须刷一次固件,之后一直在、直到你想升级。
固件是按板子分的,这也是 9-1 那张选型卡的价值——用错型号的固件会静默失败(能启动但缺功能,比如无线用不了)。官方下载页 micropython.org/download 的四个对应关系:
| 你的板子 | 下载的 UF2 |
|---|---|
| Pico/Pico H(RP2040,无无线) | RPI_PICO |
| Pico W/WH(RP2040+无线) | RPI_PICO_W |
| Pico 2(RP2350,无无线) | RPI_PICO2 |
| Pico 2 W(RP2350+无线) | RPI_PICO2_W |
当前稳定版是 v1.28(2026 年 4 月发布,已核实)——老教程里的具体版本号一律以官方页为准。
刷固件三步(BOOTSEL 大法):
- 按住板上的 BOOTSEL 白色按钮不放,把 USB 线插进电脑 → 松开
- 电脑上出现一个 U 盘——RP2040 板叫 RPI-RP2,RP2350 板叫 RP2350
- 把下载的 .uf2 文件拖进这个 U 盘 → U 盘自动消失、板子重启 → 固件刷好了(只此一次)
【工具 → 选项 → 解释器 → 安装或更新固件】(Install or update firmware)可以图形化完成同一件事(按住 BOOTSEL 插线后点安装)。两条路等价,拖文件这条路更透明——你能亲眼看到那个 U 盘,理解【固件就是一个文件】这个事实。
三、第二步:连接 REPL
- 拔掉重新插上板子(这次不按 BOOTSEL——它现在是 MicroPython 设备了)
- 打开 Thonny,点右下角的解释器选择器(默认显示【Local Python 3】)
- 选 MicroPython (Raspberry Pi Pico),端口保持【自动】
- Shell 区出现
>>>提示符 = 连接成功
验证一句(9-2 的 Demo 在这里落地):
>>> import sys
>>> sys.platform
'rp2'
- 换一根确定能传数据的 USB 线(8-1 的充电线坑,排第一不是偶然)
- 确认刷固件时 U 盘出现过——没刷过固件的板子连不出 REPL(它还不是 MicroPython 设备)
- 固件型号是否对板子(RPI_PICO_W 的固件刷在无无线的板上,这类【静默失败】不会报错)
- Linux 下 REPL 口是
/dev/ttyACM0;若 Thonny 找不到端口,检查用户是否在dialout组(8-2 的老朋友)——树莓派默认用户通常已在组里
四、第三步:写第一个程序并存进板子
新建脚本,写入(Blink——与 8-3 的 Arduino 版遥相呼应):
import time
from machine import Pin
led = Pin(25, Pin.OUT) # 板载 LED,GP25(9-1 的知识)
while True:
led.on()
time.sleep(0.5)
led.off()
time.sleep(0.5)
然后是本节最重要的一步:
- 按保存,Thonny 会弹问:【保存到这台电脑】还是【保存到 Raspberry Pi Pico】?
- 选板子,文件名填
main.py - 之后再按运行(F5):板上绿灯开始 0.5 秒一闪
main.py 的魔力:现在拔掉 USB 线、给板子随便找个 5V 供电(充电宝都行)——重新通电它自己就开始闪,不需要任何电脑。这就是 9-2 说的【开机自动执行魔法名】。
五、两个必须会的按键
| 操作 | 作用 | 什么时候用 |
|---|---|---|
| Stop(红色停止键) | 打断正在跑的脚本,回到 REPL | 脚本里 while True 出不来时(一定会遇到) |
| Ctrl+D(Shell 焦点时) | 软复位——重跑 main.py | 想验证【开机效果】时 |
对照 8-3:Arduino 改一行代码要【重新编译+上传】几十秒;MicroPython 是改完直接存、直接跑——这就是解释执行的迭代速度优势(代价是运行性能,8-4 讲过 Firmata 的延迟类比)。
六、动手 Demo:从空板到会闪,五步全流程
第 1 步 · 刷固件:按 9-1 的选型卡下载对应 UF2 → BOOTSEL + 插线 → 拖文件。成功标志:U 盘出现又消失,板子重启。
第 2 步 · 连 REPL:Thonny 选 MicroPython (Raspberry Pi Pico)。成功标志:Shell 出现 >>>,sys.platform 返回 'rp2'。
第 3 步 · REPL 里先闪一次:直接敲(连保存都不用):
>>> from machine import Pin
>>> import time
>>> led = Pin(25, Pin.OUT)
>>> led.on()
成功标志:板上绿灯立刻亮。再敲 led.off() 灭。【敲一行、世界变一下】——这是单片机开发最爽的时刻。
第 4 步 · 写正式程序存成 main.py:按本节第四节写 Blink,保存到板子,运行。成功标志:灯按 0.5 秒节奏闪。
第 5 步 · 脱机验证:拔 USB → 重新插电(不用 Thonny)。成功标志:通电后一秒内灯自己开始闪。到这一步,你的第一块 MicroPython 板子正式独立运行了。
七、30 秒实验:体会【改代码不用重新烧】
保持 Blink 在跑,改一下节奏再观察:
- 把两处
time.sleep(0.5)改成time.sleep(0.1),保存(还是存板子),按运行 - 看表:从按保存到灯变快,几秒?
结果:一两秒内生效——没有编译、没有上传进度条。对照 8-3 的 Arduino【验证→上传→观察】流水线,这个差异就是【解释器常驻芯片】架构的直接红利。性能换迭代速度,什么场景选哪边(C++ vs MicroPython),你现在已经有了判断依据。
八、常见误区
- 【固件要经常刷、每次写程序都要刷】 —— 只刷一次。固件是解释器本体,日常开发只写脚本;除非要升级版本才重刷。
- 【随便下个 UF2 就能用】 —— 必须按板子型号选(四种互不通用),用错是静默失败。W 型和基础版固件不同,一代二代也不同。
- 【保存到电脑 = 保存到板子】 —— 两个不同的地方!存电脑的文件跑在电脑上;要在板子上跑,必须选【保存到 Raspberry Pi Pico】。调试半天没反应时,先问自己【这份代码到底存哪了】。
- 【Thonny 连不上就去重装系统】 —— 按本节第三节的四步排查走:线 → 固件 → 型号 → 权限,九成是前两样。
自测三问(点开对答案)
1. Pico 出厂时带 MicroPython 吗?怎么刷? 2. `main.py` 为什么特殊?怎么让它生效? 3. 脚本死循环出不来,Thonny 里按什么? **参考答案** 1. **不带**。按住 BOOTSEL 插线 → 板子变 U 盘(RPI-RP2 或 RP2350)→ 拖入**对应型号**的 .uf2 文件即可,只此一次。 2. 它是**开机自动执行的魔法文件名**——把程序【保存到 Raspberry Pi Pico】并命名为 `main.py`,每次通电解释器先跑它。 3. **红色 Stop 键**(打断脚本回 REPL);想让 main.py 重新跑就 Ctrl+D 软复位。- ☐ 下一节(9-4 使用 MicroPython 控制 Raspberry Pi Pico 开发板)
相关笔记
- 在树莓派开发 Python 程序 —— Thonny 第一次登场的位置;本节是它第二次出场,换了用途
- 在树莓派建立 Arduino 开发环境 —— 那边的环境装得步履维艰(libfuse2/dialout),这边几乎零门槛,对比着体会
- 使用 Arduino IDE 建立 Arduino 程序 —— 同样是【第一个程序 Blink】,两条流水线速度完全不同
- MicroPython 语言的基础 —— 上一节:main.py 魔法名与解释器架构的理论出处
- 🍓 树莓派 · 索引 —— 全课路线图