ESP32など

電子工作してます

ESP32-CAM分かりづらくね?

このページは、ESP32-CAMって便利だけどカメラ動かすところまでが分かりづらいよね→成功例をメモしときますという流れです

ESP32っていいよね
  • ArduinoよりCPUが高性能(240MHz)
  • WiFi&Bluethoothがつながる(技適ないのもあるから注意)
  • SDカードが使える(搭載モジュールによる)
  • Arduino IDEArduinoっぽく開発できる
  • など
ESP32-CAMは更にすごい
  • カメラが使える!
    • Arduinoのカメラモジュールは色々制限ある&接続めんどい
    • ラズパイだと大がかかりすぎる場合に使いたい
でもESP32-CAMって結構分かりづらい・・・
  • なんか微妙に種類がある?メーカー違い?
    • ボード設定どれ・・・?
  • カメラの表示までがうまく行かない
    • ライブラリとかサンプルプログラムとかネット上のやつもエラーでビルドが通らない・・・
    • サンプルプログラムも書き換えしないとだめ?
  • 壊れてる場合もあるっぽい
    • 壊れてるのか設定が違うのかどっちなんだ・・・
      • 成功しているパターンを体験していないとこれが一番判断しづらいかも

数種類買ってみたんだけど、どれも画像を取る/見るところまで行かない・・・

壊れてるの?設定おかしいの?みたいな状態で色々なところをフラフラ調べることになっちゃうね

 

ということで、成功した一つの例を1からメモっときます

このままやれば(壊れてなければ)カメラが認識されて画像が見えるところまではいけます

製品の選定

今回はアマゾンで、『DiyStudio ESP32-CAM デュアルモード開発ボード、用ESP32 2MPカメラモジュールOV2640 低電力デュアルコア32ビットLX6 CPU、CH340GチップUSB-TTLシリアル変換アダプターモジュール付き サポートマニュアルと自動ダウンロード【2022』というやつを選択しました。

(名前長過ぎて途中で切れてるけどうまく行きました)


↓これ

外観

ESP32-CAM外観1
  • USB接続用のシリアル変換アダプター付きの2階建て(便利)

ESP32-CAM外観2(表側・右はシリアル変換アダプター)
  • カメラはOV2640(200万画素)

ESP32-CAM外観3(裏側・右はシリアル変換アダプター)
  • 技適無し(悲しい)
  • ESP32-S、FCCID:2AHMR-ESP32Sの印刷あり
ここまでで分かること
  • 『ESP32-S』『2AHMR-ESP32S』はAi-Thinker社製
    • 『ESP-WROOM-32』とかだとEspressif社製なので違うパターン

環境設定

試行錯誤して色々やったんですが、最終的にどれが必要な作業だったのか確認するために、全部1から入れ直してみました。

PC OS
  • Windows10 22H2
    • ※これは入れ直してない
Arduino IDE

Arduino IDEダウンロード画面

バージョンなど
ボード情報(ボードマネージャ)の情報取得先URLの追加
  • 以下のURLを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はもしかしたらいけるかも)

1.0.6
ボードの選択・設定
  • ツール > ボード:(選択中のボード名) > ESP32 Arduino > ESP32 Dev Module を選択
  • ボード設定
    • Upload Speed: "115200"
    • Flash Frequency: "80MHz"
    • Flash Mode: "QIO"
    • Partition Scheme: "Huge AP (3MB No OTA/1MB SPIFFS)"
    • Core Debug Level: "なし"
    • シリアルポート: ※接続しているポートを選択

ボードの設定
サンプルプログラムの選択
  • ファイル > スケッチ例 > Camera > CameraWebServer を選択
    • ESP32 Dev Module用ののスケッチ例』から選択すること
    • ESP32系のボード情報を色々入れていると似たようなものがあるので注意

サンプルプログラム
サンプルプログラムの修正
  • カメラモデルの選択
    • CameraWebServer.inoの11行目~付近
    • これでAi Thinker社製のボードであることを指定している(他社のはピン配列などが違う?)
  • 不要なライブラリのインクルードを削除 1.0.6なら初めから無い
    • app_httpd.cpp の23行目付近
    • 更に古いライブラリの場合には有効だったが、1.0.6では使わない(存在しない)

ソースの変更箇所1

※ここで分岐

(パターン1)技適なしでWifiを使っても大丈夫な環境の場合(日本国外でテスト/電波遮断の環境/ESP32自体を入れ替えたなど)
  • WiFiの接続情報を記載
    • CameraWebServer.inoの22行目付近
      • const char* ssid = "*********"; にSSID
      • const char* password = "*********"; にパスワード

ソース修正箇所2
(パターン1)の結果確認
  • 準備
    •  シリアルモニタを開く
      • ツール > シリアルモニタ
        • ここに出る
    • ビルド&検証ボードに書き込む
      •  →ボタン
        • これで完了
  • 結果確認
    • シリアルモニタにURLが記載されるので、それをブラウザで開くと、カメラのプレビュー等ができるWeb画面が表示できる→成功!

シリアルモニタ

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秒ごとに表示される
(パターン2)の結果確認
  • 準備
    •  シリアルモニタを開く
      • ツール > シリアルモニタ
        • ここに出る
    • ビルド&検証ボードに書き込む
      •  →ボタン
        • これで完了
  • 結果確認
    • シリアルモニタに情報が出力される→成功!
    • カメラを手で覆って真っ暗にすると数値が減る
      (全体真っ黒だとjpegで圧縮率が高くなるのでサイズが減る)

シリアルモニタの結果(最後の2行がカメラを手で覆ったときの数値)

結論

動いた

これ以外のボードも多分種類の選択のところをあったものにすれば行けるはず