【GASでIoT】スプレッドシートと連携する「かんたんスマート・カレンダー」を試作する(その3)~スプレッドシートとスクリプト、およびPicoWのスケッチご紹介~
WEBネイティブのアプリである、Googleスプレッドシートは、ネットに繋がる他のデバイスで容易に情報を利用することができます。
そのシンプルな応用例として、スプレッドシートに記載した、イベントが有るか/無いか程度の簡単なカレンダー情報を、LEDの点灯情報で掲示することを試作してみました。
題して「かんたんスマート・カレンダー」です。
先回の記事では、この「かんたんスマート・カレンダー」のシステム全体をご紹介しました。
今回は、システムでデータベースとして使用するスプレッドシート(試作版ですので、まともなカレンダーとしてはまだ使えません)および、そのデータを受信するラズベリーパイPico Wのスケッチをご紹介します。
電子的なデータをスマホやPCの画面ではなく、それなりのサイズの掲示物として表示する意味
今回作ろうとしているシステムは、電子的に記録されている、ごく単純なカレンダー情報を掲示物として表示するものです。そんなことをする意味は何でしょうか。
電子的に記録されたカレンダー情報は、適当なアプリがあれば、スマートフォンやPCで見ることが出来ます。
しかし、スマートフォンなどを取り出して、画面をタップして・・・と、わずかな手間ではありますが、”見る”だけなのに余計な一手間が挟まります。
見たい情報は、「あるイベントが有るか/無いか」程度のごく単純なもので、できればどこかに掲示して、すぐ見れる様にしたいものです。アナログなカレンダーを併用するのも一案ですが、データが二元化してしまいます。
電子的なデータをカレンダーとして表示できるディスプレイが市販されていますが、それなりに値が張りますので、シンプルな情報の表示のために購入するのは躊躇われます。
そこで、シンプルなしか表示できない代わりに、安価に実装できる「かんたんスマート・カレンダー」を考えた次第です。これでも電子的なデータとリンクしている立派な「IoT」です。
カレンダーのデータベースとなるスプレッドシート
この簡単なスマート・カレンダーは、スプレッドシートをデータベースに使います。
ひな形のインポート
データベースとなるスプレッドシートのひな形を、以下に掲載します。
上記のエクセルのワークブックを、グーグル・ドライブ上のスプレッドシートにインポートしてご使用ください。
インポート後に行うこと
インポートしたら、外部からデータ読み取るためのシートの公開と、このシートへ、データを転記するためのスクリプトの追加とトリガー設定をします。
シートの公開
このスプレッドシートには、「ピコ表示」「カレンダ」の2つのシートがある筈です。
この内、「ピコ表示」の方は、外部のラズベリーパイPico WからアクセスするためにWEBページとして公開します。
以下の様に、「ファイル」⇒「共有」⇒「ウェブに公開」と進み、公開範囲で「ピコ表示」を選択して、このシートを公開します。
ここまで進むと、公開ページのURLが表示されるので、これを控えておきます。
後で実装するスクリプトを動かしたあとで、公開URLにアクセスすると、以下の様なテキストがブラウザに表示されるはずです(下側は空白になっています)。
スクリプトの追加
今度は、「カレンダ」シートを表示し、ここにスクリプトを追加します。このスクリプトは、カレンダー情報を記載したシートから、「ピコ表示」シートに最低限のデータだけを転記するスクリプトです。
メニューから「拡張機能」⇒「Apps Script」を選択します。
コード・エディタが起動するので、以下のコードを記入します。
function myDataCopy() {
//アプリケーションを取得|★スプレッドシートのID★は各自のものを記入
var myApp = SpreadsheetApp.openById('★スプレッドシートのID★');
//対象シートをシートの名前を指定して取得
var mySheet1 = myApp.getSheetByName('カレンダ');
var mySheet2 = myApp.getSheetByName('ピコ表示');
//データ記録範囲を指定して範囲を取得
var myData = mySheet1.getRange(31,3,1,1).getValue();
//値の書き出し
if(myData!='▼▼▼▼D000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000●●●●'){
mySheet2.getRange(1,1,1,1).setValue(myData);
}
}
「★スプレッドシートのID★」の部分は、先にインポートしたスプレッドシートのものに各自で書き換えください。
スクリプトのトリガー設定
次にトリガー設定します。コード・エディタのメニューから時計のマークの「トリガー」を選択します。
右下にある「トリガーを追加」をクリックします。
さきほどのスクリプトの関数を選び、実施は時間主導型とします。以下は例ですが、他の設定でもかまいません。(総実行時間の制約があるので、むやみに頻度を上げないでください)
以上で、サーバ側であるスプレッドシートの設定は完了です。
スプレッドシートの解説
このシートには、2つのシートがあります。内容を少し解説します。
一つ目は、「カレンダ」シートです。
最の方の範囲に、預手表があります。この表は以下の構成となっています。
・横に7列、日曜日~土曜日までの1週間のマス目がならぶ
・縦には、1日を3行(午前・日中・夜間)として、4週間分のマス目が並ぶ
・4種類の予定を絵文字で1つだけ入れる
ここにはデモとして、簡単なデータをアイコンで表示する形で記入しています。
この簡単なデモ用カレンダーを一部拡大して見てみます。
上記で最上段に「日」「月」とあるのは日曜日のつもりです。3行あるのは、各日の午前・日中・夜間の予定を記入する欄です。
記入するイベントは塾・学校・テスト・特訓(これは適当です)の4種類とし、上記のマス目にこの種類を絵文字で記入されています。(記入できるのは1つのみです)
予定表の情報を文字列に置き換える
下の方、16行目付近からは、この絵文字を単純な数字に置き換えるシートがあります。(関数を使っています。自シート内であれば関数を使っても反映モレは発生しません)
LEDの点灯順に文字を並べ変えて結合する
更に下の方、31行目付近からは、この文字列を、LEDの点灯順に並べ変えています。最後にデータのヘッダとして▼を4つ、フッタとして●を4つで挟んでいます。
このデータは、掲示板の発光デバイスである、NeoPixcelの各LEDへの信号になり、文字列の位置に従った位置のLEDが数字に依る色で点灯します。
次の記事では、ラズベリーパイPico W側のプログラムをご紹介します。
エクセルのVBAでアマチュアが自分だけのプログラムを作った様に、GASを使うことで、アマチュアでも比較的容易にWEBアプリを作れることを示したくて、GASで作った家計簿アプリの説明を簡単な本にしました。
デバイスを選ばないWEBアプリは、忙しい日常での記帳にぴったりかと思います。とても簡単な機能ですが、アマチュアによるWEBアプリ作成の事例として紹介させて頂きました。
内容は以下ですが、読みやすい様に縦書きにしています。(IT部門で縦書きはあまりないと思いますが、縦書きは日本語マッチした表記と考えています)
GASで、WEBアプリに特化した解説本はあまり見掛けないので、ご紹介としまして・・・。
コア部分の帳票アプリは以下で紹介しています。
WEBアプリは、意見集約にも使えます。スケジュール調整アプリはよくみる事例ですが、意見集約に使えるWEBアプリは少ないので、ご参考まで本にしました。
メールでは返信内容が埋もれる、チャットではスレッドが流れて最終意見のピックアップが難しい、Googleフォームなどの単票アンケートでは横並び形式に成形する手間がかかる・・・・といった欠点がありますが、WEBアプリを使うと、はじめから横並び形式で集約可能です。
(公式な使い方ではありませんが)GASのテンプレートにJSライブラリを組み込むと、エクセル風のインターフェースにしたWEB帳票もつくれます。
実験データをオンラインで書き込んだりする様な場合に使えると思い、これも解説本にしました。
以上、ご紹介まで・・・。
この記事が気に入ったらサポートをしてみませんか?