Uso NTPClient per timer Arduino

Ciao ragazzi,
stavo provando a verificare uno sketch trovato in rete che attraverso il collegamento ad internet via WIFI recupera l'ora e la data...
L'ora mi serve per controllare una serra e comandare lo spegnimento e/o accensione delle luci.

La domanda che mi ponevo però è la seguente...
Se la connessione ad internet cade o è assente, per qualche tempo, come potrei fare a recuperare comunque questa informazione ad esempio sfruttando un timer interno di arduino?

Attualmente sto usando un DS1302 ma non è affidabilissimo...

#include <NTPClient.h>
  #include <ESP8266WiFi.h>
  #include <WiFiUdp.h>
  
  const char *ssid     = "xxxxx";
  const char *password = "yyyyyy";
  
  const long utcOffsetInSeconds = 7200;
  
  char daysOfTheWeek[7][12] = {"Domenica", "Lunedì", "Martedì", "Mercoledì", "Giovedì", "Venerdì", "Sabato"};
  
  // Define NTP Client to get time
  WiFiUDP ntpUDP;
  NTPClient timeClient(ntpUDP, "pool.ntp.org", utcOffsetInSeconds);
  
  void setup() {
    Serial.begin(115200);
  
    WiFi.begin(ssid, password);
  
    while ( WiFi.status() != WL_CONNECTED ) {
      delay ( 500 );
      Serial.print ( "." );
    }
  
    timeClient.begin();
  }
  
  void loop() {
    timeClient.update();
  
    Serial.print(daysOfTheWeek[timeClient.getDay()]);
    Serial.print(",");
    Serial.print(timeClient.getHours());
    Serial.print(":");
    Serial.print(timeClient.getMinutes());
    Serial.print(":");
    Serial.println(timeClient.getSeconds());
    //Serial.println(timeClient.getFormattedTime());
  
    delay(5000);
  }

In conformità al REGOLAMENTO , punto 7, cortesemente edita il tuo post qui sopra (quindi NON scrivendo un nuovo post, ma utilizzando il bottone a forma di piccola matita :pencil2: che si trova in basso del tuo post), seleziona TUTTA la parte di codice e premi l'icona </> nella barra degli strumenti per contrassegnarla come codice.

Inoltre, così com'è, non è molto leggibile ... assicurati di averlo correttamente indentato nell'IDE prima di inserirlo (questo lo si fa premendo ctrlT su un PC o cmd T su un Mac all'intero del IDE). Per maggiori informazioni ... punto 17.2 del succitato regolamento. Grazie.

Guglielmo

P.S.: Ti ricordo che, purtroppo, fino a quando non sarà sistemato il codice, nel rispetto del suddetto regolamento nessuno ti risponderà, quindi ti consiglio di fare il tutto al più presto. :wink:

Spero di aver sistemato.

Perfetto ! :slight_smile:

Guglielmo

No, la precisione è inferiore a quella di un RTC esterno, piuttosto ... usa un RTC serio ... DS3231 e vedrai che non avrai più problemi di precisione :wink:

Guglielmo

P.S.: Ho DS3231 che NON rimetto da anni e ancora sono più che precisi (± 10 secondi).

Quindi non c’è nessuno modo per memorizzare in un “Timer software” il dato e usarlo nel caso NTP non funzioni?

Beh, visto che stai usando ESP8266 ... la libreria <time.h> (che fa parte delle librerie di base e NON la devi installare con il Library Manager) offre funzioni di sincronizzazione automatica ed aggiornamento del "tempo" in modo autonomo solo ... in assenza prolungata di Internet, non ti aspettare la precisione di un RTC come il DS3231.

Guglielmo

Dipende anche da quanto durano le disconnessioni da internet e se queste inficiano l'impianto stesso.
Dipende anche da quanto sia "inaffidabile" il DS1302. Potrebbe bastare acquistare un RTC migliore.

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.