【GASでIoT】GASと「Pico W」を使ったギミックのケーシングを考える~(5)データ採取元のスプレッドシートを用意する~
Goole Apps Script(GAS)を使って、ネット通信可能なマイコンと連携して、「IoT」をするのが本記事シリーズです。
今回取り上げるIoTのギミックは、スプレッドシートに表記された天気予報の情報を、マイコンで読み取って、予報内容をLEDの点灯色で表示する「お天気インジゲータ」です。そして特に本記事シリーズでは、低コストで見栄え良くするために「ラズベリーパイPico W」を使い、これをペーパークラフトの箱を使ってケーシングすることを試みています。
先回までの記事で、ハードウェアの準備についてご紹介しました。
表示デバイスである「NeoPixcel」をレンズカバー付きでケース材におさめました。
以下の記事では「ラズベリーパイPico W」、「バッテリー」と「NeoPixcel」を配線しました。
今回の記事までのご紹介が長くなりましたが、ハードウェアの準備が出来たところで、次にソフトウェアを準備します。
今回の記事では、まずは、天気予報のデータを用意したスプレッドシートを準備します。
天気予報の情報を採取したスプレッドシートを用意する
はじめに、ネット上の天気予報の情報をスプレッドシートに展開し、LEDの点灯情報に変換するシートを用意します。以下の記事で紹介したシートを転用します。
記事では、気象庁の公開データを取り込み、以下の形で成形したあと・・・
LEDの色を表す数字に置き換え・・・
最終的に、簡単なテキスト列に集約するところまでをご紹介しています。
上記記事を参考に、天気予報用のスプレッドシートをまず用意します。
データ公開用のシートを追加する
天気予報を記載したスプレッドシートを用意したら、ここに、シートを1枚追加します。
ラズベリーパイPico Wへのデータ送信は、データをHTML形式で公開したシートを用意して、ここにPiocからアクセスすることで行います。
そのため、データ公開用のシートが必要になるわけです。シート名は「ピコ表示」とでもしておきます。
A1セルに関数を1つ記載する
以下に示す、LEDの点灯情報についてのテキストを新しく追加したシートに転記します。
この情報は、「ラズパイ表示」というシートに記載していますが、ここからスクリプトを使って転記します。
スプレッドシートのメニューバーから「拡張機能」を選択し、「AppsScript」を選びます。
以下の記事で書いてある、スクリプトを修正します。
こちらが修正したコードです。元の文字列に「▼▼▼▼」と「●●●●」を追加してコピーするだけの機能です。
function myWeather() {
//アプリケーションを取得|★スプレッドシートID★は各自のものを記入
var myApp = SpreadsheetApp.openById('★スプレッドシートID★');
//対象シートをシートの名前を指定して取得
var mySheet = myApp.getSheetByName('ラズパイ表示');
var mySheet2 = myApp.getSheetByName('ピコ表示');
//データ記録範囲を指定して範囲を取得
var myWeather = mySheet.getRange(2,1,1,1).getValue();
//値の書き出し
if(myWeather!='D00000000000000000000'){
mySheet.getRange(2,2,1,1).setValue(myWeather);
mySheet2.getRange(1,1,1,1).setValue('▼▼▼▼'+myWeather+'●●●●');
}
}
このスクリプトを保存したら、1時間程度の間隔でトリガーを設けて自動実行する様にしておきます。
うまくいけば、こんなデータが表示されるはずです。
シートを公開する
このシートを公開します。
スプレッドシートのメニューバーから、「ファイル」→「共有」→「ウェブに公開」と進みます。
単独のシートだけをウェブ形式で公開します。
データの天気でわざわざスクリプトを使った理由
Googleスプレッドシートでは、シートを跨いだデータの同期は、ユーザが編集している時以外は保障されません。
そのため、スクリプトで明示的にコピーするか、ImportRange関数を使ってリンクさせる必要があります。
今回の記事で、サーバ側であるスプレッドシートの用意ができました。
さて、次回は、クライアント側である、ラズベリーパイPico Wのプログラムを用意します。使用する開発環境は「ArduinoIDE」です。