こんばんは。
今回は M5Stack シリーズ製品の中の M5Camera を初めて使ってみました。
これがあまりにも簡単にスマホと連携して動作するので、殆ど市販のWi-Fi Webカメラのように使えて驚きでした。
そして、Arduino IDEでも、サンプルプログラムをほんのちょっと変更するだけで、Wi-Fi STAモードでも動作できました。
ESP32 WROVER とカメラモジュールの OV2640 だけの構成で、ここまでコンパクトに簡単にできてしまうということがスゴイです。
ESP32 WROVER については、今回、私は初めて使用したので、正直良く分かっていませんが、Espressif Systems 社の ESP32-WROOM-32 の構成に 4MB の PSRAM というメモリがプラスされた感じのようです。
この PSRAM を利用して M5Camera が動いているように見受けられました。
M5Camera をクイックスタートで動作させると、プログラミング一切不要で動作しました。
これは、多分、ESP32 の Soft AP モード で動作しているのだと思います。
Soft AP モードは、M5Camera ( ESP32 WROVER )自体がルーターになるモードですから、映像のストリーミングは少々遅いです。
ですが、外部ルーターを介す Station モード ( STA モード ) の場合は、かなり高速でストリーミングできていると思いました。
まぁ、ルーターの通信能力によるところですが、高速ルーターを使えばもっと速くなると思います。
後で動画を紹介しているので、見てみてください。
Arduino IDE プログラミングで実現できます。
ここまで出来るなんて、スゲーと思いましたね。
今回は、サンプルスケッチをほんのちょっと変えるだけで動作するので、かなりおススメですよ。
そんなわけで、簡単なレビューを紹介したいと思います。
因みに、私は素人アマチュアですので、何か誤りがありましたらコメント投稿等でご連絡いただけると助かります。
ところで、今回は皆さまからの支援金で、M5Camera も購入させていただきました。
本当にありがとうございました。
この記事が書けたのも、みなさまのおかげです。
m(_ _ )m
ところで実は正直なところ、SPRESENSE カメラが欲しかったのですが、ちょっと手が出ない金額でした。
それに、今年は私自身の生活の為に本業の割合を多くしたため、電子工作やプログラミングのできる時間が極端に減ってしまいました。
ですから、たとえ支援金を頂いて購入できたとしても、SPRESENSE を一から勉強し直す余裕がありませんでした。
ですから、当分見送ることにしました。
リクエストがあった方々にはとても申し訳ない気分ですが、どうかご理解いただきたいと思います。
1.0.2 用のスケッチを新たに追加しました。
(2019/04/28)
esp32-cameraライブラリを読み解く ~モジュール接続、動作チェック編~
- 使ったもの
- M5Camera 外観
- M5Camera をザッと分解してみる
- M5Camera をクイックスタートで使ってみる
- M5Camera を Arduino IDE サンプルスケッチで使ってみる
- 編集後記
以下の記事も合わせて参照してください。
M5Camera の映像をArduino IDE シリアルモニターに表示させてみる
更に最新記事では、M5Stackの全画面(320 x 240 pixel)にM5Cameraの映像をWiFiストリーミングすることも可能になりました。
LovyanGFXとJpgLoopAnimeでM5StackとM5Cameraの全画面WiFi動画ストリーミング実験
また、M5StackとM5Cameraを使って、WiFi TCP/IPで動画ストリーミングする実験をしました。
しかもスマホやパソコンのブラウザ表示に切り替えられます。
M5StackとM5Camera でWiFi TCP/IP 動画ストリーミングする実験
また、JPEG画像を扱えるようにもなりました。
OV2640のJPEG出力でM5CameraとM5StackのWiFi動画ストリーミング実験
また、M5Cameraの映像をWiFi UDPで送信してM5Stackに表示させる実験をしました。
M5Cameraの動画をM5StackへWiFi, UDPで送信する実験
M5StackとM5CameraでWiFi, UDPによる動画転送を長時間連続安定動作させる実験
更に、M5Cameraの仕組みの理解を深めるために、ESP32とイメージセンサOV2640と小型OLEDディスプレイを接続して動作させた以下の記事も参照してみてください。
esp32-cameraライブラリを読み解く ~モジュール接続、動作チェック編~
更にさらに、esp32-cameraライブラリをもっと深掘りして、DMA, I2S転送やデジタルズームについて実験してみた以下の記事もご参照ください。
esp32-cameraライブラリを読み解く ~OV2640, SCCB, DMA, I2S 編~
更にさらに、最近ではディープラーニングも取り入れて、手書き数字のリアルタイム認識に挑戦してみました。
ディープラーニングのお勉強~その7。M5StackとM5Cameraで手書き数字リアルタイム画像認識実験~
使ったもの
M5Camera
Espressif Systems 社の ESP32 WROVER を搭載し、技適取得済みなので、日本で 2.4GHz帯 Wi-Fi および Bluetooth 通信が安心して使えます。
WROVER は ESP32-WROOM-32 に 4MB の PSRAM をプラスして搭載したようなものだと思えばとりあえずは良いと思います。
そして、M5Stack社によって、カメラモジュール OV2640、USB TypeC、GROVE コネクタを搭載して、コンパクトにまとめたモジュールにしています。
ESP-IDF や Arduino IDE で開発できます。
スイッチサイエンスさんのウェブショップで販売しています。
https://www.switch-science.com/catalog/5207/
その他、Wi-Fi ルーター環境、パソコン、USBケーブル等
M5Camera 外観
では、まず外観を見ていきます。
外箱はこんな感じです。
実物はかなりちっちゃいですね。
このケースは手軽で私は好きですね。
次に内容物は以下のような感じです。
上記のように、カメラの所に保護シールが貼ってあるのでそれを剥がして使用します。
ちなみに私はしばらく剥がすのを忘れて使っていて、かなり後になって気付きました。
次に、M5Camera の本体の外観はこんな感じです。
かなりちっちゃいですね!
もう殆ど ESP32 WROVER の大きさに収めている感じで、M5Stack 社の開発チームの努力が素晴らしいですね。
リセットボタンは下図のようなところにあります。
反対側の側面は下図の様に特に何もありません。
LEGO ブロック系のアームは下図のように自在に回転して、とっても便利です。
LEGO と組み合わせるという発想は Great! です。
この面に GROVE コネクタの I2C インターフェース GPIO ピン番号も記載してあって、便利です。
ここに技適マークがありますね。
そして、下側は、下図の様に USB Type C があり、GROVE コネクタもあります。
このようにアームがカメラスタンドの様に使えて、カメラ撮影もし易くて良いですね。
以上、外観でした。
よく練りに練って考えられていてスバラシイと思いました。
では、次では M5Camera を分解してみます。
コメント
camera init failed with error 0x20001 となって、IPアドレスが出ません。何か対処法をお教え願いませんでしょうか?
akai さん
記事をご覧いただき、ありがとうございます。
まず、お聞きしたいのは、どのような環境でコンパイルされましたでしょうか?
この記事では、古いバージョンを紹介していますが、
私は、最新バージョン
Arduino IDE 1.8.9
Arduino core for the ESP32 stable 1.0.2
でも動作OKでした。
バージョンは、Arduino1.8.9です、コンパイルは、できていて、シリアルモニターを見ながらカメラのリセットボタンを押したら、WiHiコネクトの前まではこの記事と同じなのですが、そのあとが、上記レポート文のようになりIPアドレスが出てきません。しかし2回ほどIPアドレスが出たことがありましたが、映像を見る前にWiHiが切れました。そのあとは、camera init failed with error 0x20001が出るだけです。電圧が不安定なのでしょうか?
エラーの意味が分からずお便りさせていただきました。よろしくご教示願います。
akaiさん
Arduino IDE のバージョンは解りました。
Arduino core for the ESP32 のバージョンを教えてください。
esp32 byEspressf system のことでしょうか? 102となっています。それと、シリアルモニターですが、一部ですが映してみました。
entry 0x400806a8
E camera.c:1249 camera probe(): detected camera not supported.
E camera.c:1249 esp_camera_init(): camera probe failed with error 0x20004
となっています。
akaiさん
ありがとうございます。
それですね。
esp32 by Espressf system は別名 Arduino core for the ESP32 です。
そのバージョンが大切です。
まともに動かないバージョンがあるので要注意です。
1.0.2 ということですね。
それと、そのエラーメッセージを送って頂きありがとうございます。
その情報が無いと、私も原因は全く分かりませんので。
さて、そのエラーメッセージから、M5camera のマイコン ESP32-WROVER とカメラモジュールOV2640との通信ができていないようです。
実は、今、気付いたのですが、Arduino core for the ESP32 が stable 1.0.1 と 1.0.2 では、「スケッチ例」にあるサンプルスケッチの構成が変わっていました。
ですから、1.0.2用にスケッチを描き替えねばなりません。
まず、メインスケッチのタブの10行目をコメントアウトし、12行目のコメント記号を削除して、
#define CAMERA_MODEL_M5STACK_PSRAM
とします。
そして、18-19行目のSSIDとパスワードをご自分のルーターに合わせて書き換えます。
そして、そのスケッチのcamera_pins.hタブを開き、44行目を
#define SIOD_GPIO_NUM 22
とし、そして55行目を
#define VSYNC_GPIO_NUM 25
と変更してください。
その後、コンパイル書き込み実行してみてください。
あるいは、この記事に載せてあるコードをコピペして、メインスケッチのタブを書き換えて、SSIDとパスワードを書き換えても動作すると思います。
akaiさん
この記事で、stable 1.0.2版用のサンプルスケッチを追加しました。
以上、ご確認くださいませ。
まずもって、早速の対応ありがとうございます。stable 1.0.2版をご用意いただき大変感謝しております。しかしながらエラーが次のようになっています。
E camera.c:1049 camera_probe():Detected camera not supported. E camera.c:1249 esp_camera_init(): camera probe failed with error 0x20004
また、自分なりに最初の#defineをそれぞれ入れ替えて試しましたが、結果は同じでした。それと気になる事が2つあります。
1つは、私の5Mは、アマゾンにある中華番であること。2つ目は、ケーブルをジョイントで変換して使っていることです。
この2つがこれらのエラーに影響しているのではと危惧しております。せっかくの10連休に御手間を取らせてしまって恐縮している次第です。因みにコンパイルは、できています。
akaiさん
なるほど。
まず、M5Camera が M5Stack社のものでなければ、私にもちゃんと動作するかどうか分かりません。
そもそも GPIO のピンアサインが全く異なると思います。
それと、USBケーブルはジョイントしてあっても良いのですが、短く良質なケーブルを使うことです。
安物のケーブルはおそらくエラーが出ると思います。
それと、M5Stack社純正のM5Camera付属のType-Cケーブルは、Type-Cのコネクタの挿す方向が上下で異なっており、挿す方向を上下入れ換えるとコンパイルが通るということがあります。
以上、私が言えることはここまでです。
とりあえず、M5Stack社純正のM5Cameraに替えてみることですかね。
そもそも、M5Stack社自体が中国メーカーです。
ただ、M5CameraはAmazon Japanにはまだ販売されていなかったと思います。
スイッチサイエンスさんから購入できます。
いろいろお手数おかけしました。とても安く売ってあったのでつい購入しました。初期設定では簡単に映像が出ましたが、反転画像で車のバックカメラとしては使えそうなのですが、監視用としては反転しているのでプログラムの変更を試みた次第です。
一度スイッチサイエンスさんのM5を購入しようと思います。
いろいろと勉強になりましたありごとうございました。 akai
いえいえ、正規M5Cameraで動くと良いですね。
Hi,
After weeks of trying to find a good tutorial to make my m5camera working, I finally find your website !
I was followinf step by step your explaination, and… tadaaaa ! It works 🙂
Big thanks (as a french user, I also need to glad google traduction).
Thank you for reading this blog post!
And thank you for your nice comments!
しおじゃけといいます。
このページにはとてもお世話になっております。
特に、M5カメラのPin配列の変更の部分は。
あまりにお世話になっているので、お礼もしないといけないと思い、コメントさせていただきました。本来であれば、ドネーションをするべきだとは思いますが、申し訳ありません。そこはご勘弁を。
M5cameraFを使って、ARマーカの読み取りをしてなんてことを妄想しております。
これからもよろしくお願いします。
しおじゃけさん
記事をご覧いただき、ありがとうございます。
良いですよ!
ドネーションなんて、そのお気持ちだけで充分でーす。
記事をご覧いただくだけで感謝です。
ARマーカの読み取り、できるとイイですね!
hiroshiと申します。
スイッチサイエンスで、M5cameraを購入しました。
その後、このHPを見てさっそく試しました。
コンパイルと書き込みは無事できました。
Iphoneにメニュー画面は出ます。「get still」「start stream」をクリックすると、シリアルモニタに次のメッセージが出て、Iphoneに画像や映像が映りません。あと一歩だと思うのですが、何をしてもダメです。
ご助言いただけると幸いです。
WiFi connected
starting web server on port:80
starting stream server on port:81
camera readdy use http://192.168.0.23 to connect
[E][camera.c:1344] esp_camera_fb_get():failed to get the frame on time
camera capture failed
hiroshiさん
記事をご覧いただきありがとうございます。
まず、私の手持ちのM5CameraはiPadで正常に動作しました。
動作環境は以下です。
iOS ver 12.4.6
Safari使用
M5Camera Model B
Arduino IDE 1.8.12 (Windows 10)
Arduino core for the ESP32 ver 1.0.4
そこで、今気付いたのですが、M5CameraにはModel A と Model B があるみたいですね。
以下のM5Stackのサイトをご覧ください。
https://docs.m5stack.com/#/ja/unit/m5camera
私が購入した時にはこんなの無かったのですが、最近変わったかもしれませんね。
これによると、SIODピンとVSYNCピンがテレコになっているみたいです。
これで試してみてはいかがでしょうか?
因みに、正常に動作すると、「Start Stream」ボタンを押した後、私のiPadでは、画面の左側に出ていて、ぱっと見気付きませんでした。
画面を右へスワイプすると正常に動画が見られました。