Home Assistant建置(三): 用ESP32-Cam製作一個監視器超詳細教學
今天就來介紹一下實際上可以在HA裡面應用的一個有趣的開發 — — 利用ESP32-Cam來建造一個小型監視器。ESP32-Cam是一款基於ESP32微控制器的開發板,專為影像應用而設計,它有很多實用的特點很適合拿來做物聯網(IoT)的開發...
Home Assistant建置(三): 用ESP32-Cam製作一個監視器超詳細教學

前幾篇提到了如何用樹莓派(Raspberry Pi)搭建Home Assistant(HA),也讓手機可以在任何網路環境下連上家裡的HA裝置,有興趣的話可以點上面連結回去看一下。今天就來介紹一下實際上可以在HA裡面應用的一個有趣的開發 — — 利用ESP32-Cam來建造一個小型監視器。

ESP32-Cam
ESP32-Cam是一款基於ESP32微控制器的開發板,專為影像應用而設計,它有很多實用的特點很適合拿來做物聯網(IoT)的開發:
- 搭載OV2640鏡頭模組,提供最高1600x1200的解析度進行拍照或即時串流。
- 內建Wifi跟藍牙模組,可以透過無線設備傳輸訊號。
- 提供非常多個GPIO接口,用來連接不同的傳感器。
- 功耗低,也支援深度睡眠模式。
- 體積小巧,約為 27 ×40.5 mm。
- 價格便宜,約在 NT$ 200-300元左右就能買到。
請看更詳細的ESP32-Cam的介紹。

ESPHome
另一個選擇ESP32-Cam的好處,是因為在HA內可以直接連結到ESPHome,設定好之後就可以直接套用在HA的主面板上了,非常方便。
ESPHome是一個開源的框架,用來控制ESP8266或ESP32系列的開發板,它透過配置yaml檔的方式來控制ESP設備,yaml的寫法簡單卻也靈活,可以省去在Arduino IDE上寫code上傳的步驟。而且ESPHome在首次連接之後,就可以使用Wifi連線的方式無線更新程式,省去還要接線到USB再連上電腦上傳程式碼的麻煩,大幅地簡化整個開發流程!

如何接線上傳開發板請參考:How to Program / Upload Code to ESP32-CAM AI-Thinker (Arduino IDE)。
ESPHome除了控制ESP系列開發板,它也支援非常多元的設備或感測器,包括溫濕度傳感器、燈光、電機、開關、繼電器、顯示器等,並且具有豐富的驅動程式庫!有關ESPHome可以支持的所有裝置可以參考官網。
安裝步驟
- Step 1:HA內安裝及設定ESPHome
首先,進入到HA內進入左邊側邊欄的設定(Settings),再找到**附加元件商店(Add-ons),接著點選右下角的「ADD-ON STORE**」。

再來在搜尋欄搜尋「ESPHome」,並直接安裝(INSTALL),完成後就會出現像下面這張圖的區塊,然後點選「OPEN WEB UI」或是從側邊欄的ESPHome進入到Web UI頁面。

進入到Web UI之後,要先把ESP32-Cam加入到ESPHome內,所以先點選右下角的「 NEW DEVICE」新增裝置。

接著在跳出的視窗內選「OPEN ESPHOME WEB」,會跳出到一個用來連接ESP裝置的新頁面。

點選「CONNECT」之前,必須先將ESP32-Cam透過USB連接到電腦,這時候就需要依照下圖將ESP32-Cam的幾個接口接上USB to TTL裝置,才能讓電腦讀得到板子(記得要將IO0連到GND的針腳上,才會變成燒錄模式)。接線看起來有點麻煩,不過別擔心,只要接成功這一次,以後就可以連Wifi用無線的方式上傳程式碼更新開發板。

