工作と競馬2

電子工作、プログラミング、木工といった工作の記録記事、競馬に関する考察記事を掲載するブログ

秋月で売っていたOV2640使用200万画素カメラをESP32につないで動かす

概要


秋月で売っているOV2640使用200万画素カメラをESP-WROOM-32につないで動作確認をした。

※2022/01/29追記
ESP-WROOM-32だけだと、RAM容量不足でUXGA解像度での撮影はできないことに注意。詳細は、後述UXGA解像度での撮影テストを参照。


背景と目的


以前、こちらの記事で、カメラで成長記録を自動的に撮りたいと書きながら全く手がつかず2年近くたってしまったが、最近ようやく実行に移せそうな状況になった。そこで、自動水やり器のオプションとして追加できそうなカメラがないか探したところ、秋月で売っているOV2640使用200万画素カメラが、価格も手ごろで解像度もまずまずだったので、試しにESP-WROOM-32につないで撮影してみることにした。

詳細


0. 環境


1. 配線

秋月のサイトに載っている仕様書を見ても、いまいちわからかなったのだが、

https://www.mgo-tec.com/blog-entry-esp32-ov2640-ssd1331-test1.htmlhttps://www.mgo-tec.com/blog-entry-esp32-ov2640-ssd1331-test1.html/2

を参考にさせていただき、というか、まるまる同じ配線を行った。ブレッドボードに挿せるように20本をピンヘッダ、ピンフレームにはんだ付けするのはとても面倒だったが、まあ仕方ない。


2. ソフトウェア

2.1 スケッチ

Arduino core for the ESP32のサンプルスケッチの中に、CameraWebServerというものがある。これは、ESP32上にWebServerを立て、ESP32と同じワイヤレスLANに接続されたスマホやPCでカメラの画像が見られるので、動作確認がしやすい。そこで、これを基に以下のような感じでコードを書いた。 Select camera modelという項目とcamera_pins.hのインクルードは不要なので削除し、その代わりにピン設定を定義。

#include "esp_camera.h"
#include <WiFi.h>

// ピン設定
#define Y2_GPIO_NUM 32
#define Y3_GPIO_NUM 35
#define Y4_GPIO_NUM 34
#define Y5_GPIO_NUM 5
#define Y6_GPIO_NUM 39
#define Y7_GPIO_NUM 18
#define Y8_GPIO_NUM 36
#define Y9_GPIO_NUM 19
#define XCLK_GPIO_NUM 27
#define PCLK_GPIO_NUM 23
#define VSYNC_GPIO_NUM 25
#define HREF_GPIO_NUM 26
#define SIOD_GPIO_NUM 21
#define SIOC_GPIO_NUM 22
#define PWDN_GPIO_NUM -1 // 2021/2/27 GNDに接続なので割り当てなし修正。
#define RESET_GPIO_NUM -1 // 2021/2/27 割り当てなしに修正。

// 接続先Wi-Fiアクセスポイント
const char* ssid = "*******";
const char* password = "*******";

:

// 以下、サンプルと同じため省略

2021/2/27 こちらの記事に従い修正。


2.2 書き込み

カメラとWi-Fiを同時に使うだけあってプログラムサイズが大きい。デフォルトの設定では194%となってしまい書き込めなかった。そこで、以下のようにPartition Schemeを変更したらちゃんと書き込めた。


3. 動作確認

手持ちのスマホWebブラウザから、シリアルに表示されたIPアドレスにアクセスしたところ、以下のように設定画面が表示された。

設定画面の一番下に、Start Streamボタンがあるので押したところリアルタイムに映像が表示された。ひとまず成功。しかし、初期設定では、VGA画質で余り画質が良くない。

解像度をUXGAに変更したところ、以下のようにかなりきれいになった。これなら、植物の画像もまあまあきれいに撮れるか。ただし、画角が狭いのは気になる。

2022/01/29追記
画角が狭いのは、ESP-WROOM-32のRAM容量不足でUXGA解像度の画像データが扱えず、画像の下端が切れてしまっているせい。結局、この後の検討で、RAM容量を増強したESP32-WROVERを使用することでちゃんと撮影できるようになった。詳細は、以下。

というわけで、ESP32のサンプルのおかげで動作確認はすんなり終わってしまった。ひとまず、これでカメラはちゃんと使えそうだということが分かった。ブレッドボードからの線出しでもちゃんと動いたので、ESPから少し離して稼働させるという使い方もできそうだ。


まとめと今後の課題


自動水やり器のオプションとして追加できそうな小型のカメラモジュールをESP32につないで動作させることができた。次は、撮影した画像をクラウド等に保存させてみたい。