National Central University
Uedu Main Site
Explore Uedu
Student Console
Register as Member/Login
Research Informed Consent Center
Survey Center
Educational Big Data Challenge
Claim or create a course
Try an AI Scenario Task
Support & Messages
Uptime Data

UeduGPTs

--

Jupyters

3

Local AI

--

Uedu Code

--

中央大學 AQI 80 24°C PM2.5 21
AI Reply Desktop Notifications

Show a desktop notification when the AI TA finishes replying

Chat Message Notifications

Notify me when classmates post messages in the forum

Sound notification

Play an alert sound whenever there is a new notification

Unit 13

Raspberry Pi Pico

RP2040 微控制器與 MicroPython
Interaction導覽 25 minute(s)

Learning Objectives

  • 說出 RP2040 微控制器的主要規格,以及 Pico、Pico W、Pico 2 的差別
  • 用 BOOTSEL 按鈕與 UF2 檔案把 MicroPython 裝到 Pico 上
  • 用 Pin("LED") 控制板上 LED,用 GP 編號控制外接 LED 與按鈕
  • 用 ADC 讀取可變電阻的電壓,再用 PWM 的 duty_u16 調整 LED 亮度

Raspberry Pi 做的微控制器

提到 Raspberry Pi,多數人想到的是可以接螢幕、跑 Linux 的單板電腦(樹莓派軌整個軌道都在講它)。 Raspberry Pi Pico 是同一家公司做的另一種板子:它不是電腦,而是微控制器開發板,和 ESP32、micro:bit 同一類。 它沒有作業系統,通電後就執行你燒進去的程式,適合做「一直重複做一件事」的作品。

Pico 在 2021 年 1 月推出,板子上的晶片 RP2040 是 Raspberry Pi 自己設計的微控制器。官方文件列出的主要規格:

項目 RP2040(Pico、Pico W)
處理器 雙核心 Arm Cortex-M0+,最高 133 MHz
記憶體(SRAM) 264 KB
板上快閃記憶體 2 MB(放韌體與你的程式檔)
GPIO 26 支多功能腳位
類比輸入(ADC) 3 支可用的 12 位元類比輸入
PWM 16 個通道
序列通訊 UART、SPI、I2C 各 2 組
PIO 8 個可程式化 I/O 狀態機

拿它和上一課的 micro:bit、ESP32 軌的 ESP32 比:Pico 本身沒有無線網路,但腳位多、官方文件完整; 需要 Wi-Fi 時有 Pico W(多一顆無線晶片)。2024 年 8 月推出的 Pico 2 換成 RP2350 晶片 (Arm Cortex-M33 或 RISC-V 核心可選,最高 150 MHz、520 KB SRAM、4 MB 快閃記憶體),腳位排列和 Pico 相容。

這一課用 MicroPython 寫 Pico。語法和 ESP32 幾乎一樣,差別主要在腳位編號與幾個硬體細節。

腳位:GP 編號、3.3V 與幾支保留給板子的腳

Pico 兩側共 40 個接點,板子背面印的 GP0~GP28 是 GPIO 編號,程式裡 Pin(15) 就是 GP15。 注意實體腳位號碼(1~40)和 GP 編號不一樣,接線時看 GP 編號。

你要接的東西 用哪些腳 說明
LED、按鈕 任何 GP 腳 數位輸入輸出,3.3V 邏輯
可變電阻、光敏電阻 GP26、GP27、GP28 只有這三支能讀類比電壓(ADC0~ADC2)
電源 3V3(OUT)、VSYS、VBUS、GND 下面說明

幾個 Pico 特有的細節(來自官方資料表):

  • 板上 LED 在 Pico 接到 GP25;在 Pico W 接到無線晶片,不是 RP2040 的腳位。所以 MicroPython 用名稱 Pin("LED"),兩種板子都通用。
  • GP29 在板子內部用來量 VSYS 電壓(先除以 3),不能拿來接感測器;第 15 課會用它監測電池。
  • ADC 腳位的輸入電壓不能超過 3.3V 再加約 0.3V,所以可變電阻要接 3V3,不要接 5V。
  • 3V3(OUT) 可以供電給外接模組,官方建議負載低於 300 mA。

和 ESP32 一樣,Pico 的 GPIO 是 3.3V 邏輯。上一課 micro:bit、這一課 Pico、ESP32 軌都用 3.3V;第 14 課的 Arduino UNO 用 5V,混接時要小心。

把 MicroPython 裝到 Pico 上

Pico 出廠時沒有 MicroPython。安裝不需要燒錄器,只要一條可以傳資料的 USB 線(有些線只能充電)。

  1. 1

    下載對應板子的 UF2 檔

    到 MicroPython 官網的下載頁,找你手上的板子:Pico、Pico W、Pico 2 各有不同的檔案,選錯會無法開機或沒有 Wi-Fi 功能。 下載的是副檔名 .uf2 的韌體檔。

  2. 2

    按住 BOOTSEL,再插上 USB

    板子上有一顆白色的 BOOTSEL 按鈕。先按住它,再把 USB 插到電腦,插好後放開。 電腦會出現一個新的隨身碟:Pico 叫 RPI-RP2,Pico 2 叫 RP2350。這是晶片內建的開機程式,不會被你的程式弄壞,所以把板子「玩壞」時也可以用同樣的方法重來。

  3. 3

    把 UF2 檔拖進隨身碟

    把 .uf2 檔複製到那個隨身碟。複製完成後板子會自動重新開機,隨身碟消失,這代表韌體寫入完成。 之後一般插上 USB(不按 BOOTSEL),電腦看到的是一個序列埠,MicroPython 就在另一端等你。

  4. 4

    連線:Thonny 或 mpremote

    初學者常用 Thonny 編輯器:右下角選「MicroPython (Raspberry Pi Pico)」就能連線,按綠色箭頭執行。 習慣用終端機的話,MicroPython 官方的 mpremote 工具可以列出板子、直接執行電腦上的檔案、複製檔案進去。 下面的序號與連接埠名稱每台電腦不同。

  5. 5

    run 與 main.py 的差別

    • mpremote run 檔案:把程式送到板子的記憶體執行,不會存進板子,拔掉電源就沒了,適合邊改邊試。
    • 存成板子上的 main.py:開機時自動執行,拔掉 USB 改接電池也會跑,作品完成時才這樣做。

    ESP32 軌第 16 課會詳細介紹開機檔案 boot.py 與 main.py,Pico 的規則相同。

