使ったもの
- M5Stack Basic
- Core2ではなくCore使ってます
- M5Go Bottom
- Timer Camera F
- UIFlow 1.0
- Google Drive
- Apps Script
タイマーカメラをUiflow使えるようにする
UIFlow
ユニットでTimerCamを追加します(右のやつ)
※これなぜかCore2だと使えない。。。(理由はわかりません)
Setupはこんな感じでカメラの設定をやって60秒ごとに実行されるタイマーを用意します。
タイマーカラメラの撮影間隔は別で設定することになっていますので、撮影のタイミングとタイマー関数が呼ばれるタイミングには差があるのでそこだけ注意が必要です。(UIFlowの画面だとタイマーカメラのアップロード間隔は最短5秒のようですが、今回使用するタイマーカメラは30秒が最短のサイクルのようです)
変数urlは画像が保管されている場所のトークン付きのURLです。これをAppsScriptに送ります。
タイマー関数の中身でHTTPリクエストを呼び出して、AppsScriptsを起動します。
要求本文にurlをセットして送ります。
たまにトークンが取れなくなる事があるため、タイマー関数を実行するたびに念の為取得するようにしています
AppsScriptを実装する
HTTPトリガーで動く関数を作る。
パラメータで受け取ったURLを使って画像ファイルにアクセスし、GoogleDriveに保存するようにします。
function doPost(e) {
try {
// リクエストのボディをJSONとして解析
var requestBody = JSON.parse(e.postData.contents);
var imageUrl = requestBody.url;
// 画像を取得
var response = UrlFetchApp.fetch(imageUrl);
var imageBlob = response.getBlob();
// タイムスタンプを取得
var timestamp = new Date().getTime();
var filename = `${timestamp}.jpg`;
// Google Driveに画像を保存
var folder = DriveApp.getFolderById('your Folder ID'); // 保存先フォルダのIDを指定
var file = folder.createFile(imageBlob.setName(filename));
return ContentService.createTextOutput(`File uploaded: ${file.getUrl()}`);
} catch (error) {
return ContentService.createTextOutput(`Error: ${error.message}`);
}
}
実行する
GoogleDriveのフォルダに1分間に1枚画像が保存されていくようになります
補足
画質はこのレベルです。
https://camera.m5stack.com/timer-cam/image?