動体検知カメラMatterデバイスを作る

# ESP32-CAM
ESP32-CAMのカメラで動体検知してiPhoneのHomeKitやAmazon Alexaへ通知するMatterデバイスを作ります。
ESP32-CAMにカメラV2・モーションセンサーを有効にしてビルドしたTasmota32をWeb Installerでインストールし、ドライバスクリプトをTasmotaにアップロードしてMatterの設定して完成。ビルドは手元に環境を作らずWebのビルド環境GitPodを使います。

![top.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/6824/1beff455-2de3-5e75-f031-e45b86b2d98a.png)
![IMG_8040.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/6824/5bf0ed46-fe48-8520-f8c0-71e933f2780e.jpeg)

## ハードウェア
技適ありのESP32-CAMとダウンローダ(ESP32などにUSB経由でプログラムを書き込んだりターミナルで操作したりするツール)を調達します

https://tak054.hateblo.jp/entry/2024/10/25/233752

https://www.switch-science.com/products/7471

## ファームウェア作成
ファームウェアはTasmotaを使用します。ESP32-CAMのカメラで動体検知する機能はオプション有効にしてファームウェアをビルドしなおす必要があります。今回は手元に環境を作らずTasmoCompilerとGitPodでビルドします。

GitHubのアカウントは必要なので、なければ作っておきましょう

まずはGitpodでtasmocompilerをビルドします
https://gitpod.io/#https://github.com/benzino77/tasmocompiler
![build01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/6824/f1908d1b-07d7-3cb0-7280-2f3f6f884cf7.png)
Continue with GitHubでログインしてContinueでビルドが始まります
![build02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/6824/8147b141-37bc-62ca-46ec-89ecceb15305.png)
完了すると最後に以下のようにport 3000でサービス開始のログが出ますので【PORTS】タブに切り替えます
![gitpod01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/6824/13a5d4ce-fac1-8711-f6dc-4a7f88631434.png)
URLをクリックするとtasmocompilerの画面になります
![gitpod02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/6824/49b084c4-d383-4f8e-63c4-ea061f154f19.png)
DOWNLOAD SOURCEを押し完了したらNEXT
![tas01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/6824/cd23f678-2c52-0e60-28cb-bf8bf8d77860.png)
ここでWiFiの接続情報を入力(2.4GHzのみ)し、NEXT
![tas02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/6824/70f5c86b-c98b-dbe6-feb2-bfac25d11a67.png)
欲しい機能にチェックを入れ、NEXT
・ESP32のWebcamを選択
・Matter protocol有効
![tas03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/6824/df8598af-27fd-67ac-a8ca-6fb7091f8842.png)
カメラで動体検知する機能を有効にするdefine追加し、NEXT
![tas04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/6824/27d391d8-b0dc-e109-184c-336c835eca3c.png)
```
#define USE_WEBCAM_V2
#define USE_WEBCAM_MOTION
```
COMPILEでビルド開始します
言語はEnglish、Versionは最新のバージョンで良いでしょう
![tas05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/6824/c8be2399-2305-a704-29d1-8855f620f169.png)
ビルドが完了すると"Finished. Exit code: 0."のログ出力があり、ファームウェアが完成します
![tas06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/6824/9b024cd8-7d5d-32ea-c58e-a57c1218ceb9.png)
FIRMWARE.FACTORY.BINをダウンロードしましょう
(ファイル名="tasmota32-webcam.factory.bin")

## ファームウェア書込み

ESP32-CAMをダウンローダを介してPCに接続します
書込みを行うのでESP32-CAMのIO0とGNDを接続します（シリアル通信するときには外す必要があります）
![IMG_8041.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/6824/eecb4c87-00d4-8fc6-2f23-c6e92f030656.jpeg)
```
 ESP32-CAM        ダウンローダ
       3V3  ----  3.3V
       GND  ----  GND
       UOR  ----  TXD
       UOT  ----  RXD
GND -- IO0
```
Tasmota WebInstallerを開きます
【Tasmota WebInstaller】  https://tasmota.github.io/install/
![upload.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/6824/9c2109fe-0776-aa94-974d-c3a0a2542139.png)
Upload factory.binで先ほどダウンロードしておいたファームウェア("tasmota32-webcam.factory.bin")をアップロードします

