Projet: Avoir un RTC sur raspberry pi et l’utiliser au boot (startup)
I.Module RTC ds3231
1.Connecter le module i2c au raspberry pi
2.régler l’heure du module ds3231
-Installation des paquets
1 2 |
sudo apt-get update sudo apt-get install ntp -y |
-Connecter le rapsberry pi au réseau
-Vérifier la date et le temps avec:
1 |
date |
-Synchroniser l’heure actuelle via les serveur ntp:
1 |
sudo ntpd -qg |
-Vérifier que la date et le temps sont synchronisé avec:
1 |
date |
-Activer l’i2c sur le raspberry pi dans le fichier /boot/config.txt décommenter:
1 |
sudo nano /boot/config.txt |
1 |
dtparam=i2c_arm=on |
-Redémarrer
-Activer le module:
1 |
sudo echo ds3231 0x68 > /sys/class/i2c-adapter/i2c-1/new_device |
-Lire la date du module:
1 |
sudo hwclock -r |
-Ecrire le temps actuel sur le module:
1 |
sudo hwclock -w |
-Redémarrer et vérifier que le temps n’est pas encore synchronisé avec le module:
1 2 |
date sudo hwclock -r |
Pour utiliser le module au démarrage:
-Ajouter la ligne suivante à la fin du fichier /boot/config.txt sous la section [all]:
1 |
sudo nano /boot/config.txt |
1 |
dtoverlay=i2c-rtc,ds3231 |
Enlever fake-hwclock:
1 2 3 4 |
sudo apt-get remove fake-hwclock sudo rm /etc/cron.hourly/fake-hwclock sudo update-rc.d -f fake-hwclock remove sudo rm /etc/init.d/fake-hwclock |
-Dans le fichier /lib/udev/hwclock-set commenter les lignes suivantes qui se trouvent vers le début du fichier:
1 |
sudo nano /lib/udev/hwclock-set |
1 2 3 |
#if [ -e /run/systemd/system ] ; then # exit 0 #fi |
-Redémarrer et vérifier que le temps est synchronisé avec le module:
1 2 |
date sudo hwclock -r |
II.Synchronisation GPS
1.Connecter votre gps en usb.
Vérifier l’entrée du port série dans le dossier /dev:
1 |
ls /dev | grep tty |
Brancher le gps puis refaite la commande et chercher la ligne qui c’est rajoutée.
Chez moi c’est
1 |
/dev/ttyACM0 |
2.Partie software:
1 |
sudo apt-get install ntp gpsd-clients gpsd gpsd-clients ntpstat -y |
Dans /etc/default/gpsd vérifier les options:
1 |
sudo nano /etc/default/gpsd |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
# Default settings for the gpsd init script and the hotplug wrapper. # Start the gpsd daemon automatically at boot time START_DAEMON="true" # Use USB hotplugging to add new USB devices automatically to the daemon USBAUTO="false" # Devices gpsd should collect to at boot time. # They need to be read/writeable, either by user gpsd or the group dialout. #DEVICES="/dev/ttySC0 /dev/pps0" DEVICES="/dev/ttyACM0" # Other options you want to pass to gpsd GPSD_OPTIONS="-n" |
Redémarrer le service gpsd:
1 |
sudo service gpsd restart |
Vérifier que le service est synchro:
1 |
cgps |
La ligne Status devrait voir afficher FIX si votre gps est synchro.
Attention à l’intérieur il est parfois difficile de réceptionner un signal gps.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
lqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqklqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqk x Time: 2021-04-29T19:35:26.000Z xxPRN: Elev: Azim: SNR: Used: x x Latitude: n/a xx x x Longitude: n/a xx x x Altitude: n/a xx x x Speed: n/a xx x x Heading: n/a xx x x Climb: n/a xx x x Status: 3D FIX (4 secs) xx x x Longitude Err: n/a xx x x Latitude Err: n/a xx x x Altitude Err: n/a xx x x Course Err: n/a xx x x Speed Err: n/a xx x x Time offset: 0.040 xx x x Grid Square: n/a xx x mqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqjmqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqj |
Dans /etc/ntp.conf commenter toutes les lignes pool….
1 |
sudo nano /etc/ntp.conf |
1 2 3 4 |
#pool 0.debian.pool.ntp.org iburst #pool 1.debian.pool.ntp.org iburst #pool 2.debian.pool.ntp.org iburst #pool 3.debian.pool.ntp.org iburst |
Et en dessous de ces lignes mettre:
1 2 3 4 5 6 7 |
# GPS Serial data reference server 127.127.28.0 minpoll 4 maxpoll 4 fudge 127.127.28.0 time1 0.0 refid GPS # GPS PPS reference server 127.127.28.1 minpoll 4 maxpoll 4 prefer fudge 127.127.28.1 refid PPS |
Redémarrer le service ntpd:
1 |
sudo service ntp restart |
Vérifier que votre clock est synchro via ntpd:
1 |
ntpq -p |
si une * est a côté de SHM, cela veut dire que vous êtes synchronisé sur le GPS
1 2 3 4 |
remote refid st t when poll reach delay offset jitter ============================================================================== *SHM(0) .GPS. 0 l 15 16 77 0.000 -10.965 7.781 SHM(1) .PPS. 0 l - 16 0 0.000 0.000 0.000 |
III. Synchroniser le gps dans le ds3231
Créer un script:
1 |
sudo nano /usr/local/bin/gpsds3231sync |
mettre:
1 2 3 4 5 6 7 8 |
#!/bin/bash res=$(/usr/bin/ntpstat) rc=$? if [ $rc -eq 0 ] then /sbin/hwclock -w fi |
1 |
sudo chmod 755 /usr/local/bin/gpsds3231sync |
Ajouter votre script dans la crontab:
1 2 |
sudo su crontab -e |
1 |
*/15 * * * * /usr/local/bin/gpsds3231sync |