Arduinoとスプレッドシートの連携 - Googleシート設定

힘센캥거루
2024년 5월 29일(수정됨)
29
arduino

最近、生徒たちとArduinoを利用して学校周辺の温度と湿度を観測し、値を分析することにした。
 
Arduinoで測定したデータを保存するにはSDカードが必要で、データを確認するためにはSDカードを抜き差しする手間があった。 
 
そこでデータをウェブに保存するのはどうかと思った。
 
今日の記事はArduinoとGoogleシートを連携するための最初のステップであるGoogleスプレッドシートの設定についてです。

1. Googleスプレッドシート

GoogleスプレッドシートはGoogleが提供する無料のウェブアプリです。
 
基本的にブラウザ上で動作し、共同編集と閲覧が可能で、apps scriptを通じてhttpsリクエストでシートの修正ができます。
 
まずGoogleで「Googleスプレッドシート」と検索してシートを1つ作成します。

Arduinoとスプレッドシートの連携 - Googleシート設定-1

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

Arduinoとスプレッドシートの連携 - Googleシート設定-2

 以下のように新しいシートが作成されたら、次のようにしてみましょう。

  • スプレッドシートのタイトルとシート名を英語に変更する(万が一のエラー防止のため)。

  • データの列インデックスを作成する。

Arduinoとスプレッドシートの連携 - Googleシート設定-3Arduinoとスプレッドシートの連携 - Googleシート設定-4

 さて、アドレスバーにあるスプレッドシートのIDを覚えておきましょう。 

アドレスの形式は「/d/GoogleスプレッドシートID/edit#gid=0」です。その中間部分をコピーします。

Arduinoとスプレッドシートの連携 - Googleシート設定-5

これでGoogleスプレッドシートでの基本的な作業は終わりです。次はスプレッドシートのscriptを設定しましょう。 

2. app script設定

シートメニューの[拡張プログラム]-[Apps Script]に入ります。

Arduinoとスプレッドシートの連携 - Googleシート設定-6

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

Arduinoとスプレッドシートの連携 - Googleシート設定-7

 以下のコードを入力しましょう。ここで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, "");
}

 入力が完了したら、コードをデプロイします。右上のデプロイを押し、次に新しいデプロイをクリックします。

Arduinoとスプレッドシートの連携 - Googleシート設定-8

新しいデプロイでタイプをウェブアプリに設定し、アクセス権限をすべてのユーザーに変更した後でデプロイを押します。

もしアクセス権限をすべてのユーザーにしないとログインを求められます。その場合は権限を再度すべてのユーザーに変更してください。

Arduinoとスプレッドシートの連携 - Googleシート設定-9Arduinoとスプレッドシートの連携 - Googleシート設定-10

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

Arduinoとスプレッドシートの連携 - Googleシート設定-11

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

Arduinoとスプレッドシートの連携 - Googleシート設定-12

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

Arduinoとスプレッドシートの連携 - Googleシート設定-13

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

Arduinoとスプレッドシートの連携 - Googleシート設定-14Arduinoとスプレッドシートの連携 - Googleシート設定-15

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

Arduinoとスプレッドシートの連携 - Googleシート設定-16

3. ウェブアプリの確認

指定のウェブアプリのURLでGETリクエストを送ると、クエリストリングのデータがvalue1、value2に保存されます。

アドレスバーでウェブアプリのアドレスの最後に以下のようにデータを追加し、アドレスバーに入れてエンターキーを押します。 

https://script.google.com/macros/s/Google App Script ID/exec?value1="desiredValue1"&value2="desiredValue2"
Arduinoとスプレッドシートの連携 - Googleシート設定-17

上記のような形でデータを伝えるのをクエリストリングと言います。"?"の後に望む値を"&"に続けて追加します。

Googleシートに入って確認すると、以下のようにデータがうまく伝達されていることが確認できます。

Arduinoとスプレッドシートの連携 - Googleシート設定-18

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

Arduinoとスプレッドシートの連携 - Googleシート設定-19Arduinoとスプレッドシートの連携 - Googleシート設定-20

値がうまく入力されています。

4. 記事を終えて

今回は単にGETリクエストを通じてGoogleスプレッドシートにデータを入力する方法について学びました。

残ったのはArduinoからhttps通信を介してGETリクエストを送信することだけです。

次回の記事で続けて書きます。

댓글을 불러오는 중...