🛠 Sommeil basse consommation et réveil sur interruption

Arduino Nicla Sense ME · avance · Schéma : IMG-nicla-sense-me-avance-1-niclasense-sommeil-bas-courant.svg — Nicla Sense ME sur batterie LiPo avec microampèremètre en série sur l'alimentation, croissant de lune au-dessus de la carte et flèche de réveil vers la broche d'interruption

Objectifs

Prolonger l'autonomie d'un nœud sur batterie LiPo 3,7 V (connecteur J4 3 broches, capacité minimale recommandée 200 mAh, chargeur BQ25120 piloté par nicla::enableCharging(mA)). Les seuls points de consommation documentés au niveau carte sont : 460 µA typique en veille, 960 µA pour le sketch blink, 2,5 mA en publicité BLE + interogation capteurs à 1 Hz, 1,15 mA en publicité + une interogation par heure. La stratégie ici : endormir le cœur du Cortex-M4F avec __WFI entre deux mesures, et se réveiller sur une interruption externe. Attention, le sujet est sous-documenté par Arduino : à ce jour, aucune API de deep-sleep dédiée n'est publiée pour cette carte.

Matériel

Code complet

#include "Nicla_System.h"
#include "Arduino_BHY2.h"

volatile bool reveille = false;
const uint8_t BROCHE_REVEIL = 3;

void onReveil { reveille = true; }

void setup {
  Serial.begin(115200);
  nicla::begin;
  nicla::enableCharging(20);     // courant de charge doux (defaut matériel : 40 mA)
  BHY2.begin;
  BHY2.setLDOTimeout(600000);    // evite la coupure LDO après 1 min sans activite
  pinMode(BROCHE_REVEIL, INPUT_PULLUP);
  attachInterrupt(digitalPinToInterrupt(BROCHE_REVEIL), onReveil, FALLING);
}

void loop {
  BHY2.update;
  delay(1000);
  Serial.print("Tension batterie : ");
  Serial.println(nicla::getCurrentBatteryVoltage);
  Serial.flush;

  reveille = false;
  __WFI;                        // le CPU s'arrete, attend une interruption
  while (!reveille);              // sortie de veille
  Serial.println("Reveil par interruption");
}

Vérification attendue

Le sketch imprime la tension de batterie puis se fige ; un appui sur le bouton relié à la broche 3 provoque l'affichage « Reveil par interruption » et la reprise du cycle. En insérant un microampèremètre en série sur l'alimentation, on doit observer une chute du courant pendant la phase d'attente par rapport au cycle actif ; comparer au tableau du datasheet (460 µA en veille) pour situer sa mesure.

Erreurs fréquentes

Autres tutoriels pour cette carte

Exemples de code pour cette carte

← Retour à la fiche 🛠 Tous les tutoriels