最近、生徒たちとArduinoを利用して学校周辺の温度と湿度を観測し、値を分析することにした。
Arduinoで測定したデータを保存するにはSDカードが必要で、データを確認するためにはSDカードを抜き差しする手間があった。
そこでデータをウェブに保存するのはどうかと思った。
今日の記事はArduinoとGoogleシートを連携するための最初のステップであるGoogleスプレッドシートの設定についてです。
1. Googleスプレッドシート
GoogleスプレッドシートはGoogleが提供する無料のウェブアプリです。
基本的にブラウザ上で動作し、共同編集と閲覧が可能で、apps scriptを通じてhttpsリクエストでシートの修正ができます。
まずGoogleで「Googleスプレッドシート」と検索してシートを1つ作成します。

ログインすると以下のような画面が表示されます。ここで空のスプレッドシートをクリックしてシートを1つ作成します。

以下のように新しいシートが作成されたら、次のようにしてみましょう。
スプレッドシートのタイトルとシート名を英語に変更する(万が一のエラー防止のため)。
データの列インデックスを作成する。


さて、アドレスバーにあるスプレッドシートのIDを覚えておきましょう。
アドレスの形式は「/d/GoogleスプレッドシートID/edit#gid=0」です。その中間部分をコピーします。

これでGoogleスプレッドシートでの基本的な作業は終わりです。次はスプレッドシートのscriptを設定しましょう。
2. app script設定
シートメニューの[拡張プログラム]-[Apps Script]に入ります。

以下のような画面が表示されます。ここでfunctionがある場所に、自分の書きたいコードを入力します。

以下のコードを入力しましょう。ここでGoogleシートのID、そして必要な値の名前はswitch、case文を利用して指定する必要があります。
function doGet(e) {
Logger.log( JSON.stringify(e) );
var result = 'Ok';
if (e.parameter == 'undefined') {
result = 'No Parameters';
}
else {
var sheet_id = '自分のGoogleシートID'; // Spreadsheet ID
var sheet = SpreadsheetApp.openById(sheet_id).getActiveSheet();
var newRow = sheet.getLastRow() + 1;
var rowData = [];
var Curr_Date = new Date();
rowData[0] = Curr_Date; // Date in column A
var Curr_Time = Utilities.formatDate(Curr_Date, "Asia/Tokyo", 'HH:mm:ss');
rowData[1] = Curr_Time; // Time in column B
for (var param in e.parameter) {
Logger.log('In for loop, param=' + param);
var value = stripQuotes(e.parameter[param]);
Logger.log(param + ':' + e.parameter[param]);
switch (param) {
case 'value1':
rowData[2] = value;
result = '3番目の列にvalue1の値を入力';
break;
case 'value2':
rowData[3] = value;
result += ' ,4番目の列にvalue2の値を入力';
break;
default:
result = "unsupported parameter";
}
}
Logger.log(JSON.stringify(rowData));
var newRange = sheet.getRange(newRow, 1, 1, rowData.length);
newRange.setValues([rowData]);
}
return ContentService.createTextOutput(result);
}
function stripQuotes( value ) {
return value.replace(/^["']|['"]$/g, "");
}入力が完了したら、コードをデプロイします。右上のデプロイを押し、次に新しいデプロイをクリックします。

新しいデプロイでタイプをウェブアプリに設定し、アクセス権限をすべてのユーザーに変更した後でデプロイを押します。
もしアクセス権限をすべてのユーザーにしないとログインを求められます。その場合は権限を再度すべてのユーザーに変更してください。


デプロイを押すとアクセス権限を要求されます。アクセス承認を押しましょう。

アクセス承認に対する画面が表示されたら、自分のIDをクリックします。

警告画面が表示されますが無視して、下の「詳細」を押します。

下に表示される「~に移動」を押して権限を許可します。


その後、新しいデプロイ画面が表示されたら、ウェブアプリのURL部分をコピーして設定が正しくできているか確認しましょう。

3. ウェブアプリの確認
指定のウェブアプリのURLでGETリクエストを送ると、クエリストリングのデータがvalue1、value2に保存されます。
アドレスバーでウェブアプリのアドレスの最後に以下のようにデータを追加し、アドレスバーに入れてエンターキーを押します。
https://script.google.com/macros/s/Google App Script ID/exec?value1="desiredValue1"&value2="desiredValue2"
上記のような形でデータを伝えるのをクエリストリングと言います。"?"の後に望む値を"&"に続けて追加します。
Googleシートに入って確認すると、以下のようにデータがうまく伝達されていることが確認できます。

テキストでなく単純な数字も伝えることが可能です。


値がうまく入力されています。
4. 記事を終えて
今回は単にGETリクエストを通じてGoogleスプレッドシートにデータを入力する方法について学びました。
残ったのはArduinoからhttps通信を介してGETリクエストを送信することだけです。
次回の記事で続けて書きます。

댓글을 불러오는 중...