🛠 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

Objetivos

Prolongar la autonomía de un nodo con batería LiPo de 3,7 V (conector J4 de 3 pines, capacidad mínima recomendada 200 mAh, cargador BQ25120 controlado por nicla::enableCharging(mA)). Los únicos puntos de consumo documentados a nivel de placa son: 460 µA típicos en reposo, 960 µA para el sketch blink, 2,5 mA en publicidad BLE + consulta de sensores a 1 Hz, 1,15 mA en publicidad + una consulta por hora. La estrategia aquí es: dormir el núcleo del Cortex-M4F con __WFI entre dos mediciones, y despertar mediante una interrupción externa. Atención, el tema está poco documentado por Arduino: hasta la fecha, no se ha publicado ninguna API de deep-sleep dedicada para esta placa.

Material

Código completo

#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 materiel : 40 mA)
  BHY2.begin;
  BHY2.setLDOTimeout(600000);    // evite la coupure LDO apres 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");
}

Verificación esperada

El sketch imprime la tensión de la batería y luego se detiene; una pulsación en el botón conectado al pin 3 provoca la visualización de « Despertar por interrupción » y la reanudación del ciclo. Al insertar un microamperímetro en serie en la alimentación, se debe observar una caída de la corriente durante la fase de espera en comparación con el ciclo activo; comparar con la tabla de la hoja de datos (460 µA en reposo) para situar su medición.

Errores frecuentes

Otros tutoriales para esta placa

Ejemplos de código para esta placa

← Volver a la ficha 🛠 Todos los tutoriales