Modulo RTC i2c ds3231 su Raspberry Pi 3 con Fedora 27

Da lumacawiki.
La versione stampabile non è più supportata e potrebbe contenere errori di resa. Aggiorna i preferiti del tuo browser e usa semmai la funzione ordinaria di stampa del tuo browser.

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)]}