RP2040 开发板的第一次烧录不需要装任何驱动,也不用找 COM 口。在 Boards Manager 安装 Earle F. Philhower, III 的免费 “Raspberry Pi Pico/RP2040/RP2350” 开发板包,按住板上的 BOOT 键插入 USB,板子就会挂载成一个名为 RPI-RP2 的 U 盘,Arduino IDE 直接把程序写进去。这篇教程带着 RP2040-Zero 从一张空桌子一路做到 OLED 实时读数。
该从哪块 RP2040 开发板入手?
RP2040-Zero 是即插即用的那一款,也是这篇教程用的板子。它是一块邮票大小的深蓝色小板,把 RP2040 的关键部分都做得很顺手:USB-C 直接做在板上,BOOT 和 RESET 按键在正面,两条板边还焊好了黄色排针。底下那颗芯片和大号的兄弟们完全一样:双核 133 MHz Cortex-M0+、264 KB RAM、2 MB flash。
经典款 Raspberry Pi Pico 跑的是同一颗芯片,外形是所有引脚图都围着画的标准 40 脚布局,但出厂只有裸焊盘 —— 上面包板之前,先照我们的排针焊接教程安排一次焊接。RP2040-Tiny 则站在另一个极端:芯片做成邮票孔的可焊模块,USB-C 口和按键放在一块用排线连接的独立转接板上。买它是为了把做完的项目缩小 —— 先通过转接板烧录,再拔掉排线,把模块焊进你的作品里 —— 不是为了写第一个 sketch。
材料清单 —— 开发板、显示屏,以及把它们连起来的数据线和杜邦线
Parts list
想留一块面包板底座方便以后扩展?Zero 焊好的排针可以直接插进 400 孔面包板,OLED 那四条连线改用公对公杜邦线照接就行。
怎么为 RP2040 设置 Arduino IDE?
装上开发板包之前,Arduino IDE 并不认识 RP2040。在 File → Preferences 里,把这个地址粘贴进 Additional boards manager URLs:
https://github.com/earlephilhower/arduino-pico/releases/download/global/package_rp2040_index.json
然后打开 Boards Manager,搜索 “pico”,安装 Earle F. Philhower, III 的 Raspberry Pi Pico/RP2040/RP2350,再到 Tools → Board 选 Waveshare RP2040 Zero。这个选择比看上去重要得多 —— 下一节你就知道为什么。
接下来是让 ESP32 过来的人最意外的部分:没有装驱动这一步。ESP32 开发板要靠一颗独立的桥接芯片才能说 USB,厂商驱动没装好之前电脑什么都看不见 —— 我们那篇“板子识别不到”教程就是专门收拾这摊子的。RP2040 自己就会说 USB,靠的是出厂时固化在芯片 ROM 里的引导程序。按住 BOOT 再上电,这段 ROM 就把芯片枚举成一个普通的 USB 大容量存储设备 —— 和 U 盘同一个类别,所以驱动每个操作系统都自带。电脑上会出现一个名为 RPI-RP2 的磁盘,任何拖进去的 UF2 文件都会被写进 flash。因为这段 ROM 永远不会被覆盖,再失败的上传也变不成砖:按住 BOOT 重插一次,它一定回来。
这套按键动作只需要做一次。点 Upload,IDE 会自己把 UF2 写进那个磁盘;从那以后,每个 sketch 都自带一个 USB 串口,IDE 靠它自动把板子重启进引导模式。就算要恢复,Zero 的 RESET 键也帮你省掉重插:按住 BOOT,点一下 RESET,松开 BOOT,RPI-RP2 就回来了。关于线本身有一句提醒:只充电的 USB 线没有数据芯线,那个磁盘永远不可能出现 —— 材料清单里那条线是数据线。

为什么 Blink 例程在 RP2040-Zero 上会失败?
给 RP2040-Zero 编译经典的 Blink,IDE 会停在 error: 'LED_BUILTIN' was not declared in this scope。这个报错正是开发板包在尽职。核心里的每块板都带一个小小的引脚定义文件,写明硬件上真正有什么,而 Zero 的文件刻意不定义 LED_BUILTIN —— 因为整块板上根本没有普通 LED。改选普通的 “Raspberry Pi Pico” 呢?Blink 顺利编译、顺利上传,然后什么也不闪:那份文件把 LED_BUILTIN 指到 GP25,官方 Pico 的绿色 LED 就在那里,而 Zero 的 GP25 只通到一个没接任何东西的裸邮票孔焊盘。一个看得懂的编译错误,胜过一个要你去调试的无声无息。
Zero 板上那颗灯,弄明白之后其实比普通 LED 更好:它是接在 GP16 上的一颗 WS2812 可寻址 RGB 像素。它内部有自己的小小控制器,这颗控制器要的是以 800 kHz 精确定时的脉冲串送来的 24 位颜色数据 —— digitalWrite() 给出的持续 HIGH 对它毫无意义。从 Library Manager 安装 Adafruit NeoPixel 库,真正的第一次闪烁是这样的:
// RP2040-Zero 上的第一次闪烁。板载“LED”其实是 GP16 上的一颗 WS2812 RGB 像素,
// 所以驱动它靠的是数据,不是 HIGH/LOW 电平。
#include <Adafruit_NeoPixel.h>
// PIN_NEOPIXEL 来自这块板自己的引脚定义文件,在这里等于 16。
Adafruit_NeoPixel led(1, PIN_NEOPIXEL, NEO_GRB + NEO_KHZ800);
void setup() {
led.begin();
led.setBrightness(40); // 桌面距离下全亮度太刺眼
}
void loop() {
led.setPixelColor(0, led.Color(0, 150, 0)); // 绿色
led.show();
delay(500);
led.setPixelColor(0, 0); // 熄灭
led.show();
delay(500);
}
编译出来是 56,764 字节 —— 不到 Zero flash 容量的 3%。我们的 WS2812 教程会带着同一颗像素继续走向灯条和灯环。

