サブネット内のArduinoボード用の組み込みボードNTPサーバーを作成する


7

組み込みボードがあり、そのディストリビューションはYoctoベースのカスタムLinuxディストリビューションです。

追加しましたがntpntpdUMTS 3Gドングルまたはイーサネットを介して、一般的なntpプールと時刻を同期します。

このボードは、Olimex製の一部のESP32 PoEボードとともに、非管理スイッチを介して接続されます。

目的

ESP32ボードにはセンサーがあり、情報を収集してタイムスタンプを追加し、イーサネットを介してメインの組み込みボードで実行されているInfluxDBに送信して、有線センサーネットワークにします。これらのESP32ボードにはRTC DS3231も搭載されているので、まずこの組み込みボードで実行されているNTPサーバーからRTCを同期するための時間を取得してから、InfluxDBに情報を送信します。

ご質問

  1. エンベデッドボード上にNTPサーバーを作成するにはどうすればよいですか?ntp.confたとえばNTPサーバーでサーバーをステップアップするために使用できる行をファイルに追加できます192.168.4.11か?ArduinoコードでこのIPアドレスを使用して、タイムスタンプを要求できます

  2. テストの場合、組み込みボードにNTPサーバーを設定した場合、最初にサーバーからの時間をどのようにテストできますか?NTPサーバーをポーリングし、通常のコンピューターで時刻が正しいかどうかを確認するコマンドラインユーティリティはありますか?


1
質問には受け入れられた回答があることはわかっていますが、タイムスタンプがどれほど正確である必要があるか、またタイムスタンプなしでESP32ボードからデータを送信してメインに追加するのが簡単ではなかったかどうかも検討しました。ボード。個人的には、通常、MySQLまたはSQLiteにデータを保存するため、のような列を宣言することで、データベースに処理を任せていますtime_stamp TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP。マイクロ秒の精度が必要でない限り、データベースコードは既に作成され、適切にデバッグされています。なぜ自分のバグをコーディングするのですか?
Mawgはモニカを2018

回答:


4

クエリの正確な説明

最初のNTP時刻同期

  1. Yoctoビルドシステムで、次のようconf/local.confntpレシピを追加します。

     IMAGE_INSTALL_append = " ntp"
    
  2. ターゲットボードで最初にsystemdサービスを停止します。

     systemctl stop ntp
    
  3. ボードがインターネットに接続されていると仮定します。

      ntpd -gq
    

    情報:時間を確認してくださいdate

  4. 安全のため、ハードウェアクロックをNTP時刻に同期します。

     hwclock -w --localtime
    
  5. systemdサービスを再起動します

     systemctl start ntp
    

組み込みボードにローカルNTPサーバーをセットアップする

  1. systemdサービスを停止します。

     systemctl stop ntp
    
  2. を編集/etc/ntp.confして、組み込みボードがポート123でNTPタイムスタンプをブロードキャストするようにします。次の行を追加します。

     # Here the IP Address could that of your board but make sure to use
     # Broadcast address (x.x.x.255) and if you have a larger network
     # select your subnet masks accordingly
     broadcast 192.168.1.255 
    
  3. systemdサービスを再起動します。

    systemctl start ntp
    

センサーノードでのtimesyncの実現

  1. Arduinoでプログラムできるボードがあると仮定します。NTPClientArduino Libraryをダウンロードしてください。

  2. スケッチで、NTPClientコンストラクターを使用して、IPアドレスを介してローカルNTPサーバーに接続します

    NTPClient timeServer(ntpUDP, "192.168.1.123", 0, 60000);
    

ローカルNTPサーバーからタイムスタンプを取得する

参考文献


1

あなたの最初の質問に答えるために、私はこのAsk Ubuntuの答えを指摘します:

/ubuntu/14558/how-do-i-setup-a-local-ntp-server

これはUbuntu固有ですが、Yoctoで検索するパッケージについて正しい方向を示しているはずです。

2番目ntpdate <ip address of ntp server>は、日付をntpサーバーに照会するために使用できます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.