NUCLEO-F302R8 wifi IPv6 UDP送信
NUCLEO-F302R8からUDPでデータを送信します。
HW構成
UDPサーバは開発PCで作成します。
SW構成
ソケット
FreeRTOS TCPのソケットAPIを使用します。
以下の公式ページを参考にしました。
https://www.freertos.org/FreeRTOS-Plus/FreeRTOS_Plus_TCP/Networking_Tutorial_Sending_UDP_Data.html
シーケンス
sequenceDiagram
%% participant
participant taskAppSendUdp
participant Socket
participant IPTask
participant NetworkInterface
%% main
taskAppSendUdp->>Socket: create socket
taskAppSendUdp->>Socket: bind socket
Socket->>+IPTask: send IP event(eSocketBindEvent)
loop Every secounds
taskAppSendUdp->>Socket: send udp
Socket->>+IPTask: send IP event(eStackTxEvent)
IPTask->>+NetworkInterface: send ethernet frame
end
UDPサーバ
サーバはFlutterを使いました。RawDatagramSocketというライブラリでUDPサーバを作成できます。
Flutterはクロスプラットフォームに対応していますが、WebアプリだとRawDatagramSocketが対応していませんでした。私はWindows向けにビルドして動作確認を行いました。
ソースコード
- UDPクライアント
- UDPサーバ
動作確認
サーバIPアドレスの確認
私はwindows10のノートPCで開発しています。このノートPCのリンクローカルアドレスIPv6アドレスを確認します。サーバとクライアントのソースコードはここで確認した値を設定しています。
結果
Wiresharkでキャプチャした結果です。fe80::1235がクライアントのIPアドレスです。サーバにUDPのデータを送信する前にNeighbor DiscoveryでサーバのMACアドレスを解決しています。
サーバでUDPのデータを受け取れました。