LoRaWan: Mise en veille avec RTC externe

Pour pouvoir pousser l’économie d’énergie de la carte LoRaWan au maximum, on peut utiliser une RTC externe.

Une carte Seeeduino LoRaWan avec une RTC externe DS3231

Matériel:

DS3231, une RTC précise et économe en énergie, trouvable ici.

Carte Seeeduino LoRaWan.

Seeeduino LoRaWan

Branchements:

Schéma des branchements entre une carte LoRaWan et une RTC DS3231.

La DS3231 peut fonctionner et garder une valeur précise du temps sans avoir besoin de l’alimenter, du moment qu’elle est équipée d’une pile. Mais il faut l’alimenter en 5 ou en 3,3V afin de la paramétrer ou pour le fonctionnement de l’alarme.

Les broches « SDA » et « SCL » servent à la communication afin de configurer la DS3231.

La broche « SQW » ne sert que pour l’alarme, elle est constamment à l’état haut et passe à l’état bas pour l’interruption.

La broche « 32K » n’est pas utilisé ici.

Code:

#include "LowPower.h"
#include <DS3232RTC.h>
#include <time.h>
#include <Wire.h>
#include <LoRaWan.h>

DS3232RTC myRTC(false); /*si architecture ARM, instancier un objet de type DS3232RTC.
                        Pour une architecture AVR, l'instance est automatique.*/

void wakeUp()
{
  myRTC.alarm(ALARM_1); /*Informe la RTC que l'alarme à bien été reçu,
                        La RTC n'enverra pas d'autre alarme si elle n'a pas été informé de sa réception.*/
}

void setup()
{
    
    pinMode(13, OUTPUT);

    myRTC.begin();                                    //Etape de début

    myRTC.alarmInterrupt(ALARM_1, true);              /*Activation de l'alarme N°1
    myRTC.alarmInterrupt(ALARM_2, true);              Activation de l'alarme N°2*/

    myRTC.setAlarm(ALM1_MATCH_SECONDS, 5, 0, 0, 1);   /*Définition de l'alarme N°1
    myRTC.setALarm(ALM2_MATCH-MINUTES, 0, 0, 1);      Définition de l'alarme N°2, elle ne gère pas les secondes.*/
    
    lora.init();
    lora.setDeviceLowPower();                         //Préparation de la mise en veille de la carte

    attachInterrupt(0, wakeUp, LOW);                  /*Préparation de la pin de réveil à réagir lorsque le signal est à l'état bas;
                                                      1er paramètre = numero pin
                                                      2eme paramètre = fonction à appeler lorsque le signal est réceptionné
                                                      3eme paramètre = état dans lequel la pin doit réagir*/
    
    myRTC.alarm(ALARM_1);                             /*Envoi d'une confirmation de réception dans le cas ou une alarme aurais été lancée
                                                      Sinon, l'alarme pourrais rester bloquer en attendant cette confirmation*/
}

void loop() 
{   
  LowPower.standby();       //Mise en veille de la carte, elle se réveillera avec l'alarme relié au pin
  
    digitalWrite(13, HIGH); //Utilisation du pin 13 avec une LED afin de témoigner de la sortie de veille
    delay(500);
    digitalWrite(13, LOW);
}
Réveil par interruption du DS3231

Optimisation:

Pour pouvoir économiser encore plus d’énergie, on peut enlever les LEDs « PWR » et « CHG » qui sont constamment allumés mais n’ont pas une très grande utilité. On peut aussi enlever la LED « POWER » du DS3231 qui, elle aussi, reste constamment allumée.

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *