農系IoT勉強会#4 その2 M5AtomS3からGoogleスプレッドシートに書き込んでみよう
農系IoT勉強会#4 その1ではQRコードリーダを使ってQRコードの内容を読み取り
M5AtomS3の画面やシリアルモニタに表示するところまでを説明しました。
この記事のゴール
本記事では、取得したデータをGoogleスプレッドシートに飛ばすことで
データの集積や加工が出来る状態を目指します。
Googleスプレッドシートの準備
まずはCromeなどのブラウザからグーグルドライブを開きます。※Googleアカウントが必要です
グーグルドライブにアクセスして画面左上の「+新規」ボタンからGoogleスプレッドシートを立ち上げます。
※任意の名前でフォルダなどを作って管理してください
適当な名前を付けて「拡張機能」⇒「Apps Script」をクリックします。
Apps Scriptが開いたらコンソールに下記のプログラムを書き込みます。
function doPost(e) {
try {
// テスト用のデータ作成
if (!e) {
e = {
postData: {
contents: "Test Data" // テストデータをここに入力
}
};
}
// スプレッドシートIDとシート名
const spreadsheetId = 'YourspreadsheetIdID';
const sheet = SpreadsheetApp.openById(spreadsheetId);
const sheetName = 'QR'; // 必要に応じてシート名を変更してください
const ws = sheet.getSheetByName(sheetName);
if (!ws) {
// シートが見つからない場合のエラー処理
return ContentService.createTextOutput('Sheet not found').setMimeType(ContentService.MimeType.TEXT);
}
// リクエストからデータを取得
const data = e.postData.contents;
// データの検証(空チェックやフォーマットチェックなど)
if (data) {
// データを新しい行に追加
ws.appendRow([new Date(), data]);
} else {
// データが空の場合のエラーレスポンス
return ContentService.createTextOutput('No data received').setMimeType(ContentService.MimeType.TEXT);
}
// レスポンスを返す
return ContentService.createTextOutput("Data received").setMimeType(ContentService.MimeType.TEXT);
} catch (error) {
// エラーハンドリング
Logger.log(error.toString());
// スプレッドシートIDが原因のエラーの確認
if (error.message.includes('SpreadsheetApp.openById')) {
return ContentService.createTextOutput('Error: Unable to access the spreadsheet. Check the spreadsheet ID and permissions.').setMimeType(ContentService.MimeType.TEXT);
}
return ContentService.createTextOutput('Error: ' + error.message).setMimeType(ContentService.MimeType.TEXT);
}
}
スプレッドシートID: 'スプレッドシートのID' の部分を、実際のスプレッドシートIDに置き換えてください。スプレッドシートのURLからID部分(例えば、https://docs.google.com/spreadsheets/d/ID部分/edit)をコピーして使用します。
名前を付けて保存し、デプロイします。
デプロイは画面右上のボタンから出来ます。
「新しいデプロイ」を選択し下記の選択をします。
種類の選択⇒ウェブアプリ
ユーザー⇒自分
アクセスできるユーザー⇒全員 ※全員にしておかないとM5がアクセスできません
※全員の選択肢がない場合GoogleWorkSpaceの登録が必要です(無料)
「デプロイ」をクリックします。
ここで「URL」をコピーしてください。※M5Atom側のプログラムで必要になります。
Arduinoに戻る前に一度GoogleAppsから実行をしてみてください
スプレッドシートにTest Dataを書き込まれれば問題なく設定が完了しています。
M5Atomを準備しましょう
農系IoT勉強会#4 その1で作成したコードに追加していく形で進めます。
ヘッダーファイルとwifi等の設定を5行目あたりに追加します。
#include <WiFi.h>
#include <HTTPClient.h>
// WiFi設定
const char* ssid = "YOUR_SSID"; // WiFiのSSID
const char* password = "YOUR_PASSWORD"; // WiFiのパスワード
// デプロイしたGoogle Apps ScriptのウェブアプリURL
const char* serverName = "https://script.google.com/macros/s/YOUR_SCRIPT_ID/exec";
wifiを立ち上げるためのコードをvoid setuo(){内に書き加えます。
私は25行目に書く加えました。
// WiFi接続
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(1000);
Serial.print(".");
}
Serial.println("Connected to WiFi");
void loop() {内に取得した値をGoogleのウェブアプリにポストするためのコードを追加します。
私は59行目に追加しました。
// Google Apps ScriptにデータをPOST
if (WiFi.status() == WL_CONNECTED) {
HTTPClient http;
http.begin(serverName);
http.addHeader("Content-Type", "application/x-www-form-urlencoded");
// データをPOST
int httpResponseCode = http.POST(data);
if (httpResponseCode > 0) {
String response = http.getString();
Serial.println("Response:");
Serial.println(response);
} else {
Serial.print("Error on sending POST: ");
Serial.println(httpResponseCode);
}
http.end();
} else {
Serial.println("WiFi Disconnected");
}
全体のコードはこちらです。
先ほど準備したスプレッドシートが更新されていれば成功です。
以上です!
Discussion