Raspberry Pi Pico 是一款與 Arduino 功能相似的微控制器
體積與 Arduino Nano 相若,但性能則比 Arduino Nano 更強
體積與 Arduino Nano 相若,但性能則比 Arduino Nano 更強
外觀
價值 4美元 的 Raspberry Pi Pico 批次 只有主機板,沒有 USB線 及 沒有引腳,因此購買前要留意有否包含配件
Raspberry Pi Pico 正面
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位元 的 類比輸入功能
另外還有
有 *星號 的為預設引腳
額外 3支 偵錯用引腳 SWDIO, SWCLK, GND 及 控制正面 LED 的 GP25
(Raspberry Pi Pico 沒有 GP23 及 GP24)
- 2組 UART
- 第0組 UART 共有 3組引腳 分別為
- 1*, 16, 21 為 TX
- 2*, 17, 22 為 RX
- 第1組 UART 共有 2組引腳 分別為
- 6, 11 為 TX
- 7, 12 為 RX
- 第0組 UART 共有 3組引腳 分別為
- 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
- 第0組 I2C 共有 6組引腳 分別為
- 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
- 第0組 SPI 共有 3組引腳 分別為
有 *星號 的為預設引腳
額外 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
方便記憶
除了最後 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 正式發佈是 2021年1月 ,但最初開發的時間是 2020年
因此版權內容印著 2020
Raspberry Pi Pico 圖案
使用 RP2040 的 RB2-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按鈕
接駁 USB 前先按著 Raspberry Pi Pico 正面上的 BOOTSEL按鈕
使用 BOOTSEL 啟動後,電腦會將 Raspberry Pi Pico 當作 快閃記憶裝置 開啟
裝置中會有 INDEX.HTM 及 INFO_UF2.TXT 兩個唯讀檔案
裝置中會有 INDEX.HTM 及 INFO_UF2.TXT 兩個唯讀檔案
INDEX.HTM 是網頁檔案,使用網頁瀏覽器開啟後,便會自動連接到 Raspberry Pi 的官方網站
INFO_UF2.TXT 是說明當前使用的 Raspberry Pi Pico 的版本及型號
INFO_UF2.TXT 是說明當前使用的 Raspberry Pi Pico 的版本及型號
全新的 Raspberry Pi Pico 並沒有預載一些識別效果,因此無法得知 Raspberry Pi Pico 是否能正常運作
閣下可以使用官方的 閃動 (Blink) 的程式測試效果
可以到 https://www.raspberrypi.org/documentation/rp2040/getting-started/#getting-started-with-c 的 Blink an LED
下載 blank.uf2 或使用指令下載或引導檔案到 Raspberry Pi Pico 的分區目錄
閣下可以使用官方的 閃動 (Blink) 的程式測試效果
可以到 https://www.raspberrypi.org/documentation/rp2040/getting-started/#getting-started-with-c 的 Blink an LED
下載 blank.uf2 或使用指令下載或引導檔案到 Raspberry Pi Pico 的分區目錄
當能夠運作的 UF2檔案 存放到 Raspberry Pi Pico 的分區目錄
Raspberry Pi Pico 便會 自動重新啟動 及 立即顯示效果
例如官方的 blink.uf2 是將焊在正面上的 LED 每250毫秒 閃動效果
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 Boards 及 Raspberry Pi Pico/RP2040 主機板 的 相容程式
安裝 Arduino Mbed OS RP2040 Boards 及 Raspberry Pi Pico/RP2040 主機板 的 相容程式
編譯前選擇 Raspberry Pi Pico 及 Port ,編譯時便會自動編譯成適合 Raspberry Pi Pico 的 UF2檔案
(Raspberry Pi Pico 主機板要選擇 Raspberry Pi 版本,不是 Arduino 版本 或 Adafruit 版本)
(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 ,需要一點 指令操作知識)
有需要的話,將編譯後的 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 執行
但由於每次重新開啟 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
選擇 Raspberry Pi Pico
儲存檔案名稱
但使用 MicroPython 安裝 PY檔案 到 Rasbperry Pi Pico 斷電後重新接上電源,並不會自動執行
如果需要令 Raspberry Pi Pico 接上電源後自動執行,儲存的檔案名稱必須使用 main.py
(大小寫相符)
但使用 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
先將 Thonny 的 直譯器更改為 CircuitPython
但 github 的下載位置看來已經變動,無法經 Thonny 自動下載及安裝 CircuitPython韌體
需要自行到 https://circuitpython.org/board/raspberry_pi_pico/ 下載及安裝 adafruit-circuitpython-raspberry_pi_pico-en_US-6.2.0.uf2
需要自行到 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 ,便會立即顯示效果
只需要直接更新 Raspberry Pi Pico 快閃記憶體的 code.py ,便會立即顯示效果
使用 PWMOut
效果與 MicroPython 相同,只是語法有稍微分別及 CircuitPython 是完全支援 16位元 PWM ,即是最大是 65535 (0xFFFF)
另外因為效果與 MicroPython 相同,因此沒有拍攝,只是展示程式碼
另外因為效果與 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()
不過 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月 送抵在下家中
由於非常受歡迎,推出後很快便被搶購清空, 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 經驗,使用 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 及 CircuiyPython 的語法比 AVR-C 簡單,而且沒有太大限制
例如 功能/方法 (Function/Method) 可以傳回 陣列 (Array)
即使不進行任何操作, AVR-C 必須編寫 void setup() { } 及 void loop() { } 兩個功能,但 MicroPython 及 CircuiyPython 可以空白檔案
而且偵錯只需要列印到標準輸出即可,不需要監察串列輸出,操作相對容易及直接
而 MicroPython 及 CircuitPython 兩者其實都很相似,編寫語法亦很相似
在下建議初學者先學習 MicroPython ,語法上比較簡單,亦可以透過 Thonny IDE 語法、格式化、偵錯等支援
當熟習編寫 Python 後才轉用 CircuitPython ,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群組
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 的檔案,非常方便隨時更新程式
只需要具備讀寫權限制的純文字編輯器便可以更新 Raspberry Pi Pico 的檔案,非常方便隨時更新程式
補充資料
因為在下有一位朋友對電子裝置、微控制器有興趣,因此在下幫忙購買後,焊接時根據引腳用途改用不同顏色
- GPIO 使用綠色引腳
- GND 使用黑色引腳
- 電源 使用紅色引腳
- 功能 使用黃色引腳
- ADC 使用藍色引腳
- DEBUG IO 使用綠色引腳
- DEBUG CLK 使用黃色引腳
雖然要花更多時間配色,但這樣便會比較清晰,不需太多說明資料都能一目了然
因為去除焊接頭上的氧化物,再次焊接 Raspberry Pi Pico 的引腳,比上次更好
(氧化物會降低焊接頭的導熱性,減慢焊錫的熔化速度,很容易有不良焊接)
(氧化物會降低焊接頭的導熱性,減慢焊錫的熔化速度,很容易有不良焊接)
沒有留言 :
張貼留言