DEV Community

Cover image for Acionamento do motor de acordo com a hora.
Henrique Machado Broseghini
Henrique Machado Broseghini

Posted on

5 1

Acionamento do motor de acordo com a hora.

Deixarei o repositório do projeto aberto para que vocês possam utilizar também.

Bibliotecas adicionadas:

#include <NTPClient.h>
Enter fullscreen mode Exit fullscreen mode

O NTP(Protocolo de Tempo para Redes), é o padrão que permite a sincronização dos relógios dos dispositivos de uma rede. Além do protocolo de comunicação em si, o NTP define uma série de algoritmos utilizados para consultar os servidores, calcular a diferença de tempo e estimar um erro, escolher as melhores referências e ajustar o relógio local.

Associações entre dispositivos:

Permanentes: são criadas por uma configuração ou comando e mantidas sempre. Este é o tipo de associação recomendável para se trabalhar em aplicações do dia a dia.

Priorizáveis: são específicas da versão 4 do NTP e criadas por uma configuração ou comando, podem ser desfeitas no caso de haver um servidor melhor, ou depois de um certo tempo.

Efêmeras ou transitórias: são criadas por solicitação de outro dispositivo NTP e podem ser desfeitas em caso de erro ou depois de um certo tempo.

Estou utilizando a permanente.

Resolvi utilizar esse método pois, ao tentar fazer usando a biblioteca ctime, que gera uma struct com os dados de dias e horas não estava funcionando.

Ao ser utilizado junto ao esp32 ele não recebia a hora, pois essa estrutura recebe a hora do computador em que esta sendo executado.

Por esse motivo decidi receber as informações direto via internet.

Pelo site NTP.br, e usando o link dentro da função timeClient.

Código para acionamento do motor:

void ligaHora(void) {
    WiFiUDP ntpUDP;
    NTPClient timeClient(ntpUDP, "a.st1.ntp.br", -3 * 3600, 6000);
    int horas = timeClient.getHours();
    int minutos = timeClient.getMinutes()+ 10;

    Serial.printf("\nHora: %i ", horas);
    Serial.printf("\nMinutos: %i ", minutos);

    if ((horas == 7 && minutos == 0)) {
        digitalWrite(PIN_LED, HIGH);
        Serial.println("\nAcendeu");
        delay(9000);
        digitalWrite(PIN_LED, LOW);
        delay(60000);
    };
}
Enter fullscreen mode Exit fullscreen mode

Dentro da função timeClient, é passado como parâmetro, o, o site em será pego as informações, a mudança de fuso horário.

Logo em seguida é criado as variáveis inteiras horas e minutos recebendo respectivamente seus valores pela função getHours e getMinute. Somei mais 10 (dez) nos minutos, para diminuir a diferença entra a hora adquirida com a hora local. Pode ter está diferença de acordo com o servidor.

Imprimo os mesmos para ter uma noção de como estão.

Logo em seguida faço o código que ira acionar o motor. Quando o horario for igual a 7 horas e 0 minutos, ele ligará e desligara depois de 9 segundos. Ficará em espera por 1 (um) minuto para que não se acione novamente.

Chamo a função ligaHora dentro da função loop:

void loop() {
    VerificaConexoesWiFIEMQTT();

    MQTT.loop();
    ligaHora();

    delay(2000);
}
Enter fullscreen mode Exit fullscreen mode

Essa função loop chama as outras funçãos de verificação, mqtt e ligar o motor a cada 2 (dois) segundos.

Image of Docusign

🛠️ Bring your solution into Docusign. Reach over 1.6M customers.

Docusign is now extensible. Overcome challenges with disconnected products and inaccessible data by bringing your solutions into Docusign and publishing to 1.6M customers in the App Center.

Learn more

Top comments (0)

A Workflow Copilot. Tailored to You.

Pieces.app image

Our desktop app, with its intelligent copilot, streamlines coding by generating snippets, extracting code from screenshots, and accelerating problem-solving.

Read the docs