Go Down

Topic: Shield DS 3231 RTC, gestire ora legale (Read 3009 times) previous topic - next topic

ziopippo

#15
Apr 09, 2018, 08:55 pm Last Edit: Apr 10, 2018, 10:15 am by ziopippo
Piccolo aggiornamento:

Non capisco perchè con il codice postato non riesco in alcun modo a risincronizzare il modulo all'ora UTC corretta
Code: [Select]
rtc.adjust(DateTime(2018, 4, 9, 18, 10, 0));

Correggendo però l'ora usando altre librerie e codici sono riuscito a correggere l'orario su UTC e ricaricando poi il codice in questione ottengo finalmente l'ora UTC (2 ore prima) impostando su
Code: [Select]
DateTime now = rtc.now();
e l'orario corrente (con il fuso orario a +1 per l'italia e l'ora l'egale a +1 quindi come dice il caro Guglelmo tutto a due ore in più ;)  impostando su
Code: [Select]
DateTime now = getLocalTime();

Ora resta il dilemma sul perchè non riesca a correggere l'orario con questo codice :(

Dubito dipenda dal fatto che oltre al modulo DS1302 ho collegato alla I2C anche un LCD; Ho provato a staccarlo e ricaricare lo sketch con la correzione dell'orario e non l'ha accettata ugualmente...

Come mai secodo voi?

Altra domanda, posso settare
Code: [Select]
DateTime future (now + TimeSpan(7, 30, 00, 6)); in modo da simulare una data con l'ora solare per verificarne il giusto funzionamento?

zoomx

#16
Apr 10, 2018, 12:33 pm Last Edit: Apr 10, 2018, 12:34 pm by zoomx
https://github.com/JChristensen/Timezone
L'ora dell'RTC va sempre messa in UTC, quindi configuri quale fuso orario usare e la libreria ti converte l'orario UTC in quello attuale tenendo conto di orario invernale e estivo.

Per l'RTC usa la TimeLib.

Il modulo DS1302 ha però un errore variabile a seconda della qualità del modulo. Io ne ho avuto uno che perdeva 30 secondi al giorno. Il DS3231 è meglio.

ziopippo

Garzie per
https://github.com/JChristensen/Timezone
L'ora dell'RTC va sempre messa in UTC, quindi configuri quale fuso orario usare e la libreria ti converte l'orario UTC in quello attuale tenendo conto di orario invernale e estivo.

Per l'RTC usa la TimeLib.

Il modulo DS1302 ha però un errore variabile a seconda della qualità del modulo. Io ne ho avuto uno che perdeva 30 secondi al giorno. Il DS3231 è meglio.
Ottimo grazie lo proverò ;)
Non sapevo del problema del DS1302 altrimenti acquistavo altro. A questo punto considerando che devo mettere qualche tasto per settare alcune opzioni, credo che sia conveniente prevedere anche un cambio dell'ora manuale...

zoomx

Prevedi qualcosa per sistemare l'orologio, di solito va ma se succede qualcosa di imprevisto....
Se però c'è la possibilità di una WiFi ti consiglierei di realizzare il tutto con un ESP8266 e di prendere l'ora con il protocollo NTP, usando sempre le librerie TimeLib e Timezone ma con un RTC software.
Se però la WiFi non è garantita, ad esempio se manca per più giorni, allora non conviene usare un RTC software ma sempre un DS3231, magari sempre con ESP8266.

Ma dipende dal progetto.

ziopippo

All'inizio avevo previsto di usare solo una WEMOS poi però ho riflettuto meglio ed ho optato per un RTC Hardware perchè il tutto andrà in un'abitazione di un amico che di arduino ne sa meno di zero. Se dovesse pertanto sostituire il router (come gli è già capitato) sarebbe difficoltoso aggiornare il SSID, password ecc.

Ho provato a compilare alcuni esempi della libreria Timezone (con una nano) ma ricevo alcuni errori e devo capire ancora come risolverli.

zoomx

#20
Apr 10, 2018, 04:49 pm Last Edit: Apr 10, 2018, 04:54 pm by zoomx
C'è una libreria per gli ESP8266 che permette la configurazione di SSID e password attraverso un server web sull'ESP8266. Puoi usare più configurazioni contemporaneamente. Ancora non l'ho usata (mentre TimeLib e Timezone si!)
https://github.com/tzapu/WiFiManager
Secondo la descrizione funziona così:
Prima prova a connettersi a WiFi conosciute (cioè configurate prima), se non ne trova o se non è mai stato configurato mette su un Access Point cui ti coleghi, apri il browser a 192.168.4.1 (ma si può cambiare) ed esegui il procedimento analogamente a molti dispositivi WiFi esistenti.

La libreria Timezone richiede l'uso della TimeLib che va inclusa come TimeLib.h e non come Time.h a causa di doppie definizioni, vedi nelle issue, non ricordo se di TimeLib o Timezone. Entrambe si installano da library manager.

Edit: usando la TimeLib il codice è praticamente uguale sia con RTC software che hardware, cambia solo la dichiarazione iniziale. Quella software però non ha gli allarmi di quella hardware né altre sofisticherie.

ziopippo


Go Up