Erstellen Sie einen eingebetteten Board-NTP-Server für Arduino-Boards im Subnetz

7

Ich habe ein Embedded Board, auf dem die Distribution eine benutzerdefinierte Linux-Distribution ist, die auf Yocto basiert.

Ich habe hinzugefügt ntpund über werde ntpdich die Zeit mit den gängigen NTP-Pools entweder über UMTS 3G Dongle oder Ethernet synchronisieren.

Diese Karte ist zusammen mit einigen ESP32 PoE-Karten von Olimex über einen nicht verwalteten Switch verbunden.

Zweck

Die ESP32-Karten verfügen über Sensoren, die Informationen erfassen, einen Zeitstempel hinzufügen und diese über Ethernet an die InfluxDB senden, die auf der eingebetteten Hauptkarte ausgeführt wird, wodurch sie zu einem kabelgebundenen Sensornetzwerk werden. Diese ESP32-Karten haben auch eine RTC DS3231, daher möchte ich, dass sie zuerst die Zeit von einem NTP-Server erhalten, der auf dieser eingebetteten Karte ausgeführt wird, um die RTC zu synchronisieren und dann Informationen an die InfluxDB zu senden.

Fragen

  1. Wie erstellt man einen NTP-Server auf dem Embedded Board? Kann ich der ntp.confDatei eine Zeile hinzufügen, mit der ein Server für z. B. einen NTP-Server umgeschaltet werden kann 192.168.4.11? Mit dieser IP-Adresse in meinem Arduino-Code kann ich nach den Zeitstempeln fragen

  2. Wenn ich im Falle eines Tests einen NTP-Server auf der eingebetteten Karte einrichte, wie kann ich dann zunächst die daraus resultierende Zeit testen? Gibt es ein Befehlszeilenprogramm, mit dem Sie den NTP-Server abfragen und feststellen können, ob die kommende Zeit auf einem normalen Computer korrekt ist oder nicht?

Shan-Desai
quelle
1
Ich weiß, dass die Frage eine akzeptierte Antwort hat, aber ich hätte auch darüber nachgedacht, wie genau die Zeitstempel sein müssen und ob es nicht einfacher gewesen wäre, die Daten von den ESP32-Karten ohne Zeitstempel zu senden und am Haupt hinzuzufügen Tafel. Da ich meine Daten im Allgemeinen in MySQL oder SQLite speichere, lasse ich die Datenbank dies für mich erledigen, indem ich eine Spalte wie die folgende deklariere time_stamp TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP. Sofern ich keine Mikrosekundengenauigkeit benötige, ist der Datenbankcode bereits geschrieben und gut getestet. Warum meine eigenen Fehler codieren?
Mawg sagt, Monica

Antworten:

4

Genaue Beschreibung für die Abfrage

Anfängliche NTP-Zeitsynchronisation

  1. Im Yocto-Build-System unter Rezept wie folgt conf/local.confhinzufügen ntp:

     IMAGE_INSTALL_append = " ntp"
    
  2. auf der Zielplatine beenden Sie zunächst den systemdDienst:

     systemctl stop ntp
    
  3. Angenommen, das Board ist mit dem Internet verbunden:

      ntpd -gq
    

    Info : Zeit mit prüfendate

  4. Synchronisieren Sie zur Sicherheit auch die Hardware-Uhr mit der NTP-Zeit:

     hwclock -w --localtime
    
  5. Starten Sie den systemdDienst neu

     systemctl start ntp
    

Richten Sie einen lokalen NTP-Server auf der eingebetteten Karte ein

  1. Beenden Sie den systemdDienst:

     systemctl stop ntp
    
  2. Bearbeiten Sie das /etc/ntp.conf, damit die eingebettete Karte die NTP-Zeitstempel an Port 123 sendet. Fügen Sie die folgende Zeile hinzu:

     # 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. Starten Sie den systemdDienst neu:

    systemctl start ntp
    

Zeitsynchronisation mit Sensorknoten erreichen

  1. Angenommen, man hat Boards, die mit Arduino programmiert werden können; Laden Sie die NTPClientArduino Library herunter .

  2. Verwenden Sie in Ihrer Skizze den NTPClientKonstruktor, um über seine IP-Adresse eine Verbindung zu Ihrem lokalen NTP-Server herzustellen

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

und erhalten Sie die Zeitstempel vom lokalen NTP-Server

Verweise

Shan-Desai
quelle
1

Um Ihre erste Frage zu beantworten, werde ich auf diese Antwort von Ask Ubuntu verweisen:

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

Es ist Ubuntu-spezifisch, sollte aber in die richtige Richtung weisen, nach welchen Paketen auf Yocto gesucht werden soll.

Zum zweiten ntpdate <ip address of ntp server>kann ein NTP-Server nach dem Datum abgefragt werden.

hardillb
quelle