昨年製作したTTGO T-camを家の2階の窓に設置して定点観測をするようにした。esp8266のボードのバージョン変更もありプログラム作成にてこずったので、変更点など備忘録的にまとめておく。
1、Arduino開発環境の変更箇所
2021年に作成したTTGO T-CAMERAのプログラムを動かそうとしたところ、
#include "soc/soc.h" fatal error: soc.h: No such file or directoryAlternatives for soc.h:
というエラーがでる。ネット検索してみると、esp8266のArduinoパッケージがVer2に変更されたのでパッケージのインストールが必要と書いてある。そこで、IDEのボードマネージャーでESP32を探すと、esp32 by Espressif Systemsがあったので、バージョンを2.0.10をインストールした。その結果、ツールのボードマネージャの下に、ESP32 Arudinoが表示され、さらにそのサイドメニュー内に、TTGO-T7のボードがあったので、もっとも新しいVer1.4をボードに設定した。そのうえでコンパイルをするとコンパイルが完了した。
しかし、TTGOに書き込むとエラー発生。再度、https://tomono.tokyo/2019/05/04/7617/ を読み直したところ、ボードは「ESP32 Wrover Module」を選択するとのことだったので、それに変えたところ動作した。手持ちのTTGOデバイスのマーキングをよく見たらWroverと表示されていた
LILYGOR TTGO T-Camera ESP32 WROVER & PSRAM Camera Module ESP32-WROVER-B OV2640 Camera Module 0.96 OLED
次に「ESP32 TTGO T-Camera with PIR Sensor and OLED Display Board – Review and Pinout」の記事
によると、ボード設定において
Partition Scheme:"Huge APP(3MB No OTA/1MB SPIFFS)
PSRAM: Enable
とするように書いてあったのでこれも実行した。
TTGOのピンアサインメントは以下の画像の通り
2、Arduinoスケッチの変更箇所
・カメラのフレームバッファは2回写真をとらないとクリアされない
写真撮影をすると、カメラのフレームバッファが2回写真をとらないとクリアされない。この解決方法をネットでさがしたところ、「Arduino ESP32-CAM Frame buffer clear」の記事の中に
The only solution I have found to avoid that lag/delay with the buffered data is to add:
config.grab_mode = CAMERA_GRAB_LATEST;
after "camera_config_t config;"
という解決策がのっていたのでスケッチに追加した。
・撮影時間(時刻)の設定
AM7時~PM18時の間で1時間ごとの撮影とするため、NTPを使って撮影時刻を設定した。
void setup() {
・・・・・・
・・・・・・
// NTP設定
configTime(9 * 3600L, 0, "ntp.nict.jp", "time.google.com", "ntp.jst.mfeed.ad.jp");//NTPの設定
}
//時刻を格納するオブジェクト
struct tm timeInfo;//時刻を格納するオブジェクト
char cs[20];//文字格納用
//////////////////////////////
void loop() {
getLocalTime(&timeInfo);//tmオブジェクトのtimeInfoに現在時刻を入れ込む
sprintf(cs, "%04d/%02d/%02d %02d:%02d:%02d",
timeInfo.tm_year + 1900, timeInfo.tm_mon + 1, timeInfo.tm_mday,
timeInfo.tm_hour, timeInfo.tm_min, timeInfo.tm_sec);//人間が読める形式に変換
/*
2024/01/27 13:25:48
cs[0] から cs[3]: 年(YYYY)の部分
cs[5] から cs[6]: 月(MM)の部分
cs[8] から cs[9]: 日(DD)の部分
cs[11] から cs[12]: 時(HH)の部分
cs[14] から cs[15]: 分(MM)の部分
cs[17] から cs[18]: 秒(SS)の部分
*/
delay(1000);
Serial.println(cs);//時間をシリアルモニタへ出力
// every 00min00sec & 30min00sec execution from 07:00 to 18:00
//文字列の連結
String ss = String(cs[17])+String(cs[18]); //秒(SS)の部分
String mm = String(cs[14])+String(cs[15]); //分(MM)の部分
String hh = String(cs[11])+String(cs[12]); //時(HH)の部分
if((hh=="07"||hh=="08"||hh=="09"||hh=="10"||hh=="11"||hh=="12"||hh=="13"||hh=="14"||hh=="15"||hh=="16"||hh=="17"||hh=="18") && mm=="05" && ss=="00" ){
sendPhoto();
Serial.println("---- sendPohot is executed ---- ") ;
}
}
<定点ライブカメラ画像例 VGA画像>
2024-02-06-10時
2024-02-07-10時
3、タイムラプス作成
インターバル撮影した写真を使ってタイムラプス動画が作成できるPanolapseというフリーのソフトがあるので、動画を作成してみた。
使用する画像ファイルはあらかじめ時間順の連番になるようにファイル名を変更しておく必要がある。そこでコマンドプロンプトのバッチファイルを作成して、それを実行してからPanolapseにインポートする。
このバッチファイルの作成が面倒だったの、ネット検索して既成のプログラムを使わせていただいた。
set num=0
setlocal enabledelayedexpansion
cd ./images
for %%f in (*.jpg) do (
if 9 geq !num! (
set num=00!num!
ren "%%f" !num!.jpg
set num=!num:~2!
) else (
if 99 geq !num! (
set num=0!num!
ren "%%f" !num!.jpg
set num=!num:~1!
) else (
ren "%%f" !num!.txt
)
)
set /a num=num+1
)
endlocal
定点観測撮影の写真は1日12枚、月に360枚撮影することになる。メモリ容量でおよそ25Mbyte。1年かけて裏庭の植物の変化を追ってみたい。
コメント