NUCLEO-F302R8 wifi IPv6 UDP送信

NUCLEO-F302R8

NUCLEO-F302R8からUDPでデータを送信します。

HW構成

UDPサーバは開発PCで作成します。

HW構成

SW構成

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向けにビルドして動作確認を行いました。

ソースコード

動作確認

サーバIPアドレスの確認

私はwindows10のノートPCで開発しています。このノートPCのリンクローカルアドレスIPv6アドレスを確認します。サーバとクライアントのソースコードはここで確認した値を設定しています。

リンクローカルアドレスの確認

結果

Wiresharkでキャプチャした結果です。fe80::1235がクライアントのIPアドレスです。サーバにUDPのデータを送信する前にNeighbor DiscoveryでサーバのMACアドレスを解決しています。

動作確認結果 Wireshark

サーバでUDPのデータを受け取れました。

動作確認結果 Flutter

以上