fc2ブログ

Unit Cam M5を試す

 2か月前に、秋月で安価なカメラモジュールを探していて、550円という安さに誘われて「OV7675使用30万画素カメラ B0070」というものを購入しました。

 その後、画像を映そうとコーディングしているのですが、大苦戦しており、まだ正常に動いていません・・・。参考資料をネットで探しているのですが、この型のカメラモジュールのものが少ないですね。簡単にコピペして楽をしようとしているだけなのですが、そうはさせてもらえません・・。やはり基本を抑えて、コードの中身を把握しておかなくてはダメですね。

 ネットで情報を調べている中で「OV2640搭載 Unit Cam Wi-Fi Camera」という同じOMNIVISION製のOV2640カメラにESP32が合体したM5 Stackモジュールがあり、参考のコードもあったのでスイッチサイエンスで購入しました。まず、本丸を攻める前に、似たようなカメラでコードを勉強しておこうという狙いです。

 このUnit Camで、まずM5 Stackのサンプルコードを動かそうとしたのですが、これもうまく動きませんでした。おいおい。勉強不足で見落としていることがたくさんありそうです。現時点でも動かない原因は不明で、改めて調査はしようと思いますが・・。

 しばらく試行錯誤していましたが、一旦塩漬けして、次に、ArduinoのサンプルスケッチにCameraWebServerというものがありましたので、それを試しました。

 コード上で修正したのは以下の2か所でした。
1. CAMERA_MODEL_M5STACK_PSRAMを選択
// ===================
// Select camera model
// ===================
・・・
#define CAMERA_MODEL_M5STACK_PSRAM // Has PSRAM
・・・
2. 自宅の無線ルータのssidとpasswordを記入
// ===========================
// Enter your WiFi credentials
// ===========================
const char* ssid = "my-ssid";
const char* password = "my-password";
 いざ、ESP32にコードを書き込みたいのですが、これも難儀しました。何度も試行錯誤を繰り返し、コンパイルまではできましたが、何度やってもESP32への書き込み時にエラーが出てしまいます。

 ESP32­なので、前回のブログで実施したように、MAX3232ECPEを用いてパソコンからコードが書き込めると思ったのですが、これもまたうまく行きませんでした。「うまく行かない」の大行進です。

 結局、Unit Camのホームページにあった「CP2104/CH9102搭載 ESP32 ダウンローダキット」を購入する羽目になりました。ダウンローダキットとESP32の書き込み時の結線は以下の通りです。書き込み時結線221119 ESP32(カメラ)側のEN、G0、GND、G3、G1、5Vと書いてあるピンと、ダウンローダキット側のEN、G0、GND、TXD、RXD、3.3Vのピンを計6本つなぎました。これですんなり書き込めるかなと思いましたが、さらに2つ落とし穴がありました。
 一つ目は、書き込み時にESP32のG0ピンをGNDに落とす必要がありました。一度つないだ結線を外して、ダウンローダキットのGNDと短絡させました。この辺りは取説がなく、不親切なんですよね。利用者には分り切ったことなんでしょうね?
 二つ目は、macOS Big SurでESP32が書き込めない問題がありました。エラー内容でネット検索していくと、中華製のドライバを入れると良いという対処方法があり、それを適用しました。インストールされたドライバは以下の黄色枠の通りで、これを用いて書き込みました。usb_driver221119.png書き込み条件は以下の通りで無事に書き込めました。書き込み条件221119 ESP32に書き込まれたプログラムを実行させると、ESP32カメラがWebServerになりますので、ブラウザでそのIPアドレスにアクセスしました。実行画面221119 しばらくすると、以下の操作画面が出てきました。操作画面221119「Get Still」を押すと静止画が、「Start Stream」を押すと動画ストリーミングが表示されました。

 撮影された画像はこんな感じです。HVGA_221119.jpeg初めはピンボケ画像でしたが、レンズ部を回転させてピント合わせをしました。

 失敗続きで時間がかかり、当初の予定ではないカメラですが、画像を撮像してブラウザに表示して、かつ画像保存できる所まで行き着きました。プログラムの方はまだ十分理解できていませんが、解読して、次の本丸につなげたいと思います。
スポンサーサイト



ESP32でBluetoothを使う

 しばらくブログを更新できていませんでした。1か月以上更新がなければブログページに巨大なスポンサー広告が入るんでした(過去経験済)。危ない危ない。今もそうなんでしょうか・・。

