Hacer Embedded Board NTP Server para placas Arduino en la subred

7

Tengo una placa integrada donde la distribución en ella es una distribución de Linux personalizada basada en Yocto.

He agregado ntpy ntpdsincronizaré el tiempo con los grupos ntp comunes, ya sea a través de dongle UMTS 3G o Ethernet.

Esta placa junto con algunas placas ESP32 PoE de Olimex están conectadas a través de un conmutador no administrado.

Propósito

Las placas ESP32 tienen sensores que recopilan información, les agregan una marca de tiempo y las envían al InfluxDB que se ejecuta en la placa integrada principal a través de Ethernet, lo que la convierte en una red de sensores con cable. Estas placas ESP32 también tienen un RTC DS3231, así que quiero que primero obtengan el tiempo de un servidor NTP que se ejecuta en esta placa integrada para sincronizar el RTC y luego enviar información a InfluxDB.

Preguntas

  1. ¿Cómo se crea un servidor NTP en la placa integrada? ¿Puedo agregar una línea en el ntp.confarchivo que pueda usarse para intensificar un servidor con, por ejemplo, un servidor NTP en 192.168.4.11? Usando esta dirección IP en mi código arduino, puedo pedir las marcas de tiempo

  2. En caso de prueba, si de alguna manera configuro un servidor NTP en la placa integrada, ¿cómo puedo probar inicialmente el tiempo que viene de él? ¿Existe una utilidad de línea de comando para sondear el servidor NTP y ver si la hora que viene es correcta o no en una computadora normal?

Shan-Desai
fuente
1
Sé que la pregunta tiene una respuesta aceptada, pero también habría considerado cuán precisas deben ser las marcas de tiempo y si no hubiera sido más sencillo enviar los datos de las placas ESP32 sin una marca de tiempo y agregarlos en la página principal tablero. Personalmente, dado que generalmente almaceno mis datos en MySQL o SQLite, dejo que la base de datos se encargue de mí declarando una columna similar time_stamp TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP. A menos que necesite precisión de microsegundos, el código de la base de datos ya está escrito y bien depurado; ¿Por qué codificar mis propios errores?
Mawg dice que reinstale a Mónica el

Respuestas:

4

Descripción precisa de la consulta

Sincronización inicial de hora NTP

  1. En el sistema de compilación Yocto en conf/local.confagregar ntpreceta de la siguiente manera:

     IMAGE_INSTALL_append = " ntp"
    
  2. en el tablero de Target inicialmente detenga el systemdservicio:

     systemctl stop ntp
    
  3. Suponiendo que la placa esté conectada a Internet:

      ntpd -gq
    

    Información : Verifique el tiempo usandodate

  4. Para el lado seguro, también sincronice el reloj de hardware con la hora NTP:

     hwclock -w --localtime
    
  5. Reiniciar el systemdservicio

     systemctl start ntp
    

Configurar un servidor NTP local en la placa integrada

  1. Detener el systemdservicio:

     systemctl stop ntp
    
  2. Edite el /etc/ntp.confpara hacer que la placa integrada transmita las marcas de tiempo NTP en el puerto 123. Agregue la siguiente línea:

     # 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. Reiniciar el systemdservicio:

    systemctl start ntp
    

Lograr sincronización de tiempo con nodos de sensor

  1. Suponiendo que uno tenga tableros que se puedan programar con Arduino; Descargue la NTPClientBiblioteca Arduino.

  2. En su Sketch use el NTPClientconstructor para conectarse a su servidor NTP local a través de su dirección IP

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

y obtener las marcas de tiempo del servidor NTP local

Referencias

Shan-Desai
fuente
1

Para responder a su primera pregunta, apuntaré a esta pregunta a Ubuntu:

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

Es específico de Ubuntu, pero debería indicarle en la dirección correcta qué paquetes buscar en Yocto.

para el segundo, ntpdate <ip address of ntp server>se puede usar para consultar la fecha en un servidor ntp.

hardillb
fuente