エンジニア風味 (Engineer-taste)

電子系エンジニアのメモ帳

ESP32-camでトラブッたこと

2MのカメラOV2640がついて、amazonで1,300円もしないで買えるESP32-camが玄関のドアカメラに使えないかとポチったところ、なぜかトラブッてしまったので、書きます。

購入したのはこれです。ケースがついたM5Stackではありません。

f:id:engineer-paju:20190907183354j:plain
ESP32cam

1.配線接続

 ESP32-camは安いせいもあるのか、USBインターフェースがついていないので、何か用意する必要があります。
私は秋月電子で買ったFT234Xモジュール基板(秋月品番M-08461)を使いました。
配線は、このようになります。電源+5V、GND、TX,、RXの4本を接続します。TXとRXは、それぞれの基板のTXとRXが対になるように接続します。
IO0ピンはプログラムを書き込むときだけGNDに接続します。実行させるときはオープンにします。

f:id:engineer-paju:20190907205819p:plain
FT-234Xとの接続

2.プログラム

 Arduino IDEに組み込むようにして使います。Arduino IDEの「ファイル」の「環境設定」を開き、「設定」タブの「追加のボードマネージャのURL」に 
https://dl.espressif.com/dl/package_esp32_index.json
を追加します。
「ツール」の「ボード」の「ボードマネージャ」から「ESP32」をインストールします。

f:id:engineer-paju:20190907183712p:plain
ESP32インストール
※いろいろ調べていたら「最新の1.0.2は問題あるから1.0.1を使ってね」という情報がありましたが、「顔認識をするなら1.0.1を使ってください」ということのようです。

「ツール」の「ボード」他の設定は下記のとおりとします。

f:id:engineer-paju:20190907183906p:plain
ESP32のIDE設定
「ファイル」の「スケッチ例」から「ESP32」、「camera」、「CameraWebServer」を選択します。

CameraWebServerのプログラムの下記を修正します。

// Select camera model
//#define CAMERA_MODEL_WROVER_KIT ←コメントアウト
//#define CAMERA_MODEL_ESP_EYE
//#define CAMERA_MODEL_M5STACK_PSRAM
//#define CAMERA_MODEL_M5STACK_WIDE
#define CAMERA_MODEL_AI_THINKER// ←コメントアウトを外す

実際に使用するwifissidとpasswordを書きます。

const char* ssid = "*********"; // ←記入する
const char* password = "*********";// 記入する

ボードへの書き込みをします。

Leaving...
Hard resetting via RTS pin...

と出たら、書き込み終了です。

シリアルモニタを開いて、通信レートを115200bpsにします。

IO0のGNDとの接続を外して、オープンにします。
リセットボタンを押すと、起動するはずですが、、、。

[E][camera.c:1049] camera_probe(): Detected camera not supported.
[E][camera.c:1249] esp_camera_init(): Camera probe failed with error 0x20004

カメラが検出されません、というエラーが出てしまいました。

3.トラブルシュート

 最初、カメラが正しく接続されていないか、カメラがOV2640でない、もしくはカメラが壊れているというような想定で進めていたのですが、電源の問題であることがわかりました。

秋月電子のFT234Xモジュールには、+5V電源に過電流保護のためのヒューズが入っており(下図の矢印)、100mA以上は流すことができません。

f:id:engineer-paju:20190907184114p:plain
FT234Xモジュールの回路図
ESP32の起動時にこれより多くの電流が必要となります。
下の図は起動時の+3.3V電源の電圧波形です。
安定化電源で電流を170mAに制限した場合のですが、50msecくらいの間、電圧が2.3Vまで低下してしまっています。
f:id:engineer-paju:20190907184252p:plain
電圧低下
カメラの電源部の回路図を示します。
f:id:engineer-paju:20190907184627p:plain
カメラ用電源
カメラ部には+2.8Vと+1.2Vが供給されているので、+3.3Vの電源が2.3Vに低下した際にU1のレギュレータは動作しなくなり、カメラICは、おそらくリセットされます。そのために「カメラが見つからない」というエラーが発生すると思われます。
安定化電源の供給電流量を200mAまで上げると、正常に起動しました。
マージンを見た場合、供給電流は250mA程度と考えられます(このプログラムで動作させた場合。ESP32の動作によっては、もっと電流を消費する可能性はあります)。
※データシートを見るとActive Mode(RF working)で160~260mAとあるので妥当な数値かもしれません。ごく短い時間にもっと電流が必要な場合は、モジュール内のパスコンで供給されると思われます。

結局、FT234Xモジュールの使用は断念して、CP2103のモジュール(Aitendo製)に乗り換えました。

f:id:engineer-paju:20190907184813p:plain
CP2103インターフェース
ハードウェアでフロー制御を行なっている場合にハングしてしまわないように、CTSRTSは接続しておきます。
(FT234Xのモジュールでは基板内で接続されていました)

4.ドア・スコープとして使えるか?

 OV2640カメラモジュールをドア・スコープに差し込んで画像が出せるかやってみました。円筒部分は入りますが、台座部分は無理なようです。
解像度QVGA(320x240)の場合の画像です。

f:id:engineer-paju:20190907184953j:plain
QVGA画像
これだと、何がなんだかわかりません。
次に解像度をXGA(1024x768)まで上げて、いろいろ調整してみた画像です。
f:id:engineer-paju:20190907204331j:plain
XGA画像

なんとか見えると言えば見えますし、実際に肉眼でスコープを覗いた場合もこれに近い感じですが、カメラの視野角が広いので、使えている画素が少ないです。
もう少しなんとかならないかやってみたいです。