RP2040 的引脚图要怎么看?
在任何一块 RP2040 开发板上,一个引脚的身份是它的 GP 编号,不是它的物理位置。芯片共有 30 个 GPIO,从 GP0 到 GP29,每块板只是各自选择把其中哪些引到板边 —— 所以照 GP 编号写的代码在 Pico 和 Zero 之间原样通用,任何引脚图也都能用,只要你对标签,而不是数角落。Zero 的排针引出了 GP0–GP15 加上四个带模拟功能的引脚;GP16 在板内被 WS2812 占用,另有九个 GPIO 只以板底边缘焊盘的形式出现:
| Zero 上的标签 | 它是什么 |
|---|---|
| 5V | 直接来自 USB 线的电源 —— 用来给 5 V 器件供电的输出,绝不是信号脚 |
| 3V3 | 板载稳压器的 3.3 V 输出 —— 芯片自己跑的那条电源轨 |
| GND | 桌上所有东西共用的地 |
| GP0–GP15 | 数字 I/O;UART、SPI、I2C 和 PWM 都可以映射到它们上面 |
| GP26–GP29 | 兼作模拟输入 ADC0–ADC3 的数字 I/O |
| GP16 | 不在排针上 —— 它驱动板载的 WS2812 像素 |
| GP17–GP25 | 同样不在排针上 —— 板子底边的裸焊盘,留给焊接式作品而不是杜邦线 |
有一条规则保这块板的命:RP2040 的 I/O 跑在 3.3 V 轨上,引脚不耐 5 V —— 5V 引脚的存在是为了给 5 V 器件供电,绝不能碰任何 GP 引脚。
OLED 怎么接线 —— 顺便把引脚图用起来?
收官作品是一块实时读数屏,而且不用面包板也不用焊接:Zero 焊好的排针是公针,0.96 寸 OLED 预装的 4 针排针也是公针,四条母对母杜邦线直接把两边桥起来。先改掉一个习惯:这块 OLED 的排针顺序是 GND VCC SCL SDA —— 地在最前,和很多常见模块正好相反。通电之前,认丝印,别认肌肉记忆。
| OLED 引脚 | RP2040-Zero 引脚 | 为什么 |
|---|---|---|
| GND | GND | 总线的共同参考点 |
| VCC | 3V3 | SSD1306 用 3.3 V 跑得很好,总线电平也正好和芯片一致 |
| SCL | GP5 | GP5 属于芯片的 I2C0 时钟组 |
| SDA | GP4 | GP4 属于芯片的 I2C0 数据组 |
GP4 和 GP5 不是随手挑的。RP2040 允许每个接口出现在好几组引脚上,规律是固定的:从 GP0 起每隔四个引脚可以当 I2C0 的 SDA,从 GP1 起每隔四个当它的 SCL。sketch 用 Wire.setSDA(4) 和 Wire.setSCL(5) 把这个选择大声说出来 —— 各一行,接线就写进了代码里,而不是记在你脑子里。这块屏由 SSD1306 控制器驱动,应答的 I2C 地址是 0x3C;而第一个读数,芯片自己就带着数据来:RP2040 有片上温度传感器,一个调用就能读。先从 Library Manager 安装 Adafruit SSD1306,IDE 问起时让它顺带装上依赖的 Adafruit GFX。
// RP2040-Zero + 0.96 寸 SSD1306 OLED,走 I2C0:芯片温度实时读数。
// 接线:OLED GND -> Zero GND,VCC -> 3V3,SCL -> GP5,SDA -> GP4。
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
Adafruit_SSD1306 oled(128, 64, &Wire, -1);
void setup() {
// 把引脚明说出来,而不是信任默认值:GP4 在芯片的
// I2C0-SDA 组里,GP5 在它的 I2C0-SCL 组里。
Wire.setSDA(4);
Wire.setSCL(5);
oled.begin(SSD1306_SWITCHCAPVCC, 0x3C); // 这块模块的应答地址是 0x3C
oled.setTextColor(SSD1306_WHITE);
}
void loop() {
float t = analogReadTemp(); // RP2040 自带的片上传感器,单位摄氏度
oled.clearDisplay();
oled.setTextSize(1);
oled.setCursor(0, 0);
oled.print("RP2040 core temp");
oled.setTextSize(3);
oled.setCursor(0, 24);
oled.print(t, 1);
oled.setTextSize(2);
oled.print(" C");
oled.display();
delay(1000);
}
这一个编译出来是 71,100 字节,而屏上那个数字是推导出来的,不是魔法:传感器在 27 °C 时输出 0.706 V,温度每升一度电压降 1.721 mV,所以核心按 27 − (V − 0.706) / 0.001721 来算 —— 公式直接出自 RP2040 数据手册。读数比室温高几度是正常的:它量的是芯片自己的温度,指尖按在芯片上数字就会动。等这块屏想要一个真正的交互界面时,我们的旋转编码器菜单教程就是顺理成章的下一步 —— 同一块屏,同一条 I2C 总线。