connectし、INSTALL TASMOTA32-WEBCAM.FACTORY.BINで書込みを開始します
![connect.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/6824/dfbb2095-9b3b-7ff5-01b3-c988c30050a2.png)
![installig.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/6824/a82b009f-1da3-29f3-1a91-cca9891cef19.png)
complete画面が出たら完了
ESP32-CAMのGND -- IO0の線を外して再起動したら、CONNECT してLOGS & CONSOLEで黒い画面を開きます
![reboot.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/6824/15e21b25-2f55-d0db-275d-822547f36a10.png)
CONSOLE画面でWiFi設定をリセットするため、wificonfigコマンド実行します。その後BACKで元の画面に戻します
```
wificonfig 2
```
CHANGE WI-FIで設定を進めます
![wificonfig.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/6824/6fa65db3-8798-8315-443c-7ecec76e42e7.png)
そのままWiFi接続をして(2.4GHzのみ)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/6824/e12d3ae1-2549-8e78-1dc0-0debf0ef05e2.png)
繋がったら、VISIT DEVICE
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/6824/62d74d8c-fdf7-b812-91e9-4fc5119e80bc.png)
ESP32-CAM内のWebサーバに入れます。ここで設定していきます
![init.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/6824/903f4bca-f824-9164-6e47-2c4504a6db47.png)
configuration -> Template で、 ESP32-Cam(2)を選択
![temp01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/6824/6ff99e5e-0124-a6ab-53c6-42cffdba9d61.png)
自動リブートしたら、configuration -> Module で、 ESP32-Cam(2)を選択
![module01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/6824/ee552a0b-a6ed-48de-854d-9a7439abcf28.png)
自動リブートしたら、configuration -> Other で、Device Nameを識別しやすい名前に変更しておきます
![devname01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/6824/8da3e160-7e91-0080-c8e9-419bfbf15f20.png)

自動リブートしたら、Tool->Consoleで黒い画面を立ち上げて、日本のlocaltimeに設定します。
「 timezone  +9:00 」と入力すればOK。ログのタイムスタンプで正しく設定されたか確認。
![timezone.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/6824/e00e9b7d-7e80-e31f-3169-abd6b30d0818.png)

GitHubから camMotionDriver.be と autoexec.be をダウンロード

https://github.com/fknaopen/Berry_webcam_motion

Tool->Manage File systemで、 camMotionDriver.be と autoexec.be をアップロードします。
![be_upload.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/6824/f1f7f28f-89d5-cfdc-b5e7-a5296ccbdf2f.png)

ここまでで、一旦リブートしましょう。
続いて、configuration->matter
Matter enableにチェックを入れてから「Save」します
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/6824/ea8645ed-c757-255c-b00c-4a8003fc44e7.png)
自動リブートしたら、configuration->matter
Add to Configurationで Name = vmotion / Type = v.Occupancy のエンドポイント追加
![vmotion.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/6824/ea74c474-4149-6191-8158-80d15cfc67f8.png)
Matterデバイスとして参加できるようにするために Commissioning openにチェックを入れて「Save」します
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/6824/e08c34cc-74bb-6bfa-9a56-1e620e77e941.png)

## HomeKitへの参加
Commissioning openの状態で Manual pairing codeが表示されます
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/6824/4410c35a-1b78-e2db-08ff-dbb91958a4d1.png)

以降、iPhoneのHomeアプリでデバイス追加していきます
![IMG_7954.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/6824/277344f9-858d-2adb-3169-03120dd4da4c.jpeg)
アクセサリを追加->その他のオプション->番号入力します
![IMG_7955 - コピー.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/6824/bba70788-8bb4-799e-d3c4-b0c5e30da659.jpeg)

「認定されていない」旨の警告が出ますが、このまま追加してどんどん進めます。
ブリッジ１個と、ライト１個、人感センサー1個が認識されればOKです。
![matter0000.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/6824/8998487f-98c9-534f-16cc-f09fddd52209.png)

## 動作確認
「人感」がMatterデバイスとしてHomeKitに登録され、モーション検知に応じてiPhoneへ状態通知されます。
ESP32-CAMは、2秒間隔でカメラの画像をチェックして、動くものが検出されるとMatterのOccupancy:1として通知します。検出され続けている間は重複した通知は行いません。5秒間動きが検出されなければOccupancy:0として通知します。
　http://＜ESP32-CAMのipアドレス＞:81/diff.mjpeg で画像の変化点を確認できます。(その他詳細は参考：【WEBCAM_V2】に記載があります)
 ![diffmjpeg.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/6824/c772af84-50d0-a225-5e04-192cead58702.png)
 数値はお好みに応じてスクリプト( camMotionDriver.be )の値を修正することもできます。
![matter00002.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/6824/1f7fd66f-8dcc-9d3d-cf1a-42ad770b3f25.jpeg)

## 参考
【WEBCAM_V2】 = https://github.com/btsimonh/TasmotaBerryPLay/blob/master/tasdocs/esp32cam.md
【Tasmota】 = https://tasmota.github.io/docs/