Wio Terminal用Ethernet HATに使うつもりのW5500(WIZnet社製)ですが、マルチキャスト通信を行うには注意が必要ということがわかりました。
結論としては、マルチキャスト受信とユニキャスト送信が必要な場合、ソケットを2つ使う必要があるようです。
ググったところ、こちらの情報(can’t receive multicast packet and respond)にも同様のことが書かれていました。
検討中の用途はEchonet Lite向けなのですが、マルチキャスト通信とユニキャスト通信が必要となります。
- 起動時にマルチキャストグループ(224.0.23.0)に参加する。
- 一斉送信データを送ってきた相手に応答する。(マルチキャスト受信&ユニキャスト送信)
- 自IP宛てのデータ取得&設定要求に応答する。(ユニキャスト受信&ユニキャスト送信)
- 一斉送信するプロパティを持つ場合もある。(マルチキャスト送信)
Arduino向けEchonetLiteライブラリとEthernet3ライブラリの組み合わせで実験していたのですが、どうにも挙動が変です。
具体的には、ユニキャストによる応答送信ができず、マルチキャスト送信になってしまいます。
W5500をマルチキャスト対応でソケットオープンする際、マルチキャストアドレスとポート(EchonetLiteの場合、224.0.23.0/3610)を設定します。このときに設定するレジスタがユニキャスト送信時に使われるレジスタが同じものになっているのが原因のようです。
W5500のマルチキャストについての説明でも「Since the user sets the information about multicast-group at SOCKET initialization, user does not need to set IP address and port number for destination any more.(ユーザーはSOCKETの初期化時にマルチキャストグループに関する情報を設定するため、宛先のIPアドレスとポート番号を設定する必要がなくなります)」と書かれています。
必要がないというか、実験の結果では設定しても反映されませんでした。なので、そのソケットを使って送信すると、必ずマルチキャスト送信になってしまいます。
対策としては、マルチキャスト用とは別のソケットを用意し、ユニキャスト送信を行うときはそのソケットを使うようにする必要があるようです。(受信側は、マルチキャスト用ソケットでマルチキャスト・ユニキャストの両方に対応)
「W5500のマルチキャストの挙動に注意」への2件の返信
Hello,
The link of W5500 multicast description was moved to “https://docs.wiznet.io/Product/iEthernet/W5500/Application/udp#multicast”.
Thank you for your comment. Fixed the link.