Tornar o servidor NTP da placa incorporada para placas Arduino na sub-rede

7

Eu tenho uma placa incorporada em que a distribuição é uma distribuição Linux personalizada baseada no Yocto.

Eu adicionei ntpe via ntpdsincronizarei o tempo com os pools ntp comuns via dongle UMTS 3G ou Ethernet.

Esta placa, juntamente com algumas placas PoE ESP32 da Olimex, são conectadas através de um switch não gerenciado.

Objetivo

As placas ESP32 possuem sensores que coletam informações, adicionam um carimbo de data e hora e enviam para o InfluxDB em execução na placa principal incorporada via Ethernet, tornando-a uma rede de sensores com fio. Essas placas ESP32 também possuem um RTC DS3231, portanto, desejo que eles primeiro tirem um tempo de um servidor NTP em execução nesta placa incorporada para sincronizar o RTC e depois enviar informações ao InfluxDB.

Questões

  1. Como alguém cria um servidor NTP na Placa Incorporada? Posso adicionar uma linha no ntp.confarquivo que possa ser usada para acelerar um servidor, por exemplo, no servidor NTP em 192.168.4.11? Usando esse endereço IP no meu código do arduino, posso solicitar os carimbos de data e hora

  2. No caso de teste, se de alguma forma eu configuro um servidor NTP na Placa Incorporada, como posso testar inicialmente o tempo decorrido? Existe um utilitário de linha de comando para pesquisar o servidor NTP e verificar se a hora está correta ou não em um computador comum?

Shan-Desai
fonte
11
Eu sei que a pergunta tem uma resposta aceita, mas eu também consideraria a precisão dos carimbos de data e hora e se não seria mais simples enviar os dados das placas ESP32 sem um carimbo de data e hora e adicioná-los na página principal. borda. Pessoalmente, como geralmente armazeno meus dados no MySQL ou SQLite, deixo o banco de dados cuidar disso declarando uma coluna como algo semelhante time_stamp TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP. A menos que eu precise de precisão de microssegundos, o código do banco de dados já está escrito e bem depurado; por que codificar meus próprios erros?
Mawg diz que restabelece Monica

Respostas:

4

Descrição precisa para a consulta

Sincronização de hora NTP inicial

  1. No sistema de compilação Yocto, conf/local.confadicione ntpreceita da seguinte maneira:

     IMAGE_INSTALL_append = " ntp"
    
  2. No quadro de destino, interrompa o systemdserviço inicialmente :

     systemctl stop ntp
    
  3. Supondo que a placa esteja conectada à Internet:

      ntpd -gq
    

    Info : Verifique o tempo usandodate

  4. Para o lado seguro, sincronize também o relógio do hardware com o horário NTP:

     hwclock -w --localtime
    
  5. Reinicie o systemdserviço

     systemctl start ntp
    

Configurar um servidor NTP local na placa incorporada

  1. Interrompa o systemdserviço:

     systemctl stop ntp
    
  2. Edite /etc/ntp.confpara fazer a placa incorporada transmitir os carimbos de data / hora NTP na porta 123. Adicione a seguinte linha:

     # 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. Reinicie o systemdserviço:

    systemctl start ntp
    

Alcançando o sincronismo de tempo com os nós dos sensores

  1. Supondo que se tenha placas que possam ser programadas com o Arduino; faça o download da NTPClientbiblioteca do Arduino.

  2. No seu Sketch, use o NTPClientconstrutor para conectar-se ao servidor NTP local por meio do endereço IP

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

e obtenha os registros de data e hora do servidor NTP local

Referências

Shan-Desai
fonte
1

Para responder à sua primeira pergunta, apontarei para esta resposta do Ubuntu:

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

É específico do Ubuntu, mas deve apontar na direção certa para quais pacotes procurar no Yocto.

para o segundo, ntpdate <ip address of ntp server>pode ser usado para consultar um servidor ntp para a data.

hardillb
fonte