1. 从零开始为什么选择 MicroPython 和 Pico如果你对编程感兴趣尤其是想玩玩硬件让代码控制现实世界里的东西比如让一个小灯闪烁那你可能听说过 Arduino 或者直接用 C 语言给单片机编程。那感觉怎么说呢有点像在学一门新外语语法复杂环境配置也让人头疼。我第一次接触的时候光是装个编译器、配个下载器就折腾了大半天更别提后面各种指针、内存管理的“坑”了。后来我发现了MicroPython感觉就像在沙漠里找到了绿洲。简单来说它就是 Python 跑在了像树莓派 Pico 这样的微控制器上。Python 你肯定知道语法简单接近自然语言学起来快。MicroPython 继承了这些优点让你能用写 Python 脚本的方式去控制硬件。想点个灯几行代码就行不用再去研究复杂的寄存器配置。这对于嵌入式新手、学生或者像我这样想快速实现点子的创客来说简直是福音。这次我们用的硬件是Raspberry Pi Pico它是树莓派基金会推出的第一款微控制器板子核心是一颗叫 RP2040 的芯片。选它有几个原因第一便宜一杯奶茶钱就能买到第二社区资源极其丰富遇到问题基本都能找到答案第三它支持UF2 拖放烧录就像往 U 盘里拷贝文件一样简单彻底告别了复杂的下载工具链。你完全可以把 Pico 想象成一个超迷你的、能直接和传感器、LED 打交道的“电脑”而 MicroPython 就是它的操作系统和编程语言。市面上也有类似的技术比如 CircuitPython它更偏向于 Adafruit 的生态对自家传感器支持极好。但 MicroPython 的社区更大支持的硬件也更广泛从 ESP32 到 STM32 都能跑学会了迁移成本低。所以对于想打好基础、探索更多可能性的朋友我从 MicroPython 和 Pico 这个组合入门觉得是最稳的。2. 手把手搭建你的 MicroPython 开发环境环境搭建是第一步也是劝退很多新手的“门槛”。但别担心跟着我的步骤走保证你能在 10 分钟内搞定一切而且用的是大家更熟悉的 Visual Studio Code全程图形化操作几乎不用碰命令行。2.1 硬件准备给 Pico 装上“灵魂”首先你得有一块 Raspberry Pi Pico。拿到手后别急着插电脑我们先要给它刷入 MicroPython 的“固件”这相当于给这块硬件安装一个能理解 Python 语言的“操作系统”。下载固件打开 MicroPython 官网的下载页面找到 “Raspberry Pi Pico” 的部分下载那个后缀是.uf2的文件。这个文件很小几秒钟就下好了。进入烧录模式找到 Pico 板上唯一的一个按钮它叫BOOTSEL。按住这个按钮不放然后把 Pico 通过 USB 线连接到电脑之后再松开按钮。这个顺序很重要是先按住再插电。拖放烧录如果操作正确你的电脑会识别出一个名为RPI-RP2的 U 盘。打开这个“U盘”把刚才下载的.uf2文件直接拖进去。拖进去的瞬间Pico 会自动重启。几秒钟后RPI-RP2盘符会消失这说明 MicroPython 固件已经刷写成功Pico 现在是一个能运行 Python 的智能设备了。这个过程是不是简单得不可思议我第一次做的时候也惊呆了这比给 Arduino 装 bootloader 或者用 ST-Link 给 STM32 下载程序简单太多了。这就是 UF2 格式和 Pico 设计的人性化之处。2.2 软件准备在 VS Code 里安个“家”接下来我们需要一个趁手的代码编辑器。我强烈推荐Visual Studio Code因为它免费、强大而且通过插件能获得极佳的 MicroPython 开发体验。用 Thonny 也可以但 VS Code 的功能和生态更完善以后写复杂项目也更得心应手。安装 VS Code去官网下载安装这一步没啥好说的。安装核心插件打开 VS Code点击侧边栏的扩展图标搜索RT-Thread MicroPython。注意是“RT-Thread”这个它是由国内团队维护的对中文用户非常友好功能也全。安装这个插件后你的 VS Code 就获得了和 Pico 对话、下载程序、调试的能力。安装 Python 插件可选但推荐为了获得更好的代码提示和补全建议再安装微软官方的Python和Pylance插件。这步不是必须的但能极大提升编码效率尤其是当你记不住某个函数名的时候。插件装好后你会注意到 VS Code 底部状态栏多出了一排按钮。这几个按钮就是你和 Pico 交互的遥控器连接设备、运行当前脚本、停止运行、把项目文件同步到 Pico 里。整个界面清爽直观没有一堆令人困惑的配置项。2.3 第一次握手连接设备与 Hello World现在让我们测试一下环境是否通联。用 USB 线把已经刷好固件的 Pico 连接到电脑。在 VS Code 里点击底部状态栏最左边的“创建/打开 MicroPython 项目”按钮它会帮你生成一个项目文件夹里面默认有一个main_example.py文件。点击旁边的“连接设备”按钮VS Code 会自动扫描串口。如果一切正常你会看到一个弹出框让你选择设备通常就一个COMx或/dev/ttyACM0之类的选项选中它。连接成功后底部状态栏会显示设备信息。打开main_example.py你会看到一段简单的代码def main(): print(Welcome to RT-Thread MicroPython!) if __name__ __main__: main()点击“运行”按钮那个三角形的图标奇迹发生了——你会在 VS Code 内置的“Python 解释器”输出面板里看到Welcome to RT-Thread MicroPython!这行字。这行字是从哪里来的就是从你的 Pico 里打印出来的这意味着你的电脑已经成功通过 USB 线指挥 Pico 执行了 Python 代码。这个print和你在电脑上写 Python 时用的print一模一样但这种感觉非常奇妙代码是在你电脑上写的却在一个独立的硬件设备上运行并输出了结果。这里有个小知识点为什么要有if __name__ __main__:在电脑上写 Python 脚本直接写print语句就能运行。但在 MicroPython 项目里我们通常把主要逻辑放在一个main()函数里然后用这个条件判断来调用它。这是一种良好的代码组织习惯当你的代码文件被其他文件导入时可以防止main()函数被意外执行。对于初学者你可以先理解为这是 MicroPython 程序一个约定俗成的“启动开关”。3. 硬件交互初体验让 LED 闪烁起来打印文字只是热身真正的乐趣在于控制硬件。接下来我们要完成嵌入式界的“Hello World”——Blink即让一个 LED 灯闪烁。我们先从控制 Pico 板载的那颗小 LED 开始这样你连额外的电子元件都不需要就能看到效果。3.1 认识你的硬件伙伴GPIO 与板载 LEDPico 板子边缘有两排金属针脚这些就是GPIO。GPIO 是“通用输入输出”的缩写你可以把它们想象成 Pico 的“手脚”。程序可以命令某个脚输出高电平比如 3.3V或低电平0V也可以读取某个脚上是高电平还是低电平。通过这种方式Pico 就能点亮 LED、读取按钮状态、驱动电机等等。Pico 上有一颗小小的 LED 灯已经焊接在板子上。它被连接到了GP25这个 GPIO 引脚上。正因为这颗 LED 占用了 GP25所以我们在板子边缘的针脚上是找不到标着“GP25”的引脚的。控制它非常简单让 GP25 输出高电平LED 就亮输出低电平LED 就灭。3.2 编写你的第一个硬件控制程序在刚才的项目里新建一个 Python 文件比如叫blink.py。我们一行行来写首先需要导入一个关键的库import machine import utimemachine库是 MicroPython 的硬件核心所有控制引脚、定时器、PWM 等功能的函数都在里面。没有它你的代码就无法和 Pico 的硬件对话。utime库提供了时间相关的函数比如延时我们稍后会用到。接下来设置控制 LED 的引脚led machine.Pin(25, machine.Pin.OUT)这行代码创建了一个叫led的对象。machine.Pin()函数用于配置一个引脚。第一个参数25指定我们要操作 GP25 引脚。第二个参数machine.Pin.OUT告诉 Pico这个引脚将被用作“输出”模式即我们用它来驱动外部设备点亮LED而不是读取外部信号。提示为了让代码更具可读性MicroPython 为这颗板载 LED 定义了一个别名。你可以直接使用LED来代替数字25写成led machine.Pin(LED, machine.Pin.OUT)。这样即使你换了一块板载 LED 连接不同引脚的开发板代码也可能无需修改。现在我们可以控制它了led.value(1) # 输出高电平LED 亮 utime.sleep(1) # 等待1秒 led.value(0) # 输出低电平LED 灭 utime.sleep(1) # 再等待1秒led.value(1)就是让这个引脚输出“1”高电平灯亮。utime.sleep(1)让程序暂停1秒钟。然后led.value(0)输出“0”低电平灯灭再等1秒。如果只写这四行LED 只会亮一次、灭一次就结束了。为了让灯持续闪烁我们需要一个循环def main(): led machine.Pin(25, machine.Pin.OUT) while True: led.value(1) utime.sleep(0.5) # 改成0.5秒闪烁更快 led.value(0) utime.sleep(0.5) if __name__ __main__: main()while True:创建了一个无限循环里面的代码会一遍又一遍地执行。现在点击“运行”按钮看看你的 Pico 板上的那颗绿色小灯是不是开始欢快地闪烁了第一次用代码控制物理世界的光亮这种感觉非常棒它打破了虚拟和现实的界限。进阶技巧除了用value()设置高低电平machine.Pin对象还有一个超好用的toggle()方法。它就像电灯开关每次调用都会把引脚状态反转一次亮变灭灭变亮。上面的循环可以简化为while True: led.toggle() utime.sleep(0.5)代码是不是简洁多了这在后续做呼吸灯、跑马灯等效果时会非常方便。4. 深入硬件世界外接 LED 与电路基础控制板载 LED 算是“开胃菜”因为它省去了接线。但真正的硬件乐趣在于自己搭建电路。接下来我们用一个外部的 LED、一个电阻和几根杜邦线在面包板上搭建一个电路并用程序控制它。这会让你真正理解电流是如何流动的以及为什么需要这些元件。4.1 认识必要的电子元件在动手之前我们快速认识一下几位“新朋友”面包板一块布满小孔的塑料板内部有金属条连接。它的作用是让你无需焊接就能快速插接元件、搭建临时电路。通常上下两排长条孔是横向连通的一般用来接电源正极和地线负极。中间区域的孔是纵向每列连通用来插接元件。杜邦线连接用的导线两端是插针。有“公头”和“母头”之分。“公对公”线两头都是针用来连接面包板上的两个点“母对母”线两头都是孔用来连接两个带针的元件或引脚“公对母”线则一端是针一端是孔非常灵活。发光二极管就是 LED。它有两个关键特性单向导电性和需要限流。长脚是正极短脚是负极电流必须从正极流向负极才能发光。如果接反了灯不会亮但通常也不会坏。LED 工作时两端有一个电压降不同颜色不同比如红色约1.8V-2.2V如果直接接到 Pico 的 3.3V 上电流会过大瞬间烧毁。所以必须串联一个电阻。电阻用来限制电流大小的元件。上面通常有彩色环代表阻值。对于常见的红色 LED串联一个220 欧姆到1 千欧姆的电阻都是安全的。我手边常用的是 330 欧姆的电阻。4.2 搭建你的第一个电路我们计划用 Pico 的GP15引脚来控制这个外接 LED。电路原理很简单Pico 的 GP15 引脚输出高电平3.3V作为电源正极电流流过电阻和 LED最后流回 Pico 的GND引脚接地0V形成一个回路。具体接线步骤请务必在断电或 USB 线拔掉的情况下操作将 Pico 插在面包板的一侧让引脚跨过中间凹槽。找一根“公对公”杜邦线一端插入 Pico 的GP15引脚孔另一端插入面包板的任意一个孔假设是 A 列。取一个330Ω的电阻一端插入与杜邦线同列的孔A 列另一端插入面包板另一行的孔B 列。电阻没有正负极随便插。取一个 LED长脚正极插入与电阻另一端同列的孔B 列短脚负极插入旁边的孔C 列。再找一根“公对公”杜邦线一端插入与 LED 短脚同列的孔C 列另一端插入 Pico 上任意的GND引脚孔。检查一下电流路径应该是GP15 - 杜邦线 - 电阻 - LED长脚到短脚- 杜邦线 - GND。确认无误后将 Pico 通过 USB 线连接电脑。4.3 编程控制外接 LED电路搭好了程序只需要稍作修改。新建一个文件external_blink.pyimport machine import utime def main(): # 注意这里引脚号改成了 15对应我们外接LED的GPIO led_external machine.Pin(15, machine.Pin.OUT) while True: led_external.value(1) # 外接LED亮 utime.sleep(0.3) led_external.value(0) # 外接LED灭 utime.sleep(0.3) if __name__ __main__: main()运行这个程序你会发现面包板上的 LED 开始闪烁而板载的 LED 不受影响。你可以尝试同时控制板载 LED 和外接 LED让它们以不同的节奏闪烁这只需要定义两个Pin对象然后在循环里分别控制即可。通过这个实践你不仅学会了控制 GPIO更重要的是理解了最基本的串联电路原理这是所有硬件编程的基础。5. 从调试到部署让程序在 Pico 里“安家”到目前为止我们都是在 VS Code 里点击“运行”来执行代码。这种方式叫REPL 交互模式代码是从电脑通过 USB 线实时发送给 Pico 执行的。一旦你拔掉 USB 线或者重启 Pico程序就消失了。这显然不适合做一个真正的独立小项目。我们的目标是让程序“烧录”到 Pico 的内部存储里一上电就自动运行。5.1 将程序固化为上电自启动应用MicroPython 设备有一个约定上电后它会自动寻找并执行文件系统里名为main.py的文件。所以部署的关键就是把我们的代码文件改名为main.py并放到 Pico 的根目录下。操作非常简单在 VS Code 的项目里把你调试好的代码文件比如blink.py重命名为main.py。在 VS Code 左侧的文件资源管理器中右键点击这个main.py文件。在弹出的菜单里选择“下载该文件/文件夹到设备上”。你也可以点击底部状态栏的“同步”按钮两个弯曲箭头图标这会将整个项目文件夹同步过去。VS Code 插件会通过串口将文件传输到 Pico 的闪存中。传输完成后你可以点击底部状态栏的“停止”按钮然后按一下 Pico 板上的RESET按钮在 BOOTSEL 按钮旁边或者直接拔插 USB 线进行重启。神奇的事情发生了即使没有连接 VS CodePico 上的 LED 也开始自动闪烁了你的程序已经成为了 Pico 固件的一部分实现了脱机运行。5.2 常见问题与恢复方法自己动手难免会出点小状况。这里分享几个我踩过的坑和解决办法问题代码写错了导致 Pico 一上电就卡死无法连接 REPL。比如在main.py里写了个死循环但没有延时把 CPU 占满了导致串口无响应。解决这种情况下你仍然可以进入 BOOTSEL 模式。按住 BOOTSEL 键再插 USB 线电脑会再次识别出RPI-RP2盘符。此时你可以直接删除里面的main.py文件或者用一个正确的文件覆盖它。然后复位 Pico它就恢复正常了。问题文件系统混乱或者想彻底清空 Pico。解决树莓派官方提供了一个“核弹”级别的清理工具flash_nuke.uf2。你只需要像第一次刷固件一样进入 BOOTSEL 模式然后将这个flash_nuke.uf2文件拖入RPI-RP2盘符。Pico 会自动重启并清空所有用户文件包括有问题的main.py和 MicroPython 固件本身。清空后Pico 会再次进入 BOOTSEL 模式这时你需要重新拖入一次MicroPython 的固件.uf2文件才能让它恢复功能。这是一个“恢复出厂设置”的终极方法。问题VS Code 找不到串口设备。解决首先检查 USB 线是否既能供电又能传输数据有些充电线只有电源线。其次检查设备管理器Windows或ls /dev/tty*Mac/Linux看看端口是否存在。有时需要安装 Pico 的串口驱动通常 Windows 会自动安装Mac/Linux 无需驱动。如果还不行尝试重启 VS Code 或电脑或者换一个 USB 口。把程序部署到硬件上并独立运行这个闭环完成的那一刻成就感是最强的。它意味着你的想法从一个抽象的代码变成了一个实实在在、可以触摸、可以工作的物理实体。从环境搭建、硬件认识到编写第一个交互程序再到最终固化部署这一整套流程走下来你已经跨过了嵌入式开发最难的开头部分。后面无论是玩传感器、做物联网设备还是做机器人其核心逻辑和控制方式都是相通的。硬件编程的大门已经向你敞开了。