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

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

最近、生徒たちと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リクエストを送信することだけです。

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

관련 글

ArduinoでRFIDカードを複製する
ArduinoでRFIDカードを複製する
今日はArduinoでRFIDカードを複製する方法について書いてみようと思う。一度文章にしておけば忘れないので、復習の意味も込めて残しておく。1.RFIDカードの内部データ構造一般的なRFIDカードは MIFARE Classic 1Kカードである。このカードのメモリ構造は次の通りだ。-...
Arduino ESP32で温湿度データを収集する
Arduino ESP32で温湿度データを収集する
今日はArduino ESP32で温湿度を測定し、データを送信するWiFi百葉箱を作ってみる。この内容は学校で行われる16+1授業の原稿を基にして書いた文章である。1. 準備物準備物は簡単だ。ESP32、DHT-22、電線3本まずESP32を簡単に説明すると、WiFiモジュールが内蔵されたArduinoである。一般的なArduinoよりもはるかに小さいサイズである。
Arduino D1 R2 使用記
Arduino D1 R2 使用記
ただArduino Unoを使えばよかったのに、内蔵WiFi付きのを試そうとしてWemos D1 R2を使ったせいでかなり苦労しました。この文章はD1 R2のようにピンマッピングが異なるArduinoを使用する人のためのものです。1. IDE設定Arduinoの種類が多様なので、各ボードに合ったボード...
MacBookでArduino Timed out waiting for packet headerの解決方法
MacBookでArduino Timed out waiting for packet headerの解決方法
MacBookでArduino Wemos D1 R2接続時にTimed out問題を解決する方法
Arduinoとスプレッドシートの連携 - コードの構成
Arduinoとスプレッドシートの連携 - コードの構成
前回の記事では、Arduinoとスプレッドシートの連携のためのシート設定について説明しました。今回は、Arduino D1ボードを使ったHTTPS通信によるデータ送信方法について見ていきましょう。1. Arduino D1ボードライブラリのインストールArduino D1ボードを利用するためには、まずボードライブラリをインストールする必要があります。

댓글을 불러오는 중...