M5Stackシリーズについて学習中。
先日は自宅のWi-Fi通信を使い、IFTTTを使ってM5StickCのボタンを押すとLINEへの通知が飛ぶ仕組みを作りました。
この記事の中で、「2代のM5製品同士を繋げられないかな?」ということを書いていたら、Twitterのフォロワーさんからやり方を教えていただきました。ありがとうございます!
LINE通知も面白いですよね!あと通信周りだと2個で通信するESP nowというのがありますが、ネット無い環境でリモコンに便利っす
— 大井 泰徳 (@OiYasunori) 2023年1月6日
そんな訳で今回は、M5Stack同士でローカル通信をやってみたので、その内容についてまとめてみました。
制作したモノ
2台のM5製品を使用します。今回は以下の製品を使用しました。
- ①送信側:M5StickC Plus
- ②受信側:M5Stack BASIC
今回制作したモノは、①送信側のM5StickCのボタンを押すと、もう一台の②受信側のM5Stackがその情報を受け取り、画面表示で知らせてくれる、という仕組みです。
実際にボタンを押して通信している様子はこちら。
ESP-NOWによるM5製品同士の通信について
M5製品同士の通信についてはいくつかやり方があるようですが、その中でも今回は「ESP-NOW」という通信方法を試しています。
ESP-NOWはESP32(M5製品に内蔵されているマイコン)の機器同士が無線でデータを送受信できる通信方法です。
Wi-Fiルーターを経由せずに直接機器のmacアドレスを指定してデータを送信できるため、とても手軽にデータの送受信ができるようです。無線通信の中でも原始的でローカルな通信方法、といったところでしょうか。
通信速度が速く消費電力も低いというのがメリットである一方、距離が離れると通信できなかったりエラー検知が難しいというデメリットがあるようです。
参考リンク
制作の流れ
ESP-NOWを使ってM5製品同士で直接通信を行う場合は、UIFlowを使ったビジュアルプログラミングのみで実装できます。
以前の記事でHTTP通信を行った時はIFTTTなどの外部アプリを触る必要がありましたが、今回のような通信方法にすればとても手軽なのがわかります。
ただしこの通信方法を使う場合は、受信側のM5製品のmacアドレスを事前に調べる必要があります。
以前はUIFlowにESP-NOWのブロードキャスト通信というものを行うブロックがあり、それを使えばmacアドレスを指定する必要がなかったようですが、2023年1月現在はこのブロックが無くなってしまっているようですね。
あとややこしいのが、デバイス同士のやりとりにはインターネット通信は必要ありませんが、UIFlowを使ったM5製品へのプログラムの書き込みはインターネットを介して行っているため、デバイスとWi-Fiを接続する必要はあります。
受信側のプログラム
受信側のmacアドレスを調べるのにちょっと一工夫が必要ですね。
このような感じでmacアドレスを表示するためのラベルを作成し、ESP-NOWの機能でそのラベルにアドレスを表示してあげる必要があります。
ESP-NOWの機能を使うためのブロックは、「高度なブロック」の中の「EspNow」に入っています。
そして受信した時には、画面を黄色で点滅するようにしてみます。こんなプログラムです。
送信側のプログラム
次に、送信側のプログラムです。ここでは先ほどと同じようにmacアドレスを表示していますが、実際には送信側のmacアドレスは必要はありません。
「EspNow add peer〜」のブロックで、送信先のmacアドレスを指定しています。
そしてボタンA(デバイス下部の大きなボタン)を押すと通信を行い、送信が完了した際にはLEDが点灯して知らせてくれるように、ブロックを組み立てます。
やってみた感想
UIFlowでESP-NOWを扱うやり方は、2022年の4月以降のどこかでブロックが変わっているようで、調べてもほとんどそれ以前の情報しか出てこなかったため、結構苦戦してしまいました。
ただ、Wi-Fiネットワークを使わないで通信ができるのは使い勝手が良いように思います。
部屋が離れていたり直線距離に壁があると通信できなのんでは?という懸念もありましたが、実際やってみると家の中で結構距離を離しても通信ができたようです。どこまでいけるんでしょうかね?
このほかにもWi-FiネットワークやBluetoothを使った通信、またMQTTという通信方法もあるようで、それぞれ使ってみて比較してみたいですね。
おわりに
さて、今回はM5製品同士でESP-NOWというローカル通信を行ってみました。
通信についてはまだ理解が浅くて、あまりうまくまとめられた気がしませんね…。
まあ今の時点では「こんなこともできるんだ」というのがわかったので良しとしましょう。引き続き学習を続けてみたいと思います。