0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

ESP-NOWのブロードキャスト,マルチキャスト

Last updated at Posted at 2024-11-25

はじめに

ESP-NOWで一対多の通信を行う方法を紹介します.

環境

複数のESP32を使用します.
実装はMicroPython1.22.1で行いました.

ブロードキャスト

受信可能な全ての機器に対してデータを送信します.
図に表すと以下のようになります.
image.png

送信側は以下のプログラムです.

broadcast.py
import network
import espnow

sta = network.WLAN(network.STA_IF)
sta.active(True)
sta.disconnect()

e = espnow.ESPNow()
e.active(True)
peer = b'\xbb\xbb\xbb\xbb\xbb\xbb' #送信先設定
e.add_peer(peer) #送信先追加

e.send(peer, "Hello World") #データ送信
e.send(peer, b'end') #通信終了

送信先をb'\xbb\xbb\xbb\xbb\xbb\xbb'にすることで受信可能な全ての機器に対してデータを送信することができます.
実行すると送信側に以下のように出力されます.
image.png

受信側は以下のプログラムです.
受信側のプログラムはブロードキャストでもマルチキャストでも同様です.

receive.py
import network
import espnow

sta = network.WLAN(network.STA_IF)
sta.active(True)
sta.disconnect()

e = espnow.ESPNow()
e.active(True)

while True:
    host, msg = e.recv() #データ受信
    if msg:
        print(host, msg) #受信データ出力
        if msg == b'end': #通信終了
            break

実行すると受信側に以下のように出力されます.
image.png

マルチキャスト

指定した複数の機器に対してデータを送信します.
図に表すと以下のようになります.
image.png
この図では赤丸で囲んだESP32を送信先として示しています.
赤丸で囲んでいない機器は送信先ではないので送信されません.
送信側は以下のプログラムです.

multicast.py
import network
import espnow

sta = network.WLAN(network.STA_IF)
sta.active(True)
sta.disconnect()

e = espnow.ESPNow()
e.active(True)
peer1 = mac1 #送信先設定
e.add_peer(peer1) #送信先追加
peer2 = mac2 #送信先設定
e.add_peer(peer2) #送信先追加

e.send(None, "Hello World") #データ送信
e.send(None, b'end') #通信終了

mac1,mac2の部分を送信先のmacアドレスに変えてください.
e.send()の第一引数をNoneにするとe.add_peerで追加した全ての対象にデータを送信することができます.
実行すると送信側に以下のように出力されます
image.png

受信側は以下のプログラムです.
受信側のプログラムはブロードキャストでもマルチキャストでも同様です.

receive.py
import network
import espnow

sta = network.WLAN(network.STA_IF)
sta.active(True)
sta.disconnect()

e = espnow.ESPNow()
e.active(True)

while True:
    host, msg = e.recv() #データ受信
    if msg:
        print(host, msg) #受信データ出力
        if msg == b'end': #通信終了
            break

実行すると受信側に以下のように出力されます.
image.png

送信対象でないデバイスはreceive.pyを実行しても以下のように何も受信しません.
image.png

最後に

拙いですが助けになれば幸いです.

参考

0
0
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?