見出し画像

ESP32CAMサンプル強化 Wi-Fi設定とOTAができるようにしてみた+α

こんにちは、Rcatです。
ESP32-CAMを使った監視システムを昔作りましたが、Arduino側のソースはほぼ変更していないので、すごく使い勝手悪いんですよね。
具体的にはWi-Fi設定をスケッチに書いている点と、スケッチがOTAで書き込めない点です
というわけで、この辺を解消するようにサンプルを改造しました。
また、本スケッチは以下の監視カメラシステムで利用しているため、それ対応の機能追加もあります。
本記事はその改造後の使い方の説明となります。
ちなみにアップデートを加える度更新します

ESP32-CAMを使用したお手軽監視システムはこちら
無限のESP32CAMを使用して同時監視できるシステムです(実行システムのリソースの許す限りではある)
配布情報もこちらから


改造ポイント解説

Wi-Fi設定をスマホから行える 

サンプルスケッチというか、大抵のwi-fi接続はスケッチ上にSSIDとパスワードを直接記述することが多いです。
つまり、後から変更することができないということです。
というわけで、私のWEB工作テンプレートのようにスマホから設定できるように改造しました。
このように後から設定することを前提にすることで、接続先を柔軟に変えることができるになります。これでいつもの違う環境で使う場合や、誰かのために作ってあげる場合でも問題なく使用できますね。

サンプルではスケッチに設定があり、後から変更できない

まず、最初に設定がない状態だとアクセスポイントモードで起動しますので、スマートフォンなどwi-fi機能が付いた端末で接続します。
SSIDはRcatESPでパスワードは12345678です。

これでESP32に接続できましたので、Chromeなどブラウザアプリを立ち上げて接続します。
接続先のアドレスは"192.168.0.1"で、さらに"/rcat"にアクセスします。
すると以下のような画面が表示されるので、ここでwi-fiの設定を変更できるという仕組みです。
接続設定のSSIDとパスワードの部分に自宅のwi-fi設定を入力してから適用ボタンを押し、再起動すると設定が適用されます。

固定IPアドレスを使用する

先ほどのwi-fi設定画面の下にある設定がこの設定です。
特に何も考えていなければ、wi-fiに接続するとランダムなIPアドレスが割り当てられます
また、機種によっては接続するごとにIPアドレスが変わることもあります。
これだと監視カメラとして動作させる場合、いちいちアドレスを見つけないといけないので非常に不便です。
それを防ぐことができるのがこの固定IPアドレスの設定です。
ここで自分の好きなIPアドレスを設定することで、そのアドレスに固定することができます
ただし、ルーターのDHCP割り当て範囲と被らないように気をつけてください。
DHCPというのは、自動でIPアドレスを割り当てるシステムのことです。

オンラインOTAアップデート機能

次にオンラインOTAアップデート機能です。
固定IPのさらに下にあるのがこの設定です
通常スケッチを書き込む場合、シリアル変換モジュールから有線で接続して更にモード変更を行って書き込みを行いますね。
工作をしてる最中はまだいいんですが、出来上がったものにアップデートを施したい時、いちいち分解しなきゃいけなくて面倒くさいです。
それを解消してくれるのがOTAアップデートです。
これはwi-fiを使用して無線経由でスケッチを書き込む機能です。
さらに今回搭載しているのは通常のOTAアップデートとは異なり、Rcatが独自に搭載した、Googleドライブからファームウェアを取得するオンラインOTAアップデートです。
これを使用することで、Rcat公式のファームウェアでワンクリックでアップデートできます。

今回搭載したOTAアップデートには二つのやり方があります。

  • 最新版にアップデート
    このボタンを押すと、ESP32CAMのスケッチがRcat公式の最新版でアップデートされます。

  • カスタムアップデート
    こちらは上側のテキストボックス内にGoogleドライブに格納したファイルIDを入力することで、そのバイナリをダウンロードしてアップデートする機能です。
    監視カメラとして使用するのをやめ、別のスケッチを書き込む場合に使えます。ちなみにデフォルトで入力されているのはRcatが配布している、ESP工作テンプレートのIDになります。こちらには直接バイナリをアップロードして書き込み機能や、spiffs内のファイルを管理する機能など様々な機能が搭載されています。
    このテンプレートについては、以下の記事をご覧ください。

  • デバッグアップデート
    Rcatが使用する開発版の書き込みボタンです。
    開発中に正規バイナリを書き換えるわけにはいかないのでボタン分けています。
    押せばβ版を入れられますが、最悪無限再起動等になった場合OTAできなくなります。自己責任で押してください。