この1か月ぐらい安価なカメラモジュールと格闘しています。マイコン制御の安価なAIカメラを作ってみたいという、いつもの思いつきです。ただ、まだうまく行っていないのでネタを挙げられず現在に至っています・・。

その中でESP32を使ったカメラモジュールが販売されていることを知りました。ESP32はEspressif社の無線マイコンですが、Bluetoothも使えます。ESP32でなく、ESP8266というWi-Fiのみを使えるマイコンは良く利用しており、過去のブログでも何度か話をしました。

ESP32マイコン搭載のAE-ESP-WROOM-32は、以前、秋月で購入して使っていないものがあり、ESP32は苦戦しているカメラモジュールの制御に使う予定なので、一通り触っておこうと思いました。

カメラ制御とは直接は関係ありませんが、今回、Bluetooth通信機能について、どのようなものか、興味本位で試してみました。いつもの長い前置きはこの程度にして、本題に入ります。

 今回試したのは、ESP32にBluetooth接続したPCから指示を送り、LEDをON/OFFさせるもので、まさにその通りのコードがネット上にありましたので、マイナー修正して利用させていただきました。コードは以下の通りです。PC端末から1を送信するとLEDが点灯し、0を送信するとLEDが消灯するものです。
/*LED ON/OFF from ESP32 using Classic Bluetooth*/

#include "BluetoothSerial.h"

BluetoothSerial ESP_BT;
int incoming; //Incoming data from Smart Phone
int LED_1 = 5;

void setup() {
Serial.begin(115200); //Start Serial monitor in 115200
ESP_BT.begin("ESP32_LED_Control"); //Name of your Bluetooth Signal
Serial.println("Bluetooth Device is Ready to Pair");

pinMode (LED_1, OUTPUT);
}

void loop() {
if (ESP_BT.available()) //Check if we receive anything from Bluetooth
{
incoming = ESP_BT.read(); //Read what we recevive
Serial.print("Received:"); Serial.println(incoming);

if (incoming == 49) //1→49(ASCII chart)
{
digitalWrite(LED_1, HIGH);
ESP_BT.println("LED_1 turned ON");
}

if (incoming == 48) //0→48(ASCII chart)
{
digitalWrite(LED_1, LOW);
ESP_BT.println("LED_1 turned OFF");
}
}
delay(20);
}
回路図は以下の通りで、マイコンにプログラムを書き込みの際はIO0をGNDに接続し、ENを一旦GNDに落とした後に3.3Vに戻してマイコンをリセットしました。配線が正しくても書き込み時のエラーが結構多いんですよね・・。circuit_221113.png書き込み時のArduinoの設定は以下の通りです。ボードは「ESP32 Dev Module」を選択して、シリアルポートはPCのUSBポートに接続されているデバイスを選択しました。check0_221113.png
無事にマイコン書き込みが完了したのちに、IO0を3.3Vにつないでスタートさせました。うまく起動しない時は、ENを一旦GNDに落とした後に3.3Vに戻して再度マイコンをリセットします。

起動後、何も変化がないので、パソコン(MacBookAir)側のBluetoothを確認します。画面右上のスイッチアイコンをクリックし、Bluetoothをクリックします。check1_221113.png「”Bluetooth”環境設定」をクリックします。QE300は日頃使っているBluetoothイヤホンです。check2_221113.pngESP32_LED_Controlが表示されていたので「接続」します。check3_221113.pngここで、Arduinoのシリアルポートを確認すると「/dev/cu.ESP32_LED_Control-ESP32」のポートが新しく作成されていますので、選択しました。check4_221113.pngArduinoのシリアルモニタを開いて、1を入力し送信すれば、LEDが点灯、0を入力し送信すれば、LEDが消灯することが確認できました。check5_221113.png点灯画像はこんな感じで、LED_ON_221113.png消灯画像は以下の通りです。LEG_OFF_221113.png お蔵入りしていたESP32も問題なく動作しました。次は本丸のカメラモジュールの制御です。頑張ろぉっと!

ご訪問者数

(Since 24 July, 2016)

タグクラウド


プロフィール

Dr.BobT

Author: Dr.BobT
興味のおもむくままに生涯考え続けるエンジニアでありたい。

月別アーカイブ

メールフォーム

名前:
メール:
件名:
本文: