Hello, Raspberry Pi Pico
前言
今年 Raspberry Pi 推出一個比 Pi Zero 還要小的 MCU Board,定名為 Raspberry Pi Pico, 搭載著自家設計的 RP2040 SoC。因為我很喜歡吃 Raspberry(才不是),就很好奇買了一個來玩看看。
外觀
把 Pico 與 Arduino Nano 放在一起比較看看外觀,看起來 Pico 整整比 Nano 大了一截(可是 Pico 不是 Nano 的千分之一倍嗎…)
在麵包板上,Pico 可以很漂亮地放上去,兩旁孔洞數量完美平衡。 而 Nano 卻硬是一邊會比另一邊多一截,對於強迫症來說超不友善的。
硬體規格
然後看一下這個東西的規格吧!
Property | Value |
---|---|
SoC | Raspberry Pi RP2040 |
CPU | Dual-core Arm Cortex-M0+ @ 133MHz |
RAM | 264KB on chip SRAM |
Flash | 2MB on board Q-SPI |
UART | 2x |
SPI | 2x |
I2C | 2x |
PWM | 16x |
Programmable IO | 8x |
ADC | 4x 12-bit, 0.5 MSa/s |
USB | 1.1 Host/Device |
從上面的規格來看,可以知道它是一個 ARM Cortex-M0+ 架構的 microcontroller, 記憶體僅有 264KB,但可以隨時從 2MB Flash 拿取資料,這一點與 Arduino Nano 類似。而且它也有專門的 SPI, I2C 的控制器,可以連接到專門的接腳上使用。
根據維基百科, ARM Cortex-M0+ 的主要特色:
- ARMv6-M architecture
- 2-stage pipeline (one fewer than Cortex-M0)
- Instruction sets: (same as Cortex-M0)
- Thumb-1 (most), missing CBZ, CBNZ, IT
- Thumb-2 (some), only BL, DMB, DSB, ISB, MRS, MSR
- 32-bit hardware integer multiply with 32-bit result
- 1 to 32 interrupts, plus NMI
可以知道它是一個比較精簡的 ARM 32-bit 架構,使用 Thumb-1 大部分指令與 Thumb-2 少部分指令。 Thumb 指令集本來是 ARM 設計給嵌入式裝置使用的精簡版指令, 意在減少記憶體佔用量,這對於記憶體要斤斤計較的裝置來說還蠻重要的。 從這個資料來看,RP2040 就真的是定位在嵌入式裝置上了。
最讓我感興趣的是它有 Programmable IO (簡稱 PIO),它有兩個用途:
- 增加 I2C or SPI IO bus (需要超過兩個 bus 的情況)
- 自訂特殊的 IO bus
聽起來 PIO 的功能蠻強大的,我找個時間去研究看看好了。 XD
Hello World!
看完外觀之後,開始進行一個重要的儀式… Hello World! Pico 的官網上說可以使用 C++ SDK 或是 MicroPython,在這裡我直接從 MicroPython 開始。
裝完 MicroPython 的 firmware 之後,從電腦打指令連到 Pico:
minicom -o -D /dev/tty.usbmodem0000000000001
上面的 /dev/tty.usbmodem0000000000001
是 Pico 在 Mac 上的介面,
以 serial port 形式存在,所以可以使用任何 serial terminal 程式去跟它溝通(minicom, picocom, CoolTerm 之類)。
如果換到 Linux 平台上,出現的裝置名稱會不同,可能會是 /dev/ttyACM0
之類的名稱,需要自己去確認。
連上 Pico 之後,按下 Ctrl-D 進行重設 Pico ,就可以看到此畫面, 代表已經進入 MicroPython REPL 介面了:
然後打上標準的 Hello World 程式:
print("Hello World")
它就會乖乖在 Terminal 上印出結果:
還不夠,我還要讓它上面的 LED 閃!!!
from machine import Pin, lightsleep as sleep
led = Pin(25, Pin.OUT)
while True:
led.toggle()
sleep(1000)
結果如下:
用 rshell 上傳程式碼
如果原本寫很長的 Python 程式,還要用打字一點一點上傳到 REPL 才能給 Pico 跑程式, 而且當把 Pico 重新啟動之後,就會把之前打進去的程式清除掉了。
如果要讓 Python 程式『燒錄』到 Pico 內, 可以用 rshell 把 Python 檔案存到 Pico 內。
rshell
rshell 啟動之後,進入 host 的 shell 畫面(注意,這不是 Pico 的):
然後打上指令,把程式上傳到 Pico 去:
cp blink.py /pyboard/main.py
很簡單對吧?這樣每次啟動 Pico 就會自動執行寫好的程式了。
如果想要重新進入 REPL ,可以用 rshell 進入 Pico 並把 /pyboard/main.py
檔案刪除就好了。
使用 Thonny IDE
也可以直接用 Thonny IDE 去上傳 Python 程式到 Pico 上。
這個 IDE 真的超陽春,感覺上這是給小孩子用的 XD。 剛安裝完 Thonny IDE 之後還需要進入 Preferences 去設定 Interpreter 成 MicroPython (Raspberry Pi Pico),並且把 Port 改成 Pico 所在的 serial port。
把程式碼貼上到 editor 上,按下 Run 按鈕,就可以馬上看到結果了。
總結
Raspberry Pi Pico 感覺上還蠻重視教育領域的,在推出 Pico 就有準備好相應的工具與使用說明, 上手起來不會太困難,甚至有點太簡單了。