ESP32-CAMとArduino IDEで作る監視カメラ

公開

自宅留守番用の 監視カメラ が急遽必要になったので、3年前に購入して少し遊んだだけの ESP32-CAM を取り出し、製造元のEspressif社で用意されているCameraWebServerサンプルスケッチを Arduino IDE で焼いてみました。

ESP32-CAM

2020年当時RMB34程度で購入したこのESP-CAMも、2023年現在はRMB23前後まで値下がりしているようです。

図01.ESP32-CAM裏表

図01.ESP32-CAM裏表

搭載されているESP32-Sのメタルケースには技適表示はなく、

図02.ESP32-S表記

図02.ESP32-S表記

その下には、IPUS社のIPS6404LSQ 64Mbit PSRAMが実装されています(データシートはこちら)。

図03.IPS6404L-SQ PSRAM

図03.IPS6404L-SQ PSRAM

基板上にはPCBアンテナパターンと共にIPXコネクタもあり、どちらを使うかはその付近の抵抗R1(PCBアンテナ)・R2(外部アンテナ)どちらを実装するかで区別。

図04.PCBアンテナ vs 外部アンテナ

図04.PCBアンテナ vs 外部アンテナ

付属のカメラは、OmniVision社OV2640 2Mピクセルカメラで、その仕様は以下の通り。

  • 1,600×1,200px
  • 200万画素
  • 1/4″センサ
  • 66°標準画角レンズ

ちなみに、まっさらの状態で通電させたときのシリアル出力は、このような感じでした。

 

Arduino IDE ボードマネージャの更新

Arduino IDEは3年前に環境設定で、Espressif社のESP32用ボードマネージャURLを追加済みでした(ver.1.8.12を使用)。

図05.追加ボードマネージャ環境設定

図05.追加ボードマネージャ環境設定

作業前に ツール の現在のボード名から、ボードマネージャを開いて最新の状態へ更新します。

図06.ボードマネージャ更新

図06.ボードマネージャ更新

ESP32 CAM WEBSERVER サンプルスケッチを編集

Arduino IDEのメニューから、Expressif ESP32 CameraWebServerのスケッチ例を開きます。

図07.CameraWebServerスケッチ例を開く

図07.CameraWebServerスケッチ例を開く

編集事項は以下の通り、カメラモデルとWiFi接続情報のみです。

 

Arduino IDE ボードの書き込み設定

編集を終えたら、書き込みの前にボード設定を確認します。デフォルトではこの AI-Thinker ESP32-CAM になっているかも知れませんが、これで書き込むとストリーミング開始後、徐々に取りこぼしが発生して数分でフリーズしてしまいます(おそらくPSRAMを使っていない!?)。

図08.ボード AI-Thinker ESP32-CAM

図08.ボード AI-Thinker ESP32-CAM

そこで、より汎用性の高い ESP32Dev Module へ変更して、その下に表示されるオプションを細かく設定します。

図09.ボード ESP32 Dev Module

図09.ボード ESP32 Dev Module

書き込みサイズが2MBを少し超えてしまうので、Partition SchemeをHuge APPとしました。

 

スケッチの書き込み

GPIO0をGNDに落としてFlashモードにしたESP32-CAMが、USBシリアルコンバータを介してPCと繋いであることを確認したら、コンパイルの上、ボードへ書き込みます。

図10.GPIO0-GNDジャンパ接続

図10.GPIO0-GNDジャンパ接続

図11.waiting for downloadメッセージ

図11.waiting for downloadメッセージ

次のような状態になれば書き込み成功です。GPIO0をGNDに落としたジャンパを外し、ESP32-CAM上のRSTボタンを押して再起動させます。

図12.ボードへの書き込み成功

図12.ボードへの書き込み成功

ESP32-CAM始動

ESP32-CAM CameraWebserverのUIはこのようになっていて、映像に関する設定項目がずらりと並んでいます。

図13.CameraWebServer 画面

図13.CameraWebServer 画面

はじめは解像度 Resolution がQVGAなのでこれを高いものへ変更、 Quality は画像の圧縮率を意味するようで、数値が低いほど高品質な画像になる反面、データ量が増えるので電源供給やWiFi信号が貧弱な場合は、映像に横線ノイズが入ることも。

左下のAdovanced Settingsを開くと、この辺はかなりマイナーな項目が。

図14.Advanced Settings 内容

図14.Advanced Settings 内容

なお、上図のUIページの他、ストリームや静止画を直接取得するために、次のURLが用意されています。

しばらく使ってみて気になったことをまとめてみると…

  • 設定は再起動後残らない。
  • 映像の上下反転や左右反転はあるが、90°回転が無い。
  • WebUI上でボードを再起動させる術がない。
  • WiFi接続情報を変えるには、焼き直すしかない。

 

HomeAssistant ダッシュボードへ静止画の簡易登録

以前、仮想マシンとして構築したHomeAssistantのダッシュボードに画像カードを作成し、カメラ静止画取得URLを登録してみました(あくまで簡易的なものなので、画像リフレッシュとかは無し)。

図15.静止画をHAダッシュボードへ登録

図15.静止画をHAダッシュボードへ登録

VLCメディアプレイヤーでストリーミング受信

設定は固まってからの普段の映像監視は、ブラウザよりもVLCメディアプレイヤーの方が便利。

VLCでネットワークストリームを開く際、そのURL欄に先ほどのストリーム受信URLをそのまま入れるとエラーになるので、末尾の stream 抜きで入力する必要があります。

図16.ネットワークストリームを開く

図16.ネットワークストリームを開く

動きがないと静止画かと不安になりますが、メディア情報の統計欄の数値が動いているので、確かにストリーミング映像でした。

図17.ストリーミングメディア情報

図17.ストリーミングメディア情報

 

今回はメーカー謹製サンプルスケッチを使いましたが、ネット上には様々な工夫をこらした改良版スケッチを、有志の方々が公開されているので、Arduino IDEの使い方を忘れないうちに試してみたいと思います。

 

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA