![見出し画像](https://assets.st-note.com/production/uploads/images/104813587/rectangle_large_type_2_704f5251dc542255a12ad69ff2d4b460.jpeg?width=1200)
【GASでIoT】GASで「ラズパイ Pico W」から、Googleスプレッドシートへ の読み書きにトライ!(その4~テスト用スプレッドシートとGASの準備~)
エクセルのクラウド版ともいうべき、Googleスプレッドシートに対し「ラズベリーパイ Pico W」使って読み書きする、「お手軽IoT」の実装トライする記事です。
「Pico W」はOSを有さないため、開発環境はPC側で構築し、ここで実行コードを生成してデバイスに転送します。
ところがメジャーな開発言語である「MicroPython」では、上手く環境構築ができなかったため、「C」言語で、「Arduino IDE」を使ったプログラミングを進める事にしました。
本環境で”Lチカ”に成功した記事はこちらです。
環境構築ができたところで、いよいよスプレッドシートへの読み書きプログラムの実装へ進みます。
この記事は、一介のアマチュアが、断片的な手がかりを寄せ集め、試行錯誤しならがら行った記録です。
失念による「手順の記載もれ」、たまたま上手くできた条件を見逃している「前提条件の未記載」、誤認や理解の浅さによる「誤り」を含んでいる可能性が大いにあります。
うまく再現できない場合があることをご了承頂き、自己責任、自己解決を前提にお読み頂くことをお願いします。
テスト用スプレッドシートの準備
まず、今回の通信テストに使う、Googleスプレッドシートを用意します。
Googleドライブ上にスプレッドシートを新規作成し、デフォルトで生成される「シート1」の、A1セルに、以下を記入しておきます。
▼▼▼▼◎◎◎通信テスト◎◎◎●●●●
![](https://assets.st-note.com/img/1683322342581-zUvXaY4qEd.png)
上図では青く色を付けていますが、このA1セルのテキスト情報を読み出そうという訳です。
また、上図では黄色く色を付けている、A2セルには、テキストの書き込みをしてみる事にします。
なお、このスプレッドシートは、名前は何でもかまいかせんが、ブラウザのヘッダ部分から以下★部分のスプレッドシートIDを確認しておきましょう。
https://docs.google.com/spreadsheets/d/★スプレッドシートID★/edit・・・
書き込み用Goole Apps Scriptの用意
次に、書き込み用Goole Apps Script(GAS)を用意します。
このGASは、アクセスすることで、A2セルへの書き込みを行うものです。
Googleドライブの左上の「新規+」アイコンをクリックし、「その他」⇒「Goole Apps Script」と進んで、GASのプロジェクトを作成します。
![](https://assets.st-note.com/img/1683322662881-67rhfPuPZM.png)
![](https://assets.st-note.com/img/1683322736952-WHLqvTuc7G.png)
デフォルトで生成されるスクリプトファイルに、以下のコードを入力します。
シート名「シート1」は変えない様にしてください。また、★スプレッドシートID★部分は各自打ち替えてください。
//-----------------------------------------
//----ラズパイのトライ-----------------------
//---著作:Particlemethod-2023年04月15日-----
//-----------------------------------------
function doGet(e) {
var data=e.parameter.data;
if(e.parameter.data == null){
return ContentService.createTextOutput('No Data');
}else{
//アプリケーションを取得|★スプレッドシートID★は各自のものを記入
var myApp = SpreadsheetApp.openById('★スプレッドシートID★');
//対象シートをシートの名前を指定して取得
var mySheet = myApp.getSheetByName('シート1');
//データをA1セルに代入
mySheet.getRange(2, 1).setValue(data);
return ContentService.createTextOutput('▼▼▼▼Success Data●●●●');
}
}
入力したら保存し、誰でもアクセス可能な設定で、デプロイ(アクセスするURLを発行する)しておきます。
![](https://assets.st-note.com/img/1683323212271-J8uAmSqOaD.png)
参考情報
「デプロイ」などの基本手順について知りたい場合は、ネットなどで探してみてください。
参考まで、以下記事に紹介するKindleにまとめました。Amazon読み放題なら無料で読めます。
若干のコード解説です。
このGASは、デプロイしたURLにアクセスする時に、マクロコード(?に続く、変数=値 部分:以下例)付きでアクセスすると、これをセルA2に記入します。
アクセスURL?data=文字
上記を扱っている部分が以下の2行のコードです。
・・・・
マクロコードから値を取り出して変数dataに代入する
var data=e.parameter.data;
・・・・
変数dataの値をセルA2に値を記入する
mySheet.getRange(2, 1).setValue(data);
・・・
プログラムには、レスポンスを返すコードもあるのですが、この部分はテスト用です。
GASのテスト
コードをデプロイしたら、試しにURLに、PC上のブラウザからアクセスしてみてください。
マクロコード無しだと、以下の様になるはずです。
![](https://assets.st-note.com/img/1683324346162-5kmMtzdEHp.png)
マクロコード付きで以下の様にアクセスすると、
https://script.google.com/macros/s/★デプロイID:各自違います★/exec?data=X
ブラウザには、以下の様に表示されます。
![](https://assets.st-note.com/img/1683324674608-qkwFNkTzKz.png)
スプレッドシートには「X」という文字がA2セルに記入されます。
![](https://assets.st-note.com/img/1683324644339-IP5i7pHsfn.png)
以上の状態であれば、GASはうまく機能しています!
この内容をAPI(ネット上のサービス)を使って実装することも可能ですが、この記事では、アクセスを公開(ラズパイからのアクセスは、Googleにログインしていない前提になるので)して使う事に不安があるため、機能を限定したGASを公開する方法を取っています。
読み出しシートの公開
今回、書き込み側はGASを使いますが、読み出し側は、シートをWEBページとして公開することで行います。
先のスプレッドシートで、「ファイル」⇒「共有」⇒「ウェブに公開」
とすすみます。
![](https://assets.st-note.com/img/1683331713606-ZOIEAuDXGv.png)
![](https://assets.st-note.com/img/1683331736946-0G2cRZrSwf.png)
範囲をシート名、公開形式をウェブページにして公開します。
![](https://assets.st-note.com/img/1683331828594-8K7Q9WB7f0.png)
公開形式をテキストなどにすると、うまく情報がとれません。
URLは保存しておきましょう。
ここまでで、ArduinoIDEでプログラムを書くための前準備が済みました。
ラズベリーパイ Zero W の場合との違い
少し脇にそれますが、ラズベリーパイ Zero W との違いを軽く触れます。
ラズベリーパイ Zero Wでは、以下のコードでアクセスとレスポンスが取れました。
#---WEBにリクエストを投じるためのライブラリ
import requests
・・・
レスポンス = requests.get("https・・・GASへのアクセスURL ?マクロコード")
GASの側で工夫して、セルの値をレスポンスする様にしておけば、マクロコードで書き込み、レスポンスで値取得が容易にできました。
参考記事です。
ところが、「Pico W」では2つの問題があります。
HTTPSにアクセスする際のSSL認証を通過できない
PicoWにも、ネットのURLにアクセスするコードはあるのですが、単純なコードでは、HTTPSではじまるURLに固有の、SSL認証を通過できず、アクセスできません。
「Zero W」では、ブラウザとOSがこの役目を裏方で行っていたのですが、「Pico W」ではプログラムでユーザ自身が対応しなければなりません。
レスポンスを取れない
GASを動かす場合、PC上でレスポンスを見ると判りますが、アクセスしたURLと全く異なるURLからレスポンスを返しています。
https://script.googleusercontent.com/macros/e・・・から返しています。
![](https://assets.st-note.com/img/1683332803678-8MtlJwV2I8.png)
こんな場合でも、「Zero W」では、ブラウザが上手くさばいて、レスポンスを取得できていたのですが、「Pico W」では全くレスポンスを感知できません。
対応方法
以上の問題に対応するため、SSL認証については、「ルート認証」と呼ばれるアクセスのための鍵を、ユーザ自身でプログラムに埋め込みます。また、レスポンス受信についてはあきらめ、セルの値は、スプレッドシート側で公開ページを作って取得する様にします。
さて、次の記事では、具体的なコードをご紹介していきます。
![](https://assets.st-note.com/img/1683333098237-atpBRSuiAe.png)