Google Home の声で知らせる自作 IoT ガス・温湿度報知器 ( M5Stack , BME680 使用 )

M5Stack

コンパイル書き込み実行

では、前項のスケッチを Arduino IDE でコンパイル書き込み実行してみてください。

※コンパイルエラー
display_bme280_i2c.h:44:64: fatal error: bme280.h: No such file or directory
が出る場合、私の自作ライブラリのSensorフォルダの中の以下の2つのファイルを削除してみてください。
Windows 10 の場合、以下のパスです。

C:\Users\__user_name__\Documents\Arduino\libraries\ESP32_mgo_tec-master\src\ESP32_mgo_tec_bV1\Sensor

削除するファイルは以下の2つです。
display_bme280_i2c.h
display_bme280_i2c.cpp
(2018/09/24)

 

最初に紹介した動画のとおり、起動直後はガスセンサが不安定なため、15分ほどウォームアップ運転をしてください。
その後 WiFi や Ambient をON にして、Google Home を ON にしてください。

その場合、動画にあるように、最初の Google Home から警告メッセージが出ますが、それは無視してください。

Aボタンを瞬時押しすると、スケッチで設定した各センサの最大値最小値の設定パターンに切り替えられます。
下図の様な数値は3秒間表示されますが、グラフの描画時刻になったら自動的に消えます。

デフォルトの最大値最小値パターンに戻すには、ボタンAを長押しすると、下図の様に表示されます。

次に、Bボタンを瞬時押しすると、アラームセット状態になります。
これはガスセンサのみです。
異常値を検知したら、M5Stack のアラームが鳴ります。
WiFi接続せず、アラーム設定だけの場合、

5秒アラーム鳴動→10秒間停止→繰り返し

となります。

Bボタンを長押しすると、下図の様に表示され、WiFi 起動と、Ambient へのデータ送信が始まります。
デフォルトでは3分毎に送信します。
WiFiコネクション中の時は、
「WiFi?」
と表示されます。
送信後、異常値検知が30秒間無ければ、省電力化のため、WIFI_OFF になります。

Cボタンを瞬時押しすると、下図の様になり、Google Home への送信有効設定になります。

BME680 のガスセンサが過去50サンプル中の平均値より、10000Ω下回ると、下図の様に警告表示が出ます。
そして、まず、アラームが鳴り始めます。
ただし、アラームが鳴る時に WiFi接続最中の場合は、それが完了するまでアラームが鳴りません。
アラームが鳴り終わったら、WiFi 接続し始めます。
動画にあるように、初回検出時の WiFi接続は時間がかかりますが、30秒以内に WiFi接続されていれば、次の接続は速いです。
その後、Google Home へトーク指令を出します。

BME680 のガスセンサの危険値を40000 Ωと設定しているため、それを下回ると、下図の様に表示されます。
動画にあるように、この場合のアラーム音も変化します。
Google Home へは別のメッセージが送信されます。

BME680 の湿度センサ値が、65% を超えたら、下図の様に湿度注意表示されます。
アラームは鳴りませんが、Google Home にメッセージを送信します。

BME680 の温度センサが30℃を超え、湿度60% を超えたら熱中症警告表示が現れます。
これもアラームは鳴りませんが、Google Home へはメッセージを送信します。

また、BME680 の温湿度センサとガスセンサが同時に異常値を検知した場合、最初に紹介した動画にあるように、アラームと Google Home の音声がそれぞれ交互に流れます。
ただし、M5Stack から Google Home へ送信したタイムラグがあるため、実際には動画にあるように、M5Stack のアラームと Google Home の警告トークがほぼ同時に出力されてしまいます。

この他のボタン操作としては、Cボタンを長押しすると、センサの計測時間間隔を切り替えることができます。
これは最初に紹介した動画を見てもらえれば分かると思います。

編集後記

いかがでしょうか。

@hori__hiro さん作の ESP32 用 google-home-notifier のおかげで、個人で作るものとしては夢のような IoT 機器ができました。
よくよくは Firebase と連携するともっと面白い IoT 機器ができそうですね。

