見出し画像

[技術]Raspberry Pi Pico Wの温度計測データをGoogleスプレッドシートを使ってロギングする方法


背景

温度ロギングができる装置をRaspberry Pi Picoで作成中
温度をオンラインで確認できるようにしたいが、データ受信用のサーバーを用意したくない

この記事で挑戦すること

Raspberry Pi Pico Wで取得したデータをオンラインで送信し、Googleスプレッドシートにリアルタイムにロギングできるようにする
(※IFTTTは使用しない)

※IFTTT(イフト):様々なインターネット上のサービスを連携させられるサービス。IFTTTを中継してRaspberry PiとGoogleスプレットシートを連携させるチュートリアルが多く存在するが、2024年5月現在有料化されている

方針

 Google Apps Script (GAS)を利用して、Raspberry Pi Pico WからGoogleスプレッドシートに直接データを送信する

実験

GASを作成する

Googleスプレッド上に空のシートを作成
Apps Scriptを選択

Apps Scriptを開く

プログラムの作成


今回は下記のように入力した
doGet関数は、Getリクエストを受け取った時に実行される
Getリクエストを通して、センサー温度の値、目標値、PID制御のパラメーター(P値、I値、D値、PID出力)、ヒーターオン時間、ヒーターオフ時間を受け渡し、それをシートの最後の行に追記する。


function doGet(e) {
  //データを取り出す
  var temp = e.parameter.temp;
  var target = e.parameter.target;
  var p = e.parameter.p;
  var i = e.parameter.i;
  var d = e.parameter.d;
  var power = e.parameter.power
  var ontime = e.parameter.ontime
  var offtime = e.parameter.offtime

  
  //現状Activeになっているsheetを取得
  var sheet = SpreadsheetApp.getActiveSheet();

  //日時と送信されたデータ値 を追記
  sheet.appendRow([new Date(), temp, target, p, i, d, power, ontime, offtime]);
}

デプロイ


アクセス権を設定する。New deployment→Web app→Anyone(URLを知っている人なら誰でもアクセスできる状態になるのでURLの取扱注意)


進んでいくと下記のような画面が出るのでAdvancedを選択し
「安全でないページに移動」という項目をクリック

発行されるURLをコピーしGASの準備完了

URLをコピーする

PythonからGet送信

requestライブラリをインポートし、発行したURLにGetリクエストでデータを送信する。
Getでデータを送信する時のフォーマットは下記のようになる。
 https://URL?temp=AAA&target=BBB&p=CCC& ・・
今回はmkurlという名前の関数を定義して、このURLを文字列としてupdurl変数に返している。
その後、requests.get(updurl)とすればgetリクエストで送信される。
うまく送信されるとGAS側で定義したdoGet関数が実行される。

import network
import requests

url ="https://script.google.com/macros/s/(発行したURL)"

(省略)

def mkurl(url, temp, target, p, i, d, power, ontime, offtime):

    newurl = url+"?"
    newurl += "temp=" + str(temp)+"&"
    newurl += "target=" + str(target)+"&"
    newurl += "p=" + str(p)+"&"
    newurl += "i=" + str(i)+"&"
    newurl += "d=" + str(d)+"&"
    newurl += "power=" + str(power)+"&"
    newurl += "ontime=" + str(ontime)+"&"
    newurl += "offtime=" + str(offtime)
    
    return newurl

(省略)
def main():

(省略)

    updurl = mkurl(url, temp, target, pg, ig, dg, power, on, off) 
       requests.get(updurl)

結果

成功!
自動的にロギングデータがGoogleスプレッドシートに飛んできます。
改善点としてはGetリクエストは時々エラーを出すので、エラーの場合は再度リクエストするようなエラーの処理をした方がいいですね。
次は、これを手元のエクセルに同期するようにしたい。

Raspberry Pi PicoのセンサーデータをリアルタイムにGoogleスプレッドシートにロギング成功

いいなと思ったら応援しよう!