Raspberry Pi 不只能控制 LED、感測器、馬達與繼電器,只要接上一顆 Raspberry Pi Camera,就可以立刻進入影像處理、監視系統、智慧家庭、縮時攝影、OpenCV 甚至 AI 視覺應用。
在本章中,我們將從 Raspberry Pi Camera 的硬體連接開始,認識 CSI Camera 介面,接著使用 Raspberry Pi OS 內建的 rpicam-apps 執行拍照與錄影,最後再使用 Picamera2 Python 撰寫自己的相機控制程式。
完成本章後,我們還會實作一個:
Raspberry Pi 自動定時拍照相機
讓 Raspberry Pi 每隔固定時間自動拍攝照片,並使用日期與時間建立檔名。
本章學習目標
完成本章後,你將能夠:
- 認識 Raspberry Pi Camera Module
- 了解 CSI Camera 介面
- 正確連接 Camera 排線
- 測試 Raspberry Pi Camera
- 使用 rpicam-hello 顯示 Camera 預覽
- 使用 rpicam-jpeg 拍攝照片
- 使用 rpicam-still 控制照片拍攝
- 使用 rpicam-vid 錄製影片
- 安裝與使用 Picamera2
- 使用 Python 控制 Raspberry Pi Camera
- 使用 Python 自動建立照片檔名
- 製作 Raspberry Pi 定時攝影系統
一、什麼是 Raspberry Pi Camera?
Raspberry Pi Camera 是專門為 Raspberry Pi 設計的數位相機模組。
它不像一般 USB Webcam 透過 USB 連接,而是主要透過 Raspberry Pi 主機板上的 CSI / MIPI Camera Interface 傳送影像資料。
目前 Raspberry Pi 官方 Camera 系列包含 Camera Module 2、Camera Module 3、High Quality Camera、Global Shutter Camera 與 AI Camera 等不同產品。其中 Camera Module 3 使用 12MP 感光元件,而 Camera Module 2 為 8MP。
對初學 Raspberry Pi Camera 的使用者而言,Camera Module 2 或 Camera Module 3 都很適合作為入門裝置。
二、Raspberry Pi Camera 可以做什麼?
加入 Camera 之後,Raspberry Pi 就不再只是一般 GPIO 控制器,而能成為真正的智慧影像系統。
常見應用包括:
| 應用 | 說明 |
|---|---|
| 自動拍照 | 定時拍攝照片 |
| 縮時攝影 | 長時間記錄植物、生長或工程進度 |
| 監視 Camera | 建立區域監視系統 |
| 門口攝影機 | 偵測訪客後拍照 |
| 智慧家庭 | 遠端查看室內狀況 |
| OpenCV | 進行影像處理 |
| QR Code | 辨識 QR Code |
| 人臉偵測 | 找出影像中的人臉 |
| AI Camera | YOLO 物件辨識 |
| IoT Camera | 透過網路遠端取得照片 |
因此 Raspberry Pi Camera 也是後續學習 OpenCV、YOLO 與 Edge AI 的重要基礎。
三、Raspberry Pi Camera Module 與 CSI
3.1 CSI 是什麼?
CSI 是:
Camera Serial Interface
Raspberry Pi Camera 使用的實際影像介面建立在 MIPI CSI-2 架構之上。
它專門用於 Camera Sensor 與處理器之間高速傳輸影像資料。
概念可以理解成:
Camera Sensor
│
│ MIPI CSI-2
▼
Raspberry Pi Camera Connector
│
▼
Raspberry Pi
│
▼
libcamera
│
├── rpicam-apps
│
└── Picamera2
這就是 Raspberry Pi Camera 從硬體到 Python 程式的大致架構。
四、Raspberry Pi Camera 排線差異
這是實際購買 Camera 時很容易遇到的問題。
目前官方 Camera Module 本身使用標準 15-pin 連接端,但不同 Raspberry Pi 主機板使用的 Camera Connector 並不完全相同。
Raspberry Pi 官方文件指出:
| Raspberry Pi | Camera 端連接 |
|---|---|
| Raspberry Pi 3 | 15-pin |
| Raspberry Pi 4 | 15-pin |
| Raspberry Pi Zero 系列 | 22-pin mini |
| Raspberry Pi 5 | 22-pin mini |
| 部分 Compute Module I/O Board | 22-pin mini |
所以 Raspberry Pi 5 若要連接一般 Camera Module,通常需要使用:
15-pin → 22-pin Camera Cable
而不是 Raspberry Pi 4 常見的 15-pin → 15-pin 排線。
五、Camera 安裝方式
安裝 Camera 前,第一個原則是:
先將 Raspberry Pi 關機並拔除電源。
不要在 Raspberry Pi 通電狀態下隨意拔插 Camera 排線。
Raspberry Pi 官方也建議在安裝 Camera PCB 前先注意靜電問題。
Raspberry Pi 4 Camera 安裝
Raspberry Pi 4 的 Camera Connector 位於主機板上的 CAMERA 接頭。
基本流程:
Raspberry Pi 4
│
│ 15-pin CSI Cable
▼
Camera Module
將 Camera Connector 的固定扣輕輕拉開。
插入排線。
確認排線完全平行。
最後將固定扣壓回去。
Raspberry Pi 5 Camera 安裝
Raspberry Pi 5 有:
CAM/DISP0
CAM/DISP1
兩個 MIPI Camera / Display Connector。
兩個接頭都可以連接 Camera。
基本架構:
Raspberry Pi 5
CAM/DISP0
│
│ 22-pin
│
│ Camera Cable
▼
15-pin
Camera Module
因此購買 Raspberry Pi 5 Camera 套件時,要特別確認是否包含正確排線。
六、更新 Raspberry Pi OS
Camera 連接完成後開機。
建議先更新 Raspberry Pi OS:
sudo apt update
sudo apt full-upgrade -y
更新完成後可以重新啟動:
sudo reboot
目前 Raspberry Pi Camera 軟體架構以 libcamera 為底層,而 Raspberry Pi 官方提供 rpicam-apps 讓使用者進行拍照及錄影。Raspberry Pi OS 預設即包含主要 rpicam-apps Camera 工具。
七、不要再使用舊版 raspistill 教學
網路上仍然可以找到很多舊 Raspberry Pi Camera 教學,例如:
raspistill
或:
raspivid
這些都是 Raspberry Pi 舊 Camera Stack 的工具。
在較新的 Raspberry Pi OS 中,應該使用新的 Camera 架構。
從 Raspberry Pi OS Bookworm 開始,Camera 應用程式主要名稱已改為:
rpicam-hello
rpicam-jpeg
rpicam-still
rpicam-vid
rpicam-raw
因此後續新專案建議直接學習 rpicam-* 指令,而不要再以 raspistill 作為主要教學。
八、第一次測試 Raspberry Pi Camera
Camera 接好之後,可以先使用:
rpicam-hello
正常情況下會出現 Camera 預覽畫面。
官方預設會短暫顯示 Camera Preview。
如果希望 Camera 一直顯示:
rpicam-hello --timeout 0
--timeout 0 表示不自動結束。
可以按:
Ctrl + C
停止程式。
九、Raspberry Pi 拍照
接下來真正拍攝第一張 Raspberry Pi Camera 照片。
輸入:
rpicam-jpeg --output test.jpg
Camera 會顯示短暫預覽後拍攝照片,並建立:
test.jpg
官方文件指出 rpicam-jpeg 會先顯示 Camera Preview,之後儲存高解析度 JPEG 影像。
可以查看:
ls -lh test.jpg
十、指定 Raspberry Pi Camera 照片解析度
例如:
rpicam-jpeg \
--output test.jpg \
--width 1920 \
--height 1080
即可建立:
1920 × 1080
照片。
如果希望縮短拍照前等待時間:
rpicam-jpeg \
--output test.jpg \
--timeout 2000 \
--width 1920 \
--height 1080
timeout 的單位為毫秒,因此:
2000 ms = 2 秒
Raspberry Pi 官方也提供相同的 width、height 與 timeout 控制方式。
十一、使用 rpicam-still 拍照
另外一個非常重要的 Camera 指令是:
rpicam-still
基本拍照:
rpicam-still -o photo.jpg
也可以寫成:
rpicam-still --output photo.jpg
與 rpicam-jpeg 相比,rpicam-still 提供更多靜態影像控制選項,也可以輸出 PNG、BMP、Raw 等不同格式。
例如輸出 PNG:
rpicam-still \
--encoding png \
--output photo.png
十二、Raspberry Pi Camera 錄影
Raspberry Pi Camera 不只能拍照,也可以錄影。
例如錄製 10 秒 H.264:
rpicam-vid -t 10s -o video.h264
錄影完成後產生:
video.h264
這也是 Raspberry Pi 官方文件提供的基本 rpicam-vid 用法。
十三、錄製 MP4
Raspberry Pi 5 可以直接使用:
rpicam-vid -t 10s -o video.mp4
而 Raspberry Pi 4 或更早的裝置,如果希望直接輸出 MP4,官方建議使用 libav,例如:
rpicam-vid \
-t 10s \
--codec libav \
-o video.mp4
不同 Raspberry Pi 型號的 MP4 輸出方式有差異,因此跨型號撰寫專案時要特別注意。
十四、什麼是 Picamera2?
前面都是利用 Linux Command 控制 Camera。
但是如果我們希望做到:
感測器觸發
↓
Python 判斷
↓
Camera 拍照
↓
儲存照片
↓
傳送 MQTT
就需要從 Python 直接控制 Camera。
目前 Raspberry Pi 官方提供的 Python Camera Library 是:
Picamera2
Picamera2 是建立在現代 Raspberry Pi Camera / libcamera 架構上的 Python API,用來取代舊版 Picamera。
十五、檢查 Picamera2
先執行:
python3
進入 Python:
from picamera2 import Picamera2
如果沒有出現 Error,代表 Picamera2 已經存在。
離開:
exit()
十六、安裝 Picamera2
目前較新的 Raspberry Pi OS 通常已包含 Picamera2。
如果系統沒有安裝,可以執行:
sudo apt update
sudo apt install -y python3-picamera2
這也是 Raspberry Pi 官方目前提供的安裝方式。
對於不需要 GUI 相依套件的 Raspberry Pi OS Lite,也可以使用:
sudo apt install -y python3-picamera2 --no-install-recommends
十七、第一個 Picamera2 Python 拍照程式
建立程式:
nano camera_test.py
輸入:
from picamera2 import Picamera2
picam2 = Picamera2()
picam2.start_and_capture_file("photo.jpg")
print("拍照完成")
儲存後執行:
python3 camera_test.py
成功後:
ls -lh photo.jpg
應該會看到:
photo.jpg
Picamera2 官方範例同樣提供 start_and_capture_file() 作為最簡單的一次性照片拍攝方式。
十八、完整 Picamera2 控制方式
若希望增加 Camera 初始化與控制,可以使用:
import time
from picamera2 import Picamera2
picam2 = Picamera2()
config = picam2.create_still_configuration(
main={"size": (1920, 1080)}
)
picam2.configure(config)
picam2.start()
time.sleep(2)
picam2.capture_file("photo.jpg")
picam2.stop()
print("照片已儲存")
程式流程為:
建立 Picamera2
↓
建立 Camera Configuration
↓
設定解析度
↓
啟動 Camera
↓
等待曝光穩定
↓
拍照
↓
停止 Camera
Picamera2 官方範例也示範了先建立 configuration、啟動 Camera,再使用 capture_file() 儲存影像的方式。
十九、為什麼拍照前要等待?
在 Camera 啟動後立即拍照,有時可能得到:
- 亮度不正確
- 白平衡尚未穩定
- 第一張照片曝光不理想
因此簡單專案通常可以加入:
time.sleep(2)
讓 Camera 有一段初始化時間。
二十、照片檔名加入日期與時間
如果每次都使用:
photo.jpg
下一張照片就可能覆蓋前一張。
比較好的方式是利用:
datetime
建立時間戳記。
例如:
from datetime import datetime
now = datetime.now()
filename = now.strftime("%Y%m%d_%H%M%S.jpg")
print(filename)
可能得到:
20260818_083000.jpg
這樣每一張照片都有不同檔名。
二十一、建立照片儲存目錄
先建立資料夾:
mkdir -p ~/camera/photos
查看:
ls ~/camera
應該可以看到:
photos
我們接下來所有自動拍攝的照片都儲存在:
~/camera/photos/
二十二、實作:Raspberry Pi 自動定時拍照相機
現在正式進入本章專題。
我們要製作:
自動定時拍照 Camera
功能:
Raspberry Pi 開始執行
↓
初始化 Camera
↓
等待 Camera 穩定
↓
取得現在日期時間
↓
建立照片檔名
↓
拍攝照片
↓
等待指定秒數
↓
再次拍照
↓
持續循環
二十三、建立 Python 程式
建立:
nano timelapse_camera.py
輸入:
import time
from datetime import datetime
from pathlib import Path
from picamera2 import Picamera2
# -----------------------------
# 基本設定
# -----------------------------
PHOTO_INTERVAL = 60
PHOTO_WIDTH = 1920
PHOTO_HEIGHT = 1080
PHOTO_DIR = Path.home() / "camera" / "photos"
# -----------------------------
# 建立照片目錄
# -----------------------------
PHOTO_DIR.mkdir(
parents=True,
exist_ok=True
)
# -----------------------------
# 建立 Camera
# -----------------------------
picam2 = Picamera2()
# -----------------------------
# 建立照片設定
# -----------------------------
camera_config = picam2.create_still_configuration(
main={
"size": (
PHOTO_WIDTH,
PHOTO_HEIGHT
)
}
)
picam2.configure(camera_config)
# -----------------------------
# 啟動 Camera
# -----------------------------
picam2.start()
print("Raspberry Pi Camera 已啟動")
# 等待曝光與白平衡穩定
time.sleep(2)
# -----------------------------
# 自動定時拍照
# -----------------------------
try:
while True:
now = datetime.now()
filename = now.strftime(
"%Y%m%d_%H%M%S.jpg"
)
filepath = PHOTO_DIR / filename
picam2.capture_file(
str(filepath)
)
print(
f"照片已儲存:{filepath}"
)
time.sleep(
PHOTO_INTERVAL
)
except KeyboardInterrupt:
print(
"\n使用者停止程式"
)
finally:
picam2.stop()
print(
"Camera 已停止"
)
二十四、執行定時拍照程式
執行:
python3 timelapse_camera.py
畫面可能顯示:
Raspberry Pi Camera 已啟動
照片已儲存:/home/user/camera/photos/20260818_083000.jpg
照片已儲存:/home/user/camera/photos/20260818_083100.jpg
照片已儲存:/home/user/camera/photos/20260818_083200.jpg
每隔:
60 秒
自動拍攝一張照片。
二十五、修改拍攝間隔
程式:
PHOTO_INTERVAL = 60
表示:
60 秒拍一次
如果希望:
每 10 秒
PHOTO_INTERVAL = 10
每 5 分鐘
PHOTO_INTERVAL = 300
每 10 分鐘
PHOTO_INTERVAL = 600
每小時
PHOTO_INTERVAL = 3600
二十六、查看已拍攝照片
輸入:
ls -lh ~/camera/photos
可能看到:
20260818_083000.jpg
20260818_083100.jpg
20260818_083200.jpg
20260818_083300.jpg
這就是最基本的:
Raspberry Pi Time Lapse Camera
二十七、不寫 Python 也可以做縮時攝影
rpicam-still 本身也支援 timelapse。
例如先建立:
mkdir -p ~/timelapse
然後執行:
rpicam-still \
--timeout 30000 \
--timelapse 2000 \
-o ~/timelapse/image%04d.jpg
代表在一段 30 秒期間內,以約 2 秒的間隔進行定時拍攝。
Raspberry Pi 官方文件同樣提供 --timelapse 與 --timeout 組合進行縮時攝影。
但是如果未來要整合:
DHT22
GPIO
Flask
MQTT
SQLite
Camera
使用 Picamera2 Python 會更加有彈性。
二十八、Camera 找不到怎麼辦?
如果:
rpicam-hello
沒有 Camera 畫面,可以依序檢查。
1. 排線方向
Camera 排線插反是最常見問題之一。
關機後重新確認:
Camera Cable
Connector
固定扣
是否完全插入。
2. Raspberry Pi 5 是否使用正確排線
Raspberry Pi 5 使用 mini 22-pin Camera Connector。
一般 Camera Module 端則使用 15-pin。
所以排線通常應為:
22-pin
│
▼
15-pin
不要直接拿 Raspberry Pi 4 使用的 15-pin 雙頭排線硬接 Raspberry Pi 5。
3. 更新系統
執行:
sudo apt update
sudo apt full-upgrade -y
然後:
sudo reboot
重新測試:
rpicam-hello
4. 檢查 Camera
可以使用:
rpicam-hello --list-cameras
查看系統可偵測的 Camera。
如果完全沒有 Camera,優先檢查:
排線
Camera Module
Camera Connector
系統版本
二十九、不要把 CSI Camera 和 USB Camera 混為一談
這點很重要。
Raspberry Pi Camera Module:
Camera Module
↓
MIPI CSI
↓
Raspberry Pi
USB Webcam:
USB Webcam
↓
USB
↓
Raspberry Pi
兩者硬體架構不同。
Picamera2 主要是 Raspberry Pi Camera Stack 的 Python Camera API,因此本章討論的是 Raspberry Pi CSI Camera Module 為主。
三十、Raspberry Pi Camera 專案架構
完成本章後,我們其實已經建立未來智慧 Camera 的基礎:
Raspberry Pi
│
┌─────────┴─────────┐
│ │
GPIO Camera
│ │
Sensor / LED Picamera2
│ │
└─────────┬─────────┘
│
Python
│
┌─────────┼─────────┐
│ │ │
Flask MQTT SQLite
│ │ │
Web IoT Database
這也是接下來第 17~20 章的核心發展方向。
三十一、從 Camera 延伸到智慧監控
例如未來可以設計:
DHT22
│
▼
Raspberry Pi
│
├── 溫度正常
│
└── 溫度過高
│
├── LED 警示
├── 蜂鳴器
├── Relay 啟動風扇
└── Camera 拍照
也可以將 Camera 和 PIR 人體紅外線感測器搭配:
PIR 偵測到人體
↓
GPIO Input
↓
Python
↓
Picamera2
↓
拍攝照片
↓
儲存紀錄
這樣 Raspberry Pi 就能成為簡易智慧監視設備。
三十二、Camera 與 Flask
下一章我們會開始加入 Web Server。
未來架構可以變成:
手機
│
│ Wi-Fi / LAN
▼
Flask Web Server
│
▼
Raspberry Pi
│
├── GPIO
├── LED
├── Relay
└── Camera
因此可以在手機瀏覽器上按:
[ 開燈 ]
[ 關燈 ]
[ 拍照 ]
讓 Raspberry Pi 執行對應的硬體控制。
三十三、Camera 與 MQTT
再進一步,可以形成:
Camera
↓
Raspberry Pi
↓
MQTT
↓
Broker
↓
Internet / LAN
↓
Remote Client
因此 Camera 事件可以成為 IoT 訊息。
例如:
camera/photo
camera/status
camera/motion
這些都能成為 MQTT Topic。
三十四、Camera 與 SQLite
照片本身可以存在硬碟,而照片資訊寫入 SQLite:
ID
Timestamp
Filename
Temperature
Humidity
Event
例如:
1
2026-08-18 08:30:00
20260818_083000.jpg
28.5
72
temperature_alert
如此就能建立:
Raspberry Pi Camera Event Database
這也是第 19 章資料記錄系統可以延伸的方向。
三十五、本章常用指令整理
Camera 測試:
rpicam-hello
持續預覽:
rpicam-hello --timeout 0
拍攝 JPEG:
rpicam-jpeg -o photo.jpg
使用 rpicam-still:
rpicam-still -o photo.jpg
錄製影片:
rpicam-vid -t 10s -o video.h264
安裝 Picamera2:
sudo apt install -y python3-picamera2
執行 Python Camera:
python3 camera_test.py
執行自動拍照:
python3 timelapse_camera.py
三十六、本章重點整理
本章完成了 Raspberry Pi Camera 最重要的基礎。
整個 Camera 軟硬體架構可以整理成:
Raspberry Pi Camera Module
│
▼
MIPI CSI-2
│
▼
Raspberry Pi
│
▼
libcamera
│
┌─────┴─────┐
│ │
rpicam-apps Picamera2
│ │
CLI Command Python
如果只是快速拍照:
rpicam-jpeg -o photo.jpg
如果要寫自己的 Camera 系統:
from picamera2 import Picamera2
再搭配:
picam2.capture_file(...)
即可從 Python 控制 Camera。
而本章最後完成的:
Raspberry Pi 自動定時拍照相機
已經具備真正實際應用價值。
三十七、下一章預告
下一章將從 Camera 與本機 GPIO 控制跨入:
網路控制
我們將建立:
第 17 章 Raspberry Pi Flask Web Server:用瀏覽器遠端控制 GPIO
接下來會學習:
Client
Server
HTTP
IP Address
Port
Flask
HTML
Web Route
GPIO
LAN
並完成:
手機瀏覽器控制 Raspberry Pi LED
整個 Raspberry Pi 架構也會正式從:
Python → GPIO
進化成:
手機
↓
Wi-Fi
↓
Flask
↓
Python
↓
GPIO
↓
LED
這是 Raspberry Pi 從單機控制進入 Web、網路與 IoT 的重要一步。