工作と競馬2

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

M5STACKのUnit CAMにArduinoのプログラム書き込む

概要

M5STACKのUnit CAMに配線を施し、Arduinoのプログラム書き込んでみた。



背景と目的

以前、以下の記事で、OV2640というカメラ基板とESP32を接続したものを作成した。

dekuo-03.hatenablog.jp

そして、また同様のものが欲しくなったのだが、同じものを作ると手間がかかる。しかし、Amazonで相変わらず大量に出回っている技適の通っていない怪しい格安基板に手を出すわけにもいかないので、何かいいものがないか探していたところ、 M5STACKのUnit CAM というものをスイッチサイエンスで見つけた。1000円ちょっとと非常に手ごろなので、これを買って動かしてみることにした。

※先に結論を書くと、

当然ながら、ちゃんと動く。ただし、UXGAは撮れない。商品が悪いわけではなく、PSRAMがないことを見落とした自分が悪い。

OV2640が載っており最大解像度2MPixelという文言を見て、てっきりPSRAMが載っているものと思っていたが載っていない。すなわち、この記事で書いた通り、UXGAでは撮れなかった。同じ轍を2回踏むという、ひどいミスをしてしまった。とはいえ、まあSXGAくらいでは撮れるし、いずれ活躍の機会がないとは言えないのでひとまず動作の記録を残して、部品箱に眠らせておくことにした。



詳細

1. 配線

Unit CAMは、本来Grove端子で接続してM5STACK関連のデバイスとつないで遊ぶ想定のものなので、ファームウェア書き込みも専用シリアルライターを使う想定。しかし、私の手元にあるのは、これなので、同じ接続ができない。これについてもロクに考えずに買ってしまったせいで、面倒な配線作業が発生した。以下のように、これを参考に、けっこういろいろ配線した。

  • R1からTXD0に斜めに伸びる1kΩは、ESP32でプログラム書き込みに失敗したときの解決方法に倣ったプルアップ抵抗。これって、書き込めない症状は確かに改善するものの、最近自分のライターがおかしいだけ???のような気もしてきた。あまり自信がない。でも、今回もこの1kΩがないと書き込めなかったのは確か。
  • 3.3V, EN, IO0は写真の外側にESP32が書き込みモードに入るためのタクトスイッチを設けて接続している
  • 3.3V、SY8089AAACというレギュレータの3.3V出力に繋がるR1から取り出す

f:id:dekuo-03:20220206175841j:plain


2. Arduinoプログラム書き込み

プログラムは、arduino-esp32のサンプルプログラムにあるCameraWebServerとする。変更点は、ここを参考にピン接続のGPIO番号だけ定義する。

2022/03/27追記 arduino-esp32の最新バージョンは2.0.2だが、本記事はv1.0.6のCameraWebServerサンプルを基にして作成する必要があることがわかった。v2.0.2だと必要なファイルがインクルードできず、コンパイルできない。

// ピン設定
#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 // XCLK
#define PCLK_GPIO_NUM 21 // PCLK
#define VSYNC_GPIO_NUM 22 // VSYNC
#define HREF_GPIO_NUM 26 // HREF
#define SIOD_GPIO_NUM 25 // SIOD
#define SIOC_GPIO_NUM 23 // SIOC
#define PWDN_GPIO_NUM -1 // 接続なし
#define RESET_GPIO_NUM 15 // RESET

そして、

// Select camera model
#define CAMERA_MODEL_WROVER_KIT // Has PSRAM
//#define CAMERA_MODEL_ESP_EYE // Has PSRAM
:

#include "camera_pins.h"

の部分は、参照しないので削除する。

3. 動作確認

Webブラウザで、所定のアドレスにアクセスしたところ、ちゃんと表示された。撮れた画像は以下。SXGAである。UXGAも被写体によっては撮れるが、複雑な絵柄だと、エンコードされたjpegバイナリのサイズも大きいのでRAMに入りきらず撮れない。実質的にSXGAくらいが最大だろう。まあ、悲しいが想定通りの動き。

f:id:dekuo-03:20220206180437j:plain



まとめと今後の課題

Unit CAMにArduinoプログラムを入れて動かすことができた。買ったもの自体は失敗なのだが、まあ後々メモとして役立てばよい。