見出し画像

【GASでIoT】自由にボタンを割り付ける(最終)~GASを使ってラズベリーパイから送信されたデータをGoogleスプレッドシートに記録する~

この記事では、ラズベリーパイで作った「かんたんキーボード」から送られた情報(以下記事参照)をGoogleスプレッドシートに記録するまでを記載します。



実機が関わる場合は様々な理由により、この説明通りにいかない場合がしばしばあります。申し訳ありませんが、自己責任・自己解決でお進めくださるよう、お願いいたします。

クエリーパラメータによるデータの送受信について

先回、ラズベリーパイ側からは、URLに「?x=・・・」という付加情報を加えてGASにアクセスしたのでした。

今回は、この付加情報からデータを受けとって処理するプログラムをGASで作成します。

なお、URLに続く付加情報はクエリーパラメータといいます。

クエリーパラメータは、URLの後に、?に続けて、[パラメータ]=[データ] という形の文字列を付加することでサーバ側にクライアント側から情報が送れる仕組みです。パラメータはいくつでも指定でき、[パラメータ1]=[データ1]  [パラメータ2]=[データ2]という風に、「&」記号でつないで、いくらでも設定する事が可能です。

大変簡便な反面、WEBの通信記録をみた場合に、どんなデータを送信したかが丸わかりですので、秘匿性の高い情報の送信には使わない事をお奨めします。


記録用のGoogleスプレッドシートの用意


Googleドライブにログインし、ラズベリーパイからのデータを保存するスプレッドシートを作成します。シート名は「記録用」としておきます。


作成したら、ブラウザのヘッドラインから、このスプレッドシートのIDを確認しておきます。

今回、単なる記録だけですので、スプレッドシートの準備は以上です。

GAS(Google Apps Script)による自動記録アプリの作成


Googleドライブから、GASのプロジェクトを新規作成します。

作成したら、スクリプトファイルに以下のコードを入力して保存します。

//-----------------------------------------
//----ラズパイのトライ--------------------------
//---著作:Particlemethod-2021年11月05日-----
//---無断複製・転載・配布を禁じます-------------
//-----------------------------------------
function doGet(e) {
  var x=e.parameter.x;


  if(e.parameter.x == null){
    return ContentService.createTextOutput('NoData');
  }else{

  //アプリケーションを取得|スプレッドシートのIDは各自のものを記入
  var myApp = SpreadsheetApp.openById('☆スプレッドシートID☆');

  //対象シートをシートの名前を指定して取得
  var mySheet = myApp.getSheetByName('記録用');
  
  //最終行+1行目にデータを記録
  mySheet.getRange(mySheet.getLastRow() + 1, 1).setValue(x);

  //最終行+1行目をレスポンスとして返す
  return ContentService.createTextOutput(mySheet.getLastRow() + 1);

  }
  
}

上記スクリプトで、「☆スプレッドシートID☆」とある所は、先ほど作成したシートのIDに打ち換えてください。

その後、スクリプトをアクセスできるユーザを「全員」としてデプロイし、URLやデプロイIDを得ます。

プログラムについて若干の解説を致します。

doGet(e){
}

goGet()関数は、アクセスを受けると実行する関数です。引数のeは、クエリーパラメータが入っています。

var x=e.parameter.x;

引数eから、クエリーパラメータで送信した値を取り出すには、parameterメンバーを用いて以下の様に記述します。

.parameter.[パラメータ名]

今回は、「?x=・・・・」というクエリーパラメータを送ったので、パラメータ名はxとしています。取り出した値は、改めてxという変数に保存しています。

 mySheet.getRange(mySheet.getLastRow() + 1, 1).setValue(x);

取り出したxを、上のスクリプトでスプレッドシートのセルに書き込んでいます。最終行を getLastRow( )で取得して、その次の行に記載します。

なお、このGASでは、最終行をレスポンスとして設定していますが、ラズベリーパイ側では特に利用していませんので、ここの部分は無視してください。


GASのプロジェクトを作成する手順の詳細については、以下の記事をご参照ください。


ここまでできたら、再びラズベリーパイに戻って、このデプロイIDを、以下の記事で紹介したプログラム中の「デプロイID」に反映します。


お疲れ様でした。以上で、アプリの準備は終わりました。

稼働させてみよう


ではラズベリーパイに「かんたんキーボード」をつないで電源を入れて起動し、作成したプログラムを稼働させてみましょう。ラズベリーパイをLANにつなぐのを忘れない様にしてください。

ボタンを押してみます。

なお、今回はウェイトタイムを多めにとっていますので、3秒間長押ししてください。

3秒程度長押ししてください


すると、ラズベリーパイのシェル画面や、スプレッドシートにも数字が入ってきます。

シェル画面
スプレッドシート

稼働しているところです。GASに1回ずつ保存する時のレスポンスがあまり良くないので、かなりスローですが、確かに情報が入力されている事が判ります。

以上、簡単な入力デバイスから、ワンプッシュで情報をスプレッドシートに保存するデモでした。そのまま実用という訳ではありませんが、定型の情報入力であればこの様なことも可能というデモでした。



この記事が気に入ったらサポートをしてみませんか?