RaspberryPI - DS3231

Posted on dim. 27 mars 2016 in Projets

ds3231.jpg

Présentation du projet

Il n'y a pas de module rtc sur raspberry pi. Cela peut être gênant si l'on a pas de réseau.

Le module utilisé :

  • Alimentation 3,3V ou en 5V
  • Pour Raspberry PI et Arduino
  • Base de RTC DS3231

DS3231 semble compatible au niveau des registres de date et d'heure au DS1307. C'est pour cela que j'utilise ce module comme on le voit partout sur l'Internet.

Mais en regardant dans /lib/modules/xxx/kernel/drivers/rtc il y a un module rtc-ds3232.ko. A la lecture de la datasheet il semble que les registres sont les même que pour le DS3231.

Datasheet

Pré-requis

  • un raspberry PI 2B
  • un bloc alimentation de 5V 2A
  • une carte microSD 8 Go
  • un module DS3231

Réalisation du projet

Préparation

Le module est en place sur le raspberry.

Si cela n'a pas déjà été fait installation des outils nécessaires pour l'I2C

    sudo apt-get install i2c-tools ntpdate

je vous propose aussi

    sudo apt-get install libi2c-dev python-smbus python3-smbus

Configuration

Exécuter l'outil raspi-config

    sudo raspi-config   

aller dans le menu (9) Advanced Options -> (A7) I2C -> enabled -> oui

Ouvrir le fichier /etc/modules

    sudo nano /etc/modules  

s'assurer que i2c-dev est enregistré et ajouter ligne suivante rtc-ds1307.

Réglage du fuseau horaire, et on restera en heure UTC

    sudo timedatectl set-timezone Europe/Paris
    sudo timedatectl set-local-rtc 0

Si vous avez accès au réseau, mettre à l'heure le raspberry

    sudo ntpd -q

sinon

    sudo date --set 14:20:00
    sudo date --set 2016-03-27

on enregistre l'heure et la date dans le mémoire du module

    sudo hwclock -w

fichiers pour boot

on crée le fichier suivant

    sudo nano /usr/local/bin/ds3231.sh

dans lequel on met

    #!/bin/sh -e
    #ds3231.sh

    echo ds1307 0x68 > /sys/class/i2c-adapter/i2c-1/new_device
    hwclock -s

puis on donne le droit d'exécution

    sudo chmod +x ds1367.sh

on crée le fichier suivant

    sudo nano /etc/systemd/system/ds3231.service

qui se compose de

[Unit]
 Description=RTC hardware
 After=tlp-init.service

[Service]
 Type=oneshot
 RemainAfterExit=no
 ExecStart=/etc/local/ds3231.sh

[Install]
 WantedBy=multi-user.target

On test

    sudo systemctl start ds3231.service

si pas de message d'erreur, on peut demander le demarrage au boot avec

    sudo systemctl enable ds3231.service