← Back to list

Home Assistant建置(三): 用ESP32-Cam製作一個監視器超詳細教學

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

MC HSIEH · 2024-10-05 10:44 · 2 claps · 12.4 min read
#home-assistant #raspberry-pi #esp32-cam #security-camera
Open on Medium ↗
Wiki topics: 📟 · Gadgets & IoT 📷 · Photography

Home Assistant建置(三): 用ESP32-Cam製作一個監視器超詳細教學

[embed]Home Assistant建置 (一): 如何用樹莓派搭建Home Assistant 最近用樹莓派建了一個智慧居家系統Home Assistant,可以單獨透過這系統管理家庭生活中會用到的電器,舉凡電燈、電視、電風扇,冷氣、除濕機、監視器等,都可以透過Home…medium.com

[embed]Home Assistant建置(二): 讓手機也能無時無刻連上Home Assistant 目前只能在同個區域網路下連接 Home Assistant。當手機沒有連上家裡的 WiFi,或者離開家中時,就無法通過區域網路連接 HA。medium.com

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

ESP32-Cam

ESP32-Cam是一款基於ESP32微控制器的開發板,專為影像應用而設計,它有很多實用的特點很適合拿來做物聯網(IoT)的開發:

  1. 搭載OV2640鏡頭模組,提供最高1600x1200的解析度進行拍照或即時串流。
  2. 內建Wifi藍牙模組,可以透過無線設備傳輸訊號。
  3. 提供非常多個GPIO接口,用來連接不同的傳感器。
  4. 功耗低,也支援深度睡眠模式。
  5. 體積小巧,約為 27 ×40.5 mm。
  6. 價格便宜,約在 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

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為主體,由它搭載的鏡頭取得影像、並且控制伺服馬達轉動鏡頭、以及傳送溫溼度感測器的數值,變成一個帶有記錄溫度和濕度的即時監視器。

所需零件有:

  1. ESP32-Cam
  2. 伺服馬達 (SG90) 2 + 馬達支架*
  3. 溫溼度感測器模組 (DHT-22)
  4. Type-C/Micro USB電源接頭母座
  5. 5V充電頭 + Type-C/Micro USB線
  6. 2.4G Wifi外接天線/IPEX接口 (不一定要裝,但加裝後訊號強度會比較好)
  7. 監視器外殼 (可以自己發揮創意找適合的)

接下來就按照下面的電路圖把所有部件的電線都接到正確的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