我们常见到的错误
线能充电,磁盘却始终不出现。只充电的 USB 线没有数据芯线,RPI-RP2 根本不可能出现,板子看起来就像坏了。先换一条确认过的数据线,再去怀疑硬件。
板子在 BOOTSEL 模式里,人却在找 COM 口。引导模式下板子是一个 U 盘,不是串口设备 —— 列表里没有端口才是正确的表现。端口要等 sketch 跑起来才会出现。
Blink “成功了”,却什么也没发生。板型菜单选了普通的 Raspberry Pi Pico,驱动的是 GP25,而 Zero 的 GP25 只是一个没接 LED 的裸焊盘。改选 Waveshare RP2040 Zero,用 NeoPixel 类的库去驱动 GP16 上的 WS2812。
凭习惯把 OLED 按 VCC 在前接线。这块模块的排针顺序是 GND VCC SCL SDA,凭习惯接线等于把供电反着加在屏上。每一次通电之前,都读一遍模块上的丝印。
5 V 传感器的输出直接进了 GP 引脚。RP2040 的引脚只认 3.3 V。用 5V 引脚给 5 V 器件供电没问题,但它们的信号线要先分压再进芯片。
常见问题
该从 Raspberry Pi Pico 还是 RP2040-Zero 入手?
同一颗芯片,同样的代码,不同的包装。Zero 到手就焊好排针、带 USB-C,起步更快;Pico 给你的是网上每张引脚图都对得上的标准 40 脚外形,焊盘要自己焊。
这个作品需要焊接吗?
不需要。Zero 的排针和 OLED 的 4 针排针出厂都焊好了,四条母对母杜邦线直接一针对一针。只有选了 Pico 或者 RP2040-Tiny 那条路线,焊接才会进场。
RP2040 可以改跑 MicroPython 吗?
可以 —— 同一个 RPI-RP2 磁盘也接受 MicroPython 固件的 UF2,之后板子改跟 Thonny 对话,而不是 Arduino IDE。这篇教程留在 Arduino,这样你在 Uno 和 ESP32 上写 sketch 的经验可以直接搬过来。
RP2040 的引脚耐 5V 吗?
不耐。所有 GPIO 都跑 3.3 V 逻辑,5 V 上到引脚就是在赌芯片的命。Zero 的 5V 引脚是从 USB 引出的电源输出,用来给 5 V 器件供电 —— 它们的信号线仍然要先分压到 3.3 V。
第一次插上板子,为什么没有 COM 口?
COM 口是由正在运行的 sketch 创建的,不是芯片天生就有,所以新板子端口列表空着是正常现象,不是故障。按住 BOOT 再插入,板子会挂载成 RPI-RP2 磁盘;随便上传一个 sketch,核心就会加上一个 USB 串口,IDE 里从此和其他 Arduino 一样列出来。
这一页要养成的习惯,就是这个平台本身:对 GP 编号而不是对位置,查清一块板的引脚文件到底定义了什么 —— 然后每一块 RP2040 板,不管是 Zero、Pico 还是成品里的一块邮票孔模块,都是同一台机器。
最后更新:2026年8月。有问题?WhatsApp 联系我们。



RP2040-Zero Microcontroller Board Raspberry Pi Dual Core ARM Cortex M0+ 133MHz USB Type-C DIY Project
0.96‘ OLED Display Module Blue White Screen I2C IIC Serial 128X64 LCD Display Board - 0.96' OLED WHITE
Data Cable Type-A Type-C MicroUSB Type-B 0.5m 1m 30cm 0.3m 100cm Data Transfer Upload Code - TYPE-A TO TYPE-C CABLE (1.0M)
40pcs Dupont Wire 10cm 20cm 30cm for Breadboard DIY Experiment Jumper Wire Breadboard wire - DUPONT WIRE F-F 20CM
MB102 Breadboard 170 400 830 Holes Breadboard Donut Board Arduino Prototype Multi Color - BREADBOARD (400 HOLES)
40pcs Dupont Wire 10cm 20cm 30cm for Breadboard DIY Experiment Jumper Wire Breadboard wire - DUPONT WIRE M-M 20CM