Integrarea ESP32-CAM in Home Assistant cu ESPHome
Azi am continuat proiectul de săptămâna trecută mini proiectul 36, și i-am atașat cameră ESP32-CAM , care am configurat-o direct din ESPHome (vezi secțiunea cod de test). Scopul principal pentru acest proiect ar fi să-l folosesc ca și sonerie la ușa pentru ai vedea mai bine pe cei care sună sau bat la ușă.
Componente:
- Placa de dezvoltare miniatura cu ATtiny85 si microUSB OKY2024-1
- Pereche Emitator si Receptor RF 433 MHz
- Senzor Capacitiv TTP223
- Set 10 Fire Dupont mama - tata 20 cm
- Placa dezvoltare ESP32-CAM WIFI+Bluetooth, cu modul camera OV2640, 2MP
Schema electronica/sistem:
Am conectat toate piesele urmând schema de sistem de mai jos, unde linia punctată reprezintă conexiunea wifi între ESP32 CAM si router. Deci ar fi un ESP32-CAM care asigură alimentarea și pentru placa OLIMEXINO-85S, iar la această placă am conectat un module FS1000A de transmisie 433Mhz și un buton capacitiv TTP223. Cele două plăci au GND-ul comun și în plus am legat pinul de semnal al butonului touch și la ESP32-CAM.
Am înghesuit totul într-o carcasă printată folosind un model de pe thingiverse. Butonul de tip touch este pozitionat sub carcasă în partea de jos, iar la apăsare se va lumina în roșu.
După instalare am pornit acest addon din sectiunea de configurare, și i-am activat vizibilitatea in sidebar:
In secțiunea de ESPHome am adăugat un nod ESP32 CAM și am instalat această configuratie .
După ce se apasă butonul Install din josul ferestrei o să se afișeze fereastra de mai jos care ne întreabă cum o să se facă flashuirea. Prima flashuire se va face manual (se va downloada un fisier .bin care o să se flashuiască folosind PlatformIO sau un alt program de flashuire) sau conectând ESP-ul direct la HA.
După alegerea metodei de scriere o să înceapă compilarea și linkeditarea.
Dacă compilarea este cu success o să rezulte un fisier .bin care va fi uploadat pe ESP,dar doar în cazul în care acest ESP are deja o aplicație capabilă să rescrie aplicația prin intermediul OTA (Over the Air).
După finalizarea scrierii aplicației, ESP-ul o să înceapă rularea acestui program.
Dacă toate merg bine o să se poată configura imaginea de la cameră în Home overview folosind un Picture Glace Card configuration.
Iar in HA Overview o să se vadă imaginea de la cameră la un frame rate de 2.5 - 3 fps.
Odată cu configurarea conexiunii MQTT în ESPHome, apar și toate datele de la ESP32-CAM disponibile la MQTT broker. Aici se vă și semnalele pentru apăsarea butonului și semnalul pentru controlarea flashlight-ului, care o să se aprindă atunci când se apasă butonul.
Cod de test:
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
substitutions:
devicename: Doorbellcam
esphome:
name: esp32-cam
esp32:
board: nodemcu-32s
framework:
type: arduino
# Enable logging
logger:
level: VERBOSE
# Enable Home Assistant API
api:
ota:
password: "password"
wifi:
ssid: !secret wifi_ssid
password: !secret wifi_password
# Enable fallback hotspot (captive portal) in case wifi connection fails
ap:
ssid: "Esp32-Cam Fallback Hotspot"
password: "password"
# Example configuration entry
mqtt:
broker: 192.168.0.235
username: username
password: password
captive_portal:
esp32_camera:
name: doorbellcam
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
# max_framerate: 5 fps # default: 10 fps, max 60
# idle_framerate: 0.2 fps # default: 0.1 fps - framerate for 'picture' in HA dashboard
resolution: 800x600 # default: 640x480 (VGA) - higher res requires more memory
jpeg_quality: 20 # 10 (best) to 63 (worst)
binary_sensor:
- platform: gpio
pin:
number: GPIO12
mode: INPUT_PULLUP
inverted: False
name: snap
icon: "mdi:bell"
on_press:
# - mqtt.publish:
# topic: "esphome/${devicename}/button"
# payload: "1"
then:
- output.turn_on: gpio_4
on_release:
then:
- output.turn_off: gpio_4
text_sensor:
- platform: wifi_info
ip_address:
icon: "mdi:ip"
name: ${devicename} IP
ssid:
name: ${devicename} SSID
icon: "mdi:access-point-network"
bssid:
name: ${devicename} BSSID
icon: "mdi:access-point-network"
sensor:
- platform: wifi_signal
name: "WiFi ${devicename}"
update_interval: 60s
- platform: uptime
name: "${devicename} - Uptime Sensor"
# Flashlight CHECK PIN
output:
- platform: gpio
pin: GPIO4
id: gpio_4
light:
- platform: binary
output: gpio_4
name: ${devicename} light
switch:
- platform: restart
name: "${devicename} - Restart"
id: restart_switch
esp32_camera_web_server:
- port: 8080
mode: stream
- port: 8081
mode: snapshot
substitutions: | |
devicename: Doorbellcam | |
esphome: | |
name: esp32-cam | |
esp32: | |
board: nodemcu-32s | |
framework: | |
type: arduino | |
# Enable logging | |
logger: | |
level: VERBOSE | |
# Enable Home Assistant API | |
api: | |
ota: | |
password: "password" | |
wifi: | |
ssid: !secret wifi_ssid | |
password: !secret wifi_password | |
# Enable fallback hotspot (captive portal) in case wifi connection fails | |
ap: | |
ssid: "Esp32-Cam Fallback Hotspot" | |
password: "password" | |
# Example configuration entry | |
mqtt: | |
broker: 192.168.0.235 | |
username: username | |
password: password | |
captive_portal: | |
esp32_camera: | |
name: doorbellcam | |
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 | |
# max_framerate: 5 fps # default: 10 fps, max 60 | |
# idle_framerate: 0.2 fps # default: 0.1 fps - framerate for 'picture' in HA dashboard | |
resolution: 800x600 # default: 640x480 (VGA) - higher res requires more memory | |
jpeg_quality: 20 # 10 (best) to 63 (worst) | |
binary_sensor: | |
- platform: gpio | |
pin: | |
number: GPIO12 | |
mode: INPUT_PULLUP | |
inverted: False | |
name: snap | |
icon: "mdi:bell" | |
on_press: | |
# - mqtt.publish: | |
# topic: "esphome/${devicename}/button" | |
# payload: "1" | |
then: | |
- output.turn_on: gpio_4 | |
on_release: | |
then: | |
- output.turn_off: gpio_4 | |
text_sensor: | |
- platform: wifi_info | |
ip_address: | |
icon: "mdi:ip" | |
name: ${devicename} IP | |
ssid: | |
name: ${devicename} SSID | |
icon: "mdi:access-point-network" | |
bssid: | |
name: ${devicename} BSSID | |
icon: "mdi:access-point-network" | |
sensor: | |
- platform: wifi_signal | |
name: "WiFi ${devicename}" | |
update_interval: 60s | |
- platform: uptime | |
name: "${devicename} - Uptime Sensor" | |
# Flashlight CHECK PIN | |
output: | |
- platform: gpio | |
pin: GPIO4 | |
id: gpio_4 | |
light: | |
- platform: binary | |
output: gpio_4 | |
name: ${devicename} light | |
switch: | |
- platform: restart | |
name: "${devicename} - Restart" | |
id: restart_switch | |
esp32_camera_web_server: | |
- port: 8080 | |
mode: stream | |
- port: 8081 | |
mode: snapshot |
Documentatie proiect:
- https://siytek.com/add-esphome-to-home-assistant/#Configuring_a_device
- https://smartsolutions4home.com/ss4h-sd-smart-doorbell/
- https://community.home-assistant.io/t/my-first-somewhat-crude-but-working-doorbell-based-on-the-new-esphome-camera/109298
- https://esphome.io/components/esp32_camera.html?highlight=esp%20cam#configuration-for-m5stack-camera
- https://sequr.be/blog/2021/03/esp32-cam-and-esphome/
- https://randomnerdtutorials.com/esp32-cam-ai-thinker-pinout/
- https://thibmaek.com/posts/building-an-esp32-mqtt-button-box
To Do:
- Să salveze imagini cu cei care apasă pe sonerie, pe un server de imagini local
- Să integrez aplicația Double take pentru recunoașterea fețelor
- Să-i montez un alt buton cu un haptik mai normal
Afiliere eMag:
Linkurile de la secțiunea "Componente" conțin adresa mea de afiliere la eMag.ro, iar dacă cumperi folosind aceste linkuri vei susține blogul meu. Mulțumesc!
eMag Genius:
Hai și tu în Genius! Abonează-te la Genius 12 luni și primești beneficii premium și 20 lei card cadou eMAG. Profită acum! eMag Genius
Pentru întrebari și/sau consultanță tehnică vă stau la dispozitie pe blog sau pe email simedruflorin@automatic-house.ro. O seară/zi plăcută tuturor !