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

記事公開日:2018年8月11日

こんばんは。

今回は、前回記事で紹介したの@hori__hiro さん作の秀逸ライブラリ google-home-notifier を使って、先日作成した M5StackとBME680のガス報知器(検知器)をGoogle Home に警報を喋ってもらうようにしてみました。

ほんの数か月前までは、M5Stack と Google Home を連携させるのは面倒だったのですが、ESP32 用 google-home-notifier を使うと、夢の様に簡単に連携できるようになりました。
(因みに、google-home-notifier を使う場合は、Wi-Fi のローカルエリアネットワーク内にあるデバイスのみの連携限定のようです)

スポンサーリンク

BME680 センサで異常値を検知したら、Google Home に以下のメッセージを喋ってもらうようにしてみました。

●湿度65%を超えた場合
「湿度高いよ。除湿したほうがエエよ。」

●温度30℃を超え、湿度60%を超えた場合
「熱中症になるよ。エアコンいれなさい。エアコン絶対いれなさい。」

●湿度35%を下回った場合
「乾燥してるよ。加湿したほうがイイかもねー。」

●ガスセンサが過去50サンプルの平均値より 10000Ω下回った場合
「匂ってる。匂ってるよー。臭い。臭いよー。」

●ガスセンサ値が40000Ωを下回った危険ゾーンになった場合。
「ガス危険、ヤバイよヤバイよ。換気しなさい。」

これに加えて、M5Stack からアラームも発信させてみました。
因みに、以前の記事と同様、クラウドサービスの Ambient へのデータ送信もしています。

もう、こうなってくると、既製品にも負けない自作 IoT センサ報知器のようです。

まずはこちらの動画をご覧ください。

いかがでしょうか。

M5Stack のガス検知アラームと、Google Home の喋り報知が断続的に鳴っているのが分かると思います。

この処理は結構悩みました。

なぜなら、BME680 のガスセンサは、測定間隔を一定に保ち、中断させてはなりません。
ですから、アラームや WiFi接続、Google Home とのコネクションは、マルチタスクを使って、BME680タスクと別タスクにしなければなりません。
この処理方法については後で述べていますので参照してみてください。

因みに、気圧も測定していますが、気圧に関する警報は出していません。
これについてはいつか天気予報と連動させてみたいですね。

というわけで、以下これの説明をしてみたいと思います。

因みに何度も申し上げておりますが、私は素人アマチュアです。
自己満足でプログラムを組んでいますので、ソースコードは無保証です。
誤りや不具合があるかも知れませんので、もし何かお気づきの点があれば、コメント投稿等でご連絡いただけると助かります。

センサ測定、Google Home Talk、 アラーム発信の処理方法について

今回一番苦労したのは、以前のこちらの記事のガス報知器に、M5Stack のアラームを使いつつ、Google Home へ警報を喋らせることです。
しかも、今回は BME680 の温度と湿度センサの異常値についても Google Home に喋ってもらいます。

すると、まず問題になるのが、M5Stack ( ESP32 ) のマルチタスクの割り振りです。
マルチタスクについては以下の記事を参照してください。

Arduino – ESP32 のマルチタスク ( Dual Core ) を試す

BME680 のガスセンサは、こちらの記事こちらの記事でも紹介したように、中断無しに一定間隔(例えば3秒毎)で計測しなければなりません。
ただ、M5Stack の ILI9341 LCD ディスプレイへの画像描画処理は比較的短い時間の為、BME680 のセンサ測定に大きな影響が無いと考えられ、BME680 処理と同じタスクに入れ込みました。

その他、アラーム、WiFiコネクション、Google Home コネクションは別タスクにまとめました。
アラームについては、ガスセンサ限定にしました。

結果、下図の様な割り振りにしました。

GoogleHome_M5Stack_BME680_01

これで、ガスセンサと温湿度センサの異常値検知が同時でも、Google Home のガス警報トークと、温湿度警報トークは交互にすることができます。

ただ、本来は、M5Stack のアラームは途切れずに鳴り続け、Google Home を同時に喋らせたかったのですが、今回は不可能だと分かったので、アラームを5秒間鳴動させた後停止させ、その後 WiFiやGoogle Homeコネクション処理をさせるようにしました。

