2016年7月18日月曜日

Adafruit TTL Serial Camera (VC0706) を ESP8266 で動かしてみる

 本日のがらくたは、Adafruit の TTL Serial JPEG Camera (VC0706) です。この VC0706 はシリアル通信で VGA (640x480), QVGA (320x240), QQVGA (160x120) の解像度のJPEG画像が取得できるカメラモジュールです。
 今回はこの VC0706 を ESP8266 でコントロールして画像を取得してみようと思います。例によって今回もESP8266 は スイッチサイエンスさんの ESPr Developer を使います。 VC0706 に関しては Adafruit から Arduino 用のライブラリが提供されているので、これを ESP8266 でもそのまま利用できるだろう前提で進めます。
 やりたいこととしては、Adafruit の VC0706 ライブラリの機能(VC0706のハード自体の機能?)で動体検知 (Motion Detect) が可能なので、画像に動きを検出したら撮影画像を microSDカードに保存して、ブラウザに表示(ただし、今回は手動でブラウザの更新ボタンを押して手動で最新表示にすることとします)するようなものです。今回、内蔵Flash領域のSPIFFSを使わずに microSDカードをわざわざ外付けにしたのは、プログラム作成・デバッグ時に撮影されたJPEG画像を直接ファイルを開いて参照したかったっからです。SPIFFSだと作成されたJPEGファイルを手動で取り出し、参照する方法がわかりませんでした。SDカードなら取り外してPCで確認できますからね。


 今回のプログラムは Arduino core for ESP8266 のサンプルスケッチ ESP8266WebServer → SDWebServer をほぼそのままコピペして流用しています。この SDWebServer.ino スケッチに VC0706 の動体検知撮影サンプルのスケッチの処理をくっつけて作ったような感じです。
 で、結論から言うと、一応目指していた動作はできたんですが・・・遅い・・・画像のSDカードへの書き込み(デバッグ用シリアル出力で書き始めと書き終わりのタイミングで印字)もSDから読んでWebページに表示するのも遅い(昔、ISDNとかでインターネット接続していた頃のような画像表示スピード)です。移動体に載せることも考えていたけど、無理かな。SPIFFSに変えたら早くなるかな?
 とりあえず、ソースは以下のような感じです。また、SDカードの配線はこちらを参考にしました。VC0706 は ESP8266 の4ピンと5ピンをSoftwareSerialとして利用して接続しました。カメラ側TXを4ピン(RX)へカメラRXを5ピン(TX)に接続します。index.htm はSDカードのルートに置いておきます。