今天先把 ESP32-CAM 認識清楚:它不是單眼、也不是監視器;它是「會拍照的微控制器」,自帶 Wi-Fi/BT、支援相機模組(常見 OV2640),體積小、很便宜。
用一句話形容:能用銅板價,把你的點子拍成現實。
[鏡頭 OV2640] -> [ESP32 (JPEG 壓縮 / 緩衝 / 控制)] -> [Wi-Fi 傳到網路]
| ├─ HTTP 串流(/stream)
| ├─ 單張快照(/capture)
├─ microSD 存圖 └─ MQTT(事件/拍照指令)
└─ GPIO(補光、蜂鳴器、感測器)
重點:ESP32-CAM 沒有一般電腦的作業系統,它靠「韌體」把事做好;省電、便宜,但算力有限(重 AI 交給後端像是 Raspberry Pi 5)。
類別 | 重點 | 為什麼重要 |
---|---|---|
感光元件 | OV2640 2MP(最高 1600×1200,常用 640×480) | 解析度越高,影像越清、延遲與檔案也會變大 |
MCU | ESP32 雙核 240 MHz、Wi-Fi 2.4G、BLE | 一片搞定網路+控制 |
記憶體 | PSRAM 4 MB | 影像緩衝很關鍵,沒有 PSRAM 會很痛苦 |
儲存 | microSD(FAT32) | 定時拍照、事件存證很好用 |
供電 | 5V/≥1A 建議 | 供電不穩 = 初始化相機失敗 80% 兇手 |
價格 | 親民(百元級) | 你會不小心買三片 |
優勢:便宜、省電、快速開發、可串 HTTP/MQTT、能當「多點前端相機」。
限制:無原生 USB(刷機靠 USB-TTL)、RAM 小、算力弱(臉辨/偵測交給後端如 Pi 5)。
迷你流程圖(門口管家)
[ESP32-CAM] --(MJPEG / HTTP)--> [Pi 5 (OpenCV/TFLite)]
├─ 儲存到 NVMe
└─ LINE/Telegram 通知
USB-TTL | ESP32-CAM | 說明 |
---|---|---|
5V | 5V | 先顧穩 5V 才有畫面 |
GND | GND | 共地 |
TX | U0R | 交叉連線 |
RX | U0T | 交叉連線 |
IO0 | GND | 進入刷機模式(寫完要拔掉) |
刷完後:拔 IO0→GND,按 RST 重開,回一般模式。
CameraWebServer
→ 填 Wi-Fi → 上傳 → 串流起飛#include "esp_camera.h"
#include "FS.h"
#include "SD_MMC.h"
void setup(){
// ... 省略 Wi-Fi 與 camera_config_t ...
SD_MMC.begin("/sdcard", true); // 1-bit 模式常見,避免供電不穩
}
void loop(){
camera_fb_t * fb = esp_camera_fb_get();
if (!fb) return;
static int n=0;
String path = "/" + String(n++) + ".jpg";
File f = SD_MMC.open(path, FILE_WRITE);
if (f) { f.write(fb->buf, fb->len); f.close(); }
esp_camera_fb_return(fb);
delay(5000); // 每 5 秒存一張
}
import cv2
cap = cv2.VideoCapture("http://<ESP32-IP>/stream") # 或者 :81/stream 視範例定義
while True:
ok, frame = cap.read()
if not ok: break
cv2.imshow("ESP32-CAM", frame)
if cv2.waitKey(1) == 27: break # 按 ESC 離開
cap.release(); cv2.destroyAllWindows()
解析度 端到端延遲(概念)
QVGA (320x240) ■■■□□□□ (~120ms)
VGA (640x480) ■■■■□□ (~200ms)
SVGA (800x600) ■■■■■□ (~320ms)
XGA (1024x768) ■■■■■■ (~480ms)
Tips:先用 QVGA/VGA 把串流與網路調順,再逐步拉高解析度與畫質。
症狀 | 可能原因 | 快速解 |
---|---|---|
Camera init failed |
供電不足 | 用 5V/≥1A;別只靠 USB-TTL 供電 |
上傳卡住 | 刷機腳位 | 刷機:IO0→GND;一般:IO0 要拔掉 |
找不到 IP | Wi-Fi 設錯或訊號弱 | 靠近 AP、檢查 SSID/密碼大小寫 |
串流很卡 | 解析度過高/網路擁塞 | 降解析度、幀率;儘量靠近 AP |
SD 卡寫入失敗 | 格式/接觸不良 | FAT32 重新格式化、換卡測試 |
A. 智慧門口管家(最小可跑)
CameraWebServer
events/
→ LINE 通知B. 植物縮時相簿
/capture
一張 → 存到伺服器資料夾ffmpeg
合成成 10 秒縮時影片C. 「拍照 API」服務
/shot
路由:每次 GET 就拍一張回傳CameraWebServer
,成功看到串流