2022年01月21日 更新
どうも、クラゲです。
RaspberryPiからGoogleスプレッドシートへデータを送信する方法を紹介します
以下の動画は、Pythonスクリプトを実行し、クラウド上にあるGoogleスプレッドシートにタイムスタンプとデータを書き込んでいる様子です。グラフはスプレッドシートで予め散布図を選択しています
応用すれば、センサー値を定期的に書き込んだり、センサーやボタン等で検知したときの日時を書き込んだりすることができます。またGoogleスプレッドシートはクラウド上にあるので、外出先などいつでもどこでも閲覧可能です。
この手のクラウド連携は有料だったり、無料で使えるけどクレジットカード登録が必要だったりします。しかし、今回の方法は、クレジットカード登録など一切必要なく、全て無料で出来ます!
[TOC]
事前準備としてGoogleスプレッドシート新規作成までお願いします。インターネットを検索すればたくさん情報がありますし、すぐに簡単にできます。
スプレッドシートでGoogle Apps Script(通称GAS)というプログラミング言語を用いて作成します。プログラミング言語はJavaScriptに近く、実行環境はExcelのVBAに非常に似た感覚で簡単に出来ます。
拡張機能
> Apps Script
を選択します
以下のような画面が立ち上がります
コードの中身を以下に書き換えます
function doGet(e) {
//現状Activeになっているsheetを取得
var sheet = SpreadsheetApp.getActiveSheet();
//1を追記
sheet.appendRow([1]);
}
フロッピーアイコンをクリックして保存します。
無題のプロジェクト
をクリックしてプロジェクトタイトル
で適当に test
などと入力して名前を変更
をクリックしてください。
次に、インターネット上から実行できるように設定します。
デプロイ
から新しいデプロイ
を選択します。
歯車アイコンからウェブアプリ
を選択します。
アクセスできるユーザー
を全員
に変更して、デプロイ
ボタンを押します。
しばらくすると、アクセスを承認
ボタンが出てきますので選択します。
以下のようなウィンドウが表示されるので、自分のアカウントを選択します。
以下の表示が出たら、左下にある小さな 詳細
をクリックします。
左下の小さな test(安全ではないページ)に移動
をクリックします。
以下の表示が出たら、右下の 許可
ボタンをクリックします。
以下の表示が出たら、コピー
をクリックしてウェブアプリのURLをコピーします。その後、完了
ボタンを押して下さい。
ブラウザの新しいタブを開いて、アドレスバーに先ほどコピーしたURLを貼り付けてEnterキーを押して下さい。ページはエラーになりますが、スプレッドシートに 1
が追記されていれば成功です。新しく開いたページを更新すると 1
がどんどん追記さてゆきます。
今度はURLにアクセスした日時を追記します。
スクリプトエディタに戻り、コードの中身を以下に書き換えて上書き保存して下さい。5行目に new Date(),
が追加になっています。
function doGet(e) {
//現状Activeになっているsheetを取得
var sheet = SpreadsheetApp.getActiveSheet();
//1列目に日時、2列目に1を追記
sheet.appendRow([new Date(), 1]);
}
デプロイ
からデプロイを管理
を選択します。
ペンのアイコンをクリックし、バージョン
にて新バージョン
を選び、デプロイ
ボタンを押します。
以下の画面が出ますが、URLに変化はありませんのでURLを再びコピーする必要はありません。
完了
ボタンを押します。
先ほど開いていたブラウザを更新してください。スプレッドシートの最終行に 年/月/日 時:分
と 1
が追記されていれば成功です。
URLにパラメータを付加して、それをGoogle Apps Script側で受け取り、スプレッドシートに記述させます。これは例えばラズパイで取得したセンサデータなどをスプレッドシートに記録する等に役立ちます。
スクリプトエディタに戻り、コードの中身を以下に書き換えます。変化点はデータを取り出す部分の追加と、最終行に ,value
の追記があります
function doGet(e) {
//データdata1を取り出す
var value = e.parameter.data1;
//現状Activeになっているsheetを取得
var sheet = SpreadsheetApp.getActiveSheet();
//1列目に日時、2列目に1、3行目に送信されたデータ値 を追記
sheet.appendRow([new Date(), 1, value]);
}
同様の手順で更新してください。そのままブラウザを実行すると同様に動きますが先ほどと変化が無いように見えます。
そこで、URLの最後に ?data1=3776
を付け足してEnterキーを押してください。
3列目に 3776
と表示されれば成功です。
ここまでラズパイは一切登場しませんでしたが、最後にラズパイとの連携です。
今までブラウザに手打ちでURL入力していた内容をラズパイの中のPythonプログラムで実行します。最も簡単に記述できる requests
モジュールを活用します。
ラズパイで以下のPythonコードを記述してください
import requests
url = 'https://script.google.com/macros/s/XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX/exec?data1=Hello'
requests.get(url)
URLは各自置き換えてください。今回最後のパラメータは ?data1=Hello
にしました。これで実行するとどうでしょうか?
スプレッドシート側で、このように表示されていれば成功です!
Google Apps Scriptのコード説明は割愛しますが、短いので分かりやすいかと思います。色々と改造してみたり、不明点はウェブで調べてみて下さい。
アプリの停止やアクセス権の削除についてはこちらのページを参照してください。
以上、「ラズパイからGoogleスプレッドシートへ送信」でした!