Modulo RTC i2c ds3231 su Raspberry Pi 3 con Fedora 27
Se non è già stato fatto, vedi Display_OLED_i2c_su_Raspberry_Pi_3_con_Fedora_27, creiamo un gruppo che possa avere il diritto di accedere ai device i2c senza avere bisogno dei permessi di root, e aggiungiamo il tuo utente a questo gruppo
$ sudo groupadd i2cuser $ sudo usermod $USER -G i2cuser -a
Creiamo una regola UDEV, così che i device i2c sotto /dev
vengano creati con il gruppo e i permessi giusti
$ echo "SUBSYSTEM==\"i2c-dev\", GROUP=\"i2cuser\", MODE=\"0660\"" | sudo tee /etc/udev/rules.d/50-i2c.rules
Usciamo dalla sessione corrente e rientra.
Installiamo il pacchetto i2c-tools
$ sudo dnf install i2c-tools
Verifichiamo che l'adattatore i2c sia visibile dal sistema
$ i2cdetect -l -a
L'output dovrebbe essere qualcosa del genere:
i2c-1 i2c bcm2835 I2C adapter I2C adapter i2c-2 i2c bcm2835 I2C adapter I2C adapter i2c-0 i2c bcm2835 I2C adapter I2C adapter
Colleghiamo il modulo RTC al Raspberry:
GND -> pin 39
VCC -> pin 1
SCL -> pin 5
SDA -> pin 3
Carichiamo il modulo rtcd-ds1307
(a quanto pare è compatibile con il device ds3132)
modprobe rtc-ds1307
Facciamo in modo che venga caricato all'avvio
echo rtc-ds1307 | sudo tee /etc/modules-load.d/rtc.conf
Creiamo il device i2c (?)
echo ds3231 0x68 > /sys/class/i2c-adapter/i2c-1/new_device
Verifichiamo che l'orologio sia funzionante con il comando
hwclock -r
Impostiamo la data e l'ora giuste sul Raspberry (meglio sarebbe con ntpdate)
sudo date -s "08 NOV 2017 23:00:00"
Quindi impostiamo la data e l'ora di sistema anche nel device RTC
sudo hwclock -w
Se cambiamo la data di sistema
sudo date -s "26 OCT 1985 01:22:00"
Possiamo verificare che l'RTC ha mantenuto l'ora esatta
date hwclock -r
Possiamo poi riallineare l'ora del Raspberry con quella dell'RTC
sudo hwclock -s
E anche in questo caso facciamo che venga il tutto venga creato dopo il reboot. In /etc/rc.d/rc.local
#!/bin/bash echo ds3231 0x68 > /sys/class/i2c-adapter/i2c-1/new_device hwclock -s exit 0
Il comando hwclock -s
Rendiamolo eseguibile, così systemd lo esegue all'avvio (vedi sudo systemctl edit --full rc-local)
chmod +x /etc/rc.d/rc.local
Il device RTC ds3231 monta anche un sensore di temperatura, che può essere letto da shell
cat /sys/devices/platform/soc/3f804000.i2c/i2c-1/1-0068/hwmon/hwmon0/temp1_input
oppure
cat /sys/class/hwmon/hwmon0/temp1_input
Infatti il nome del device corrisponde a quello creato in precedenza
cat /sys/class/hwmon/hwmon0/name
Da Python possiamo leggere la temperatura utilizzando psutil
>>> import psutil >>> psutil.sensors_temperatures() {'ds3231': [shwtemp(label=, current=22.0, high=None, critical=None)]}