esp32-cameraライブラリを読み解く ~モジュール接続、動作チェック編~

ESP32-DevKitC,と,OV2640カメラモジュールとOLED,SSD1331,モジュールを繋げて、ほぼデジカメ ESP32 ( ESP-WROOM-32 )

ESP32-DevKitC と OV2640モジュール と SSD1331モジュールを接続する

では、ESP32-DevKitC と OV2640 モジュール、SSD1331 モジュールをそれぞれブレッドボード上で下図の様に接続します。

【ESP32-DevKitC と OV2640 CMOS カメラモジュール接続】
ESP32-DevKitC OV2640 Module(B0011)
3V3 VCC
GND GND
GND PWDN (Power Down Mode)
GPIO #17 RESET
GPIO #27 XCLK
GPIO #21 SDA (SIOD)
GPIO #22 SCL (SIOC)
GPIO #19 D7
GPIO #36(SVP) D6
GPIO #18 D5
GPIO #39(SVN) D4
GPIO #5 D3
GPIO #34 D2
GPIO #35 D1
GPIO #32 D0
GND Y1
GND Y0
GPIO #25 VSYNC
GPIO #26 HREF
GPIO #23 PCLK
【ESP32-DevKitC と OLED SSD1331 モジュール接続】
ESP32-DevKitC OLED SSD1331 (SPI)
GPIO #14 SCL
GPIO #13 SDA (MOSI)
GPIO #16 DC (Data/Command)
GPIO #4 RES (reset)
GPIO #15 CS (Chip Select)

OV2640 モジュールの Arducam B0011 は、それぞれのピンにプルアップ抵抗またはプルダウン抵抗は不要?のようです(たぶん・・・)。
それぞれのピンの抵抗値を計ってみると、GND間に3.2kΩを示しました。
プルダウン又はプルダウン抵抗が入っているのか、単なる回路中の抵抗値なのかは回路図が無いので良く分かりません。

GPIO直結でも、今のところ連続使用しても不具合は無いので、たぶん大丈夫かな??と思います。
まぁ、Arduino に接続する前提で作られた物のようですから、プルアップ/ダウン抵抗は不要だと勝手に思うことにします。
間違えていたらゴメンナサイ。

今回は8bitのpixelデータを使うため、10bit用の Y1, Y0 端子は使いません。
これはGNDに接続しています。
出力端子のため、本来はプルダウン抵抗が必要だと思いますが、今回は省略してます。
また、OV2640モジュールのPWDN端子は省電力用Power Down Mode端子で、入力端子です。
今回は使わないので、GNDに落としています。これをGNDに落とさず、浮いたままにすると、勝手に省電力モードに切り替わってしまい、安定せず、正常なデータが得られないので注意してください。

OLED SSD1331 ディスプレイモジュールは、SPI通信で、HSPI接続しています。
SSD1331 については過去にレビューした記事がありますので参照してみてください。

フルカラー OLED SSD1331 を ESP32 ( ESP-WROOM-32 )で動かしてみた

上図を見て分かると思いますが、ESP32-DevKitC の使用可能なGPIOピンを殆ど使い果たしています。

GPIO #0 と #2 はブート関連なので、基本的に使用できません。
また、今回新たに発見したのですが、GPIO #12 は使えないことが分かりました。
理由は、まず、GitHub の以下のリンクを見ると、

https://github.com/espressif/arduino-esp32

GPIO #12 には、TDI と記述されています。
これは、CPUデバッグ等に使われる JTAG というシリアル通信規格のデータ入力端子です。

※この時事の最下部のコメント投稿欄でnopnop2002さんから情報をいただき、GPIO #12はフラッシュチップ(VDD_SDIO)に電力を供給する内部レギュレータの出力電圧を選択するためのブートストラップピンとして使用されているためだそうです。コメント投稿欄を参照してください。
nopnop2002さん、ありがとうございました。
m(_ _)m (2021/09/14)

そこに何かを接続したままコンパイル書き込みすると、MD5エラーが出るため、その端子は使えません。ご注意ください。

また、スイッチサイエンスさんの ESPr Developer 32 の場合、GPIO #32, #33 が基本的に使えないため、今回は使用できませんでした。
結局、ESP32-DevKitC 1択という感じでした。

OV2640 のピクセルデータがパラレル通信なので仕方ないのですが、ここまで GPIO を使い果たすことは私にとっては恐らく初めてではないかと思います。
こうなってくると、GPIO端子が沢山あるマイコンボードは正義だなと思ったりしますね。

そんなこんなで、実際、接続した写真はこんな感じです。

Arduino core for the ESP32 のインストール

Arduino IDE のバージョンは 1.8.9 で動作確認しております。

Arduino IDE のボードプラグイン、Arduino core for the ESP32 のバージョンは stable 1.0.2 で動作確認しております。

Arduino core for the ESP32 のインストール方法は以下の記事を参照してください。

