現時点の情報です。最新情報はM5StickC非公式日本語リファレンスを確認してみてください。
概要
ESP32の通信方式をどう選べばいいのかをかんたんにまとめてみました。M5StickCとタイトルに書きましたが、内容的にはすべてESP32に関することです。
ESP32の無線ユニット
ESP32は2.4GHz帯の通信ユニットしか搭載していません。しかし2.4GHzは人が多いところなどで使うと、なかなか通信ができませんので注意してください。
Wi-Fi無線LAN(2.4G)
ESP32のWi-Fiは2.4GHz帯のみですので注意してください。5GHzのWi-Fi無線LANを使うことはできません。
Bluetooth(2.4G)
Wi-Fiの他にBluetoothも搭載しています。
接続形態
どのような通信相手と通信をするのかで、接続形態を選ぶ必要があります。
1対1
多くの場合、通信相手と事前にペアリングをしておき、接続した2台で通信を行う方式です。事前にペアリングをしておく手間がかかりますが、一度接続すれば安定して通信が可能です。ただし、ペアリング操作をする場合に、周りに人が多いと失敗することが多いです。
1対多(親子関係)
一台が親となり、他の端末が親に接続する子になる通信方法です。親のみインターネットに接続されており、子のセンサー情報などを親に集める場合などに利用されています。
クライアント(全員子)
Wi-Fiアクセスポイントなどに接続し、一般的な無線LAN的に利用する方式です。無線LANが存在する家庭内などでは一般的な通信方式となります。電波状況の悪いところの場合には、通信が不安定になりやすいです。
見通し通信
トランシーバーなどのように、電波が届く範囲に送信をします。受信側は電波が届いたときに相手先を見て、不要は通信は無視します。原始的な通信方式ですが、単純な処理のため電波状況が悪い場合でも通信ができる可能性があります。
メッシュ
複数の端末間で見通し通信を行い、受信したデータが自分宛てでない場合には、再送することで直接通信できない距離の端末間でも通信することが可能です。
無線LANが使えない屋外の環境などで使われることがありますが、それほど一般的ではありません。
通信プロトコル
代表的な通信プロトコルを紹介します。Wi-FiかBluetoothかはあまり意識する必要はありません。ただしBluetoothは見通し範囲での通信しかできません。Wi-FiはWi-Fiアクセスポイントなどを利用すれば、インターネットなどの見通し外通信も可能です。
BluetoothSerial(Bluetooth)
Bluetoothを利用して、Serialを行います。1対1でしか通信ができませんが、一番かんたんに文字列などのデータを送受信することが可能です。1対1ですので通信待ちをする子と、接続をする親の役割があります。
接続待ち側(子)
ESP32で待受をして、パソコンから接続している例です。パソコンと通信するのであれば一番かんたんな通信方式です。
パソコンなどからBluetoothの追加をすることで、通常のシリアルポートとして通信をすることができるようになります。
接続側(親)
他の接続待ちしている子に対して、接続する親側のサンプルです。ESP32同士で通信をする場合などに利用します。あまり一般的な用途ではありませんが、文字を無線で通信するのは非常にかんたんに利用できます。
接続先のMACアドレスが接続の際に必要となりますので、そのMACアドレスをどう設定するのかは用途に応じて考える必要があります。
Bluetooth Low Energy(Bluetooth)
BLEとも表記される通信方式です。Bluetoothと通常書くとこの方式です。しかしながら、なかなか難しいプロトコルで、あまりおすすめしません。
こちらも1対1ですので通信待ちをする子と、接続をする親の役割があります。
接続待ち側(子)
ESP32で待受をして、パソコンから接続している例です。ESP32側はキーボードやマウス、MIDIなどさまざまなデバイスとして待受をすることができます。
パソコンなどからBluetoothの追加をすると、ESP32で待ち受けているデバイスとして認識されます。比較的メジャーなデバイスとして待受をするのであれば情報があるので、作りやすいです。
接続側(親)
他の接続待ちしている子に対して、接続する親側のサンプルです。ESP32同士でも接続は可能ですが、他のプロトコルのほうが楽に通信できることが多いと思います。
この方式の場合には、子がどのような動作をするのかが重要で、世の中にはいろいろなデバイスがあり、結構動きが違うので検証しながら動かす必要があります。そして資料がなかなかないデバイスがあるので苦労します。
Bluetoothメッシュ(Bluetooth)
BLEでそのように動くプロトコルを自分で実装することで可能ですが、ESP32では一般的ではありません。
Wi-Fi無線LAN(Wi-Fi)
一般的なWi-Fi無線LANを利用した通信です。情報も比較的多いので使いやすいです。Wi-Fiの場合にはWi-Fiアクセスポイントに接続する必要があります。ESP32自体をWi-Fiアクセスポイントにすることも可能です。
Wi-Fiアクセスポイントモード(APモード)
softAPという機能をつかって、Wi-Fiアクセスポイントとの機能を提供できます。softAPを提供している場合には、Webサーバー機能も提供している場合が多いですが、機能的には別のものですので、個別に必要な機能のみを提供できます。
Wi-Fiステーションモード(STAモード)
Wi-Fiアクセスポイントに接続するステーションモードです。一番基本的なモードです。
Wi-Fi混合モード(AP STAモード)
Wi-FiアクセスポイントモードとWi-Fiステーションモードは同時に動かすことができます。あまりよい例はなかったので、wifi_ap_staで検索してみてください。
接続するルーターなどのWi-Fiアクセスポイントの情報を、ESP32のソフトアクセスポイント経由で設定するなどの用途が多いです。
Wi-Fiアクセスポイントの設定方法は上記にまとまっているので、こちらも参考にしてください。
ESP-NOW(Wi-Fi)
ESP-NOWはESP32やESP8266などで利用できる、独自プロトコルの通信方式です。特徴としてはBluetoothのように事前にペアリングする必要がなく、Wi-Fi無線LANのようにアクセスポイントも必要ありません。
相手のMACアドレスを指定して、直接データを送信します。見通し通信で、近くにいる範囲内で通信をするのは非常にかんたんに利用が可能です。
ただし、小さいデータ向けの通信方式で、データが届くかの保証もないので、Wi-Fi無線LANなどのほうが高速通信には向いています。
親子関係は特になく、相手のMACアドレスを指定して送信するか、まわり全員に送信するかのみになります。自分宛ての通信はすべて受信しますので、不要なデータも受信してしまうので送信元を見てから処理をする必要があります。
ESP-Mesh(Wi-Fi)
こちらもESP系のみの独自プロトコルです。複数台のESPでメッシュネットワークをかんたんに構築することができますが、あまり普及していません。通常はESP-NOWかWi-Fi無線LANを利用したほうがよいと思います。
プロトコルのまとめ
プロトコル | 役割 | 難易度 | 備考 |
BluetoothSerial | 子 | 低 | パソコンとの接続はこれ |
BluetoothSerial | 親 | 中 | あまり使わない |
BLE | 子 | 中 | やりたいことありき |
BLE | 親 | 高 | 相手次第では地獄 |
Wi-Fi無線LAN | AP | 中 | 常用はおすすめしません |
Wi-Fi無線LAN | STA | 中 | 一般的な方法 |
ESP-NOW | – | 低 | かなりお手軽 |
用途別おすすめ
パソコンとかんたんに通信したい
BluetoothSerialでESP32側が待受です。非常にかんたんに接続することができます。送受信はテキストになるので、数字などもprintfなどで送信して、受信時にもパースする必要があります。
ESP32同士でかんたんに通信したい
ESP-NOWをおすすめします。小さいデータしか送信できませんが、かんたんに送受信ができます。
インターネット接続したい
Wi-Fiステーションモードで、ちゃんとしたWi-Fiルーターのアクセスポイントに接続してください。
Wi-Fiアクセスポイントがないところで通信したい
ESP-NOWがおすすめです。Wi-Fi無線LANのAPモードは、あまり通信が安定しない気がしますので、ちょっとした設定ぐらいであれば問題がありませんが、安定しての通信をしたいのであれば安くても専用のWi-Fiルーターなどを準備したほうがおすすめです。
注意点
電波状況の悪い場所の場合
人が多い場所などは電波状況が悪くなりやすくなります。50人以上がいるような場所だとかなり接続に時間がかかったり、失敗するようになりやすいです。
BLEなどの新規ペアリングも周りに人数が多いと、ずらりと表示されるのでペアリング先を見つけるまで大変だったり、なかなかペアリングしません。
展示会や人が集まるセミナーなどで利用する場合には、事前にペアリングまで済ませておくと、比較的接続がしやすくなります。
Wi-Fi接続も、アクセスポイントへの接続が失敗しやすくなりますので注意してください。
Wi-Fi無線LANもBluetoothSerialもBLEも、電波状況が悪いと使えないぐらいのイメージでいたほうがいいです。ESP-NOWは比較的電波状況が悪くても近距離だと通信ができるイメージです。
根本的にはWi-FiやBluetoothで使っている2.4GHzの周波数は混雑してしまうので、920MHzなどの他の周波数帯の無線ユニットやLTEなどを利用したほうが安全です。
電子レンジに注意
電子レンジが利用しているのが2.4GHzです。Wi-FiやBluetoothで使っている周波数帯と同じなのですが、これはそもそも電子レンジが2.4GHzに対してノイズを出しているので、他の用途に使えない事情がありました。
その後、全世界であまり使われていない周波数帯域としてWi-Fiなどでも使うようになりました。そのため電子レンジが近くで使われると、その影響で通信ができなくなります。
電子レンジが近くにある環境で通信する場合には、利用できない時間帯があることを前提に構築したほうが安全です。
まとめ
ESP32の無線はパソコンやスマホなどと比べると弱いので注意してください。特に人が多いところだとなかなか使えないので、展示会や発表会などたくさんの人に見てほしい環境では動かなくなるのでハマりやすいです。
LTE M1/NB1がもう少し安く提供されるようになればモジュールも安いので使いやすいのですが、いまはちょっと通信すると通信料が普通のLTEより高くなるので使いにくいです。
コメント