先に紹介した動画を見てもらえれば分かるのですが、Google Home コネクションにタイムラグがあるので、アラームと Google Home トークが同時に出力されています。
これはこれで私的にはヨシとしています。

また、センサが正常値の場合、3分毎に WiFi接続して、Ambient へデータを送信しますが、いつもならば、省電力化のためにデータ送信後すぐにWIFI_OFF にしていました。
ただ、そうすると、異常値検知で、Google Home に連続して喋らせることができないため、異常値検知の期間は常時 WiFi 起動状態にしました。
そして、WiFi接続データ送信後 30 秒経過しても異常値検知が無い場合に WIFI_OFF するという処理にしました。

これで、先に紹介した動画のように、初回の異常値検知で WiFi 接続に時間がかかりますが、その後異常検知状態が続けば WiFi が起動状態のままになります。

ということで、老いた中高年の私の頭で考えられる処理はこんなところです。

では、次の項では実際の作り方を説明していきます。

使うもの

Google Home Mini

Google Home Mini については、個人的にレビューした以下の記事を参照してください。

Google Home Mini を使ってみた

M5Stack

Espressif Systems社の ESP32 を搭載した、WiFi & Bluetooth マイコンモジュールです。
LCD ディスプレイ、micro SD カードスロット、押しボタンスイッチ、簡易バッテリー、スピーカー、Groveコネクタ等、必要な物全部入りです。
個人的にレビューした以下の記事も参照ください。

M5stack ( ESP32 搭載 ) を分解したり電源を入れてみて、いろいろ思ったこと

M5Stack用電池モジュール(オプション)

M5Stack 純正バッテリーの場合、数十分しか駆動できませんが、このオプションのバッテリーモジュールを使うと3~4時間まで駆動可能となります。
LCD 明るさを暗くする(例えば 255から50に落とす)と、4~5時間まで駆動できたりします。
その他、ディープスリープを使えばもっと長持ちするらしいです。

BME680搭載 空気品質、温湿度、気圧センサモジュール ( I2C 用)

私は、スイッチサイエンスさんで販売している pimoroni製の BME680 モジュールを使いました。
I2C用です。
Amazon でもスイッチサイエンスさんでも現在品切れ状態が続いているので、要注意です。

これについては以下の記事を参照してください。

M5Stack ( ESP32 )で、ガス・気圧・温度湿度センサ BME680 を使ってみた

micro SDHC カード

フリーの日本語フォント東雲フォントや、私の自作 UTF-8 → Shift_JIS コード変換テーブルファイルを保存しておくために使います。

micro SDXC や普通の micro SDカードでは動作しない可能性があります。
micro SDHC カードを使った方が無難です。
また、極力大手メーカー製をお勧めします。

当方で動作確認が取れているカードは以下になります。

単線ジャンパーワイヤ

φ0.65mm の単線で、ブレッドボードに挿せるものを使います。

WiFi環境

インターネットに接続された2.4GHz帯 Wi-Fiルーター環境が必要です。
M5Stack の ESP32 が接続できるように、事前にファイアウォールやMACアドレスフィルタリング設定を済ませておいてください。
ESP32 の MAC アドレスの確認方法は以下の記事を参照してください。

ESP-WROOM-32 ( ESP32 ) チップ・メモリ・MACアドレス情報取得方法

その他、パソコン、ハンダコテ、USBケーブル等

では、次の項ではライブラリ等のインストる方法を説明します。

スポンサーリンク


mgo-tec電子工作 関連コンテンツ ( 広告含む )

投稿者:

mgo-tec

Arduino , ESP32 ( ESP-WROOM-32 ) , ESP8266 ( ESP-WROOM-02 )等を使って、主にスマホと連携した電子工作やプログラミング記事を書いてます。ライブラリも作ったりしてます。趣味、独学でやってますので、動作保証はしません。 電子回路やプログラミングの専門家ではありません。 畑違いの仕事をしていて、介護にドップリ浸かりそうな年配者です。 少しだけ電気の知識が必要な仕事なので、電気工事士や工事担任者等の資格は持っています。

コメントを残す

メールアドレスが公開されることはありません。

*画像の文字を入力してください。(スパム防止の為)

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください