追記:doGet()を追加して最新データをスマホで確認できるようにしましたかわいいM5stack今日はInterface2018年9月号で特集された「IoTマイコンESP32」を使ったM5stackという5.4cm×5.4cmのかわいい機器を使って環境温度湿度をGoogleスプレッドシートに記録するお話です。中国のスタートアップの会社さんが作っている製品のようです。この夏の猛暑で自宅の環境温度を記録してみようかな?と温度ロガーをいろいろと物色したのですが、結構なお値段でUSBでPCで繋いでデータを管理するようなものばかりで何となく二の足を踏んでいました。Interfaceさんの記事を読んで、M5stackに温度湿度センサーをつないで、ESP32の機能のWi-Fiを使ったらInternet上にデータが記録できるんじゃないか?と思っていろいろ調べてたらM5stackの派生機器のM5GOを使って温度などを記録した記事なども見つけてどうにも欲しくなってきました。M5GOはM5stack本体とすぐに繋げるセンサー類がセットになった商品(多少M5stack本体の構成もちがうようです)なのでいろいろ試せそうなので欲しかったのですが品切れ状態。Gray」と「M5Stack用プロトキット(温湿度センサ付き)」を購入することにしました。「M5Stack用プロトキット(温湿度センサ付き)」には温湿度センサーDHT12と、M5Stackを接続するためのGROVEケーブルもついているので素人の私でもはんだ付けとか加工をしなくても使えるので便利そうだなって思ったのです。到着とテストで、注文から2日後、郵便受けに入るネコポスで届きました。開封して、自宅にあった携帯電話用の外部電池(500mA入力ですが、電池は1Aの出力だったので大丈夫かな?と思って)につないで起動してみたら、自己診断とABCボタンの動作確認プログラムが入っていたので簡単にボタンの動作確認をしました。(後で、家に500mAの出力のコンセントに挿すUSB電源をみつけて、温度ロガーテスト時に使用していたのですが、500mA丁度の給電では時々電源が切れるようなので使った電源が悪かったのかもしれませんが1Aのほうがいいのかもしれません。1.8.5をスイッチサイエンスさんからDLして、USBのドライバーもダウンロードしてArduino開発環境でDHT12のスケッチ例をコンパイルしてM5stackに送って動作確認OKでした。次にWi-Fiのテスト。今回はM5stack側を家にあるWi-Fiのアクセスポイントにつなぎに行くWi-Fiステーションとして利用するので、とりあえずWi-Fiの動作確認にWiFiScanのスケッチ例を使ってテストしてOKでした。(Wi-Fiの機能は生きているのですが、このあと自作のプログラムでWi-Fiにつなぎに行こうとすると延々と接続待ちになる謎の状況でかなりハマりました。内容については後で書きます。)受け側のGoogleスプレッドシートのGoogleAppsScriptの作成ハマってる間に温湿度データを受ける側のGoogleスプレッドシートとGoogleAppsScriptを準備しました。M5stack側が温度湿度のJSONデータを投げて、GoogleAppsScriptのdoPost()で受けて、Googleスプレッドシートに1行ずつ追加するだけの簡単なスクリプトです。JSON.parse()するだけで扱ってくれるらしいので、JSONデータをPOSTする方は簡単です。{"temp":27.25,"humid":65.15}このような行見出しのスプレッドシートを作って、名前をつけて保存。このシートを操作するGoogleAppsScriptを作るので、「ツール」→「スクリプトエディタ」からスクリプトの画面を開きます。以下のようなスクリプトを書きます。シート名はスクリプトプロパティから取得するようにしています。output;}本来はM5stack側をタイムサーバと同期させて、温湿度測定の時間もJSONに入れて送るべきなのですが、テスト的に実装したいので簡単に温湿度だけ受けるようにしておきました。GoogleAppsScriptのテストこのGoogleAppsScriptを「ウェブアプリケーションとして導入」(テスト的に使用するので匿名アクセスを許すように公開してます)して、承認して(結構設定画面がやっかい)公開できました。この公開したURLに向けて、JSONデータをPOSTすればGoogleAppsScriptのテストはできるので、Postmanというプログラムを使用してテストします。M5stack側のスケッチそうこうしているうちに、Wi-Fiアクセスポイントにステーションとして接続できない原因が最初にdisconnect()していないからのような話をネットで見つけて解決しました。(2018/11/14更新:M5stackのライブラリは、Ver.0.2.4で再度コンパイルして動作確認しました。)M5stack側のスケッチです。delay(300000);}Googleスプレッドシートはこんな感じになります。夏休みのガジェット作成やお子さんの自由研究にM5stack使ってみてはいかがでしょうか?IoTの勉強やプログラミングの実践的な学習にM5stackは最適だと思います。M5GOではscratchのような画面で開発もできると聞いているのでM5GOやFIREなどの派生製品も興味があります。1.8.5についていたスケッチ例(DHT12とBASICHTTPClient)を参考にハマった時間と初期動作確認テストを含めてもも2日間。実質10時間程度で出来上がっています。スケッチ例が豊富なのでいろんなことが試せる気がします(BlueToothなど)先人の方々のおかげだと思います。ticker」というDHT12とUSB-typeCの電源ケーブル付きのかわいいM5stack専用台をみつけて、「おお!!」っと思いました。かわいく据え置きで温度湿度のログが取れますね。3につないで電池消費量のランニングテストをしている様子です。M5stackの大きさの比較のためにiQOSのタバコの箱を横に置いています。スマホのテザリングのWi-FiやポケットWi-Fiなどにつないで工場やオフィスなどの環境温度湿度のログをGoogleスプレッドシートに記録する用途などにも利用できるのではないかと思って電池の減り具合をテストしてます。3の電池残量LEDが1目盛りも減ってない状況です。追記:doGet()を追加して最新データをスマホで確認できるようにしましたGoogleスプレッドシートの最新のデータをスマホで見てみたくなったので、GoogleAppsScriptを以下のように変更しました。doGet()を追加して、公開URLにブラウザでアクセスすると、最新データを表示するようにしました。Scriptはセキュリティを考慮して、公開URLをリダイレクトします。以下下記URLの文書の引用です。output;}こんな感じに表示されます。PM突然のコメントお許しください。私は、水位センサと超音波センサを用いて水位を求めたいと思っています。そこで、このサイトを基にプログラムの改築を行ってGoogleドライブに出力するようにしたいと思っています。メールの方にご返信いただければ幸いです。このコメントは削除していただいて結構です。PMtelomereです。関心を持っていただいてありがとうございます。プログラムは使っていただいて改造いただいて結構です。私は個人的に「使えればいい」というスタンスで作っただけの「ほぼ素人」です。公開したのは、「Googleスプレッドシートに記録する方法もありますよ」と紹介したい意味だけでした。提供されているDHT12用のI2Cライブラリを使っていて、Wifiも提供されているもの。このプログラムには(わかってらっしゃると思いますが)何件か問題があります・初期化時にしかWifi接続確立を行なっていないので、状況によってはWifi接続が切れる場合がある(対処方法を私は知りません)・Googleスプレッドシートに、authentication付きで接続していない・M5Stack側も、GoogleAppScriptもエラー処理がない(というか素人なのでこのプログラムの場合のエラー処理手順がわかっていない)・水位センサ、超音波センサのI2Cライブラリを私は書けないプログラムを改造いただくのは問題ないです。思うので確認ください。私のプログラムのライセンスを表示していないためこのような問題が出るのですね。MITとしましたので確認ください。コメントをキャンセルメールアドレスが公開されることはありません。コメントデータの処理方法の詳細はこちらをご覧ください。