それにしても、Google Home に好きな言葉を喋らせると、変な訛りがあっていろいろ楽しめて面白いです。

最近は ESP32 solo も発売されましたが、やっぱりこういう処理になるとマルチタスクは必須ですね。

ということで、今回はここまでです。

では、また・・・。

コメント

  1. H.W より:

    (以下、1週間程前に送信したつもりでしたが、上手くupされてなかった様なので再送します。)

    H.Wです。 大変ご無沙汰しております。
    約3ヶ月ぶりにブログを拝見したら、秀作スケッチが10数点以上も増えており、未だ8/11、16頃展示のスケッチ模写までしか追いつけていません…
    当方もその後、プロト基盤に何とかBME280を搭載(中国製のハーフサイズ品@650を納期も大分待って入手したものの、結局品質不良?で動作せず、最終的に過去使用した実績品を何とか内蔵させました。一応、交換性も考慮して直はんだ付けはせず、高さ制限の為に結線のコネクタからコンタクト部を抜き出しそっと折り曲げ加工し、ヘッダーピンに基盤裏から挿入する形で対応。)
    尚、BME680も試してみたかったのですが、入手性が悪く価格も高くて形状も大きく、今回は内臓に拘りたかったので敢えてBME280を使い、BME680のガス検知に該当するスケッチ部分を適宜コメントアウト&修正して対処してみました。
    1)その際、折角の接続状況表示、yahoo時報、ニュース、天気もそのまま残したかったので、Ambient◎とAlarm◎とGoogle Home◎は文字数を一部省略し、表示がズレないようにオーバーラップ表示させる仕様にしてみました。同じ場所でもボタンを押せば適宜表示は切り替わるので、これでも殆ど違和感はありません。
    2)ガス検知時のアラームが鳴らないのは寂しいので、代わりに「乾燥注意」、「高湿注意」、「熱中症注意」時にAlarm音1,2を割り当てて鳴らしてみました。(音量は確かに1か2で十分ですね…)
    3)勿論、Google Homeにも繋げて、喋るセリフも多少変更してみました。(こちらは最初に音量3を指示。)
    尚、デバイス名は特に変更しませんでしたが、懸念されてた名前に漢字が入っていても全く問題なく認識しています。
    (少し抑揚が気になる所もありますが、十分使い物になりますね? これは素晴らしい。。但、G.Hは応答が多少遅いので、Alexaでも同じ事ができるといいですね?)
    4)プロト基盤に別途内臓したLipo電池(850mAh)を保たせたい為、A,B,Cのキーを短&長押しした時に表示機能に影響しない範囲で、輝度を255、100、50、1に適宜切り替わるようにしてみました。
    (例えば、Aボタン長押しはグラフ表示設定モードが予め判ってるので別に暗くてもいいと言うことで最小の1に設定。これでも暗闇では十分認識でき、消費電力をかなり抑えられるので、就寝時間中は十分保ちそうです。)
    5)スケッチ改編時のミスか、起動時にWifi
    接続表示が✕のままとなる為、ディフォルトでAmbientに繋がる仕様に初期設定を変更して一応対応しました。(データ記録忘れがなくなるので結果オーライ。)
    6)残るは「警告表示」ですが、グラフ表示のスペースにアラーム時にフラッシュ表示できればいいと考え、y座標を変える他、適宜スケッチを改編してみました。
    しかし、論理が成立するデータ変化時の初回は表示するものの、その後の表示が継続しなかったり、途中でフリーズしてしまったりと安易なスケッチ書き換えではどうも上手くいきません…?
    これさえできれば、自分の使い方的には必要十分なのですが、何か簡単に対処できるアドバイス等を頂けると幸いです。

    • mgo-tec mgo-tec より:

      H.Wさん

      いつもブログをご覧いただき、ありがとうございます。

      1週間前のこちらの記事でのコメント投稿は見当たりませんでした。
      ただ、ある別記事では事情により名前やハンドルネームを伏せてコメント返信させて頂いておりますので、お察し下さいませ。
      その節は、本当にありがとうございました。
      感謝感謝です。
      m(_ _)m

      さて、とても密度の濃いコメントありがとうございます。
      こういうコメントいただけると、とってもウレシイですね!
      (^^)

      1)そのアイデアはすばらしいです。
      オーバーラップは良いですね。

      2)なるほど。温湿度にもアラームを割り当てたとは、やっぱりそういうニーズもあるんですね。

      3)デバイス名が漢字でもOKだったんですね。
      情報ありがとうございます。
      Alexa は自発的に喋らせることはできません。
      残念ながらライブラリを作ってくれる人がおりません。

      4)なるほど。
      ボタンで明るさ調節は良いですね。
      明るさ1はやったことないので、今度試してみます。

      5)メッセージ表示は実はいろいろと面倒な処理があって、プログラムを変更するとうまく動かなくなる場合があります。
      これは、プログラムを読み解いて頂くしかありません。

      6)グラフ表示位置に警告表示は、グラフの再描画を考えると、かなり難しいですね。
      点滅表させたいのであれば、グラフ描画をストップして、グラフ上にメッセージを表示<->消灯を繰り返さねばなりません。
      すると、別途関数を作り、boolean変数などでフラグを新たに作って、閾値を超えたらその関数に入るようにします。
      そして、
      gas_msg.dispMsgWindow( 1, ” GAS警告 ” );

      gas_msg.clearMsgWindow( 1 );
      を交互に表示させることだと思います。
      ただし、delay関数を使ってしまうと、センサ計測とLCD表示が停止してしまうので、
      millis関数等を使って、表示させたらその関数をすぐ抜ける。
      また、消灯したらその関数をすぐ抜けて、センサ計測とLCD表示を継続するプログラムを組むことだと思います。
      コメントではこの程度しかアドバイスできず申し訳ございませんが、これで試してください。

  2. H.W より:

    mgo-tec さん、
    H.Wです。応答がかなり遅れて申し訳ありません。

    先ず、他の項目で頂いたご返事については既に認識しております…m(_ _)m

    また、警告表示の対処方法についてのアドバイス、有難うございます。
    結果的に、最終の希望通りには行きませんでしたが、余りスケッチを弄くりまわすのは得策ではないと考え、最小限のdelay を20〜30
    ms 程度入れることにより、各論理判定が真に変化した最初の数秒間だけですが、各々の警告表示が出力されるので、一応これでヨシとしました。。。

    (p.s)
    後日、先のGmail 宛にでもこれまで製作した関連写真等を適宜添付させて頂きたいと思います。。。

    • mgo-tec mgo-tec より:

      H.Wさん

      いえいえ、いくら遅れても全く問題ありません。
      こちらこそ、いつもありがとうございます。

      とりあえず、動作できているようでちょっと安心しました。
      あまりお役に立てず、申し訳ございません。

      写真については送って頂いてOKです。
      もし、このコメント欄に掲載してもよろしければ、おっしゃっていただければと思います。
      その際、サーバー負担軽減のため、容量によっては圧縮させていただきますのでご了承くださいませ。
      m(_ _)m

      • mgo-tec mgo-tec より:

        H.Wさん

        写真ありがとうございました。
        では、紹介させていただきます。

        以下、H.Wさんからの説明文付きです。

        photo1: Lipo電池(850mAh)及びBME280のプロト基板実装状況、電池残量モニターLED付き
        (LEDは反対側で写真には輝度調整ボリュームのみ写っています。)
        comment_hw_01.jpg

        photo2: スケッチ改変後の警告表示例
        (強制加温&加湿時。ちょっと映りが悪いですが…)
        comment_hw_02.jpg

        プロト基板からバッテリーをご自分で搭載されるところはスゴイですね。
        私は既製品を買ってしまいますが・・・。
        警告表示をアレンジするのはちょっと難しいのですが、よく改良されたと思います。
        素晴らしい!!!

        読者の皆さまにも参考になると思います。
        ありがとうございました。
        m(_ _)m

タイトルとURLをコピーしました