はじめに
M5CAMERA(ESP32 PSRAM OV2640)(商品紹介は例えばこちら(スイッチサイエンスさん))を買ってみた。wifiでカメラデータを転送できる小型のデバイスだ。SVGA(800x600ピクセル)サイズの画像をMJPGでストリーミングできた。しかしながら、デフォルトではマルチクライアント接続できない。今回の業務では目的達成に適さないな・・・と思っていたが、調べてみるとこれをマルチクライアント対応で作動させた人がいて、方法を公開していたので真似してみた。結果、うまくいったので備忘録として記述しておく。
事前準備
使用するPC、MacとM5CameraをUSB接続して、ArduinoIDEでプログラミングとプログラムの転送をできるようにしておく。この方法については、先輩方が情報をいろいろ下さるから困らない。
M5Stack DOCs
https://docs.m5stack.com/#/en/quick_start/m5core/m5stack_core_quick_start
MacでM5stackをはじめる
https://qiita.com/hmmrjn/items/2b2da09eecffcbdbad85
初心者向けM5Stackの始め方(ArduinoIDE編)
https://raspberrypi.mongonta.com/howto-start-m5stack-arduinoide/
マルチクライアント対応スケッチ(転載)
マルチクライアント対応のストリーミングについては、こちらの記事が技術参考。
https://www.hackster.io/anatoli-arkhipenko/multi-client-mjpeg-streaming-from-esp32-47768f
・・・なるほど〜、デュアルコアを活かして、コアの1つをカメラからの画像の処理に集中させ、もう一つのコアはWifiの通信処理に集中させる、という考え方なのね〜。で、こちらの方、スケッチをGithubに公開してらっしゃるのだが、使ってるブツは、M5Cameraではない。そこで、GithubでForkさせてもらったソースをM5Camera向けに編集した。M5CAMERA Bステップ向けの Camera PIN Assign を camera_pins.h に書き込んである。また、2021年1月時点でダウンロードしたOV2640ドライバをオリジナルに上書き済みだ。
https://github.com/tomofu74/esp32-mjpeg-multiclient-espcam-drivers
なお、スケッチを取得したらすぐ使えるか、というとそうではなくて、当該カメラを使用するWiFi環境に合わせて内容を編集した、home_wifi_multi.h というファイルをスケッチに追加しなければならない。.inoファイルを開くと50行目付近に書いてあるように、この.hファイルには2行情報を書き込む。
/*
Next one is an include with wifi credentials.
This is what you need to do:
1. Create a file called "home_wifi_multi.h" in the same folder OR under a separate subfolder of the "libraries" folder of Arduino IDE. (You are creating a "fake" library really - I called it "MySettings").
2. Place the following text in the file:
#define SSID1 "replace with your wifi ssid"
#define PWD1 "replace your wifi password"
3. Save.
Should work then
*/
さて、上述の githubにアクセスすると、3つのフォルダがある。参考情報として提示した、オリジナルの作者のページのストーリーを読むとわかることだが、それぞれ反映された機能が異なる。開発段階に応じた内容が収録されているのだ。
esp32-cam フォルダ ・・・ シングルクライアントで使えるシンプルなストリーミング
esp32-cam-rtos ・・・ マルチクライアント対応。ただし、クライアントを待たずにバッファを更新。
esp32-cam-rtos-allframes ・・・ マルチクライアント対応。しかも、FPS設定値を可能な限り守って全フレームをクライアントに送信しようとする。
全フレーム送信型のものは、映像の質は高いといえるが、遅延が大きい。映像の撮影サイズにもよるが、XGAサイズで15秒程度の遅延がある。リアルタイム性は求めないストリーミング配信で有用だろう。ある程度のリアルタイム性を求めるマルチクライアントなカメラとして使うのであれば、esp32-cam-rtosのフォルダの中のスケッチが使い勝手がよいと思う。
まとめ
M5Cameraをマルチクライアント対応のカメラ画像ストリーミングサーバーとして使うことができた。
関連情報を公開してくださった諸先輩方に敬意を表す。