2021-05-08

Raspberry Pi Pico 試用

Raspberry Pi Pico 是一款與 Arduino 功能相似的微控制器
體積與 Arduino Nano 相若,但性能則比 Arduino Nano 更強

外觀

價值 4美元 的 Raspberry Pi Pico 批次 只有主機板,沒有 USB線 及 沒有引腳,因此購買前要留意有否包含配件

見下文
見下文
見下文
Raspberry Pi Pico 正面

見下文
見下文
Raspberry Pi Pico 背面
印有 Raspberry Pi Pico 的引腳用途

引腳

Raspberry Pi Pico 共有 40支引腳,當中包括
  • 1支 VSYS ,電源輸入,起動 Raspberry Pi Pico ,接受 1.8V 至 5.5V
  • 1支 VBUS ,電源輸出 5V
  • 1支 3V3 ,電源輸出 3.3V
  • 1支 3V3_EN ,內部電壓調節引腳
  • 1支 ADC_VREF ,類比輸入參考引腳
  • 1支 RUN ,將 GP引腳復位
  • 8支 GND ,接地引腳
  • 26支 GP ,輸入輸出引腳,其中
    • GP0 至 GP15 共 16支引腳 具有 PWM 功能,最高支援 16位元 (GP25 都支援 PWM)
    • GP26 至 GP28 共 3支引腳 具有 12位元 的 類比輸入功能

另外還有
  • 2組 UART
    • 第0組 UART 共有 3組引腳 分別為
      • 1*, 16, 21 為 TX
      • 2*, 17, 22 為 RX
    • 第1組 UART 共有 2組引腳 分別為
      • 6, 11 為 TX
      • 7, 12 為 RX
  • 2組 I2C
    • 第0組 I2C 共有 6組引腳 分別為
      • 1, 6*, 11, 16, 21, 26 為 SDA
      • 2, 7*, 12, 17, 22, 27 為 SCL
    • 第1組 I2C 共有 6組引腳 分別為
      • 4, 9, 14, 19, 24, 31 為 SDA
      • 5, 10, 15, 20, 25, 32 為 SCL
  • 2組 SPI
    • 第0組 SPI 共有 3組引腳 分別為
      • 1, 4, 21* 為 MISO
      • 2, 7, 22* 為 SS
      • 4, 9, 24* 為 SCK
      • 5, 10, 25* 為 MOSI
    • 第1組 SPI 共有 2組引腳 分別為
      • 11, 14 為 MISO
      • 12, 17 為 SS
      • 14, 19 為 SCK
      • 15, 20 為 MOSI

有 *星號 的為預設引腳
額外 3支 偵錯用引腳 SWDIO, SWCLK, GND 及 控制正面 LED 的 GP25
(Raspberry Pi Pico 沒有 GP23 及 GP24)

正面左側引腳 正面右側引腳
用途 編號 編號 用途
GP0 1 40 VBUS 5V
GP1 2 39 VSYS
GND 3 38 GND
GP2 4 37 3V3EN
GP3 5 36 VBUS 3.3V
GP4 6 35 ADC VREF
GP5 7 34 GP28
GND 8 33 GND
GP6 9 32 GP27
GP7 10 31 GP26
GP8 11 30 RUN
GP9 12 29 GP22
GND 13 28 GND
GP10 14 27 GP21
GP11 15 26 GP20
GP12 16 25 GP19
GP13 17 24 GP18
GND 18 23 GND
GP14 19 22 GP17
GP15 20 21 GP16

編號 GP SPI I2C UART 備註
群組 引腳 群組 引腳 群組 引腳
1 0 0 MISO 0 SDA 0 TX PMW 、 UART預設
2 1 0 SS 0 SCL 0 RX PMW 、 UART預設
3 GND
4 2 0 SCK 1 SDA PMW
5 3 0 MOSI 1 SCL PMW
6 4 0 MISO 0 SDA 1 TX PMW 、 I2C預設
7 5 0 SS 0 SCL 1 RX PMW 、 I2C預設
8 GND
9 6 0 SCK 1 SDA PMW
10 7 0 MOSI 1 SCL PMW
11 8 1 MISO 0 SDA 1 TX PMW
12 9 1 SS 0 SCL 1 RX PMW
13 GND
14 10 1 SCK 1 SDA PMW
15 11 1 MOSI 1 SCL PMW
16 12 1 MISO 0 SDA 0 TX PMW
17 13 1 SS 0 SCL 0 RX PMW
18 GND
19 14 1 SCK 1 SDA PMW
20 15 1 MOSI 1 SCL PMW
21 16 0 MISO 0 SDA 0 TX SPI預設
22 17 0 SS 0 SCL 0 RX SPI預設
23 GND
24 18 0 SCK 1 SDA SPI預設
25 19 0 MOSI 1 SCL SPI預設
26 20 1 SDA
27 21 1 SCL
28 GND
29 22
30 RUN
31 26 1 SDA ADC0 / Analog Input 0
32 27 1 SCL ADC1 / Analog Input 1
33 GND / AGND
34 28 ADC2 / Analog Input 2
35 ADCVREF
36 VBUS 3.3V
37 3V3 EN
38 GND
39 VSYS
40 VBUS 5V

見下文
所有 接地引腳 在 Raspberry Pi Pico 的焊墊都是 方形 不是 圓形,較容易分辨
除了最後 10支引腳, Raspberry Pi Pico 每 5支引腳 為一組
每 5n 為 SPI 的 MISO 、 I2C SDA0 、 UART 的 TX
每 5n - 1 為 SPI 的 SS 、 I2C SCL0 、 UART 的 RX
每 5n - 2 為 GND
每 5n - 3 為 SPI 的 SCK 、 I2C SDA1
每 5n - 4 為 SPI 的 MOSI 、 I2C SCL1
方便記憶

其他外觀

見下文
Raspberry Pi Pico 版權內容
雖然 Raspberry Pi Pico 正式發佈是 2021年1月 ,但最初開發的時間是 2020年
因此版權內容印著 2020

見下文
Raspberry Pi Pico 圖案

見下文
使用 RP2040RB2-B0 20/34 CPU

見下文
AEL12.0 是一種 通用振盪器 為 Raspberry Pi 提供 實時時鐘 (Real-time Clock (RTC)) 的參考

見下文
Raspberry Pi Pico 使用 Micro USB Type-B 供電及傳送資料

安裝 UF2 檔案

見下文
如果不是單純將 USB 當作電源接駁 Raspberry Pi Pico ,而是需要將 Raspberry Pi Pico 連接到電腦傳送資料
接駁 USB 前先按著 Raspberry Pi Pico 正面上的 BOOTSEL按鈕

見下文
使用 BOOTSEL 啟動後,電腦會將 Raspberry Pi Pico 當作 快閃記憶裝置 開啟
裝置中會有 INDEX.HTMINFO_UF2.TXT 兩個唯讀檔案

見下文
INDEX.HTM 是網頁檔案,使用網頁瀏覽器開啟後,便會自動連接到 Raspberry Pi 的官方網站
INFO_UF2.TXT 是說明當前使用的 Raspberry Pi Pico 的版本及型號

見下文
全新的 Raspberry Pi Pico 並沒有預載一些識別效果,因此無法得知 Raspberry Pi Pico 是否能正常運作
閣下可以使用官方的 閃動 (Blink) 的程式測試效果
可以到 https://www.raspberrypi.org/documentation/rp2040/getting-started/#getting-started-with-cBlink an LED
下載 blank.uf2 或使用指令下載或引導檔案到 Raspberry Pi Pico 的分區目錄

見下文
當能夠運作的 UF2檔案 存放到 Raspberry Pi Pico 的分區目錄
Raspberry Pi Pico 便會 自動重新啟動 及 立即顯示效果
例如官方的 blink.uf2 是將焊在正面上的 LED 每250毫秒 閃動效果

使用 Arduino IDE 編寫

Raspberry Pi Pico 的 UF2檔案 可以經由 Arduino IDE 附加 RP2040編譯器 而製作
見下文
進入 Arduino IDE 的 Preferences
https://github.com/earlephilhower/arduino-pico/releases/download/global/package_rp2040_index.json
貼在 Additional boards manager URLs

見下文
見下文
見下文
見下文
Boards Manager 搜尋 Raspberry Pi
安裝 Arduino Mbed OS RP2040 BoardsRaspberry Pi Pico/RP2040 主機板 的 相容程式

見下文
編譯前選擇 Raspberry Pi PicoPort ,編譯時便會自動編譯成適合 Raspberry Pi Pico 的 UF2檔案
(Raspberry Pi Pico 主機板要選擇 Raspberry Pi 版本,不是 Arduino 版本 或 Adafruit 版本)

見下文
完成後,編寫的程式碼與 Arduino 的 AVR-C 完全相同

備份 UF2 檔案

見下文
由於 Raspberry Pi Pico 可以非常方便地將 UF2檔案 移放到 Raspberry Pi Pico 的目錄 便完成安裝
有需要的話,將編譯後的 UF2檔案 備份,便可以隨時重新安裝 UF2檔案 到 Raspberry Pi Pico 而不需要任何 編程技術指令操作知識
(Arduino 都可以備份 HEX檔案 ,但需要用 AVR指令 將 HEX檔案 安裝到 Arduino ,需要一點 指令操作知識)

見下文
測試效果 (每1000毫秒閃動)

使用 Thonny IDE 編寫

Linux發行版 提供的 Thonny IDE 由於未必是最新版本,因此還是建議到 https://github.com/thonny/thonny/releases 下載

使用 MicroPython 直譯器
見下文
到 Run 選擇 Select interpreter...

見下文
在 Interpreter 選擇 MicroPython (Raspberry Pi Pico)

見下文
見下文
見下文
安裝 Raspberry Pi Pico 的 韌體
但由於每次重新開啟 Thonny IDE 都需要重新下載 韌體
如果擔心網絡問題,可以到 https://micropython.org/download/rp2-pico/ 下載 Raspberry Pi Pico 的 韌體
當按著 BOOTSEL 起動 Raspberry Pi Pico 後,將 韌體 安裝到 Raspberry Pi Pico 後便會以 main.py 執行

見下文
簡單的測試程式碼
import machine, time

onBoardLED = machine.Pin(25, machine.Pin.OUT)
LED = machine.Pin(0, machine.Pin.OUT)

while True:
    onBoardLED.on()
    LED.off()
    time.sleep(0.5)
    onBoardLED.off()
    LED.on()
    time.sleep(0.5)

見下文
儲存位置
選擇 Raspberry Pi Pico

見下文
儲存檔案名稱
但使用 MicroPython 安裝 PY檔案 到 Rasbperry Pi Pico 斷電後重新接上電源,並不會自動執行
如果需要令 Raspberry Pi Pico 接上電源後自動執行,儲存的檔案名稱必須使用 main.py
(大小寫相符)

見下文
安裝 Python檔案

見下文
測試效果 (每500毫秒閃動)

使用 PWM
見下文
Raspberry Pi Pico 的 PWM 最大範圍為 65025 ,而非 65535 (0xFFFF)
import machine, time

pwm = machine.PWM(machine.Pin(25, machine.Pin.OUT))

while True:
    for i in range(5):          # for (i = 0; i < 5; i++)
        pwm.duty_u16(i * 13005) # analogWrite(pwn, i * 13005);
        time.sleep(0.2)

使用 ADC
ADC 即是 AC DC Converter ,可以將訊號轉換成 類比訊號,類似 Arduino 的 類比引腳 最大範圍為 65535 (0xFFFF)
import machine, time

adc = machine.adc(machine.Pin(28, machine.Pin.IN))

while True:
    print(adc.read_u16()) # analogRead(adc);
    time.sleep(0.2)
使用 CircuitPython 直譯器
見下文
安裝 Raspberry Pi Pico 的 CircuitPython韌體
先將 Thonny 的 直譯器更改為 CircuitPython

見下文
但 github 的下載位置看來已經變動,無法經 Thonny 自動下載及安裝 CircuitPython韌體
需要自行到 https://circuitpython.org/board/raspberry_pi_pico/ 下載及安裝 adafruit-circuitpython-raspberry_pi_pico-en_US-6.2.0.uf2

見下文
與 MicroPython韌體 不同,CircuitPython韌體 安裝後,會將 Raspberry Pi Pico 當作 快閃記憶體 ,預設會有
  • lib函式庫 保存的位置,可以隨意改名
  • boot_out.txt 為 CircuitPython 的說明檔案
  • code.py主程式檔案 ,與 MicroPython 的 main.py 相同

見下文
而且 CircuitPython 比 MicroPython 更方便,CircuitPython 不需要使用 Thonny
只需要直接更新 Raspberry Pi Pico 快閃記憶體的 code.py ,便會立即顯示效果

使用 PWMOut
效果與 MicroPython 相同,只是語法有稍微分別及 CircuitPython 是完全支援 16位元 PWM ,即是最大是 65535 (0xFFFF)
另外因為效果與 MicroPython 相同,因此沒有拍攝,只是展示程式碼
import pwmio, board, time

pwm = pwmio.PWMOut(board.GP25)

while True:
    for i in range(5):
    	pwm.duty_cycle = 13107 * i
    	time.sleep(0.2)

使用 AnalogIn
同樣,效果相同,只是語法有稍微分別及是完全支援 16位元 ADC
不過 CircuitPython 則更簡單使用 value 傳回數值, MicroPython 則需要使用 read_16()
import analogio, board, time

adc = analogio.AnalogIn(board.GP28)

while True:
    print(adc.value)
    time.sleep(0.2)
但由於直接使用文字編輯器更新 code.py ,沒有輸出顯示

總結

