HATを使って温度・湿度・気圧データをセンサーから取得して、取得したデータを無料で使えるIoTサービスCayenneで視覚化するスケッチを作ってみました。M5Stick-CはWi-Fi機能やGPIO、I2Cが使えるEPS32マイコンモジュールを内蔵したIoT向けの製品で日本国内でもスイッチサイエンスなどから購入できます。M5Stick-CのWi-Fiモジュールはメーカーで技適も取得済みなので日本国内でも合法的に安心して使うことができます。LiPoバッテリーと小さい中に色々と詰め込まれています。Cポートが1つ、8ピンのGPIOポートがあります。HATには温度・湿度センサーDHT-12、3軸磁界センサーBMM150、気圧センサーBMP280の3つのセンサーが搭載され、I2C経由でこれを利用することができます。IDEを使ってみました。IDEの「ファイル」->「環境設定」から「追加のボードマネージャのURL:」にURLhttps://dl.espressif.com/dl/package_esp32_index.jsonを追加します。IDEを起動して変更を反映させます。IDEメニューの「ツール」->「ボード:〜」->「ボードマネージャ...」(メニューの一番上)を選んでボードマネージャを起動します。Systems」を探してこれをインストールします。ボードマネージャで追加ボードマネージャーが読み込まれると「ツール」->「ボード:〜」->「ボードマネージャ...」メニューの中に「M5Stick-C」の選択肢が現われるのでこれを選択します。M5StickC」をインストールします。今回のスケッチを作成するための叩き台としてM5Stack-Cのボードマネージャーと共にインストールされるExample中のENV.inoを使います。HATに搭載された各種センサーから読み取った値をM5Stick-CのLCDディスプレイへと表示するだけですが、これに各種情報をCayenneへと送信するロジックを追加します。HATのサンプルスケッチENV.inoが入っているフォルダを丸ごと作業ディレクトリへとコピーしてこれを修正していくことにします。Githubから最新版をダウンロードしてインストールするようにスケッチのコメントに指示されていたのでこれを別途ダウンロードします。done.また、各種センサーから取得した情報をCayenneへとWi-Fiネットワーク経由で送信するためにCayenne-MQTT-ESPライブラリが必要になります。APへの接続手順を別途スケッチへと実装する必要がありますが、M5Stick-Cの場合にはM5Stick-Cで使われているマイコンモジュールESP32-PICO-D4にWi-Fiモジュールが搭載されているのでCayenne-MQTT-ESPライブラリをインクルードするだけでWi-Fiを使っての通信を利用することができます。APへの接続や暗号化通信もCayenneサーバーへの接続と同時に行うことができるので簡単です。フォルダ以下にダウンロードしてインストールします。HATから取得した情報を可視化するのに無料で利用できるIoTネットワークCayenneのサービスを利用するのでWebブラウザでCayenneのホームページへとアクセスしてアカウントの登録を行ないます。アカウントを登録済みの場合には既存のアカウントを使ってCayenneへとサインインしてください。Thing」を選んでプロジェクトを開始してください。Transport)プロトコル1が使われます。IDEのスケッチ中の該当箇所にそれぞれ設定します。DHT-12や気圧センサーBMP280、3軸磁界センサーBMM150から読み取った情報をCayenneへと送信する為のスケッチは以下のようになります。APのSSIDとパスワードを設定します。APは2.4GHz帯(802.11b/g/n)のアクセスポイントにしか接続できないので注意が必要です。"YOUR_MQTT_CLIENTID_HERE";スケッチのコンパイルと実行スケッチのコンパイルが終わり、バイナリがM5Stick-Cへと転送され実行が始まるとM5Stick-CのLCDに温度、湿度、コンパスの方位情報、気圧などが表示され、同時に情報がCayenneのサーバーへと送信されます。MQTTサーバーとの接続が正常に開始されると以下の様に各チャンネルのセンサーの情報がダッシュボードに表示されるのでそれぞれのデバイスパネルの「+」をクリックして情報を受け入れます。ダッシュボード上のデバイスパネルやウィジェットはマウスでドラッグして配置や大きさを調整することができます。HATのサンプルコードからの主な変更点は以下の通りです。<CayenneMQTTESP32.h>Cayenne-MQTT-ESPライブラリをインクルード措定ます。MQTTサーバーとの通信やEPS32のWi-Fiモジュールを使ったWi-Fiアクセスポイントへの接続を行なうために必要です。MQTTサーバーへの接続情報を追加しています。MQTTサーバーへと接続します。Cayenne.loop();オリジナルのサンプルコードではメインループの中で各種センサーからの情報の取得とLCDパネルへの値の表示を行なっていましたが、ここではCayenneライブラリのループマネージャーCayenne.loop();を呼び出してCayenneのでフィルとのビジネスロジックが呼び出されるようにします。元々のメインループの中にあったロジックはCayenneライブラリのループマネージャーから呼び出されるCAYENNE_OUT_DEFAULT()(129行目から)に移動します。MQTTサーバーに温度・湿度の情報を送信します。1番目のパラメータは情報を識別するためのチャンネルIDでCayenneのダッシュボードに表示するデバイスパネル毎に異なった番号を指定する必要があります。MQTTサーバーに送信するセンサーからの値です。3番目は情報の種類を指定します。4番目は情報の単位を指定します。情報の種類や単位はインストールしたCayenne-MQTT-ESPライブラリのヘッダーファイルlibraries/Cayenne-MQTT-ESP//src/CayenneUtils/CayenneTypes.hで以下のような値が定義されていました。Cayenneのダッシュボードではここで適切なパラメーターが指定されていればアイコンや情報表示の設定を適切に処理してくれるようです。UNIT_HECTOPASCAL);172行目、オリジナルのサンプルコードではセンサーから取得した気圧(Pa=パスカル)をそのまま使っていましたが、より一般的だと思われるヘクトパスカルにするために値を100分の1しています。MQTTサーバーに送信へと送信しています。MQTTサーバーからその情報が送信されてきます。アプリケーションでは受け取ったチャンネルIDrequest.channelや値getValueを元にこれを適切に処理するようにします。upLoginユーザーは見つかりませんでした。