期待已久nanoFramework 社区终于在近期正式合并了对树莓派 RP2040 及其 Wi-Fi 版本的底层支持。另外RP2350 开发板的支持也在规划中。1. 背景Raspberry Pi Pico 是树莓派基金会推出的一款基于 RP2040 双核微控制器的开发板因其低成本、丰富的 GPIO 和强大的性能而备受嵌入式开发者欢迎。nanoFramework 作为一个开源的 .NET 运行时环境长期以来一直受到社区的热切期待希望能在 Pico 上运行 .NET 应用。相关的 GitHub 议题 #687 Support for Raspberry Pi Pico[1]已于2026年4月23日完成并关闭标志着官方对 RP2040 的支持正式到位。2. 快速上手官方的nanoff工具已经支持 RP2040 和 其 Wifi 版本的最新固件直接使用 nanoff 命令行工具即可一键秒刷。按住开发板上的 BOOT/BOOTSEL 键不放插入 USB 线连上电脑识别为 U 盘后松开按键然后在终端执行# 针对普通 RP2040 开发板 nanoff --platform rpi_pico --target RP_PICO_RP2040 --update # 针对带 Wi-Fi 的版本 nanoff --platform rpi_pico --target RP_PICO_W_RP2040 --update固件烧录关于nanoff相关使用和 nanoFramework 快速入门可以参考官方文档或我之前的 nanoFramework 系列文章。如果你不想用命令行工具也可以去 Cloudsmith[2]仓库下载 uf2 固件将下载的 uf2 文件拖放到设备中即可完成烧录。刷入完成后打开 Visual Studio 的 nanoFramework 插件就可以看到设备了。设备在线3. 运行测试对于这个设备的测试如果想快速的在物理世界看到控制结果那么你可能会兴奋的打开 VS准备写一段控制板载 LED 闪烁或者读取板载 BOOT 按键的代码。不过你大概率会碰壁因为我就是这样过来的。特别是测试未焊接的板子。3.1 为什么不能直接点亮板载 LED我这边测试的是微雪 RP2040-Zero 迷你开发板板载 LED 是一颗连接在 GPIO 16 上的 WS2812。这种灯需要极其严格的纳秒级时序通常依赖 RP2040 独有的 PIO 外设。但目前因为刚刚支持 nanoFramework 的 RP2040 底层尚未实现 PIO 支持也没有类似 ESP32 那种傻瓜式的 RMT 驱动。所以目前还无法直接通过 GPIO API 来控制板载 LED。RP2040-Zero如果自己来实现就需要费很大的功夫了还是等官方后续更新吧。3.2 如何测试这块板子上的 RESET 是必然不能用的虽说还有一个 BOOT 按键但连接的是QSPI_SS_N引脚不像 ESP32 那样直接把 BOOT 键当普通按钮用如果想用需要费上一番功夫。这样看起来想快速做个简单测试这两条路都不太好走。那么如何快速测试呢其实思路也很简单我们只需要额外一根杜邦线或是回形针金属镊子即可。然后挑一个边缘的 GPIO将其配置为“带有内部上拉的输入模式”。这样它默认是高电平只要将它和 GND 短接一下就会产生一个完美的低电平信号来测试 GPIO 输入功能。不过需要注意的是针对这个板子来说GNG 在左边而且前面是 5vGNG3v3GP29 挨着而且丝印位置容易误读搞错直接设备报废是极其危险的。为了防止手抖误触我们可以使用右边的逻辑引脚GP0、GP1、GP2、GP3 这四个引脚都在右侧边缘位置误触的风险较小。这样测试思路就很清晰了在代码里配置 GP0 为输出模式并拉低扮演 GND 的角色配置 GP1 为输入模式带上内部上拉默认是高电平这样只要把 GP0 和 GP1 短接一下就会看到 GP1 变为低电平具体的事件触发代码如下public staticvoidMain() { Debug.WriteLine(RP2040 C# 极简测试启动); GpioController gpio new GpioController(); // 设置 GP0 为输出并拉低扮演 GND 的角色 GpioPin fakeGndPin gpio.OpenPin(0); fakeGndPin.SetPinMode(PinMode.Output); fakeGndPin.Write(PinValue.Low); // 设置 GP1 为带有内部上拉的输入模式 GpioPin testPin gpio.OpenPin(1); testPin.SetPinMode(PinMode.InputPullUp); // 监听 GP1 的引脚电平变化事件 testPin.ValueChanged (sender, e) { // 当 GP1 被短接到 GP0 时触发事件 if (e.ChangeType PinEventTypes.Falling) { Debug.WriteLine(⚡ 触发了点击事件(GP1 与 GP0 短接)); } }; // 保持主线程运行等待事件触发 Thread.Sleep(Timeout.Infinite); }测试结果4. 最后总的来说nanoFramework 对 RP2040 的支持是一个非常令人兴奋的消息虽然目前还处于初期阶段但基础功能已经到位。未来随着官方对 PIO 等功能的支持我们将能够在 Pico 上实现更多丰富的 .NET 应用敬请期待References[1]#687 Support for Raspberry Pi Pico:https://github.com/nanoframework/Home/issues/687?wt.mc_idDT-MVP-5005195[2]Cloudsmith:https://cloudsmith.io/~net-nanoframework/repos/nanoframework-images/packages/detail/raw/RP_PICO_RP2040/#versions
nanoFramework 正式支持 Raspberry Pi Pico RP2040
发布时间:2026/5/25 8:29:56
期待已久nanoFramework 社区终于在近期正式合并了对树莓派 RP2040 及其 Wi-Fi 版本的底层支持。另外RP2350 开发板的支持也在规划中。1. 背景Raspberry Pi Pico 是树莓派基金会推出的一款基于 RP2040 双核微控制器的开发板因其低成本、丰富的 GPIO 和强大的性能而备受嵌入式开发者欢迎。nanoFramework 作为一个开源的 .NET 运行时环境长期以来一直受到社区的热切期待希望能在 Pico 上运行 .NET 应用。相关的 GitHub 议题 #687 Support for Raspberry Pi Pico[1]已于2026年4月23日完成并关闭标志着官方对 RP2040 的支持正式到位。2. 快速上手官方的nanoff工具已经支持 RP2040 和 其 Wifi 版本的最新固件直接使用 nanoff 命令行工具即可一键秒刷。按住开发板上的 BOOT/BOOTSEL 键不放插入 USB 线连上电脑识别为 U 盘后松开按键然后在终端执行# 针对普通 RP2040 开发板 nanoff --platform rpi_pico --target RP_PICO_RP2040 --update # 针对带 Wi-Fi 的版本 nanoff --platform rpi_pico --target RP_PICO_W_RP2040 --update固件烧录关于nanoff相关使用和 nanoFramework 快速入门可以参考官方文档或我之前的 nanoFramework 系列文章。如果你不想用命令行工具也可以去 Cloudsmith[2]仓库下载 uf2 固件将下载的 uf2 文件拖放到设备中即可完成烧录。刷入完成后打开 Visual Studio 的 nanoFramework 插件就可以看到设备了。设备在线3. 运行测试对于这个设备的测试如果想快速的在物理世界看到控制结果那么你可能会兴奋的打开 VS准备写一段控制板载 LED 闪烁或者读取板载 BOOT 按键的代码。不过你大概率会碰壁因为我就是这样过来的。特别是测试未焊接的板子。3.1 为什么不能直接点亮板载 LED我这边测试的是微雪 RP2040-Zero 迷你开发板板载 LED 是一颗连接在 GPIO 16 上的 WS2812。这种灯需要极其严格的纳秒级时序通常依赖 RP2040 独有的 PIO 外设。但目前因为刚刚支持 nanoFramework 的 RP2040 底层尚未实现 PIO 支持也没有类似 ESP32 那种傻瓜式的 RMT 驱动。所以目前还无法直接通过 GPIO API 来控制板载 LED。RP2040-Zero如果自己来实现就需要费很大的功夫了还是等官方后续更新吧。3.2 如何测试这块板子上的 RESET 是必然不能用的虽说还有一个 BOOT 按键但连接的是QSPI_SS_N引脚不像 ESP32 那样直接把 BOOT 键当普通按钮用如果想用需要费上一番功夫。这样看起来想快速做个简单测试这两条路都不太好走。那么如何快速测试呢其实思路也很简单我们只需要额外一根杜邦线或是回形针金属镊子即可。然后挑一个边缘的 GPIO将其配置为“带有内部上拉的输入模式”。这样它默认是高电平只要将它和 GND 短接一下就会产生一个完美的低电平信号来测试 GPIO 输入功能。不过需要注意的是针对这个板子来说GNG 在左边而且前面是 5vGNG3v3GP29 挨着而且丝印位置容易误读搞错直接设备报废是极其危险的。为了防止手抖误触我们可以使用右边的逻辑引脚GP0、GP1、GP2、GP3 这四个引脚都在右侧边缘位置误触的风险较小。这样测试思路就很清晰了在代码里配置 GP0 为输出模式并拉低扮演 GND 的角色配置 GP1 为输入模式带上内部上拉默认是高电平这样只要把 GP0 和 GP1 短接一下就会看到 GP1 变为低电平具体的事件触发代码如下public staticvoidMain() { Debug.WriteLine(RP2040 C# 极简测试启动); GpioController gpio new GpioController(); // 设置 GP0 为输出并拉低扮演 GND 的角色 GpioPin fakeGndPin gpio.OpenPin(0); fakeGndPin.SetPinMode(PinMode.Output); fakeGndPin.Write(PinValue.Low); // 设置 GP1 为带有内部上拉的输入模式 GpioPin testPin gpio.OpenPin(1); testPin.SetPinMode(PinMode.InputPullUp); // 监听 GP1 的引脚电平变化事件 testPin.ValueChanged (sender, e) { // 当 GP1 被短接到 GP0 时触发事件 if (e.ChangeType PinEventTypes.Falling) { Debug.WriteLine(⚡ 触发了点击事件(GP1 与 GP0 短接)); } }; // 保持主线程运行等待事件触发 Thread.Sleep(Timeout.Infinite); }测试结果4. 最后总的来说nanoFramework 对 RP2040 的支持是一个非常令人兴奋的消息虽然目前还处于初期阶段但基础功能已经到位。未来随着官方对 PIO 等功能的支持我们将能够在 Pico 上实现更多丰富的 .NET 应用敬请期待References[1]#687 Support for Raspberry Pi Pico:https://github.com/nanoframework/Home/issues/687?wt.mc_idDT-MVP-5005195[2]Cloudsmith:https://cloudsmith.io/~net-nanoframework/repos/nanoframework-images/packages/detail/raw/RP_PICO_RP2040/#versions