Rust+RaspberryPi Pico+ETH+GPSモジュールで通信をする

開発
この記事は約3分で読めます。

そうだ通信を始めよう

ETH モジュール

今まではデバイスを使う形でサンプルになりそうなものを書いていました。

しかしデータのやり取りはデバックプローブによるログを取り出すぐらいしかできませんでした

そこで前より気になっていたETHモジュールを買ってみました

実際にはETHモジュールとRaspberryPiPicoとSPIで接続されている結合モジュールです。

Ethenet通信できるのとPoEモジュールを追加することでPoE受電できます。

意外にもAliexpressあたりだと売っていなくて秋月電子で売っていました。

W5500-EVB-Pico-PoE: 開発ツール・ボード 秋月電子通商-電子部品・ネット通販
電子部品,通販,販売,半導体,IC,LED,マイコン,電子工作W5500-EVB-Pico-PoE秋月電子通商 電子部品通信販売
WIZPoE-P1: 開発ツール・ボード 秋月電子通商-電子部品・ネット通販
電子部品,通販,販売,半導体,IC,LED,マイコン,電子工作WIZPoE-P1秋月電子通商 電子部品通信販売

一応RP2350でも対応しています。

W5500-EVB-Pico2: 開発ツール・ボード 秋月電子通商-電子部品・ネット通販
電子部品,通販,販売,半導体,IC,LED,マイコン,電子工作W5500-EVB-Pico2秋月電子通商 電子部品通信販売

実装コード

今回は3つのファイルに分割されました(ほぼAIで書いたので)

GitHub

GitHub - zinntikumugai/raspberrypi-pico-eth_wiznet_rs
Contribute to zinntikumugai/raspberrypi-pico-eth_wiznet_rs development by creating an account on GitHub.

ざっと仕組みとしてembassyによる非同期処理を実装しています。

embassyのタスクとしてインターフェースの初期化、DHCPの受け取り、TCPサーバーの初期化を行います

TCPサーバーでは各エンドポイントごとにレスポンスを返す様になっています。

HTTP1.0の応答ですが、軽い情報の返すぐらいなら大丈夫ですね。

GPSモジュール

GitHub - zinntikumugai/raspberrypi-pico-eth_wiznet_gps_rs
Contribute to zinntikumugai/raspberrypi-pico-eth_wiznet_gps_rs development by creating an account on GitHub.

前回のePaper同様にGPSモジュールを取り付けられるHATがあります

Raspberry Pi Pico用GNSSモジュール: 開発ツール・ボード 秋月電子通商-電子部品・ネット通販
電子部品,通販,販売,半導体,IC,LED,マイコン,電子工作Raspberry Pi Pico用GNSSモジュール秋月電子通商 電子部品通信販売

GPSモジュールでは衛星からの電波を元に現在の位置情報や時刻を取得してUARTで応答します。

なのでUARTに流れてくるテキストをひたすらパースすれば現在値と時刻を取れます。

窓辺などは拾いは悪いですが使ってみると6衛星ぐらいは取れてました。

NTPサーバー

GitHub - zinntikumugai/raspberrypi-pico-ntp_server_rs
Contribute to zinntikumugai/raspberrypi-pico-ntp_server_rs development by creating an account on GitHub.

ETHモジュールとGPSが使えるようになったのであとはNTPサーバーを作れますね

NTPは基準となる時計(原子時計など)と接続しているのをstratum 0として、そこからマイクロ秒以内に同期している物をstratum 1、ネットワークを通して同期している物をstratum 2となります。

一般的によくあるNICTなどのNTPサーバーと宅内社内に置くNTPサーバーが必然とstratum 2になります。

一般的には問題はありませんが、ネットワーク越しに同期するという特性上精度が落ちます。

そこでGPSから受けてしまえばええやんという方向ですね。

一応GPSであれば60ms程度なのでギリstratum 1でしょうか

ようやくやりたいことはできたのですが、ほとんどAIに実装させたので何だかなーという気持ち

 

コメント