ESP8266の小物を作っていると、各所の温度・照度・センサONOFFを一元管理したくなるのですが
データベースを作って登録するとなると、LinuxやDatabaseの知識を仕入れたりする必要があったり
するのですが、折角登録したデータを安易に閲覧できない気がしてきました。
そんなこんなで時は流れて、IFTTTに投げたトリガよりグーグルスプレッドシートにデータを登録する
方法があるんだなぁ~なんて思っていたらフッと閃いてしまったのです。
ESP8266からグーグルスプレッドシートのセルを読み書きしたら良いんじゃね?
スプレッドシートをデータベースに見立ててデータ読み書きするって考えです、
これならサーバーも立てる要もないしデータはweb環境に繋がる機器があれば
閲覧可能って最高だよね?
そう思ってセッセとウェブを検索していったのですが、ちーーーーーーーとも見つからない ><
IFTTTからスプレッドシートの末尾に追加する記事なんてお呼びじゃないのだーーー。
なんて、悶々と探していましたらやっとありました。
Sujay Phadkeさん作 HTTPSRedirect です。
これはGoogle ScriptにHTTPS getやputするサンプルなのですが、Google Scriptの関数を僕の意図に
合う様にスプレッドシートの任意セルを読み書きする様にすれば良いって寸法です。
あとは、このHTTPSRedirectがESP32で動くと嬉しいのだけどね ウゴカン
ESP32ではHTTPSRedirectのソースコードに変更を加える必要がありました。
※ドキュメントをよく読めばわかる話・・・・・・ なのかな
動作確認してみた時の情報
=>メモリリークはありませんでした。
ESP32開発当初はメモリリークっぽい症状で最終的に死んでましたが、
僕の記述した部分にString型を使っているコード起因でメモリリークしてました。
小まめな malloc / free もしくは global確保等でメモリリークは解消する感じです。
=>1回のアクセスは約3000mSec
ESP32等のCPUクロック等変更してみたのですが劇的な高速化は出来ませんでした。
=>各機同時アクセスは応答遅延します
明確に調べ切っていませんが、なーんか遅いなーという感じです。
=>ウォッチドッグタイマーでリセットする準備は欲しい
長期試験で不具合は確認していませんが、なぜか開発中には30秒以上応答なしが
あります。個人的には心配なので20秒のウォッチドッグタイマーで運用してます。
※ウォッチドッグタイマーでリセットする前提でソフトを構築しています
=>Windows+Pythonでの運用も検討したいトコ
同じGoogleAppScriptを使ってWindows+Pythonから読み書き可能でした。
1回のアクセスは100mSec以下の様な感じでESP32/8266より高速でした。
セキュリティに自信が持てる様になったらコッチでの運用も考えたいトコです。
2024年5月 驚きですが2018年に作ったライブラリは現在も健在です
2018年に作ったソフトが今も動作しているのは有難い話です。
センサーデータを毎時書き込むソフトを自宅・古民家で動かしていますが、
2022年の本格運用以降の不具合は「僕の人災」「停電」「インターネット不具合」と
判り易い内容ばかりで「原因不明」が無いのが凄い有難いです
あと・・・ こんなに長持ちするのですから更なる長持ちを期待しまして
GoogleAppScript無改造で以下の開発環境での読み書きが動作確認できました
=>Windows Microsoft VisualStadio 2010 C# Express版での確認
標準コントロールWebBrowserを使っての読み書きが行えました。
=>Windows Python3.11.6 での確認
requestsを使って読み書きが行えました。
※本当はGoogleSpreadSheet専用コントロール・ライブラリ等が存在しますが、
低スペック/貧相環境等でも動作する可能性を上げる為に基本形として確認しました。
2023年3月 なぜか302エラーで動かないんです
ESP32ですがBLEを使用するとヒープ不足で302エラーで動きませんでした。
作成中のユニットで「起動時に動作設定を読み込めば完璧じゃね?」って事で
新たに起動時に読み込むプログラムを作りましたが、、、残念な事に読み込みの
Getにて302エラーが出てたりExceptionが出たりでマトモに動きません。
=== 結局判ったのはヒープメモリ不足でした ===
※初期設定を記憶するエリアを大きく取り過ぎてヒープがかなり減ったのが原因でした。
ヒープメモリの現在空き容量はESP.getFreeHeap()で判るのですが、
GoogleSpreadSheetの読み書き前で40000程度なら普通に動きますが
35000を下回った辺りより302エラーが出てたりExceptionが出たりで微妙な
状況になって来る感じです。※時々上手く動くのでタチが悪い
とは言え今までの動作確認での実績を考えるとバグというよりは仕様として
受け入れても良い感じです。(凄い安定して動いてます)
ESP32ですがBLEを使用するとヒープ不足でホストに接続できませんでした。
BLEのメモリを解放してやると接続出来るようになります。多分他にも条件があると思う
後日ESP8266のプログラム動作確認中に同じ現象が出たので確認してみました
・ヒープ不足だと302エラーやリブート・読み込み成功などイロイロな症状
・ヒープメモリの現在空き容量はESP.getFreeHeap()で確認できます
・空き容量40000ぐらいで正常動作で35000を下回ると怪しくなってきます
僕の対策はGoogleSpreadSheetのアクセス関数内にヒープ空き容量のチェックを
入れて40000を下回ってた時は警告メッセージを表示する感じで済ませます。
2022-12 一応順調っすねー
そういえばESPNOWのスマートホームグッズ作成検討が進んでいるのですが
込み入った設定をGoogleSpreadSheetで登録出来ないか検討しています。
2022-9 良くわからないけど気が付くと使えなくなってた件
GoogleAppScriptが仕様変更だかなんだか判りませんが再認証が必要でした。
調べてみるとWebApplicationとして公開しているはずのアプリが非公開状態に
なっていてワケ判らずであります。
この辺は不具合を監視できるシステムにしないといけない感じですね。
2022-01-26 SpreadSheetからのマルチセル読み込み
ESP32やESP8266の動作設定をGoogleSpreadsheetに持たせられないかと
思いついて問題だったのが1セル単位でしか読み込めない問題。
マルチセルで読み込めないかとイロイロ調べていくとGASのソースはどうやら
既に対応済ぽい事が判りました(汗)
セル読み込みの指定セルを 1セルじゃなくて範囲セル指定すれば良いダケ
A1 と書いていたところを A1:D5 とするだけだったなんて・・・
思い込みって怖いですね。
2020-09-30 HTTPSRedirectがESP32に対応できる件について
ずっと昔にesp8266とe-Paperでカレンダーを作ったのですが
(現物は運悪くe-papeパネルを割ってしまい破損)
その時にHTTPSRedirectを使ってgoogleカレンダーより予定を読んで
表示する機能を付けていました。 esp32で出来ないかいろいろやって
みたのですがHTTPSRedirectの呼び出しで止まるので断念しました。
まー当時のESP32はBluetoothが微妙に使える程度でESP8266より
メモリが少し多い程度で値段も高かったので気にもなりませんでした。
そして、最近ESP32-WROVERやESP32-CAMなど魅力的なデバイスが
出てきて値段もこなれたし、e-Paperの表示モジュールも用意したし
以前断念したHTTPSRedirectのESP32動作検証を行うことにしました。
日本語サイトで検索すると、ESP32で利用された方の記事がありました。
・・・・従来のソースコードにあるコメントの1つを解除するだけ?
えー
//stop(); // may not be required
このstop();を生かすだけで動く様になるんだ。
って、しまった! どなたのサイトで見つけたかメモするの忘れました。
たすかりました! 記載ありがとうございます。
2018-09-18 IOTカレンダー作った
HTTPSRedirectは重宝するって判ったのですが、カレンダーぐらいしか思うかばない
ってことで、カレンダーを作ろうと思ったのですが
ESP8266はディスプレイ操作するにはメモリが少なくて面倒すぎる、って事でESP32で
作ろうとしたのですがHTTPSRedirectの移植で挫折(1ヶ月も悶々としてたよ
※調べると1か所コメントアウトするだけで動作すると判りました。(Qiitaにメモしました。
挫折後はESP8266にメモリ追加ってことで23lc1024の1MbitSRAMを購入してチャレンジ
やったことといえば
・ガリゴリと電子ペーパーライブラリをSRAM対応に書き換えたんです(汗
・GitHubに登録してあった日本語フォントライブラリを使う様にして
・Google App Scriptで日本の休日を応答する仕組みを用意して
・Google App Scriptで指定アカウントの1ヶ月分予定を応答する仕組みを用意して
そして出来たのは、カレンダーです
7.5インチ画面なので1ヶ月表示は少し小さめ、1日ぶんだけ表示ってのもアリかな?

展示等では、何も考えずにこのまま運搬等を行っていたのですが、
ある日、パネルが割れてダメになりました。
後日4インチ台のe-Paperパネルも割れてダメになったので、
かなり衝撃に弱いパネル・・ というよりは液晶パネルの様な
保護を最低限行う必要がある様です。
パネル代は約6000円です、もったいなーーい!
2018-08-30 ESP8266で温度湿度ロガーを作ってみた。
何やら結構良い感じの関連グッズが出来てしまいました。
Qiita:
ESP8266/ESP32でGoogleSpreadSheetのセルを更新する
温度湿度ロガーの要求仕様
1時間毎にGoogle Spreadsheetへアップする。
Google Spreadsheet側は1日24時間の各温度をグラフにプロットして表示。
ハードウェアの内容
利用チップはESP8266で、接続内容はDHT11とDeepSleep対応の配線のみ。
プログラム
DHT11の温度・湿度を各時刻毎に決められたセルに書き出す。
GoogleSpreadsheet側では、決められた温度・湿度セルを使ってグラフを表示する。

で出来たものがコレです。 パソコン・スマートフォンどちらからも閲覧できるし、
観測機器の追加も書込みセルを変更するだけで良いので、結構イケてる気がします。
上のグラフを見ると、何時エアコン付けたかが丸わかりで気持ち悪いですね。
※DHT11の湿度センサがバカ丸出しなのも判るw
昔は
・ESP8266をWebサーバにして、自前でグラフ書いて表示
・別途立てたサーバーにMySQLとかWebサーバー用意して表示
とかやろうとしたんだけど、面倒過ぎて作れなかったよな~ などと遠い目
センサをいろいろ繋いで検証してみました。

SHT31 / HTU21D / DHT11 / BME280 / BMP280 / LM75A と
イロイロなセンサーを繋いで検証してみました。
結局の所では、湿度計はどのセンサーも傾向は判るけど実際の湿度値が
正しいか判らないの判断不能。 温度は微妙なズレはあるものの、
各社ソコソコの値を返してるので気になりませんでした。
そんな中で僕の使う気温を測るセンサはBMP280になりました。
理由は「安い」以上!
2018-08-16 書き込みのサンプルを作りました
前回スプレッドシートの任意のセルに書き込む処理を作ったので、
今回は任意のセルを読み込む処理を作成しました。
https://qiita.com/DeepSpawn/items/f1ad2abaf18f1a419ae6
使い道は・・・・ 思いつきませんが(汗
google scriptのコードを変更して、google calenderから祝日の名称など
取るコードが用意できるので、派生コードで楽しめそうです♪
2018-08-14 やっとこさ、書き込みのサンプルを作った。
https://qiita.com/DeepSpawn/items/2799a894f80a79b40974
これを作っている最中にIFTTTのwebhooks受付にはJSON形式のデータ受付機能があって、
value1~value3まで使える風な情報を見て・・ あれ?この機能使えばIFTTT1つ登録するだけで
Google Spreadsheetの任意セルにデータ登録出来るんだじゃね? なんて思ったのはほっといて
これで各所に配置したESP8266から、スプレッドシートに報告することができます。
報告を1つのスプレッドシートに集合させれば、集中監視できるようになります。
そう思っているとスプレッドシートから、Google Scriptを呼び出せるのかな??
呼び出せるなら、ESP8266を呼び出して照明ON/OFFできる・・・・?
そうすればIFTTTを使わないこの方法に活路が見いだせるかもしれない!
