前面六章,我們已經建立:
Raspberry Pi 5
│
├── Raspberry Pi OS
├── Linux
├── Network
├── SSH
└── Python
到目前為止,這些能力大部分都還屬於:
電腦與軟體世界。
從這一章開始,我們要正式讓 Raspberry Pi 接觸:
真實世界的電子元件。
例如:
LED
Button
Sensor
Buzzer
Relay
Servo
Motor Driver
LCD
ADC
這些裝置主要都是透過 Raspberry Pi 上最重要的電子介面之一:
GPIO
連接。
Raspberry Pi 5 保留標準 40-pin GPIO Header,而 Pi 5 的使用者 GPIO 主要由 RP1 I/O Controller 管理。RP1 提供 GPIO、I²C、SPI、UART、PWM 與 I²S 等低速周邊介面。
但是在真正接第一顆 LED 之前,有一件事比寫程式更重要:
先把 GPIO 的電壓與接線安全弄清楚。
因為 Python 程式寫錯,大多可以重新修改。
GPIO 接線如果把:
5V
送到不應該承受 5V 的 GPIO Signal Pin,卻可能直接造成硬體損壞。
1. GPIO 是什麼?
GPIO 全名:
General Purpose Input/Output
中文通常稱為:
通用輸入輸出接腳。
它讓 Raspberry Pi 可以透過軟體控制實體電子訊號。
例如:
Python
│
▼
GPIO Output
│
▼
LED
也可以反過來:
Button
│
▼
GPIO Input
│
▼
Python
也就是讓:
程式
和:
電子硬體
真正互相連接。
2. GPIO 可以做兩件最基本的事
GPIO 最基本可以分成:
GPIO
│
├── Input
└── Output
Output
Raspberry Pi 主動輸出訊號。
例如:
GPIO HIGH
↓
LED ON
或:
GPIO LOW
↓
LED OFF
Input
Raspberry Pi 讀取外部訊號。
例如:
Button Press
↓
GPIO Input
↓
Python
3. Raspberry Pi 5 GPIO 由誰控制?
前面第 2 章介紹過 Raspberry Pi 5 的:
RP1
RP1 是 Raspberry Pi 自行設計的 I/O Controller,透過 PCIe 與 BCM2712 主處理器連接,並管理大量外部 I/O,包括 GPIO。
可以簡化成:
BCM2712
│
│ PCIe
▼
RP1
│
├── GPIO
├── SPI
├── I2C
├── UART
├── PWM
├── USB
└── Ethernet
這也是 Raspberry Pi 5 與 Raspberry Pi 4 在底層 GPIO 架構上的一項重要差異。
4. Raspberry Pi 5 有 40 個 GPIO 嗎?
看到:
40-pin GPIO Header
很容易誤以為:
有 40 個都可以自由當 GPIO 的腳位。
不是。
這 40 個 Pin 裡面包含:
Power
GND
GPIO
Special Function
例如:
- 3.3V
- 5V
- GND
- GPIO2
- GPIO3
- GPIO14
- GPIO15
所以:
40-pin Header ≠ 40 個可自由輸入輸出的 GPIO。
5. 什麼是 Physical Pin Number?
40-pin Header 上每一個實體位置,都有:
Physical Pin Number
也就是:
Pin 1
Pin 2
Pin 3
...
Pin 40
這代表:
接頭上的物理位置。
例如:
Physical Pin 11
指的是 40-pin Connector 上的:
第 11 號實體腳位。
6. 什麼是 BCM GPIO Number?
同一個 Pin 可能還有另一個名稱,例如:
GPIO17
這就是:
BCM GPIO Number
所以:
Physical Pin 11
和:
BCM GPIO17
實際上可以指向:
同一個腳位。
這是 Raspberry Pi GPIO 初學者最容易混淆的地方之一。
7. Physical 11 和 GPIO11 是同一個嗎?
不是。
例如:
Physical Pin 11
=
GPIO17
而:
GPIO11
=
Physical Pin 23
這就是為什麼不能看到:
Pin 11
就直接在 Python 寫:
LED(11)
要先知道你的 Library 採用:
- Physical Number
- BCM Number
哪一套。
8. 本系列統一採用 BCM Number
後面的 Python GPIO 程式主要使用:
GPIO Zero
GPIO Zero 預設採用 Broadcom BCM GPIO Number。
例如 LED 接在:
GPIO17
也就是 Physical Pin 11。
程式會寫:
led = LED(17)
而不是:
led = LED(11)
GPIO Zero 官方文件明確說明其整數 Pin Number 採用 BCM 編號;LED(17) 即表示 GPIO17,而 Physical Pin 則為 BOARD11。
所以本系列會統一:
程式 → BCM Number
接線圖 → 同時標示 BCM + Physical Pin
避免混亂。
9. Raspberry Pi 40-pin 如何編號?
從 Pin 1 開始:
Pin 1 Pin 2
Pin 3 Pin 4
Pin 5 Pin 6
...
Pin 39 Pin 40
一側是:
Odd Number
1, 3, 5, 7...
另一側是:
Even Number
2, 4, 6, 8...
實際接線前,一定要確認 Raspberry Pi 主機板方向以及 Pin 1 位置。
10. Raspberry Pi 5 40-pin Pinout 完整表
以下是本系列最常使用的 40-pin 對照。
| Physical Pin | 主要功能 | BCM GPIO / 常見替代功能 |
|---|---|---|
| 1 | 3.3V Power | 3V3 |
| 2 | 5V Power | 5V |
| 3 | GPIO | GPIO2 / I²C SDA |
| 4 | 5V Power | 5V |
| 5 | GPIO | GPIO3 / I²C SCL |
| 6 | Ground | GND |
| 7 | GPIO | GPIO4 |
| 8 | GPIO | GPIO14 / UART TX |
| 9 | Ground | GND |
| 10 | GPIO | GPIO15 / UART RX |
| 11 | GPIO | GPIO17 |
| 12 | GPIO | GPIO18 / PWM |
| 13 | GPIO | GPIO27 |
| 14 | Ground | GND |
| 15 | GPIO | GPIO22 |
| 16 | GPIO | GPIO23 |
| 17 | 3.3V Power | 3V3 |
| 18 | GPIO | GPIO24 |
| 19 | GPIO | GPIO10 / SPI MOSI |
| 20 | Ground | GND |
| 21 | GPIO | GPIO9 / SPI MISO |
| 22 | GPIO | GPIO25 |
| 23 | GPIO | GPIO11 / SPI SCLK |
| 24 | GPIO | GPIO8 / SPI CE0 |
| 25 | Ground | GND |
| 26 | GPIO | GPIO7 / SPI CE1 |
| 27 | ID EEPROM | GPIO0 / ID_SD |
| 28 | ID EEPROM | GPIO1 / ID_SC |
| 29 | GPIO | GPIO5 |
| 30 | Ground | GND |
| 31 | GPIO | GPIO6 |
| 32 | GPIO | GPIO12 / PWM |
| 33 | GPIO | GPIO13 / PWM |
| 34 | Ground | GND |
| 35 | GPIO | GPIO19 / PWM |
| 36 | GPIO | GPIO16 |
| 37 | GPIO | GPIO26 |
| 38 | GPIO | GPIO20 |
| 39 | Ground | GND |
| 40 | GPIO | GPIO21 |
Raspberry Pi 官方文件確認標準 Header 上的 I²C 使用 GPIO2 / GPIO3、SPI0 使用 GPIO10 / GPIO9 / GPIO11 / GPIO8 / GPIO7,而常見 Hardware PWM 可使用 GPIO12、13、18、19。
11. 3.3V Power Pin 在哪裡?
Raspberry Pi 40-pin Header 有兩個:
- 3V Power
主要是:
Physical Pin 1
Physical Pin 17
這些是:
Power Rail
不是一般可以用 Python:
HIGH
LOW
控制的 GPIO。
例如:
Pin 1
│
└── 3.3V
只要 Raspberry Pi 正常供電,這類 Power Pin 會提供電源。
12. 5V Power Pin 在哪裡?
兩個主要 5V Power Pin:
Physical Pin 2
Physical Pin 4
非常重要:
5V Power Pin 不是 5V GPIO。
你不能寫:
pin2.on()
來把它控制成 HIGH。
它是:
Power Supply Rail。
13. GND 在哪裡?
40-pin Header 有多個 GND:
Pin 6
Pin 9
Pin 14
Pin 20
Pin 25
Pin 30
Pin 34
Pin 39
它們在正常使用下屬於共同 Ground Reference。
所以 LED 可以使用:
GPIO17
│
▼
Resistor
│
▼
LED
│
▼
GND Pin 6
也可以依實際接線方便選其他 GND。
14. Raspberry Pi GPIO 是 3.3V Logic
這是本章最重要的一句話:
Raspberry Pi GPIO 使用 3.3V 邏輯。
官方硬體文件明確指出一般 GPIO 是 3.3V General-Purpose Pin,輸出 HIGH 約為 3.3V,而輸入屬於 3.3V 邏輯範圍;Pi 5 的 RP1 也提供 3.3V GPIO。
可以簡單理解:
GPIO HIGH
≈ 3.3V
GPIO LOW
≈ 0V
15. GPIO 可以接 5V Input 嗎?
不可以直接這樣做。
例如:
5V Device Output
│
▼
Raspberry Pi GPIO
是危險接法。
Raspberry Pi 官方文件說明一般 GPIO Input 是 3.3V-tolerant,而 Header 同時存在獨立 5V Power Pins,因此必須避免把 5V 誤接到一般 GPIO Signal。
正確設計可能需要:
5V Signal
│
▼
Level Shifter
│
▼
3.3V Signal
│
▼
Raspberry Pi
16. Arduino UNO 使用者要特別注意
Arduino UNO R3 常見電子模組是:
5V Logic
而 Raspberry Pi 是:
3.3V GPIO Logic
所以:
Arduino 可以接
不代表:
Raspberry Pi 也可以原樣接
例如某 Sensor:
VCC = 5V
Signal Output = 5V
即使 Sensor 本身可以使用 5V 供電,也不代表它的 Signal Output 可以直接送進 Raspberry Pi。
17. GPIO HIGH 和 Power 3.3V Pin 不一樣
這也是很常見的誤解。
例如:
Pin 1 = 3.3V Power
和:
GPIO17 HIGH ≈ 3.3V
雖然都可能量到接近 3.3V,但設計用途不同。
Power Pin
用來供電。
GPIO Output
用來傳遞控制訊號。
不要把 GPIO 當成一般大電流電源供應器使用。
18. GPIO 主要是控制訊號,不是電源
例如:
GPIO
│
▼
Motor
這不是正確概念。
馬達可能需要:
100mA
500mA
1A
甚至更多
GPIO 的設計目的不是直接供應這類負載。
應該使用:
GPIO
│
▼
Driver
│
▼
External Power
│
▼
Motor
19. LED 可以直接接 GPIO 嗎?
也不應直接:
GPIO ─── LED ─── GND
比較正確:
GPIO
│
▼
Resistor
│
▼
LED
│
▼
GND
因為 LED 是二極體型負載,需要:
限流電阻。
20. LED 為什麼需要限流電阻?
如果沒有 Resistor,LED 導通後電流可能過大。
風險包括:
- LED 損壞
- GPIO 過載
- Raspberry Pi 損壞
因此我們會設計一個適當的:
Current Limiting Resistor
21. LED 限流電阻怎麼算?
假設:
GPIO Voltage = 3.3V
LED Forward Voltage ≈ 2.0V
Target Current = 5mA
使用 Ohm’s Law:
R = (3.3V - 2.0V) / 0.005A
約:
260Ω
因此實際可以選用常見標準值:
330Ω
這會是非常適合教學 LED 實驗的保守選擇之一。
22. 為什麼本系列常使用 330Ω?
因為我們的目標不是:
把 LED 亮到極限。
而是:
安全、穩定地看出 LED ON / OFF。
所以後面的 Raspberry Pi GPIO LED 實驗,本系列預設使用:
330Ω
如果實際使用不同顏色 LED,亮度可能不同。
23. GPIO Input 是什麼?
當 GPIO 設成:
INPUT
Raspberry Pi 不再主動控制外部電壓,而是:
讀取外部狀態。
例如:
3.3V
│
Button
│
GPIO17
按下後 GPIO 可能讀到:
HIGH
放開則需要其他電路定義它應該是 HIGH 還是 LOW。
24. 什麼是 Floating Input?
如果 Input Pin:
沒有接 HIGH
也沒有接 LOW
它可能處於:
Floating
也就是輸入狀態不穩定。
可能:
一下 HIGH
一下 LOW
受到雜訊影響。
所以 Digital Input 通常需要:
- Pull-up
- Pull-down
來定義未觸發時的預設狀態。
25. Pull-up 是什麼?
Pull-up 的概念:
3.3V
│
Resistor
│
GPIO
│
Button
│
GND
沒有按 Button:
GPIO = HIGH
按下:
GPIO = LOW
這是一種非常常見的按鍵接法。
26. Pull-down 是什麼?
Pull-down:
3.3V
│
Button
│
GPIO
│
Resistor
│
GND
沒有按:
LOW
按下:
HIGH
兩種方式都可以。
重點是:
不要讓 Input Floating。
27. Raspberry Pi GPIO 有內部 Pull Resistor
GPIO 可以由軟體設定某些輸入的:
- Pull-up
- Pull-down
因此簡單 Button 實驗不一定需要額外外接 Pull Resistor。
不過正式電子設計仍應依:
- Noise
- Wire Length
- Fail-safe
- Boot State
決定是否使用外部 Pull Resistor。
28. GPIO Alternate Function 是什麼?
一個 GPIO 不一定只能:
Input / Output
很多 Pin 可以切換成其他硬體功能。
官方 Raspberry Pi 文件稱為:
Alternative Functions
例如:
GPIO2
│
├── GPIO
└── I2C SDA
或者:
GPIO10
│
├── GPIO
└── SPI MOSI
這就是同一個實體腳位可以有不同用途的原因。
29. I²C 是什麼?
I²C 是兩線式數位通訊介面。
主要使用:
SDA
SCL
在標準 Raspberry Pi Header 上:
Physical Pin 3
GPIO2
SDA
Physical Pin 5
GPIO3
SCL
Raspberry Pi 官方文件也列出 I²C Data = GPIO2、Clock = GPIO3。
30. I²C 可以拿來接什麼?
例如:
LCD1602 I2C
BME280
BMP280
RTC
OLED
ADC/DAC
Sensor
I²C 最大的特色之一是:
同一組 SDA/SCL 可以掛多個不同 Address 的 Device。
後面第 12 章會完整實作。
31. SPI 是什麼?
SPI 是另一種常見數位通訊方式。
SPI0 常用:
MOSI = GPIO10
MISO = GPIO9
SCLK = GPIO11
CE0 = GPIO8
CE1 = GPIO7
這些對應 Raspberry Pi 官方文件列出的標準 SPI0 Signal。
32. SPI Pin 對應
| SPI | BCM | Physical |
|---|---|---|
| MOSI | GPIO10 | Pin 19 |
| MISO | GPIO9 | Pin 21 |
| SCLK | GPIO11 | Pin 23 |
| CE0 | GPIO8 | Pin 24 |
| CE1 | GPIO7 | Pin 26 |
後面第 13 章會使用:
MCP3008 ADC
實際學習 SPI。
33. UART 是什麼?
UART 是:
非同步序列通訊介面。
常見兩個 Signal:
TX
RX
標準 GPIO Alternate Function 中:
GPIO14 = TX
GPIO15 = RX
也就是:
Pin 8
Pin 10
官方文件列出 Serial TX = GPIO14、RX = GPIO15。
34. Raspberry Pi 5 的 UART 有一個重要差異
Raspberry Pi 5 的 Default Primary UART 和舊 Pi 不完全相同。
Pi 5 預設 Primary UART 使用主機板上的:
Dedicated Debug UART Header(UART10)
而不是直接預設把 Linux Primary UART 放在 GPIO14 / GPIO15。官方也說明,可透過設定把相關 UART 輸出路由到 GPIO14 / GPIO15。
因此看到舊 Pi 3 / Pi 4 UART 教學時:
不要完全照搬設定。
第 14 章會以 Raspberry Pi 5 的方式完整處理 UART。
35. UART TX / RX 接線要交叉
一般兩台 UART Device:
Raspberry Pi TX
│
▼
Device RX
Raspberry Pi RX
▲
│
Device TX
也就是:
TX → RX
RX ← TX
通常還需要:
GND ↔ GND
讓雙方具有共同電位參考。
36. UART 也必須確認 Voltage
即使:
TX / RX
名稱完全相同,也不能只看名稱就接。
必須確認:
3.3V TTL
5V TTL
RS-232
RS-485
這些電氣層完全不同。
例如真正 RS-232:
DB9 Serial
不能直接視為 Raspberry Pi 3.3V GPIO UART。
需要:
適當 Transceiver。
37. PWM 是什麼?
PWM:
Pulse Width Modulation
中文:
脈衝寬度調變。
它透過快速 HIGH / LOW 切換改變:
Duty Cycle
例如:
25%
50%
75%
可以控制:
- LED Brightness
- Servo 控制訊號
- 某些速度控制 Driver
38. Raspberry Pi Hardware PWM 常用 Pin
Raspberry Pi 官方文件列出常見 Hardware PWM 可使用:
GPIO12
GPIO13
GPIO18
GPIO19
對應:
| BCM | Physical |
|---|---|
| GPIO12 | Pin 32 |
| GPIO13 | Pin 33 |
| GPIO18 | Pin 12 |
| GPIO19 | Pin 35 |
另外 Software PWM 可以由軟體方式產生在更多 GPIO 上,但 timing characteristic 不同。
39. GPIO0 和 GPIO1 是什麼?
Physical:
Pin 27
Pin 28
對應:
GPIO0
GPIO1
常用作:
ID_SD
ID_SC
也就是 HAT EEPROM Identification Bus 相關用途。官方 GPIO Alternative Function 文件也將 GPIO0 / GPIO1 標示為 EEPROM Data / Clock。
一般初學 GPIO:
不要優先拿這兩支來接 LED 或按鍵。
40. Raspberry Pi 有 Analog Input 嗎?
標準 40-pin GPIO 並沒有提供像 Arduino UNO:
A0
A1
A2
A3
A4
A5
這種一般使用的 Analog Input。
因此 Raspberry Pi 不能直接像:
analogRead(A0);
那樣讀取一般類比電壓。
41. Raspberry Pi 如何讀 Analog Sensor?
需要增加:
ADC
Analog-to-Digital Converter。
例如:
Potentiometer
│
▼
MCP3008
│
│ SPI
▼
Raspberry Pi
後面第 13 章會完整實作。
42. RP1 不是完全沒有 ADC 嗎?
RP1 晶片內部確實具有 ADC 等內部功能,但這不等同於 Raspberry Pi 5 的標準 40-pin Header 提供 Arduino UNO 式的一般用途 Analog Input。RP1 官方文件列有內部 ADC,但標準 GPIO 課程仍應把 Raspberry Pi Header 視為沒有通用 A0~A5 類型輸入。
這兩個概念不要混淆。
43. Relay 可以直接接 GPIO 嗎?
如果是:
裸 Relay Coil
答案:
不可以直接驅動。
因為 Coil:
- 需要較大 Current
- 是 Inductive Load
- 斷電可能產生 Back EMF
基本架構應該是:
GPIO
│
▼
Transistor / MOSFET / Driver
│
▼
Relay Coil
│
▼
External Power
並依 Driver Design 使用適當:
Flyback Diode
保護電路。
44. Relay Module 又不同
市售 Relay Module 可能已經內建:
- Transistor
- Optocoupler
- Flyback Diode
- Indicator LED
但還是要確認:
VCC
Logic Input Voltage
Trigger Level
Current Requirement
Common Ground
不能看到:
Relay Module
就假設一定完全相容 Raspberry Pi。
45. Motor 可以直接接 GPIO 嗎?
不可以。
DC Motor 是:
- 高電流
- Inductive
- 啟動電流大
- 有電磁雜訊
應該使用:
Raspberry Pi GPIO
│
▼
Motor Driver
│
▼
External Power
│
▼
DC Motor
例如:
- H-Bridge
- MOSFET Driver
- Motor Driver IC
46. 為什麼 Motor 要外部電源?
假設 Motor 需要:
5V
500mA
這不是一般 GPIO 應該負責供電的負載。
GPIO 只應負責:
Control Signal
Motor 的能量應該由:
External Power Supply
提供。
47. Servo 可以直接用 Raspberry Pi 5V Pin 供電嗎?
小型 Servo 雖然可能標示 5V 左右,但它的瞬間電流會隨:
- Load
- Stall
- Acceleration
大幅變化。
因此多顆 Servo 或負載不明時,不應簡單把所有 Servo 電源直接壓在 Raspberry Pi GPIO Header Power Rail 上。
比較可靠的方式:
External 5V Supply
│
├── Servo V+
│
└── Power
而控制訊號:
Raspberry Pi GPIO
│
▼
Servo Signal
48. External Power 為什麼還要共地?
假設:
Raspberry Pi
使用自己的電源
Servo
使用外部 5V
訊號:
Pi GPIO → Servo Signal
通常還需要:
Pi GND
│
└──── Servo GND
這叫:
Common Ground
否則兩邊對:
3.3V
0V
的參考基準可能不同。
49. 什麼是 Common Ground?
電壓其實是:
兩個點之間的電位差。
所以:
GPIO HIGH = 3.3V
是指 GPIO 相對:
GND
約 3.3V。
如果兩個系統沒有共同 Reference,就可能造成:
Signal Meaning 不明確
所以數位電子介面中:
共地非常重要。
50. 什麼是 Level Shifter?
如果裝置:
5V Logic
而 Raspberry Pi:
3.3V Logic
可以使用:
Logic Level Shifter
架構:
5V Device
│
▼
Level Shifter
│
▼
3.3V Raspberry Pi
某些 Module 需要:
Bidirectional Level Shifter
尤其:
- I²C
- 雙向 Signal
要依介面設計。
51. Voltage Divider 可以做什麼?
單方向降低電壓時,有些低速訊號可以用:
Voltage Divider
例如:
5V Signal
│
R1
│──── Raspberry Pi GPIO
R2
│
GND
透過兩個 Resistor 把 Voltage 降低。
但 Voltage Divider 並不是所有高速或雙向 Digital Bus 的萬用方案。
52. I²C 不能隨便用一般 Voltage Divider
因為 I²C SDA / SCL 是:
- 雙向
- Open-drain / Pull-up 型態
所以 5V I²C Device 與 3.3V Raspberry Pi 混用時,通常應採用:
適當的雙向 I²C Level Shifter
而不是單純把每條線塞兩個 Resistor 就結束。
53. Sensor VCC 是 5V,不代表 Signal 也是 5V?
這要看 Sensor。
可能存在:
VCC = 5V
Signal = 3.3V Compatible
也可能:
VCC = 5V
Signal = 5V
甚至 Module 本身可能內建 Level Shifter。
因此真正應該查:
- Datasheet
- Module Schematic
- Logic Level
- Output Stage
不是只看:
VCC
54. 供電與訊號要分開理解
每個 Module 都可以先畫成:
VCC
GND
SIGNAL
然後分別問:
VCC 需要幾 V?
Signal High 是幾 V?
Signal 能不能進 Raspberry Pi?
這是一個非常重要的硬體分析習慣。
55. Raspberry Pi 可以直接控制 Buzzer 嗎?
要先看 Buzzer 種類。
Active Buzzer
可能只需要:
ON / OFF
Passive Buzzer
需要:
Frequency
PWM
但如果 Buzzer Current 高於適合 GPIO 的控制負載,仍應使用:
Transistor Driver
所以:
先查 Current,再決定是否直接接。
56. GPIO Boot State 要考慮
Raspberry Pi 開機期間:
Python 還沒有執行
但是外部裝置已經接著 GPIO。
因此某些正式控制系統不能只想:
程式啟動後 GPIO 是什麼?
還應該考慮:
Boot 時 GPIO 是什麼狀態?
Shutdown 時呢?
Program Crash 時呢?
例如控制 Heater、Motor 或 Relay 時尤其重要。
57. 關鍵設備最好有 Hardware Fail-safe
例如:
GPIO
│
▼
Relay
│
▼
Heater
不要只依賴:
Python 程式
保證永遠安全。
正式系統可視需求加入:
- Pull-up / Pull-down
- Normally Open / Normally Closed 選擇
- Watchdog
- Fuse
- Thermal Protection
- Hardware Interlock
這已經是從 Maker 實驗走向可靠工程設計的重要觀念。
58. GPIO 可以短接在一起嗎?
不要隨意:
GPIO Output HIGH
│
└── GPIO Output LOW
這相當於讓兩個 Output Driver 互相對抗。
同樣地:
3.3V Power
也不要直接短接:
GND
會形成短路。
所以本系列接線第一原則:
不知道用途的 Pin,不要互接。
59. 最危險的錯接之一:5V → GPIO
例如:
Pin 2 5V
│
└── GPIO17
這是應該明確避免的接法。
因為:
5V Power
和:
3.3V GPIO Signal
不是同一類型 Pin。
60. 另一個危險錯接:3.3V → GND
例如杜邦線滑動時:
Pin 1
3.3V
│
└── Pin 6
GND
就是 Power Rail Short。
所以不要在 Raspberry Pi 正常通電時:
隨意移動裸露 Jumper Wire。
61. 建議 GPIO 一律斷電接線
本系列後續實驗標準流程:
sudo poweroff
↓
確認 Pi 已關機
↓
移除 Power
↓
確認 GPIO Pin
↓
接線
↓
再檢查一次
↓
Power On
↓
執行 Python
這比:
Pi 開著
一邊試 Pin
一邊換 Jumper
安全很多。
62. Breadboard 是什麼?
GPIO 實驗很常使用:
Solderless Breadboard
它讓我們不用焊接即可建立:
- LED
- Button
- Resistor
- Sensor
電路。
例如:
Pi GPIO
│
Dupont Wire
│
Breadboard
│
Resistor
│
LED
│
GND
63. Dupont Wire 有哪些種類?
常見:
Male-to-Male
Male-to-Female
Female-to-Female
Raspberry Pi 40-pin Header 本身是:
Male Header
因此直接從 Pi 接到 Breadboard 常用:
Female → Male
一端 Female 插 Pi Header。
另一端 Male 插 Breadboard。
64. 不要只用杜邦線顏色判斷功能
例如:
紅 = VCC
黑 = GND
這只是常見 Wiring Convention。
並不代表:
紅線插著就一定真的是 VCC
真正判斷依據永遠是:
Pin Number
+
Circuit
+
Measurement
顏色只是幫助降低人為錯誤。
65. 建議建立固定線色規則
本系列建議:
Red
=
Power
Black
=
GND
Other Colors
=
Signal
例如:
Yellow = GPIO17
Blue = GPIO27
Green = GPIO22
這樣電路越來越複雜時比較容易 Debug。
66. 使用 Multimeter 是非常好的習慣
在不確定電壓時,Multimeter 可以量:
DC Voltage
Continuity
Resistance
例如確認:
Pi 3.3V Rail
或檢查:
External Supply
到底是不是你想像的電壓。
67. 量 Voltage 時黑表筆接 GND
例如要量 Raspberry Pi 3.3V:
Black Probe
→ GND
Red Probe
→ 3.3V
Multimeter 設:
DC Voltage
注意量測時 Probe 不要滑到相鄰 Pin,造成短路。
68. GPIO 編號錯誤是最常見問題之一
假設 LED 接:
Physical Pin 11
你卻以為:
GPIO11
Python 寫:
LED(11)
結果控制的是:
BCM GPIO11
也就是另一支 Pin。
所以每一張實驗記錄最好都寫:
GPIO17
Physical Pin 11
兩個都記。
69. GPIO Zero 為什麼適合本系列?
GPIO Zero 的目的就是以較高階 Python API 表示實體電子元件。
例如:
from gpiozero import LED
led = LED(17)
這可以直接表達:
GPIO17 接了一顆 LED。
而 GPIO Zero 採 BCM Numbering,所以和本系列後續程式可以統一。
70. GPIO Zero 的 LED(17) 是 Physical 17 嗎?
不是。
LED(17)
預設意思是:
BCM GPIO17
對應:
Physical Pin 11
GPIO Zero 官方文件也特別拿 GPIO17 / BOARD11 做例子。
71. 如果真的想指定 Physical Pin 呢?
GPIO Zero 也支援明確寫:
LED("BOARD11")
或:
LED("GPIO17")
甚至:
LED("BCM17")
官方文件指出這些都可以指向同一支實體 GPIO。
不過本系列會維持:
LED(17)
簡潔而且統一。
72. Pi 5 的 GPIO Software 要注意舊教學
Raspberry Pi 5 的使用者 GPIO 由 RP1 管理,而不是像部分舊世代 Raspberry Pi 那樣完全依照舊 SoC GPIO 架構。
所以看到很舊的:
直接存取 BCM GPIO Register
舊 GPIO Library
舊底層位址
教學時,不要直接假設可以原樣套用 Pi 5。
本系列後面優先採用:
GPIO Zero
這類較高階方法。
73. I²C、SPI、UART Pin 還能當普通 GPIO 嗎?
很多情況可以。
這取決於目前 Pin 被設定成:
GPIO Function
還是:
Alternate Function
例如 GPIO2:
普通 GPIO
或:
I²C SDA
不能同時把同一支 Pin 當成兩個互相衝突的功能使用。
74. GPIO Resource Conflict 是什麼?
假設:
GPIO2 / GPIO3
正在當:
I²C Bus
又有另一個程式把 GPIO2 當一般 Digital Output。
這可能造成:
- I²C Failure
- Device Communication Error
- GPIO Conflict
所以 Project 變大後需要建立:
Pin Allocation Table
75. 建議每個專案建立 Pin Assignment
例如:
| 功能 | BCM | Physical |
|---|---|---|
| LED | GPIO17 | Pin 11 |
| Button | GPIO27 | Pin 13 |
| Buzzer | GPIO22 | Pin 15 |
| I²C SDA | GPIO2 | Pin 3 |
| I²C SCL | GPIO3 | Pin 5 |
這樣在:
- Code
- Wiring
- 文件
- Debug
都比較容易維護。
76. GPIO 命名不要只寫 Pin
例如文件寫:
LED → Pin 11
不如寫:
LED → GPIO17 / Physical Pin 11
因為不同 Library 對:
11
的解讀可能不一樣。
77. GPIO 與 Arduino UNO 主要差異
| 項目 | Raspberry Pi 5 | Arduino UNO R3 |
|---|---|---|
| 系統 | Linux SBC | Microcontroller |
| GPIO Logic | 3.3V | 常見 5V |
| GPIO 編號 | BCM + Physical | Digital Pin / Analog Pin |
| 一般 Analog Input | 無 | 有 |
| I²C | 有 | 有 |
| SPI | 有 | 有 |
| UART | 有 | 有 |
| PWM | 有 | 有 |
| 開機 | Linux Boot | MCU Startup |
| 即時性 | 非硬即時 Linux | 適合直接即時控制 |
所以從 Arduino 轉 Raspberry Pi 最大的硬體習慣改變之一就是:
3.3V 邏輯。
78. GPIO 適合做什麼?
非常適合:
LED
Button
Low-current Logic
Digital Sensor
Driver Input
I2C
SPI
UART
PWM Control
79. GPIO 不適合直接做什麼?
不要直接驅動:
Motor
High-power LED
Relay Coil
Solenoid
Pump
Fan
Lamp
Heater
這類 Load 通常需要:
Driver
+
External Power
+
Protection
80. 交流市電更不能直接碰 GPIO
例如:
110V AC
220V AC
不能直接:
GPIO
控制。
如果未來使用 Relay 控制市電設備,必須有:
- 合格 Relay / Contactor
- 絕緣
- 保險絲
- 外殼
- 接地
- 安規距離
- 正確施工方式
本系列基礎 GPIO 實驗只處理:
低電壓電子電路。
81. GPIO 安全十條原則
可以先記住:
- Raspberry Pi GPIO 是 3.3V Logic。
- 5V Power Pin 不是 5V GPIO。
- 5V Signal 不直接進 GPIO。
- GPIO 不直接帶馬達。
- GPIO 不直接帶 Relay Coil。
- LED 使用限流電阻。
- 不讓 Input Floating。
- 外部系統通訊通常要共地。
- 接線前確認 BCM 與 Physical Number。
- 優先斷電後再更換 GPIO Wiring。
82. 接線前檢查表
每次實驗前,先確認:
[ ] GPIO Number 正確
[ ] Physical Pin 正確
[ ] 3.3V / 5V 沒搞反
[ ] GND 正確
[ ] Sensor Logic Voltage 正確
[ ] LED 有 Resistor
[ ] Motor 有 Driver
[ ] Relay Coil 有 Driver
[ ] External Power 極性正確
[ ] 外部系統需要時已共地
83. Power On 前再做一次視覺檢查
不要只看 Diagram。
實際檢查:
Pi Pin
↓
Wire
↓
Breadboard Row
↓
Resistor
↓
Component Pin
一段一段看。
很多硬體問題不是 Python Error。
而只是:
杜邦線差一格
84. 第一次 GPIO 實驗不要一次接十個 Module
比較好的方式:
LED
↓
Button
↓
Buzzer
↓
Sensor
↓
I2C
↓
SPI
一層一層增加。
如果一次接:
LCD
DHT
Relay
Servo
Camera
Button
LED
出了問題,很難知道是哪一部分造成。
85. Debug 時先拆回最小系統
例如整個專案 LED 不動:
先不要檢查 MQTT。
先變成:
Pi
│
GPIO17
│
330Ω
│
LED
│
GND
只測:
LED(17)
這就是:
Minimum Reproducible Hardware Setup
很重要的工程習慣。
86. 本章第一個預備電路
下一章會使用:
Raspberry Pi GPIO17
│
▼
330Ω
│
▼
LED
│
▼
GND
Pin 對照:
GPIO17
=
Physical Pin 11
GND
=
Physical Pin 6
這是下一章第一個真正 Python GPIO 實作。
87. LED 極性
一般 LED 有:
Anode
Cathode
常見新 LED:
Long Leg
=
Anode (+)
Short Leg
=
Cathode (-)
但真正可靠的方法仍是:
- 查 Datasheet
- 看 LED Package 標記
- 使用 Meter Diode Mode
不要永遠只依賴腿長,尤其 LED 已經剪過腳時。
88. 下一章的 LED 接法
本系列採用:
Physical Pin 11
GPIO17
│
▼
330Ω
│
▼
LED Anode
LED Cathode
│
▼
Physical Pin 6
GND
GPIO17 HIGH:
LED ON
GPIO17 LOW:
LED OFF
89. 為什麼選 GPIO17?
不是因為 GPIO17 有特殊 LED 功能。
主要是:
- 容易辨識
- 不佔主要 I²C Pin
- 不佔 SPI0 Pin
- 很適合基礎 Digital Output 實驗
後面可以再擴充:
GPIO17
GPIO27
GPIO22
製作多顆 LED。
90. Raspberry Pi 5 UART 要等第 14 章再完整接
雖然 Pin 8 / 10 的 Alternate Function 可以對應 GPIO14 / GPIO15 UART Signal,但 Raspberry Pi 5 的 Primary UART Default Routing 與舊機型不同。
所以本章先記:
GPIO14 → TX
GPIO15 → RX
即可。
真正:
- enable_uart
- Serial Console
- /dev/serial0
- /dev/ttyAMA*
- Raspberry Pi ↔ Arduino
會在第 14 章完整處理。
91. 本章 GPIO 快速對照
Power
3.3V:
Pin 1
Pin 17
5V:
Pin 2
Pin 4
Ground
6
9
14
20
25
30
34
39
I²C
GPIO2 → Pin 3 → SDA
GPIO3 → Pin 5 → SCL
UART
GPIO14 → Pin 8 → TX
GPIO15 → Pin 10 → RX
SPI0
GPIO10 → Pin 19 → MOSI
GPIO9 → Pin 21 → MISO
GPIO11 → Pin 23 → SCLK
GPIO8 → Pin 24 → CE0
GPIO7 → Pin 26 → CE1
Hardware PWM 常用
GPIO18 → Pin 12
GPIO12 → Pin 32
GPIO13 → Pin 33
GPIO19 → Pin 35
官方 Raspberry Pi GPIO Alternative Function 文件確認上述 I²C、SPI、Serial 與 PWM 對應。
92. 本章重點整理
完成本章後應該掌握:
- GPIO 是 General Purpose Input/Output。
- Raspberry Pi 5 保留標準 40-pin GPIO Header。
- Pi 5 使用者 GPIO 由 RP1 I/O Controller 管理。
- 40-pin Header 不等於 40 個全部可自由使用的 GPIO。
- Header 包含 3.3V、5V、GND 與 GPIO。
- Physical Pin Number 是實體位置。
- BCM GPIO Number 是 GPIO 的邏輯編號。
- Physical Pin 11 對應 GPIO17。
- 本系列 Python GPIO 程式統一使用 BCM Number。
- GPIO Zero 整數 Pin Number 預設使用 BCM Number。
- Raspberry Pi GPIO 是 3.3V 邏輯。
- 5V Signal 不應直接接一般 GPIO Input。
- Pin 1 與 Pin 17 為 3.3V Power。
- Pin 2 與 Pin 4 為 5V Power。
- 5V Power Pin 並不是可以由 Python 控制的 GPIO。
- Header 有多個 GND。
- GPIO 可以是 Digital Input。
- GPIO 可以是 Digital Output。
- Input 不應任意 Floating。
- Pull-up / Pull-down 可以定義 Input 的預設狀態。
- GPIO 可以具有 Alternate Function。
- I²C SDA 常用 GPIO2 / Pin 3。
- I²C SCL 常用 GPIO3 / Pin 5。
- SPI0 使用 GPIO10、9、11、8、7。
- UART Signal 可使用 GPIO14 / GPIO15。
- Pi 5 Default Primary UART 位於 Dedicated Debug UART,而非完全等同舊機型設定。
- Hardware PWM 常用 GPIO12、13、18、19。
- GPIO0 / GPIO1 常與 HAT EEPROM Identification 有關。
- Raspberry Pi 標準 Header 沒有 Arduino UNO 式通用 Analog Input。
- Analog Sensor 通常需要 ADC。
- LED 應使用限流電阻。
- GPIO 主要是控制訊號,不是高功率電源。
- Motor 需要 Driver。
- Relay Coil 需要 Driver。
- Inductive Load 需要適當保護電路。
- Servo 多顆或高負載時應考慮獨立電源。
- External Power 系統與 GPIO 通訊時通常需要 Common Ground。
- 5V Logic 與 3.3V GPIO 可能需要 Level Shifter。
- Voltage Divider 只適合特定單向訊號,不是所有 Bus 的萬用方案。
- I²C 跨電壓應評估雙向 Level Shifter。
- VCC Voltage 與 Signal Logic Voltage 必須分開確認。
- Boot State 也是控制系統設計的一部分。
- 重要控制應考慮 Hardware Fail-safe。
- 不可任意短接兩個 GPIO Output。
- 不可短接 Power Rail 與 GND。
- 最危險錯接之一是 5V Power → GPIO。
- 接線時建議關機並移除電源。
- Breadboard 可以協助進行免焊接實驗。
- Dupont Wire 顏色只能輔助,不能取代 Pin Number。
- 每個 Project 都應建立 Pin Assignment Table。
FAQ:Raspberry Pi GPIO 常見問題
Q1:Raspberry Pi 5 有 40 個 GPIO 嗎?
不是。
Pi 5 有標準:
40-pin GPIO Header
但其中包含:
- 3.3V
- 5V
- GND
- GPIO
- 特殊功能接腳
所以不是 40 個都能任意設定 Input / Output。
Q2:Raspberry Pi GPIO 是 5V 嗎?
不是。
一般 GPIO Logic 是:
- 3V。
Header 上的 Pin 2 / 4 雖然提供 5V Power,但它們不是一般 GPIO Signal。
Q3:可以把 Arduino UNO 5V Output 接 Raspberry Pi GPIO 嗎?
不要直接連接。
Raspberry Pi GPIO 屬於 3.3V Logic,因此 5V Digital Output 在進入 Pi 前應使用適當電壓轉換方式。
Q4:Physical Pin 和 BCM GPIO 有什麼差異?
Physical Number:
40-pin 接頭上的實際位置。
BCM Number:
GPIO 邏輯編號。
例如:
Physical 11
=
GPIO17
Q5:GPIO Zero 的 LED(17) 是 Pin 17 嗎?
不是 Physical Pin 17。
GPIO Zero:
LED(17)
表示:
GPIO17
也就是 Physical Pin 11。
Q6:Raspberry Pi GPIO 可以直接接 LED 嗎?
應加限流電阻。
例如本系列下一章會使用:
GPIO17
│
330Ω
│
LED
│
GND
Q7:LED 為什麼需要電阻?
因為 LED 導通時需要限制電流。
沒有適當限流可能造成:
- LED 過流
- GPIO 過載
- 硬體風險
Q8:Raspberry Pi 可以直接驅動 Relay 嗎?
裸 Relay Coil 不應直接由 GPIO 驅動。
應使用:
- Transistor
- MOSFET
- Driver
- Flyback Protection
或經確認適用於 3.3V GPIO 的 Relay Module。
Q9:可以直接接 DC Motor 嗎?
不可以。
應使用:
GPIO
↓
Motor Driver
↓
External Power
↓
Motor
Q10:Servo 可以接 GPIO 嗎?
Servo 的:
Signal
可以由合適 GPIO 控制。
但 Servo Power Current 可能很大,尤其多顆 Servo,因此通常需要評估獨立 5V Supply 與 Common Ground。
Q11:Raspberry Pi 有 Analog Input 嗎?
標準 40-pin Header 沒有 Arduino UNO A0~A5 類型的通用 Analog Input。
通常使用:
MCP3008
等外部 ADC。
Q12:I²C 使用哪些 Pin?
標準:
GPIO2 / Pin 3
=
SDA
GPIO3 / Pin 5
=
SCL
Raspberry Pi 官方也是如此列出。
Q13:SPI 使用哪些 Pin?
SPI0 主要:
GPIO10 MOSI
GPIO9 MISO
GPIO11 SCLK
GPIO8 CE0
GPIO7 CE1
Q14:UART 使用哪些 GPIO?
常見 UART Signal:
GPIO14 = TX
GPIO15 = RX
但 Raspberry Pi 5 的 Default Primary UART 使用 Dedicated Debug UART,因此 Pi 5 UART 設定要依目前官方方式處理。
Q15:哪些 GPIO 支援 Hardware PWM?
常見:
GPIO12
GPIO13
GPIO18
GPIO19
Q16:External Sensor 用自己的電源,需要接 GND 嗎?
如果它和 Raspberry Pi 之間傳遞一般數位訊號,通常需要建立:
Common Ground
讓兩邊對 HIGH / LOW 有相同參考基準。
Q17:什麼時候需要 Level Shifter?
當兩個裝置的 Logic Voltage 不同,例如:
5V Device
↕
3.3V Raspberry Pi
就應評估適當 Level Shifter。
Q18:GPIO 接線時 Raspberry Pi 可以保持開機嗎?
某些電子設計確實支援 Hot Plug,但初學 GPIO 實驗不建議把帶電插拔當成標準流程。
本系列建議:
Power Off
↓
接線
↓
檢查
↓
Power On
Q19:GPIO0 和 GPIO1 可以拿來接 LED 嗎?
技術上 Pin Function 有更多可能性,但它們常用於:
ID_SD
ID_SC
HAT EEPROM
因此一般初學 Project 不建議優先使用。
Q20:Raspberry Pi 5 GPIO 和 Pi 4 一樣嗎?
40-pin Header 在功能使用上保持高度相容,但 Raspberry Pi 5 的底層 I/O 架構不同:Pi 5 主要由 RP1 管理外部 GPIO 與其他低速 I/O。
所以尤其是舊式底層 GPIO Library 或直接 Register Access 教學,不應假設 Pi 5 完全相同。
結語
完成本章之後,我們已經真正跨過 Raspberry Pi 軟硬體整合的分界。
前面我們學的是:
Linux
Python
Network
SSH
現在加入:
40-pin GPIO
│
├── 3.3V
├── 5V
├── GND
├── Digital Input
├── Digital Output
├── I2C
├── SPI
├── UART
└── PWM
最重要的是,我們現在知道:
不是會寫 Python 就可以隨便接 GPIO。
真正安全的 Raspberry Pi 電子設計必須同時考慮:
Software
+
Voltage
+
Current
+
Logic Level
+
Load
+
Driver
+
Power Supply
+
Ground
也就是:
Python
│
▼
GPIO
│
▼
Electronic Circuit
│
▼
Physical World
這才是真正的:
Physical Computing
下一章開始,我們終於要讓 Raspberry Pi 的第一個 GPIO Output 真正動起來。
下一章
第 8 章 Raspberry Pi GPIO Output 實作:Python 控制 LED 閃爍與流水燈
下一章將正式完成:
- GPIO Zero 安裝與確認
- from gpiozero import LED
- GPIO17
- Physical Pin 11
- 330Ω 限流電阻
- LED Anode / Cathode
- Breadboard 接線
- 第一個 GPIO Output
- led.on()
- led.off()
- led.toggle()
- time.sleep()
- LED Blink
- while True
- Ctrl+C 停止程式
- KeyboardInterrupt
- 多顆 LED
- List
- for Loop
- 4 顆 LED 流水燈
- 8 顆 LED 跑馬燈
- 往返流水燈
- 程式結束後安全關閉 LED
- GPIO 錯誤接線排查
- LED 不亮的常見原因
- BCM 與 Physical Pin 搞錯的排查方法
完成第 8 章後,就會第一次真正看到:
Python
↓
Raspberry Pi GPIO
↓
LED
↓
真實動作
也就是整套 Raspberry Pi 課程的第一個真正硬體控制實作。