ESP32CAMを使ったTimeLapsはここでもやっています。そこで今回は以下の新しい機能を付けて行きます。
- RTCを使用
- 撮影間隔毎にESP32に割り込みをかける。
- 保存ファイルに撮影した時間を反映する。
- サーバーの管理プログラム(HTMLで記述)はSPIFFSを使いESP32に保存。
- 撮影した画像はSDカードに保存する。
RTCをつなぐ
RTCとしてDS3231を使います。インターフェイスはI2Cなので信号とクロック(SDA,SCL)で2本、モジュールからの割り込み信号が1本、計3ポート必要になります。
GPIO12,13,14は既にu_SDカードで使用済み。PIO32,33は空いているので2つ確保。残りの1ポートですがGPIO15辺りと思いましたが、回路図を見るとGPIO26,27にI2C SDA、I2C SCLと表示されている事に気づきました。表記からこの2本はI2Cの信号線と判断しDS3231の信号線をこれらに、割り込み線をGPIO32と接続して見た所見事に動きました。本来は追加で3本必要なポートが1個で済みました。
サーバー用プログラム
サーバー用プログラムは撮影時間関係管理用とカメラ関係管理用の2部構成です。
撮影時間関係管理用プログラム
- 現在の時間の表示と設定(Settingタイトルの下)
- Nowボタンを押す:現在の年・月・日・曜日・時・分を表示
- Setボタンを押す:各欄に入力した値がセットされる
- Photography priod:
- 撮影時間の設定。撮影の開始時間と終了時間を設定する
- ライトが付いていないので夜の撮影は不可と思いこの機能を付けました。
- Photography interval:
- 撮影間隔を設定
- Photo ボタン
- カメラの設定へ
- Start ボタン
- TimeLaps開始
カメラ関係管理用プログラム
- カメラのパラメータの設定が出来ます。
- Streamボタンを押すとStreaming が開始します。
- Takeボタンで写真が撮れます。
- 各パラメータをセットし静止画で確認し、OKならSetボタンを押します。
- Setボタンを押さないとパラメータはセットされません。
- セット完了したら Go Main ボタンを押して戻ります。
ハードの説明
野外で使用する事を考えてバッテリー駆動にしました。電源部とカメラ部の2構成にしました。
- 電源部
- バッテリー
- 3.7Vリチュウム電池を6個並列に接続
- バッテリーチャージャー
- バッテリ充電用にリチュウム電池充電モジュールを使用しています。
- モジュールの1,2端子にUSBケーブルを繋げば充電出来ます。
- 最終的にはここにソーラパネルからの5Vをつないで駆動時間を伸ばす予定です。
- NJU7223
- 3.3Vを作るDC\DCです。
- バッテリー
- カメラ部
- 構成部品: ESP32(本体)/ DS3231(RTC) / u_SDソケット と リセットボタン
電源部、カメラ部それぞれプラスチックのケースに入れ、カメラ部をスマホ用のスタンドを使って以下の様に使用しています。
動作の説明
- パワーセーブモードと外部信号割り込み
- ESP32は撮影以外の時間はパワーセーブモードに入っています。
- DS3231が撮影間隔を測定し、時間になったらESP32に割り込み信号を出します。
- ESP32はこの信号を受けるとパワーセーブモードを解除し撮影。撮影が終わるとパワーセーブに入ります。
- 保存される写真ファイル
- ファイル名は、”p__XXXX.jpg”となります。XXXXの部分に撮影された順番が入ります。
- 1枚目、2枚目、….. ー> p_0000.jpg, p_0001.jpg…. となります。 1万枚の写真を保存する事が出来ます。
- ファイルの保存時間(Timestamp)を残す為にSystemTimeを設定しています。
- ESP32の立ち上がり(外部割り込み以外)とDS3231の時間設定時にESP32のSystemTimeを設定しています。
- これにより写真が保存された時間がファイルのTimeStampに反映されます。
今回使用したソフトをここに保存しました。
撮影結果
今回の撮影条件は以下の通り。
- 撮影間隔: 10分
- 撮影時間: 朝6時から夜6時。(12時間)
- 撮影期間: 1週間強。
静止画から動画への変換にはFFmpegを使用しました。最初の1日分を動画にしたものを添付します。
網戸の内側から撮ったので画面に網戸が写っていますが、木や家の影が時間と共に動いているのが分かります。