なお、システムを都合上、アップデートの完了や失敗などの通知ができませんのでご注意ください。

LED点灯機能

さて、ESP32CAMってLED付いてるんですよね。でも、それを光らせるボタンとかは特にありませんでので追加しました。

以下のように元から存在するコントロールURLに対してLEDを操作する項目を追加しました。
ここから操作をすることで、付属のLEDを使用することが可能になります。

アップデート情報

後に追加されたアップデートの紹介です

2軸サーボ制御機能

監視カメラだと固定点のものが多いですが、お留守番カメラなんかはリモート操作できますよね?
というわけで、本作にも搭載します。
SG 90サーボモーターを2個搭載し、上下左右の動きを操作できます

M-Searchによる自動検出機能

IPアドレス調べるの面倒ですよね?
スケッチ無線化したのにアドレスはシリアル通信とか意味ないじゃん…
という悩みを解決するのが本機能。
特定のパケットに反応して自身のIPアドレスを通知してくれます。
対応したクライアントを使用すればwi-fi に接続してボタンを押すだけでアクセスできます
詳しくは以外の記事をご確認ください

導入方法

バイナリを直接書き込む

以下の記事で、Pythonと書き込みツール(開発ボードやシリアル変換アダプタ等)さえあれば、Arduinoいらずで書き込む方法を紹介しています。
この方法の良い点は、ソースをコンパイルするための環境構築が一切いらない点です。
今回紹介している改造スケッチのバイナリデータとともに配布しています。
ご確認ください。
また、以下の記事で配布しているバイナリ書き込みパックには、SPIFFSのシステムイメージも含まれておりますので、後述する無限再起動問題も解決できます。

RcatESP工作テンプレートからオンラインOTAアップデートを行う

こちらは、私が配布しているESP工作テンプレートを書き込んだ後、それにも搭載されているオンラインOTAアップデートで本スケッチを書き込む方法。
オンラインOTAのバイナリは、アップデート時に必ず更新しますので、こちらもお勧め。

テンプレートを書き込んで接続後、トップページからスケッチアップデーターをクリックします。

次にGoogleドライブからアップデートの部分でRcat公式ファームウェアを選択し、ESP32CAMを選びます。
その後、オンライン書き込みボタンを押すことで書き込みが開始されます。
ちなみにwi-fi設定などがこのテンプレートの流用であるため、このテンプレートで設定を行っておけば引き継がれます。

アップデートボタンを押して再読み込みを行うとスケッチが書き変わり、監視カメラとなる

直接書き込む

本記事トップで紹介している動画の説明欄からソースコードを取得できます。
それを書き込んで使用するという方法もあります。
ただし、ソースコードは更新はしないので、書き込み後に必ずオンラインOTAを実行してください。

無限再起動する…

この件に関してはよく分からないのですが、書き込み後、最初の起動は無限にリセットを繰り返します。
※しない機種もあるのでチップの製造元によるのかも…
原因としては、wi-fiのデータなどを保存しているspiffsを初期化できないからというものです。
本スケッチは、初めての起動で初期化されていない場合、初期化するようなコードになっているのですが、CAMに使われている"S"モジュールor"Wrover Module?"はどうやらそこで失敗して落ちてるみたいです。
通常のESP32無印やS3などでは問題なく初期化処理が入るのですが…
解決策はspiffsのイメージデータを書き込むツールを使って、有線で一度空のファイルシステムイメージを書き込むこと。
一度書き込みさえすれば、その後は問題なく使用できます。

SPIFFSイメージの書き込みは以下で紹介しています。
※動画ではデータを書き込んでいますが、今回は空のフォルダでいいです
※このツールはArduinoIDE2.0非対応だそうです。

まとめ

今回はESP32CAMのサンプルスケッチを利便性が高くなるように改造しました。
やはりwi-fiの設定が変更できないのと、いちいち配線しないと書き込みができなかったのが使いづらい点だったので、そこを解消できたのが大きいと思います。
皆さんも私のシステムを使用するなら是非書き込んでみてくださいね。


情報が役に立ったと思えば、僅かでも投げ銭していただけるとありがたいです。