HomeAssistant 環境を構築する 2
ESPHome を導入して、ESP32CAM のカメラ画像を取得する
ESPHome のインストール
前回 HomeAssistant をインストールしましたが、まだなにもセンサーがありません。 市販のセンサーなどを登録することも可能なのですが、日本国内で手に入るものはあまりありません。
そこで役立つのが ESPHome です。
これは ESP32 ベースのセンサーやディスプレイなどを扱うための仕組みです。 基本 YAML で設定するだけで、コーディング不要で大体のことが可能です。
HomeAssistant のアドオンとして ESPHome を導入することで、ESP32 を使った自作センサー類を HomeAssistant 上で扱うことができるようになります。
ESPHome のインストールは簡単で、HomeAssistant のアドオンストアから ESPHome を選択してインストールするだけです。
ESP32CAM の登録
ESP32CAM は、ESP32 と OV2640 を使った、カメラユニットになります。 Amazonなどで一個1000円程度で入手できると思います。
4年くらい前に AI カメラのテストに使えないかと思って放置していたものです。 (結局ラズパイカメラを使った…) まずは、この ESP32CAM を ESPHome に登録していきたいと思います。
ここから + NEW DEVICE
を押すとどのような方法で登録するかどうか聞いてきます。
今回 HomeAssistant の動いている VM に直接接続できませんので、OPEN ESPHOME WEB
を押します。
ESPHome の Web 画面が表示されたら、Web 画面を表示している PC に ESP32 をつなぎます。
ESP32CAM にはシリアル変換がついていませんので、別途 USB-シリアル変換機経由で接続します。
IO0
を GND に落としてダウンロードモードにしておきます。
CONNECT
をクリックすると、ESP32 が接続されている COM ポートを聞いてきますので、設定します。
まずは、ESPHome のファームウェアを書き込みます。
PREPARE FOR FIRST USE
をクリックします。
2分ほどで書き込みが終わります。書き込みが完了したら IO0
をもとに戻してリセットします。
つぎに WiFi の設定をします。右下の …
をクリックして、Configure WiFi
を選択します。
WiFi の SSID とパスワードを入力します。
WiFi が正しく設定できると、ESPHome の画面に登録したデバイスが表示されます
Discovery の画面からデバイスを HomeAssistant に登録します。
ESP32CAM の設定
以下は、HomeAssiatant から操作できます。
ESPHome の画面から、いま設定したデバイスの ADOPT
をクリックします。
なぜかまた WiFi の設定を入力させられますが、入力して ADOPT を押すと、ファームウェアのコンパイルが行われて、ESP32CAM にダウンロードされます。
一旦設定が終わると、ESPHome の画面から設定変更できるようになりますので、EDITを押します。
ESPHomeにある Ai-Thinker Camera の設定を持ってきます。
これでダッシュボードに登録すると見えるようになる……はずなんですが。
トラブルシュート
どうも一定時間が経過すると WiFi 接続が切れてしまうようです。
いろいろ調べてみると WiFi の設定に power_save_mode: none
を入れろという記事をよく見かけますが、
wifi:
ap {}
power_save_mode: none
実際にこの設定を入れようとするとエラーではじかれます。
esp_improbe
の設定もコメントアウトします。
設定を ESP32CAM にインストールしたら、ダッシュボードから画像エンティティを追加します。 先ほどのカメラを指定します。
ダッシュボードで画像が見られるようになりました
というわけで、お疲れ様でした。
Appendix: ESP32CAM Config
ついでに、ESP32CAM の LED も制御できるようにしています。
substitutions:
name: esphome-web-0c9ab4
friendly_name: ESP32CAM01
esphome:
name: ${name}
friendly_name: ${friendly_name}
name_add_mac_suffix: false
project:
name: esphome.web
version: '1.0'
esp32:
board: esp32dev
framework:
type: arduino
# Enable logging
logger:
# Enable Home Assistant API
api:
# Allow Over-The-Air updates
ota:
# Allow provisioning Wi-Fi via serial
improv_serial:
wifi:
# Set up a wifi access point
ap: {}
power_save_mode: NONE
# In combination with the `ap` this allows the user
# to provision wifi credentials to the device via WiFi AP.
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: My Camera
# ...
# Flashlight
output:
- platform: ledc
pin: GPIO4
id: gpio_4
channel: 2
light:
- platform: binary
output: gpio_4
name: ESP32 Camera Light
dashboard_import:
package_import_url: github://esphome/example-configs/esphome-web/esp32.yaml@main
import_full_config: true
# Sets up Bluetooth LE (Only on ESP32) to allow the user
# to provision wifi credentials to the device.
#esp32_improv:
# authorizer: none
# To have a "next url" for improv serial
web_server: