第7章 Raspberry Pi 40-pin GPIO 完整介紹:BCM 編號、電壓與接線安全

發布日期: |更新日期:
文章主圖:第7章 Raspberry Pi 40-pin GPIO 完整介紹:BCM 編號、電壓與接線安全

前面六章,我們已經建立:

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 對照。

Raspberry Pi 5 40-pin GPIO Pinout 對照表
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 有兩個:

  1. 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 對應

Raspberry Pi SPI0 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

對應:

Raspberry Pi Hardware PWM 常用 Pin 對照表
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

例如:

Raspberry Pi 專案 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 GPIO 差異比較
項目 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 安全十條原則

可以先記住:

  1. Raspberry Pi GPIO 是 3.3V Logic。
  2. 5V Power Pin 不是 5V GPIO。
  3. 5V Signal 不直接進 GPIO。
  4. GPIO 不直接帶馬達。
  5. GPIO 不直接帶 Relay Coil。
  6. LED 使用限流電阻。
  7. 不讓 Input Floating。
  8. 外部系統通訊通常要共地。
  9. 接線前確認 BCM 與 Physical Number。
  10. 優先斷電後再更換 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. 本章重點整理

完成本章後應該掌握:

  1. GPIO 是 General Purpose Input/Output。
  2. Raspberry Pi 5 保留標準 40-pin GPIO Header。
  3. Pi 5 使用者 GPIO 由 RP1 I/O Controller 管理。
  4. 40-pin Header 不等於 40 個全部可自由使用的 GPIO。
  5. Header 包含 3.3V、5V、GND 與 GPIO。
  6. Physical Pin Number 是實體位置。
  7. BCM GPIO Number 是 GPIO 的邏輯編號。
  8. Physical Pin 11 對應 GPIO17。
  9. 本系列 Python GPIO 程式統一使用 BCM Number。
  10. GPIO Zero 整數 Pin Number 預設使用 BCM Number。
  11. Raspberry Pi GPIO 是 3.3V 邏輯。
  12. 5V Signal 不應直接接一般 GPIO Input。
  13. Pin 1 與 Pin 17 為 3.3V Power。
  14. Pin 2 與 Pin 4 為 5V Power。
  15. 5V Power Pin 並不是可以由 Python 控制的 GPIO。
  16. Header 有多個 GND。
  17. GPIO 可以是 Digital Input。
  18. GPIO 可以是 Digital Output。
  19. Input 不應任意 Floating。
  20. Pull-up / Pull-down 可以定義 Input 的預設狀態。
  21. GPIO 可以具有 Alternate Function。
  22. I²C SDA 常用 GPIO2 / Pin 3。
  23. I²C SCL 常用 GPIO3 / Pin 5。
  24. SPI0 使用 GPIO10、9、11、8、7。
  25. UART Signal 可使用 GPIO14 / GPIO15。
  26. Pi 5 Default Primary UART 位於 Dedicated Debug UART,而非完全等同舊機型設定。
  27. Hardware PWM 常用 GPIO12、13、18、19。
  28. GPIO0 / GPIO1 常與 HAT EEPROM Identification 有關。
  29. Raspberry Pi 標準 Header 沒有 Arduino UNO 式通用 Analog Input。
  30. Analog Sensor 通常需要 ADC。
  31. LED 應使用限流電阻。
  32. GPIO 主要是控制訊號,不是高功率電源。
  33. Motor 需要 Driver。
  34. Relay Coil 需要 Driver。
  35. Inductive Load 需要適當保護電路。
  36. Servo 多顆或高負載時應考慮獨立電源。
  37. External Power 系統與 GPIO 通訊時通常需要 Common Ground。
  38. 5V Logic 與 3.3V GPIO 可能需要 Level Shifter。
  39. Voltage Divider 只適合特定單向訊號,不是所有 Bus 的萬用方案。
  40. I²C 跨電壓應評估雙向 Level Shifter。
  41. VCC Voltage 與 Signal Logic Voltage 必須分開確認。
  42. Boot State 也是控制系統設計的一部分。
  43. 重要控制應考慮 Hardware Fail-safe。
  44. 不可任意短接兩個 GPIO Output。
  45. 不可短接 Power Rail 與 GND。
  46. 最危險錯接之一是 5V Power → GPIO。
  47. 接線時建議關機並移除電源。
  48. Breadboard 可以協助進行免焊接實驗。
  49. Dupont Wire 顏色只能輔助,不能取代 Pin Number。
  50. 每個 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 是:

  1. 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 課程的第一個真正硬體控制實作。

下一步學習

不要停在這一篇,接著把內容做成自己的實作

目前主題:Raspberry Pi。從完整學習路線、免費資源、會員下載,再接到實作所需材料。

同系列:Raspberry-Pi |  已是會員?直接前往 Getfile
相關資源與會員文章下載
文章可免費閱讀;下載完整 DOCX 或 PDF 需登入免費基本會員。
查看相關資源 會員免費下載 DOCX 會員免費 PDF/列印

← 回文章列表