ESP32-CAM Troubleshooting Guide: Most Common Problems Fixed | Random Nerd Tutorials
如何接線的詳細說明可以參考這些地方: 1. ESP32-CAM Troubleshooting Guide: Most Common Problems Fixed | Random Nerd Tutorials 2. ESP32-CAM開發板(一):簡介與燒錄程式 — 超圖解系列圖書 3. ESP32CAM基礎範例教學|arduino wifi (youtube.com)
插上電腦之後,回到ESPHome Web UI,點「CONNECT」用來跟你的ESP32-Cam裝置連接,這時網頁會跳出一個對話窗,電腦會偵測有在使用的序列埠並全部列出在對話框內,找到自己ESP裝置的序列埠後就可以按「連線」。

再來選擇「PREPARE FOR FIRST USE」,在跳出的對話方塊選「INSTALL」安裝。

接下來就需要等待約二分鐘的時間讓它跑完,然後就會看到成功安裝的標誌!到這邊ESPHome就已經成功的接入我們的ESP32-Cam了!

不過目前還是透過有線的USB接口連接ESP32-Cam,要讓HA或ESPHome可以無線的操控裝置,可以先在這邊就先設定Wifi名稱跟密碼,成功連接網路之後只要將ESP32-Cam接上電源就可以無線的從ESPHome控制開發板了!

回到ESPHome的Web UI,可以發現ESPHome已經發現新的裝置了,點選「ADOPT」並為他取一個新名字,

執行之後可能要再等它跑一下,幾分鐘後看到綠色的SUCCES就代表一切都成功了!恭喜你,ESPHome已經完整的連上ESP32-Cam了,而且未來也可以單靠Wifi就把新程式碼更新到板子上!

- Step 2:連接組裝監視器的各個元件
設定好ESPHome的連接之後,接下來要進入到偏向硬體組裝與測試部分。
這次DIY的監視器會以ESP32-Cam為主體,由它搭載的鏡頭取得影像、並且控制伺服馬達轉動鏡頭、以及傳送溫溼度感測器的數值,變成一個帶有記錄溫度和濕度的即時監視器。
所需零件有:
- ESP32-Cam
- 伺服馬達 (SG90) 2 + 馬達支架*
- 溫溼度感測器模組 (DHT-22)
- Type-C/Micro USB電源接頭母座
- 5V充電頭 + Type-C/Micro USB線
- 2.4G Wifi外接天線/IPEX接口 (不一定要裝,但加裝後訊號強度會比較好)
- 監視器外殼 (可以自己發揮創意找適合的)
接下來就按照下面的電路圖把所有部件的電線都接到正確的GPIO接口上。建議先確認所有功能都沒問題後再完整組裝。

🚨注意:ESP32-Cam若是要外接天線,必須修改背面的0歐姆電阻焊點!
如何外接天線的說明請參考: 1. ESP32-CAM Connect External Antenna (Extend Wi-Fi Coverage) 2. How to add an external antenna to an ESP32-CAM (2 methods) (youtube.com)

- Step 3:ESPHome內上傳YAML配置檔
接完線之後要編輯配置檔(.yaml),然後上傳到開發板才可以操控馬達跟感測器。可以直接複製下面的整個code,或是到*這裡(Github)*看看,然後要在ESPHome內找到對應的裝置,接著點擊「EDIT」進入編輯頁面,貼上剛剛複製的所有code,進入右上角的「INSTALL」選擇「Wireless」無線上傳到開發板,等待一段時間直到再次出現綠色SUCCESS後,就完成上傳的步驟了!