Arduino core for the ESP32 のインストール方法

Arduino core for the ESP32 のボード設定

Arduino core for the ESP32 のボード設定は以下のようにしてみてください。
あとはご自分の環境に合わせて設定してみてください。

ボード:  ESP32 Dev Module
Upload Speed:  921600
CPU Frequency:  240MHz (WiFi/BT)
Flash Frequency:  80MHz
Flash Mode:  QIO
Flash Size:  4MB (32Mb)
Partition Scheme:  Huge APP (3MB No OTA/1MB SPIFFS)
Core Debug Level:  なし
PSRAM:  Disabled
シリアルポート:  ※ご自分の M5Camera のUSBポート
————————————-
書込装置: USBasp

SSD1331 用自作ライブラリのインストール

過去に自作でESP32 SSD1331用ライブラリをつくりましたが、改めて見返すとメチャメチャなコーディングスタイルだったので、今回はコーディングスタイルを見直した新たなライブラリを作りました。
関数も少々追加しております。
バージョンは beta ver 2.0.0 です。
基本的に動作保証はしません。

GitHub の以下のところに置いておきますので、ZIPファイルをダウンロードして、Arduino IDE にインストールしてみてください。

https://github.com/mgo-tec/esp32_ssd1331_bv2

ZIPファイルライブラリのインストール方法は以下の記事を参照してください。

GitHubにある ZIP形式ライブラリ のインストール方法 ( Arduino IDE )

では、次はサンプルスケッチを紹介します。

コメント

  1. juchang より:

    mgo-tec 様

    早速試そうと思いましたが、手元に OV2640 CMOSカメラモジュールが無く、秋月電子通商さんに注文し、現在入荷を待っているところです。
    M5Camera が使用できないのは残念ですが、今後のご検討を期待しております。

    • mgo-tec mgo-tec より:

      juchangさん

      ご無沙汰しております。
      いつも記事をご覧いただき、そして試していただき、ありがとうございます。

      この記事はM5Cameraを自在に使えるようにする目的でもあります。
      その前に、それぞれの配線と通信プロトコルを理解するためにも、OV2640モジュールは別途配線して確認する必要がありました。
      esp32-cameraライブラリが理解できるようになると、M5Cameraでディープラーニングができるかも知れません。
      今後ご期待いただければと思います。
      いつも本当にありがとうございます。
      m(_ _)m

  2. 匿名 より:

    ESP32 CAMでデジカメみたいなものが作れないかと考えて本ブログにたどり着きました。
    自分なりに試行錯誤してみたのですが、どうあがいてもフレームレートが出ません。以下のように記載しているのですが、
    fb = esp_camera_fb_get();
    if (!fb) {
    Serial.println(“Camera capture failed”);
    }

    シリアルモニタには、一秒に数回、”Camera capture failed”と表示されます。画像フォーマットはRGB565です。

    フレームレートを出すにあたってカメラのデータ取得の点で何か工夫はありますでしょうか。

    • mgo-tec mgo-tec より:

      匿名さん

      ブログをご覧いただき、ありがとうございます。

      この記事のプログラミングは1年以上前なので、今の環境でちゃんと動くかは不明です。

      まず、お聞きしたいのは、フレームレートはどのくらい出ているのでしょうか?
      esp32-cameraライブラリの場合は、この後のM5Cameraとの記事を読み進めていくと分かって来るのですが、最高で25fpsまでしか出ません。
      loop関数の処理が速いと、25fpsを上回ってしまい、OV2640から画像データを取得できない時が多々出てくるのかも知れません。
      LCD画面が正常に表示されていれば、シリアルモニタの表示は気にしなくて良いかも知れません。
      最初の方で紹介した動画くらいの速度が出ていれば問題無いかと思います。

      また、OV2640とESP32の配線はできるだけ短い方がエラーが少ないです。

      また、シリアルモニタを表示させるだけで遅くなりますので、シリアルモニタを起動しない方が速くなるかも知れません。

  3. nopnop2002 より:

    おはようございます。
    有益な情報の公開、ありがとうございます。

    GPIO#12が使えない理由は、フラッシュチップ(VDD_SDIO)に電力を供給する内部レギュレータの出力電圧を選択するためのブートストラップピンとして使用されているからだと思います。
    こちらにGPOIO12に関する注意点が記載されています。
    https://github.com/espressif/esp-idf/blob/master/examples/storage/sd_card/sdmmc/README.md

    • mgo-tec mgo-tec より:

      nopnop2002さん

      おひさしぶりですね。
      再びコメントいただき、ありがとうございまーす!

      GPIO #12 の謎はそういうことだったんですね。
      MMCは使ったこと無いので、そのドキュメントは全く知りませんでした。
      教えて頂き、ありがとうございます。
      トラブルシューティング記事の項目も修正しておこうと思います。
      重ねてありがとうございました~。
      m(_ _)m

タイトルとURLをコピーしました