Windows上的Raspberry Pi Pico和MicroPython

本文回答了这个问题:如何在 Windows 上使用带有 MicroPython 的 Raspberry Pi Pico?我们还演示了如何在 Windows 8.1 上为 "Board CDC"(安装 MicroPython 后 Pico 将显示为 CDC)安装正确的驱动程序。(我们还将讨论 MicroPython 与 CircuitPython 之间的差异(在适用情况下,电路板将被称为 "CircuitPython CDC Control")。
最后,我们将介绍如何使用 PuTTY 和 Thonny(与 Pico 集成的 Python 集成开发环境)连接 Pico。
简介:什么是 Pico 和 MicroPython?
ǞǞǞ 树莓派Pico 是 Raspberry Pi 推出的一款新型微控制器板,采用自主研发的 RP2040 微控制器芯片。
Raspberry Pi 为 RP2040 设计了很多很酷的功能(我最喜欢的是 PIO - 可编程 IO,在这里您可以模拟很多需要精确定时等的硬件接口。- 将来我会在另一篇文章中详细介绍),Pico 是一个非常不错的参考平台,RP2040 就是在这个平台上实现的。
Raspberry Pi Pico 与 Raspberry Pi Zero W 有什么不同?
微控制器(例如 皮克)和单板计算机 (假设 Pi Zero W)大致是这样的:你可以直接对 Pico 进行编程(例如用 C 语言)、 无操作系统而 Pi Zero W 通常会运行 Linux。
这样做有实时性等优点,但也有缺点--你需要对所使用的硬件有更多了解,还需要实现很多在现代操作系统上理所当然的功能(如文件访问)。
与 Pi Zero W 相比,Pico 的资源较少(例如,内存明显减少,没有 VideoCore GPU 等),但功耗较低,并具有其他功能,如前面提到的 PIO 和模拟输入(ADC)。
对于不一定需要网络连接、HDMI 输出、摄像头输入和处理的项目来说,Pico 是一个不错的选择。换句话说,如果您希望与硬件连接、电池寿命长等,那么 Pico 就是您的最佳选择。
Pico 已有哪些软件?
可以使用不同的软件对 Pico 进行闪存。 UF2 文件 (参见 Pico 入门指南).Raspberry Pi 提供了几个 UF2 文件供您开始使用:
- 微蟒 (将是本文的重点)和一个近亲 CircuitPython
- 闪烁一个LED (闪烁 UF2)
- 世界你好 (如果通过终端连接,会显示 "Hello world")。
- Picoprobe (使用一个 Pico 调试另一个 Pico)
- 重置闪存 (将闪存设置为空)
还有很多 在这里可以找到很多例子 (C 代码)。
请注意。 我链接的是截至 2021 年 1 月 30 日的最新 UF2 文件,特别是 MicroPython 可能已更新,因此请务必查看 Raspberry Pi Pico 入门页面.
微蟒
如果您对完全使用 C 语言编程的前景感到有些畏惧,那么您可以从 MicroPython 开始。在这种情况下,Raspberry Pi Pico 会预装一些软件(MicroPython UF2 文件),这些软件将运行一个小型 Python 解释器。
之所以称为 MicroPython,是因为它不支持完整的 Python 3 标准库。MicroPython 适用于有限的环境,如 Pico。Pico 的内存只有 2 MB,无法容纳 Python 3 带来的所有内容。检查 该 Github 页面介绍了 CPython 与 MicroPython 的区别.此外,这里还有官方 MicroPython 主页和 官方 MicroPython 文档.
循环器(CircuitPython
注意:大部分说明也适用于基于 Windows 的 CircuitPython RP2040 板,例如 Adafruit Feather RP2040,但您需要遵循的步骤略有不同 - 我将在本文中指出不同之处。
CircuitPython 基本上是 MicroPython 的一个变种,由 Adafruit 开发。
闪存(CircuitPython CDC Control)后,电路板本身在设备管理器中的调用方式会有所不同,当然你也需要不同的软件。以下是开始时所需的软件:
- Adafruit Feather RP2040 下载页面 (CircuitPython 7.0.0 UF2 文件)。
在本文中,我们还将向您介绍如何在基于 RP2040 的 Windows 设备上安装 CircuitPython 库,以及如何使用 Thonny 运行和停止程序。
MicroPython UF2 将为您带来什么?
在 Pico 上安装 MicroPython 后,您就可以使用串行控制台连接到 Pico(本文将演示如何连接),并开始在 Pico 上编写 Python 代码。
在 Pico 上安装 MicroPython
- 断开 Pico 的电源
- 按下 BOOTSEL 按钮并保持按住不放
- 使用 microUSB 转 USB 电缆将 Pico 插入电脑
- 现在您可以松开 BOOTSEL 按钮

现在,Pico 应该可以在文件系统中看到,即 RPI-RP2:

(旁注:我想知道 RPI-RP1 是什么?)
Pico 可模拟一个 FAT32 闪存盘,其中有两个文件:INDEX.HTM 和 INFO_UF2.TXT:INDEX.HTM 和 INFO_UF2.TXT。

事实上,Windows 驱动器管理器显示 Pico 是一个 128 MB 的 FAT 闪存盘。
不要错误地尝试在 Pico 上存储任何文件 这样:它们将被悄无声息地删除。即使看起来它们已经被写入,那也只是 Windows 缓存了操作而已 - 您的文件将不复存在!我有没有说过 Pico 实际上只有 2MB 闪存?它在这里无耻地谎称有 128MB(顺便说一句,RP2040 应该支持高达 16MB 的闪存)。
旁注:这让我想起了印度之行,在那里我买了 128 GB 容量的优盘--它可以将你的数据写入涅槃。当我想把优盘退回去拿回我的钱时,卖家却不见了......真是奇遇🙂。
不过,如果您将正确的文件(UF2 文件)复制到该驱动器,它就会被识别并写入。

下载完成后,您可以从浏览器中拖放或复制粘贴。复制完成后,Pico 会自动重启,你就再也看不到闪存盘了。
注:如果要使用 CircuitPython,当然可以在此步骤中使用 CircuitPython UF2 文件。

Pico 现在(重启后)运行 MicroPython,它通过 USB 提供一个串行端口(COM 端口)。(从技术角度讲,这是 USB 设备类别 02 =)。 通信和疾病预防控制中心控制 和 USB 设备子类 02)。
连接到 Pico,Windows 10
Windows 10 会自动为您安装和激活必要的 COM 端口驱动程序 (usbser.inf),因此我们可以轻松连接到 Pico。
要查看 COM 端口,请打开设备管理器:

在此,您可以在端口(COM 和 LPT)下看到新的 USB 串口设备,以及 COM 端口号(稍后连接时需要)。

要再次确认这确实是运行 MicroPython 的 Pico,可以执行以下操作:
单击 "查看",然后选择 "按容器划分的设备":

在这里,你会看到 "FS 模式下的电路板 "条目,其中有两个节点 "USB 复合设备 "和 "USB 串行设备 (COM3)".COM3 很重要,您需要将其用于 PuTTY(见下文)。

我们可以右键单击这些设备,然后从上下文菜单中选择相应的属性条目来进一步研究这些设备。FS 模式下的电路板属性为空:

USB 复合设备在总线报告的设备描述中显示 "电路板处于 FS 模式":

注意:这是运行 MicroPython 的 Pico。当您使用不同的软件重新刷新时,这里显示的结果会有所不同!
USB 串行设备本身会显示一些有趣的属性:

注意:如果使用 CircuitPython,电路板设备描述将是 "CircuitPython CDC Control",而不是 "Board CDC"。


如果知道要找什么,硬件 ID(VID = 供应商 ID,PID = 产品 ID)就很有用:

VID_2E8A -> 供应商标识为 2E8A (十六进制)或 11914 (十进制),即 树莓派
PID_0005 -> 产品 ID 是 5,板在运行 MicroPython 时将显示该 ID(默认产品 ID 为 3)
注:Chrome 浏览器调试日志
也可使用 Chrome 浏览器获取此信息。
可以查看当前连接的设备

回到 Windows 10:

如上截图所示,Windows 10 会自动为您安装 usbser(USB 串行驱动程序),因此您可以立即开始使用 Pico。
浦发银行
PuTTY 是一个 telnet / SSH 客户端。您将使用它连接到 Pico,并与 MicroPython 的 REPL 对话。 在此下载 PuTTY.(您可以使用 64 位 MSI Windows 安装程序进行大多数 Windows 10 安装)。
打开 PuTTY。输入正确的设置:

- 连接类型需要设置为 串行
- 串行线路需要设置为上述调查所得出的结果。我的情况是 COM3.您的情况很可能有所不同!
- 速度暂时保持在 9600
单击 "打开",将打开一个终端:

要获得初始提示,请按一次 Enter
然后,您就可以在提示后开始编写 Python 代码,这些代码会立即被解释。试试输入经典的 "Hello world":
print("Hello world!")
MicroPython 将回复
世界你好
不出所料
既然已经建立了初步联系,我祝你们编码愉快!
Thonny:Python 集成开发环境,与 Pico 兼容!
使用 PuTTY 对于较长的会话,或者当您想将大量代码加载到 Pico 中时,并不是很方便。幸运的是,开源应用程序 Thonny(Raspberry Pi OS 默认安装)也可用于 Windows,并集成了对 Pico(MicroPython 和 CircuitPython)的支持。
第一步
第二步
按照上述方法连接 Pico - 它现在应该有一个 COM 编号 - 如果你愿意,可以使用上述 PuTTY 方法测试是否可以连接到 Pico。
第三步
启动 Thonny,点击 工具 菜单,选择 选择

第四步将 Pico 设置为解释器
单击 "口译员 "选项卡。默认情况下,您将看到此屏幕:

点击并选择 MicroPython (Raspberry Pi Pico)

注意事项如果您使用 循环器(CircuitPython而不是选择"CircuitPython(通用)从下拉菜单中选择""。
您可以将端口设置为 "尝试自动检测端口",也可以设置一个特定端口(上文已经介绍了如何确定正确的端口号)。

注意:端口仍应显示在下拉菜单中,因此最好再确认一下是否存在:

我将其保留为 "尝试自动检测端口"。 单击 "确定 "保存设置。
您的屏幕现在应该变成这样:

第五步:测试
现在您可以测试与 Pico 的通信。
类型
print("Hello world")
输入 MicroPython 提示符,然后按回车键

你会看到 Pico 对你做出回应。
恭喜您,您已成功将 Thonny 与 Windows 上的 Pico 连接起来!
更复杂的脚本用 Thonny 闪烁 LED
你刚才看到的 REPL(读取评估打印循环)很不错,但对于更复杂的项目,我们希望先输入源代码,或从文件中加载源代码。
这就是索尼窗顶部的用途。
输入代码。在我的示例中,我们将闪烁板载 LED(相当于硬件 hello world!),并永远循环。
import time
from machine import Pin
print("Welcome to Pico example 2, blinking an LED")
led = Pin(25, Pin.OUT)
# For demo purposes, we have an infinite loop here
while True:
led.high()
time.sleep(0.5)
led.low()
time.sleep(0.5)
注意 Python 中的正确缩进(在 Python 中,空白用于控制目的!)。

现在点击 "运行 "按钮

Thonny 会询问您保存到哪里

选择 Raspberry Pi Pico:

我选择将文件命名为 hello.py - 点击 "确定 "保存文件
按下确定按钮后,代码将开始执行。Pico 的板载 LED 灯应开始闪烁,您将在 Shell 中看到输出结果:

注意:我不需要输入 %Run -c $EDITOR_CONTENT 命令,Thonny 会自己执行。下面的输出是我们的代码。
CircuitPython on Thonny on Windows
按照相同步骤操作,但选择 CircuitPython(通用)作为解释器。

Thonny 外壳会向您显示不同的确认信息:

Adafruit CircuitPython 7.0.0 on 2021-09-20; Adafruit Feather RP2040 with rp2040
Windows 8.1

Windows 8.1 不会自动加载串行驱动程序,并显示设备处于错误状态。
注意:使用 CircuitPython 时,设备名称将改为 "CircuitPython CDC control"。步骤相同。

下面是 Board CDC(运行 MicroPython 的 Pico)的属性:


显示未安装该设备的驱动程序(代码 28)。
解决这一问题的方法是 扎迪格工具您可以免费下载:
请注意: 许多病毒扫描仪似乎都认为,Zadig 2.7 中的 installer_x64.exe 包含 "Trojan.Tedy"。 不过,这也许是虚惊一场:我建议使用 Zadig-2.5.exe 而不是"......",它不会向我发出这些警告(刚刚进行了第二次验证)。安全总比遗憾好!

扎迪格 帮助您安装通用 USB 驱动程序,以帮助您访问 USB 设备。
在我们的例子中,我们需要 USB 串行(CDC)驱动程序。
从上面的下拉菜单中选择 Board CDC(Interface 0),在另一个字段中选择 USB Serial (CDC)。点击安装驱动程序。
安装完成后,您会看到驱动程序已设置为 usbser (v1.0.0.0):

如我在 Windows 10 中所述,您可以使用正确的 COM 端口号进行连接:


附注:

Windows 7 上的 Pico/串行端口
据一位客户说 扎迪格 在 Windows 7 上安装串行端口驱动程序后,Pico 也能正常使用了!请务必使用 扎迪格 2.5因为在安装驱动程序时,我的病毒扫描仪标记了较新的 Zadig 2.7。(不知道为什么,但安全总比遗憾好--旧版本还能用)
如果您需要分步指南,请查看上面的 Windows 8.1 指南 - 在 Windows 8.1 机器上应该非常相似。
在 Windows 中安装库并对 CircuitPython RP2040 板进行编程
例如,如果您使用的是 Adafruit Feather RP2040,您可能需要在其上使用 CircuitPython。Adafruit 有一个 NeoPixel RGB 上,这需要将库安装到 枰子 设备上的文件夹。
(注: 在此下载图书馆 - 点击 "下载项目包 "链接)。
解压缩项目捆绑包文件夹后,您将看到两个不同的子文件夹,分别包含 CircuitPython 6.x 和 CircuitPython 7.x

我在这里使用的是 CircuitPython 7.x 版本,因为我闪存了 7.0.0 CircuitPython 版本.
你会在资源管理器中发现一个名为 "CIRCUITPY "的驱动器:

ǞǞǞ 枰子 文件夹是空的。使用 Windows 资源管理器,我们只需将文件复制并粘贴到此处即可。
将所需库从下载的 lib 文件夹复制到 CIRCUITPY lib 文件夹:

现在,我们还可以覆盖 code.py:

我们可以使用 Thonny 编辑并运行 code.py 文件。点击 Thonny 中的打开图标,在 "从何处打开 "对话框中选择 "CircuitPython 设备":

在这里你可以打开 code.py:

现在,您的 Thonny 窗口应该是这样的:

按键盘上的 F5 键,或点击运行图标

如果一切顺利,Adafruit Feather RP2040 上的 NeoPixel RGB LED 现在应该开始闪烁不同的颜色。恭喜 🙂
现在,你可以继续玩弄这个脚本--也许你可以修改颜色,或者颜色变化之间的时间间隔?或者添加其他功能。
要运行修改后的脚本,请在 Shell 中按下 Ctrl + C(或在 Thonny 菜单中选择运行 > 中断执行)。现在您可以再次上传脚本了。
调试的一大好处是,使用 Thonny 可以获得控制台输出,因此可以使用 print 语句输出信息:

Adafruit CircuitPython Bundle
Adafruit 在 ZIP 中提供了多个库的便捷下载。下载相应的 adafruit-circuitpython-bundle-7.x.-mpy 或 -6.x. mpy 这里.您只需使用 Windows 资源管理器即可安装上述几个或所有库。 完整上传所有程序库的大小约为 1.2 MB,Adafruit Feather RP2040 有足够的空间允许这样做。复制可能需要几分钟时间。

杂项说明
我是否也可以将本指南中的程序用于 CircuitPython?
当然可以。例如,你可以在 Windows 8.1 上使用 Zadig(详见上面的说明。 请使用 2.5.730 版本的 Zadig!)。你要找的是 "CircuitPython CDC control "设备,而不是 "Board CDC "设备。

使用 Zadig 安装驱动程序失败?
这可能是杀毒软件造成的。也许是误报,但我不能确定。我的病毒扫描仪(Bitdefender)告诉我以下情况:
"Die Datei C:\Users\Max\usb_driver\installer_x64.exe ist mit Gen:Variant.Tedy.11444 infiziert und wurde in die Quarantäne verschoben.我们建议您执行系统扫描,以清除其他感染"。

许多病毒扫描仪似乎都认为 installer_x64.exe(USB 驱动程序的一部分)带有 "Trojan.Tedy"。我建议改用 Zadig-2.5.exe。 您可以在这里下载.我使用 Zadig-2.5 在我的 Windows 8.1 安装程序(这是我的主机)上安装了 CircuitPython USB 串行驱动程序。
如何停止在 Thonny 的 Pico 上执行代码?
单击进入 Shell,然后按 Ctrl+C。这将停止当前代码的执行:

重复以前在通尼的发言
再次运行相同命令非常方便--在 shell 提示符下按键盘上的向上键,可以调出以前命令的历史记录。
如何知道 Pi Pico 与 Thonny 的连接是否断开?
在尝试运行代码时,您会收到类似这样的错误信息:

这意味着 Thonny 无法写入 Pico 预计使用的串行端口。

在 Thonny 中自动找不到设备错误
如果出现以下错误
无法自动找到设备。
检查连接(确保设备未处于启动加载程序模式)或选择
"在解释器菜单(窗口右下角)中选择 "配置解释器
来选择特定端口或其他解释器。
检查是否选择了正确的解释器。如果设备运行的是 CircuitPython 而不是 MicroPython,则需要选择 CircuitPython(通用) 作为 Thonny 的解释器。有关说明,请参阅本文中的相关信息。
您对 Windows 上的 Pico/MicroPython 有什么建议?
如果您对 Windows 上的 Pico 和 MicroPython 有任何其他入门技巧,请在评论中告诉我们,我们会相应更新文章 🙂。
享受您的 Pico,享受用它完成精彩项目的乐趣!
PiCockpit 上的更多 Pico 博文
如果您喜欢阅读本文,您可能也会喜欢阅读以下内容:
我的系统是 Win 8.1,只有这个网站有 COM 问题的解决方案。非常感谢。
请分享文章链接,其中有 Windows 8.1 中 Board CDC 的解决方案。
您正在阅读的这篇文章介绍了如何在 Windows 8.1 上使用 Board CDC - 使用 2.5 版的 Zadig 工具。
谢谢,Windows 7 64 位系统运行顺利。
非常感谢你的教程!
非常好的教程,你就像我们波兰人说的那样,把咖啡放在桌子上,什么意思呢?太棒了
我需要帮助。 我的 Windows 11 只将 pico 显示为 "便携式设备"。 因此,Putty 无法找到它,所以我得到一个错误信息,说它无法确定路径。
不知道该如何度过难关。
谢谢!
这对我来说是一个很好的介绍!谢谢!
Hola muy bueno, consulto x la inquietud que se me ha presentado
si despues de subir mi codigo a mi pi pico, y la coloco en una placa para que ejecute una tarea x、
si cualquier otro que no sea yo sacara la pi pico de la placa y la conectara a una pc o notebook、
podria leer el codigo que esta en la pi pico a traves por ejemlo de Thonny dando click al icono de abrir carpeta y seleccionando abrir lo que esta en la pi pico.?
有什么方法可以让你不讲课?
谢谢
Putty 和 zadig 对我来说都很有效。出色的教程。