このページは、ESP32-CAMって便利だけどカメラ動かすところまでが分かりづらいよね→成功例をメモしときますという流れです
ESP32っていいよね
- ArduinoよりCPUが高性能(240MHz)
- WiFi&Bluethoothがつながる(技適ないのもあるから注意)
- SDカードが使える(搭載モジュールによる)
- Arduino IDEでArduinoっぽく開発できる
- など
ESP32-CAMは更にすごい
- カメラが使える!
- Arduinoのカメラモジュールは色々制限ある&接続めんどい
- ラズパイだと大がかかりすぎる場合に使いたい
でもESP32-CAMって結構分かりづらい・・・
- なんか微妙に種類がある?メーカー違い?
- ボード設定どれ・・・?
- カメラの表示までがうまく行かない
- ライブラリとかサンプルプログラムとかネット上のやつもエラーでビルドが通らない・・・
- サンプルプログラムも書き換えしないとだめ?
- 壊れてる場合もあるっぽい
- 壊れてるのか設定が違うのかどっちなんだ・・・
- 成功しているパターンを体験していないとこれが一番判断しづらいかも
- 壊れてるのか設定が違うのかどっちなんだ・・・
数種類買ってみたんだけど、どれも画像を取る/見るところまで行かない・・・
壊れてるの?設定おかしいの?みたいな状態で色々なところをフラフラ調べることになっちゃうね
ということで、成功した一つの例を1からメモっときます
このままやれば(壊れてなければ)カメラが認識されて画像が見えるところまではいけます
製品の選定
今回はアマゾンで、『DiyStudio ESP32-CAM デュアルモード開発ボード、用ESP32 2MPカメラモジュールOV2640 低電力デュアルコア32ビットLX6 CPU、CH340GチップUSB-TTLシリアル変換アダプターモジュール付き サポートマニュアルと自動ダウンロード【2022』というやつを選択しました。
(名前長過ぎて途中で切れてるけどうまく行きました)
↓これ
外観
- USB接続用のシリアル変換アダプター付きの2階建て(便利)
- カメラはOV2640(200万画素)
- 技適無し(悲しい)
- ESP32-S、FCCID:2AHMR-ESP32Sの印刷あり
ここまでで分かること
- 『ESP32-S』『2AHMR-ESP32S』はAi-Thinker社製
- 『ESP-WROOM-32』とかだとEspressif社製なので違うパターン
環境設定
試行錯誤して色々やったんですが、最終的にどれが必要な作業だったのか確認するために、全部1から入れ直してみました。
PC OS
- Windows10 22H2
- ※これは入れ直してない
Arduino IDE
ボード情報(ボードマネージャ)の情報取得先URLの追加
ESP32開発元のEspressif社が公開しているボード情報取得先(latest stable release)
https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_index.json
これを追加するとボードマネージャでESP32のボード情報(の古いバージョン)が取得できる様になる
ボード情報取得
- ツール > ボード:(選択中のボード名) > ボードマネージャ... を選択
- 『esp32』で検索
- 『esp32 by Espressif Systems』のバージョン『1.0.6』をインストール
- 最新の2.x.xだとライブラリの廃止などでビルドがうまく行かなかったり、動作がおかしかったりするので注意(2.0.11はもしかしたらいけるかも)
ボードの選択・設定
- ツール > ボード:(選択中のボード名) > ESP32 Arduino > ESP32 Dev Module を選択
- ボード設定
サンプルプログラムの選択
- ファイル > スケッチ例 > Camera > CameraWebServer を選択
- 『ESP32 Dev Module用ののスケッチ例』から選択すること
- ESP32系のボード情報を色々入れていると似たようなものがあるので注意
サンプルプログラムの修正
- カメラモデルの選択
- 不要なライブラリのインクルードを削除 1.0.6なら初めから無い
※ここで分岐
(パターン1)技適なしでWifiを使っても大丈夫な環境の場合(日本国外でテスト/電波遮断の環境/ESP32自体を入れ替えたなど)
- WiFiの接続情報を記載
(パターン1)の結果確認
- 準備
- シリアルモニタを開く
- ツール > シリアルモニタ
- ここに出る
- ツール > シリアルモニタ
- ビルド&検証ボードに書き込む
- →ボタン
- これで完了
- →ボタン
- シリアルモニタを開く
- 結果確認
- シリアルモニタにURLが記載されるので、それをブラウザで開くと、カメラのプレビュー等ができるWeb画面が表示できる→成功!
(パターン2)Wifi使用不可環境の場合
WiFi関連の部分は削除する。その代わり『esp_camera_init(&config)』『esp_camera_sensor_get()』『esp_camera_fb_get()』あたりが成功すればカメラは使えていると判断していい。
- WiFi接続実行部分を削除
- カメラの画像データ取得結果確認を追加
- loop()を以下の通り変更
-
void loop() {
camera_fb_t *fb = esp_camera_fb_get();
if (fb) {
size_t fb_len = fb->len;
Serial.println(fb_len);
esp_camera_fb_return(fb);
}
delay(1000);
} - 撮影された画像のサイズ(容量)が1秒ごとに表示される
-
- loop()を以下の通り変更
(パターン2)の結果確認
- 準備
- シリアルモニタを開く
- ツール > シリアルモニタ
- ここに出る
- ツール > シリアルモニタ
- ビルド&検証ボードに書き込む
- →ボタン
- これで完了
- →ボタン
- シリアルモニタを開く
- 結果確認
- シリアルモニタに情報が出力される→成功!
- カメラを手で覆って真っ暗にすると数値が減る
(全体真っ黒だとjpegで圧縮率が高くなるのでサイズが減る)
結論
動いた
これ以外のボードも多分種類の選択のところをあったものにすれば行けるはず