DreamerDreamのブログ

夢想家の夢です。〜揚げたてのモヤっとしたものをラフレシアと共に〜

ESP32でカメラ搭載ラジコンを作る ①データの拝借

数年前にクローラーを作っていましたが動いたことに満足してカメラ機能も搭載せず4年も放置していました。

dreamerdream.hateblo.jp

 

というのも、RaspberryPi駆動なので立ち上がりが遅いし、動作検証をするのがイチイチ面倒くさいのですよね^^;

あとラズパイ3だと電力消費も半端ないので長時間駆動が難題で実用性にも欠ける走るだけのラジコンにイマイチ改造への気持ちが乗らない・・・。という言い訳の数々

 

「もっと手軽に消費電力を抑えてカメラ付きラジコン化出来ないのだろうか?」とESP32みたいなマイコンにWebカメラを搭載出来ないものかな?などと再度検討していましたら、Webカメラからの映像取得は無理でも専用のカメラでラジコン制御はできそうだという情報を発見!!

tech-blog.cerevo.com

qiita.com

 

どちらもやってみたいことに見事に合致している内容です。

もともとカメラ搭載ESP32は知ってはいたのですが、顔認証の仕方とかのブログが多く、サンプルのソースが書き換えられるものなのかも謎で手が出せませんでした。

その中でも上記のこの方が、

スマホで操作できる改造ミニ四駆「MKZ4」をさらに改造してカメラ付きラジコンに〜社内爆走計画〜 | Cerevo TechBlog

元ソースを見事に改造しておられたので、まずはそのまま試してみることにしました。(ソースは上のブログ経由でお願いします)

 

スケッチ例から元のソースも確認をします。

 

例で開かれるこの上のタブの内容を全てサンプルソースとして上げてくださっています。

Arduinoのプログラムを1つのファイルとしてしか扱ったことの無い僕には完全に未知の領域・・・なんだ?このタブの数々

 

中でもcamera_index.h の元ソース。。。こんなの素人では文字コードすらわかんねぇよ。。。

 

これをガッツリ弄りやすいよう改造していただいてるのでめちゃありがたいです!

 

ひとまず、全コードをコピーして貼り付けてコンパイルが通るか試してみましたら無事にコンパイル完了。

 

問題なさそうなので保存しておきます。

 

コンパイルできたものを試すには実機にインストールするしかありません。カメラ付きESP32デバイスを購入します。

今回用意したのはコチラ

 

 

よくわかんないけど、なんかピンがいっぱいなので拡張性ありあそう!という感じで選びました。

 

最近のものはUSBタイプCなんですね。

手元の通常ESP32と比べるとこんな感じ↓

少しだけ縦長だけど、お値段以外はそんなに変わらない。

 

カメラは元々取り付けられた状態で届きましたが、もしカメラを変える場合はこのように爪を上に持ち上げて交換することが出来ます。

カメラ裏に両面テープが無かったのでブラブラです。

これは両面テープで止めたほうが良さそうですね。

 

まず、ブログ先とは使用モデルが違うのでまずここを変更します。

 

いざ書き込んでみましたら。

書込には成功したものの。。。。

????????コンソールの謎表示??なんじゃこりゃ????

まあ、一応ブラウザでカメラ映像取得の確認はできました。

 

調べるとサンプルコードではSerial2としてGPIO4と13が設定されており、これがどうやらこのデバイスの必要なピンと被っている様子。

カメラ用の変な信号を受信していたのですね。

というか、ピンが沢山出ているけれど殆どカメラ用に使われていて、実質自由に使えるの8ピンしかないのか。。。ちょっとショックです。

 

ということで、今はSerial2を使う予定が無いのでここをコメントアウト。

8ピンでやりたいことが収まらなかったら他のArduinoと連携して使えばいいですね。

 

Serial2のデバッグも今は不要なのでここもコメントアウト。

 

では、実際どこでWebSocket経由の信号を受信しているかというと、このstartCameraServer()関数が、

 

 

 

app_httpd.cppの方にあるんですねー(わかりにくっ)

 

というか、.cppと.hってC++言語の拡張子なんですね?

僕はC++は全く知らないので^^;完全に雰囲気だけで弄りながら、よくわかんないところを調べていきます😂

<参照>

4.2. 複数ファイル - ゼロから学ぶ C++

.cppが本体で.hはヘッダファイルっていう宣言ファイルなんですね!へー!!・・・Javaでいうところのインターフェースみたいな????よくわからないですが進めます。。。

 

サンプルコードではここで受信した信号を別デバイスへSerial2を経由して送っているようなので、ここを通常のコンソールへ出力させます。

 

動作確認出来ました!!

見事にぬるぬるーっと座標の取得が出来ています。

youtu.be

 

ブラウザからタップ座標取得できたので今回はここまで。

 

 

dreamerdream.hateblo.jp

 

 

 

kampa.me