在下認為下自己的焊接技巧有進步,今次焊接 Raspberry Pi Pico 的引腳的效果很好,43支引腳都沒有不良焊接

Raspberry Pi Pico 在 2021年1月發佈
由於非常受歡迎,推出後很快便被搶購清空, Rasberry Pi Pico 終於在 2021年4月 送抵在下家中

比較 Arduino IDE 的 Raspberry Pi Pico 函式庫 及 Thonny IDE 的 Raspberry Pi Pico 韌體
有編寫 AVR-C 經驗,使用 Arduino IDE 編寫完全沒有分別
有編寫 Pyhton 經驗,使用 Thonny IDE 編寫 MicroPython 或 CircuitPython 會很快上手
排除學習這類個人能力問題,使用 Thonny IDE 編寫 PY檔案 並安裝 到 Raspberry Pi Pico 比 Arduino IDE 更快

AVR-C 語法
// import libraries
#include <Arduino.h>

// declaration
const byte LED_PIN = 25;

void pinStatus(pin, status) {
    digitalWrite(pin, status);
    delay(500);
}

// do once
void setup() {
    pinMode(LED_PIN, OUTPUT);
}

// do forever
void loop() {
    pinStatus(LED_PIN, HIGH);
    pinStatus(LED_PIN, LOW);
}
MicroPython 語法
# import libraries
import machine, time

# declaration + do once
LED = machine.Pin(25, machine.Pin.OUT)

def LEDStatus(LED, status):
    LED.value(status)
    time.sleep(0.5)

# do forever
while True:
    LEDStatus(LED, True)
    LEDStatus(LED, False)
CircuitPython 語法
# import libraries
import digitalio, board, time

# declaration + do once
LED = digitalio.DigitalInOut(board.GP25)
LED.direction = digitalio.Direction.OUTPUT

def LEDStatus(LED, status):
    LED.value = status
    time.sleep(0.5)

# do forever
while True:
    LEDStatus(LED, True)
    LEDStatus(LED, False)
以上程式的運作結果相同, MicroPython 及 CircuitPython 的語法大致上相同
而 MicroPython 及 CircuiyPython 的語法比 AVR-C 簡單,而且沒有太大限制
例如 功能/方法 (Function/Method) 可以傳回 陣列 (Array)
即使不進行任何操作, AVR-C 必須編寫 void setup() { }void loop() { } 兩個功能,但 MicroPython 及 CircuiyPython 可以空白檔案
而且偵錯只需要列印到標準輸出即可,不需要監察串列輸出,操作相對容易及直接

而 MicroPython 及 CircuitPython 兩者其實都很相似,編寫語法亦很相似
在下建議初學者先學習 MicroPython ,語法上比較簡單,亦可以透過 Thonny IDE 語法、格式化、偵錯等支援
當熟習編寫 Python 後才轉用 CircuitPython ,CircuitPython 有更多函式庫供使用
直接變更 快閃記憶體 的檔案便可以立即有效果,而且備份檔案亦相對簡單

設置上使用 Thonny IDE 比 Arduino IDE 在 Linux 上亦較簡單
Thonny IDE 安裝完後只需要安裝 Raspberry Pi Pico 韌體,便可以將 PY檔案 安裝到 Raspberry Pi Pico
但 Arduino IDE 安裝 Raspberry Pi Pico 函式庫 後,還需要將 使用者帳戶 加入至 dialout群組
即是沒有 root帳戶 或 使用者 不是 super user 便無法設定 dialout群組

見下文
而使用 MicroPython 及 CircuitPython 另一個好處是可以接駁到 Android 將 Raspberry Pi Pico 當作 USB裝置
只需要具備讀寫權限制的純文字編輯器便可以更新 Raspberry Pi Pico 的檔案,非常方便隨時更新程式

補充資料

見下文
因為在下有一位朋友對電子裝置、微控制器有興趣,因此在下幫忙購買後,焊接時根據引腳用途改用不同顏色

見下文
  • GPIO 使用綠色引腳
  • GND 使用黑色引腳

見下文
  • 電源 使用紅色引腳
  • 功能 使用黃色引腳
  • ADC 使用藍色引腳

見下文
  • DEBUG IO 使用綠色引腳
  • DEBUG CLK 使用黃色引腳

見下文
雖然要花更多時間配色,但這樣便會比較清晰,不需太多說明資料都能一目了然

見下文
因為去除焊接頭上的氧化物,再次焊接 Raspberry Pi Pico 的引腳,比上次更好
(氧化物會降低焊接頭的導熱性,減慢焊錫的熔化速度,很容易有不良焊接)

參考資料

沒有留言 :

張貼留言