正月前半のUDPの基礎実験から、いけそうなので、UDP対応の新しいシステムを正月に組立ました。
●いけそうだと感じた理由
いけそうな理由1:UDPと言えば、データ落ちが問題になりますが、確かに数m離れるとデータ落ちが0.1%以上発生しますが、30cmとか体に装着した場合の至近距離以内では0.016%と桁違いにデータ落ちが減少しました。
いけそうな理由2:BNO085とRTK F9Pセンサデータ合計344byte/100msecの容量だと数msecでUDP転送できてしまうので、システム全体の負荷にならないので、マイコン側にSDカードログをさせないでもよくなった。
いけそいうな理由3:PCVisualStudio C#でのプログラムがUDPはシンプルなコードで作れるし、受信動作が速いのでプログラム全体が作り易い。受信が速いので、Consoleアプリのほうが毎回のログデータが見られます。
●今までのUDPがらみの記事
2024年1月6日 |
【STA24】UDP採用でシステムを断捨離その1<Teensy廃止ESP32のみでトライ> |
SPIをやめてESP32単独でも1Mbps程度 |
2024年1月1日 |
【正月実験】SPI->UDP無線送信速度実験<SPI+UDPで1.4Mbpsまで落ちた> |
SPIとUDPが同居するとESP32の速度低下が著しい |
2024年12月31日 |
【STA24】SPIマイコン間通信その1<4.6Mbpsまで出たがばらつく> |
ESP32へデータ転送する速度アップでSPIを使ってみた |
2021年7月19日 |
【M5】WiFi UDPを初めていじってみた<めっちゃ速い> |
マイコン間の UDP通信初めてやった |
●今回の試作
昨日は、GNSS RTK F9Pのデータ172バイトをESP32でログしてUDP経由で、PCへ転送するところまででしたが、本日は、BNO085のデータをログして、RTKデータと時間同期させてからUDP経由でPCへ転送するプログラムをつくりました。更に、PCのC#のプログラムをCONSOLEアプリに変更して、高速表示するようにしました。
●ESP32のBNO085プログラムの備忘録
BNo085のUART RCVモードで最小限のIMUデータだけをログしてます。Adafruitのライブラリーは使わずに
垂れ流しの100Hzのデータから、ヘッダ0xaa,0xaaを検出してデータ配列にため込みます。UDP送信周期は、
100msecなので、10個データたまったらまとめてUDP送信します。この場合RTKのデータとは別に送信します。同期は、GNSSボードからGPSのタイムパルス信号が1秒ごとに正確に入るので、EPS32のピン割り込みでマイコンの時刻と合わせて、真の時刻とデータ受信した時の時刻の差を記録して整理してからUDP送信します。BNOのデータは真の時刻から2~6msecくらいずれてますが、ずっとそのズレ時間を維持したままですので、周期10msecは、正確にでてます。GNSSのRTKデータが遅延が大きく50-60msec真の時刻から遅れてますので、GNSSのデータだけは、いろいろなばらつきを想定して扱うので、単独送信としました。
●ESP32 UDP送信時間
GNSS RTK172ByteのUDP送信時間は、350-700μsecと大きくばらつきます。速度換算で、3.44Mbpsとなります。昨日の測定では1400μsecだったので、何か大きくばらつく原因がありそうです。
いずれにせよ、ESP32のUDPは、1Mbps以上で送信できるのは間違いないです。
ちなみにGNSS RTK172ByteのSerial1 115200bps受信時間が2110μsecですので、
全ループ10msecには未だ余裕があるので、410800bpsまでアップしなくてもいけそうです。
●PCのC#コンソールプログラム
DOBONネット様のサンプルをコピーさせていただきました。バイナリ表記の部分だけオリジナルです。
プログラムの設定、PCのIPアドレスとポート番号をEPS32のプログラムと合わせておきます。
ここでは、PCが192.168.0.9 ポート10000 ESP32が192.168.0.11 ポート5000です。
ポケットWiFi120kbpsの遅いSIMのルーターで接続してますが、3Mbps程度はでてます。
インターネットが120kbpsと遅いですが、ローカルネットワークでは、2.4GHzのWiFiの速度でます。
●プログラムコードはGISTにあります。
ESP32:https://gist.github.com/dj1711572002/983941876f84d2ee07d4abd8eaf926d3
C#ソース:https://gist.github.com/dj1711572002/18c040b1c7941464403aa772ecafa79f
●以後
試作から実装基板でのESP32eモジュールへ実装して動作試験していきます。