先来捋清楚 Raspberry Pi Pico 这几个字的含义:
Raspberry Pi 是品牌
Pico 是子品牌,包含 Pico 和 Pico W (带无线功能)两种开发板
RP2040 是 Pico 开发板用到的 MCU
一下统一以 Pico 来称呼。
看到有些搭建需要用到 Pico ,当然程序移植到其他 MCU 也是可以的,不过略显麻烦。
由于是 Pico 开源的,有很多兼容的开发板,引脚一致的,但是有的板上集成了WS2812,比原板还好用,价格还更好。
Pico 支持很多编程方式,先使用熟悉的 arduino1.8.19 试试看。
1.插上USB线,Windows里应该看到如下设备,如果已经运行其他使用串口的程序则可能不是,那么按住boot键不放再插即可。
2. Arduino 里安装该板的环境,如下搜索后安装即可,速度不错,比ESP32舒适。
3. 例程里面找到下面这个上传即可,然后可以看到这个模拟键盘就开始干活了:HelloworldHelloworldHelloworldHelloworld。。。往任何能键盘输入的地方发送文字了
4. 老规矩,闪个灯先, 板载 LED对应的是 GPIO25
#define LED 25
void setup() {
pinMode(LED, OUTPUT);
}
void loop() {
digitalWrite(LED, HIGH);
delay(200);
digitalWrite(LED, LOW);
delay(500);
}
5. 板上有一颗WS2812,对应的是 GPIO23,这是兼容比原板还好的地方,嗯之一,还有之二就是改了TypeC口。
不过这里有个坑:
实测这颗 WS2812 默认没有连接到任何引脚,但是在附近有一个焊盘,写着RGB,实际测量一下,只要用焊锡短路这个焊盘就可以用了。这也是山寨工业的强项:没有说明,一切靠猜!
#include <Adafruit_NeoPixel.h>
Adafruit_NeoPixel pixels(/*NUMPIXELS*/1, /*PIN*/23, NEO_GRB + NEO_KHZ800);
void setup() {
pixels.begin();
}
void loop() {
pixels.setPixelColor(0, pixels.Color(20, 0, 0));
pixels.show();
delay(1000);
pixels.setPixelColor(0, pixels.Color(0, 20, 0));
pixels.show();
delay(1000);
pixels.setPixelColor(0, pixels.Color(0, 0, 20));
pixels.show();
delay(1000);
}
6. 抓到 Bug 一只(或许是特性):Pico默认的USB上传方式并不是串口,一旦程序里启用串口即 Serial.begin() 上传一次后 , “RP2 boot ”会消失,设备列表里面会多出一个串口。那么后面再次上传时 IDE的下载方式自动变更到这个新出现的串口,上传程序失败,还没法改。那就需要回到1 里面提到的,按住boot键不放再上电即可。不用串口则没有这个问题,可以像使用UNO一样重复点上传都是可以的。
接下来,跑跑流行的 MicroPython:
1. 电脑端软件使用 uPyCraft (其他软件也行,哪个顺手用哪个)
2. 按住boot键不放再上电,看到盘符 RPI-RP2
3. 官网下载固件 rp2-pico-20230203-unstable-v1.19.1-852-g9ea64a36a.uf2
4. 把这个文件拖进 RPI-RP2 盘里面。
5. 按板上的 reset 按键,这时 MicoPython 准备好了。
可以看出 Pico 刷固件真是很方便,比其他的 MCU 比如 ESP32 方便很多.
Pico出厂默认预装MicroPython固件,上面这些操作其实可以不做的,我是先用了arduino才需要刷一次。
惯例闪个灯:(关于 uPyCraft 的使用百度很多)
import machine
import utime
led_onboard = machine.Pin(25, machine.Pin.OUT) # GP25
while True:
led_onboard.value(1) # 点亮
utime.sleep(0.1) # 等待1秒
led_onboard.value(0) # 熄灭
utime.sleep(0.9) # 等待1秒