esphome:
name: esp32-cam-security-camera
platform: ESP32
board: esp32dev
# Enable logging
logger:
# Enable Home Assistant API
api:
# encryption:
# key:
ota:
- platform: esphome
web_server:
port: 80
wifi:
ssid: !secret wifi_ssid
password: !secret wifi_password
captive_portal:
# Example configuration entry
esp32_camera:
external_clock:
pin: GPIO0
frequency: 20MHz
i2c_pins:
sda: GPIO26
scl: GPIO27
data_pins: [GPIO5, GPIO18, GPIO19, GPIO21, GPIO36, GPIO39, GPIO34, GPIO35]
vsync_pin: GPIO25
href_pin: GPIO23
pixel_clock_pin: GPIO22
power_down_pin: GPIO32
# Image settings
name: ESP32-CAM Security Camera
vertical_flip: False
horizontal_mirror: False
brightness: 2
## GPIO_4 is the flash light pin
light:
- platform: binary
output: gpio_4
name: flashlight
# Servo
servo:
- id: servo_lr
output: servo_output_lr
auto_detach_time: 2s
transition_length: 3s
- id: servo_ud
output: servo_output_ud
auto_detach_time: 2s
transition_length: 3s
output:
- platform: ledc
id: servo_output_lr
pin: GPIO15
frequency: 50 Hz
- platform: ledc
id: servo_output_ud
pin: GPIO13
frequency: 50 Hz
# Flashlight
- platform: gpio
pin: GPIO4
id: gpio_4
number:
- platform: template
name: 'Servo SC LR'
id: servo_number_lr
min_value: -100
initial_value: 0
max_value: 100
step: 10
optimistic: true
set_action:
then:
- servo.write:
id: servo_lr
level: !lambda 'return x / 100.0;'
- platform: template
name: 'Servo SC UD'
id: servo_number_ud
min_value: -30
initial_value: 0
max_value: 100
step: 10
optimistic: true
set_action:
then:
- servo.write:
id: servo_ud
level: !lambda 'return x / 100.0;'
button:
- platform: template
name: 'Servo Right'
id: move_right
on_press:
- number.increment:
id: servo_number_lr
cycle: false
- platform: template
name: 'Servo Left'
id: move_left
on_press:
- number.decrement:
id: servo_number_lr
cycle: false
- platform: template
name: 'Servo Up'
id: move_up
on_press:
- number.decrement:
id: servo_number_ud
cycle: false
- platform: template
name: 'Servo Down'
id: move_down
on_press:
- number.increment:
id: servo_number_ud
cycle: false
# DHT22
sensor:
- platform: dht
pin: GPIO14
model: DHT22
temperature:
name: "Balcony Temperature"
humidity:
name: "Balcony Humidity"
update_interval: 60s
大功告成🎉
上傳完成之後,回到HA內就可以開始編輯屬於自己的面板了,這時就可以看到剛剛新增的Entities,有鏡頭畫面、LED燈控制開關、上下左右操控鍵、以及溫溼度的數值。接下來就隨自己喜好配置資訊面板,再固定好你的監視器,整個多功能監視器就大功告成啦!

以上就是在Home Assistant上用ESP32-Cam這塊開發板DIY一個簡單又低成本的即時監視器,還附帶偵測溫濕度的功能。這些內容也是我從零到有慢慢摸索出來的一個紀錄,希望這次分享可以幫助到有需要的人,歡迎評論區留言討論,覺得不錯的話不仿給我拍手👏鼓勵一下!
메타데이터
- post_id
- e5aec04eadb5
- slug
- home-assistant建置-三-用esp32-cam製作一個監視器超詳細教學-e5aec04eadb5
- url
- https://medium.com/@davhsi3/home-assistant%E5%BB%BA%E7%BD%AE-%E4%B8%89-%E7%94%A8esp32-cam%E8%A3%BD%E4%BD%9C%E4%B8%80%E5%80%8B%E7%9B%A3%E8%A6%96%E5%99%A8%E8%B6%85%E8%A9%B3%E7%B4%B0%E6%95%99%E5%AD%B8-e5aec04eadb5
- canonical_url
- https://medium.com/@davhsi3/home-assistant%E5%BB%BA%E7%BD%AE-%E4%B8%89-%E7%94%A8esp32-cam%E8%A3%BD%E4%BD%9C%E4%B8%80%E5%80%8B%E7%9B%A3%E8%A6%96%E5%99%A8%E8%B6%85%E8%A9%B3%E7%B4%B0%E6%95%99%E5%AD%B8-e5aec04eadb5
- author_url
- https://medium.com/@davhsi3
- status
- ok
- fetched_at
- 2026-07-22 15:10:16