這段導覽完成了

逐步看:板上 LED 閃三次

不用接任何線,先讓板上 LED 閃。上方電路畫面的板子左下角就是板上 LED。 這裡用 toggle():不管現在是亮還是暗,都換成另一種狀態。

逐步看:按鈕控制外接 LED

外接 LED 接 GP15(串 220Ω 到 GND),按鈕一腳接 GP14、一腳接 GND。 程式打開 RP2040 的內建上拉電阻,所以不用另外接電阻(自造者入門第 06 課講過上拉的原理)。 模擬的按鈕在 0.9~2.0 秒之間被按住,看看 LED 什麼時候亮。

Pico 的類比輸入與 PWM

RP2040 的 ADC 是 12 位元,但 MicroPython 統一用 read_u16() 回傳 0~65535(把結果放大到 16 位元的範圍), 這樣同一份程式換到不同晶片也能用。換算成電壓:

電壓 = 讀值 × 3.3 ÷ 65535
例:讀值 32768 → 約 1.65 V(3.3V 的一半)

PWM 也用同樣的 16 位元範圍:duty_u16(0) 是全暗,duty_u16(65535) 是全亮。 讀值和工作週期的範圍剛好相同,所以「讀到多少就輸出多少」只要一行,不用另外換算。

和 ESP32 的差別:ESP32 的 MicroPython 常用 read()(0~4095)與 duty()(0~1023);Pico 用 read_u16() 與 duty_u16()。 另外 Pico 的 PWM 每兩支相鄰腳位共用一個「切片」(例如 GP0 與 GP1),同一個切片的兩支腳頻率必須相同,工作週期可以不同。

逐步看:可變電阻調整 LED 亮度

可變電阻的中間腳接 GP26,兩側接 3V3 與 GND。模擬時旋鈕從約 10% 慢慢轉到 90%,注意 LED 的亮度跟著讀值變化。

互動練習:亮度旋鈕加上心跳燈

電路:可變電阻接 GP26,外接 LED 接 GP15,再加上板上 LED。依序完成任務:

  1. 先直接執行起始程式,看看印出的讀值。
  2. 把 TODO 那一行改掉,讓外接 LED 的亮度跟著可變電阻。
  3. 在同一個迴圈裡加上「心跳」:板上 LED 每經過一圈就切換一次,讓你知道程式還在跑。
  4. 回答一個問題。

可以拖動下方的滑桿,改變可變電阻一開始與最後的位置,再模擬一次。

小測驗:認識 Pico

1.

Raspberry Pi Pico 板上的 RP2040 是什麼樣的晶片?

2.

為什麼 MicroPython 建議用 Pin("LED") 控制板上 LED,而不寫 Pin(25)?

3.

Pico 上哪一支腳不能用 ADC 讀類比電壓?

第 1 次作答

小測驗:讀值與換算

1.

read_u16() 讀到 32768,用下面的程式換算,會印出什麼?

raw = 32768
print(round(raw * 3.3 / 65535, 2))
2.

按鈕接 GP14 與 GND,用 Pin(14, Pin.IN, Pin.PULL_UP)。按住按鈕時,下面的程式印出什麼?

level = 0            # 按住時讀到的值
pressed = level == 0
print(1 if pressed else 0)
3.

想讓 LED 亮度約一半,Pico 的 PWM 該怎麼寫?

第 1 次作答

重點整理

  • Pico 是 Raspberry Pi 做的微控制器開發板,晶片 RP2040:雙核心 Cortex-M0+、264 KB SRAM、26 支 GPIO;Pico W 加了無線,Pico 2 換成 RP2350。
  • 安裝 MicroPython:按住 BOOTSEL 插 USB,出現隨身碟後把對應板子的 .uf2 拖進去。
  • 板上 LED 用 Pin("LED");外接零件用 GP 編號,例如 Pin(15) 是 GP15。
  • 類比輸入只有 GP26~GP28,read_u16() 回傳 0~65535,電壓不能超過 3.3V。
  • PWM 用 duty_u16(0~65535);相鄰兩支腳共用一個切片,頻率要相同。
  • 邊改邊試用 mpremote run,完成的作品存成 main.py。

下一課看另一個經典平台 Arduino:它用 C++ 寫,我們會把它和 MicroPython 一行一行對照。

這一課完成了!
Next lesson:Arduino 與 C++ 概觀
你目前沒有登入,學習進度只存在這個瀏覽器。 Login 後,進度會跟著帳號,換電腦也看得到。