Il Raspberry, a differenza dei PC desktop o portatili tradizionali, non ha una batteria tampone. Questo significa che quando spegnete il vostro PC, alla riaccensione troverete l’orario di sistema aggiornato in tempo reale. Se invece spegnere un Raspberry e lo riaccendete dopo 10 minuti, il suo orologio interno NON sarà subito aggiornato. Il Raspberry infatti utilizza NTP (Network Time Protocol) recuperando la data e ora direttamente da internet.
Quindi nel caso abbiate il Raspberry collegato in rete con accesso ad internet, il suo orologio interno verrà aggiornato in automatico pochi istanti dopo il boot. Nel caso il collegamento ad internet non sia presente, l’orologio resterà errato.
Nel caso abbiate installato delle applicazioni che necessitino un valore veritiero della data/ora, questo ritardo di sincronizzazione della data al boot, o addirittura assenza di sincronizzazione, potrebbe causare problemi alla raccolta/elaborazione dei dati da parte della vostra app stessa.
Per ovviare a questo problema quindi, andremo ad installare un piccolo componente hardware in grado di mantenere sempre attivo il clock grazie ad una piccola batteria tampone, emulando di fatto ciò che fanno già le schede madri dei PC.
Questo componente è un modulo RTC DS3231, e lo andremo ad installare su un Raspberry Pi 3 B+, ma la guida è valida anche per Raspberry 4.
Link all’acquisto: https://amzn.to/2Vry4ZM
Il modulo va installato come in figura, nei pin 1,3,5,7,9:
Andiamo ad abilitare il modulo I2C digitando tramite SSH:
sudo raspi-config
Spostiamoci nella tab Interfaces ed abilitiamo I2C. Successivamente riavviamo:
sudo reboot
Al riavvio scriviamo:
sudo i2cdetect -y 1
Dovrebbe apparire una schermata come la seguente cui viene riportato il numero 68 (oppure una coppia di U):
Successivamente scriviamo in sequenza i seguenti comandi:
sudo modprobe rtc-ds1307
sudo bash
echo ds1307 0x68 > /sys/class/i2c-adapter/i2c-1/new_device
exit
Controlliamo l’ora del modulo RTC:
sudo hwclock -r
Se è la prima volta che avviate questo comando, probabilmente vedrete una data molto retrodatata. A questo punto fate in modo che il Raspberry si colleghi ad internet per sincronizzarsi e digitate:
date
Per verificare la data. Se è corretta, sincronizziamo il modulo RTC con:
sudo hwclock -w
Ora andiamo ad istruire il Raspberry di utilizzare il modulo RTC ad ogni boot. Digitiamo:
sudo nano /etc/modules
e aggiungiamo questa stringa alla fine del file:
rtc-ds1307
Salviamo.
Ora digitiamo:
sudo nano /etc/rc.local
e aggiungiamo queste 2 righe prima di exit 0:
echo ds1307 0x68 > /sys/class/i2c-adapter/i2c-1/new_device
sudo hwclock -s date
Salviamo.
Per la prova del nove ora possiamo spegnere il nostro router, staccare la spina del Raspberry e attendere qualche minuto. Riaccendere il Raspberry e dare il comando:
date
Se viene restituito un valore coerente con la data/ora reale significa che il modulo funziona a dovere.
Ora non avrete più problemi con le vostre applicazioni che richiedevano un dato accurato di data/ora in caso di mancanza di internet/riavvio del Raspberry!