IoTで墓守やってみた!②M5Stackを試しに使ってみる

M5Stack + 3G拡張ボードをレシピ通りに触ってみる

前回の記事で、父の墓に供えてある缶ビールが毎回無くなっていることから、
缶ビールが持ち去られたことを検知できる「墓守システム」を作ってみることにしました。

父の墓のお供えビールが無くなっている いきなりお墓の話でアレなんですが、自宅から車で15分ほどの場所に父のお墓がありまして、お彼岸や...

以下のSORACOMさんのIoTレシピを参考に、距離センサーで缶ビールが持ち去られたことを検知し、メール通知できるようにしてみたいと思います。

IoTシステムの構築手順や必要機材をオンラインで公開。IoTの始め方や全体像を学びたい方や、IoTへ取り組みためのテーマを探している方に最適です。

まずはこちらのレシピ通りに、コーヒーカップ取り忘れお知らせシステムを作ってみることにします。
とりあえずレシピ通りに進めるだけなので、特に問題は無いと考えていましたが。。。

World Time APIのところで問題発生

意外なところでつまづきました。
動作テストを兼ねて、世界時計を API で提供している World Time API から日時を取得して表示するところなのですが、サンプルソースをM5Stackに書き込んでも、ディスプレイに何も表示されません。

ここまでに手順に誤りがないか確認しましたが、特に問題ありません。

ちょっとググってみても、同じような事例は出てきません。
ひとまず、サンプルソースの内容を理解しつつ、怪しいと思われる箇所をコメントアウトして再度実行したらどうなるか、試してみることにしました。

すると、setup()のところで、冒頭の以下の行「Serial.begin(115200);」をコメントアウトを外したときに、現象が再現しました。

void setup() {
   Serial.begin(115200);
   M5.begin();
   M5.Lcd.clear(BLACK);
   M5.Lcd.setTextColor(WHITE);
   M5.Lcd.println(F("M5Stack + 3G Module"));

Arduino日本語リファレンスによると、シリアル通信のデータ転送レートを指定しているようです。

どうにか解決に至るまでの経緯

その後、色々調べていると、以下のteratailの内容が気になりました。

ESP32/Arduino環境の以下のプログラムで、GPIO21につないだLEDが点滅しません。 ```Arduino void setup() { Serial.begin(115200)

こちらの投稿でも、同じ箇所でM5Stackが無反応になっているようです。
コメントアウトを外すと、正常に動作するらしい。

で、この方はArduino ESP32のボードパッケージをVer 1.04にすると発現せず、Ver 1.05(2/23リリース)では現象が出ることを確認されていました。

はて、私がM5Stackをセットアップした時はどうなっていたか?

確認してみました。
結果は、、、Arduino ESP32のボードパッケージが1.06になっていました。
どうやらここに原因がありそうです。

ということで、私もボードパッケージのバージョンを1.04にインストールし直して、再度試してみました。
その結果、World Time API を取得してM5Stackに表示することができました!

SORACOMコンソール上も、SIMがオンラインになっていました。
何とか無反応になるという現象を解決することができました。

ちなみに、以下のセットアップ手順に、Arduino ESP32のボードパッケージのインストールについて記載がありますので参考にしてみてください。

なお、こちらの内容をよく見ると、バージョンが1.04となっています。
この記事の編集時の最新バージョンが1.04だったと思われます。

ひとまずSORACOM Lagoonへの連携まで出来た

無事トラブルを解消できたので、さらにレシピの手順を進めます。
手順自体はそこそこ長いのですが、ここから先は特にハマることなくスムーズに作業できました。

強いて言えば、SORACOM LagoonのUIがレシピ作成時からだいぶ変更されていたことでしょうか。
少しだけ違和感を覚えましたが、何とかなりました。

我が家にはコーヒーメーカーが無いので、ペン立てとタンブラーで代用してみました。
ToF距離センサーの前にタンブラーを置き、その奥にペン立てを置いてみました。

下の画像の左から、底面に距離センサーを貼り付けたM5Stack、タンブラー、ペン立ての順に並べています。

電源を入れると、ディスプレイにちゃんとタンブラーとの距離が表示されています!
ちょっと画像が見づらくて申し訳ないですが、
「Distance avg. 27mm」と表示されています。

面白かったのは、一見タンブラーが静止しているように見えるのですが、
距離表示が1ミリ単位で細かくブレて表示されています。
どうしてこうなるのか分かりませんが、実際やってみないと分からないものですね。

次に、タンブラーの無い状態から距離計測を開始し、途中でタンブラーをセンサーの前に置くと、ちゃんとSORACOM Lagoonから通知が届きました!
※タイトルが「コーヒーカップとの距離履歴」のままになっているのはご容赦ください

とりあえずレシピ通りの実装を完了することができました。
次回は墓守システムのためのカスタマイズを行っていきたいと思います。