LoginSignup
0
0

使ったもの

  • M5Stack Basic
    • Core2ではなくCore使ってます
  • M5Go Bottom
  • Timer Camera F
  • UIFlow 1.0
  • Google Drive
  • Apps Script

タイマーカメラをUiflow使えるようにする

今回はこれを使います
image.png

UIFlow

ユニットでTimerCamを追加します(右のやつ)
※これなぜかCore2だと使えない。。。(理由はわかりません)
image.png

Setupはこんな感じでカメラの設定をやって60秒ごとに実行されるタイマーを用意します。
タイマーカラメラの撮影間隔は別で設定することになっていますので、撮影のタイミングとタイマー関数が呼ばれるタイミングには差があるのでそこだけ注意が必要です。(UIFlowの画面だとタイマーカメラのアップロード間隔は最短5秒のようですが、今回使用するタイマーカメラは30秒が最短のサイクルのようです)
変数urlは画像が保管されている場所のトークン付きのURLです。これをAppsScriptに送ります。
image.png

タイマー関数の中身でHTTPリクエストを呼び出して、AppsScriptsを起動します。
要求本文にurlをセットして送ります。
たまにトークンが取れなくなる事があるため、タイマー関数を実行するたびに念の為取得するようにしています
Screenshot 2024-06-25 12.29.05.png

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枚画像が保存されていくようになります
image.png

補足

画質はこのレベルです。
https://camera.m5stack.com/timer-cam/image?
image.png

タイマーカメラはこんな感じで子供が持ってたレゴの部品使って適当に固定しました
image.png

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0