買ってきたばかりの初めてのM5stack(M5Go)をWebの記事を参照しながら設定してなかなか思うように通信できなくて困った話を記録します。
#はじめに
##やりたかったこと
M5stack上で取得したセンサのデータをmosquito(MQTT)を使ってWifi経由でubuntu上に構成したNode-REDで受信したかった。
##結局は
結論から行くと"wifi connect"を入れることでAppモード時もネットワークにつながるようになりました。
##環境
- M5GO: ファームウェアバージョンV1.8.4
- env2センサ: M5GOに接続して気圧,気温,湿度を取得
- UIflow: V1.8.4(同じローカルのネットワークに存在するWindowsのFirefoxからhttps://flow.m5stack.com/にアクセス)
- mosquitto: ブローカーホスト:ローカルネットワーク上のubuntuで稼働
- Node-RED: ローカルネットワーク上のubuntuでDocker内で稼働
- MQTTX: Version: v1.6.0 Windowsにインストール
#mosquitoの準備
ubuntuにmosquittoを設定します。
$ sudo apt install mosquitto mosquitto-clients #mosquittoをインストール
$ mosquitto #mosquittoブローカーの起動
#mosquittoの動作確認
ubuntuとWindowsの間で試しにメッセージを送信して動作を確認します。
ubuntu上のターミナルを新規に立ち上げてからサブスクライブを開始します。
$ mosquitto_sub -d -t topicA
WindowsのMQTTクライアントはMQTTXを利用しました。
ダウンロードの後インストールして起動します。
+ボタンを押してNEWを開きます。
- Name: 任意の接続名称
- Client ID: 自動割り当てのままで可
- Host: ブローカーのIPアドレスを入力
- 右上のConnectを押して接続を保存します。
- New Subscriptionを押して登録画面を出します。
- Topic: ubuntu上でサブスクライブしたときのトピック名"topicA"を入力します。
- Confirmを押して登録します。
- 赤枠のところにトピック名"topicA"を入力します。
- 右下の送信ボタンを押します。
ubuntu上のターミナルに送信した内容が表示されてMQTTが動いていることは確認できました。
#Node-REDの準備
Dockerを使ってNode-REDを準備します。
$ docker run -it -p 1880:1880 --name mynodered nodered/node-red
2回目以降なら
$ docker start mynodered
Firefoxからhttp://127.0.0.1:1880にアクセスしてNode-REDに入ります。
ネットワークから"mqtt inノード"を配置してデバッグノードにつなぎます。
- サーバ: ブローカーのIPアドレスまたはホスト名
- トピック: トピック名(今回はtopicA)
#Node-REDまでの接続確認
WindowsのMQTTXから送信ボタンを押してNode-REDのデバッグメッセージが出ることを確認します。
#M5stack(M5GO)の準備
ブラウザからhttps://flow.m5stack.com/にアクセスします。
API Keyを聞かれますのでM5stack上に表示されるKeyを入力してUIflowからスケッチを描きます。
おもむろにRunを押します。
書き込み成功!
画面にも測定結果が表示された!
#繋がらない...
画面には測定結果が更新されていますし、動いているようだけれどもMQTTはうんともすんとも言わない。
開発元の動画、Youtubeの海外の方が上げてる動画、Google画像検索どれみても問題なさそうに見えました。
UIflowをクラウド経由で利用できているのだからネットワークにつながってないなんて思いもしてません。
2時間ほどの格闘の末AppモードでWifiが起動してない可能性に気が付きおうちのルーターの接続状況を見に行きます。
M5GOちゃんは接続リストに居ませんせんでした。
インターネットモードでUIflow利用中など接続中には"esp-XXXXXXXX"という名前でつながっています。
それらしいブロック"wifi connect(log in lcd true)"を"Network"から見つけました。
配置します。
"wifi connect(log in lcd true)"の場所はSetupのすぐあとの方がよいかもしれません。
"log in lcd"はお好みでfalseでも問題ないです。Wifi接続中の画面がLCD画面に出るか出ないかだけです。
そしてRun
あっさり成功。
#参考にさせていただいた情報源様
https://qiita.com/macole/items/c59dd0ef4b62f8253712
https://qiita.com/NWLab/items/cb3f434705708c40755b
https://take6shin-tech-diary.com/mqtt/