При правильной настройке и конфигурации ATWatch может потреблять меньше 50 мкА

LIS3DH

Для выключения датчика можно использовать следующую команду: lis.setDataRate(LIS3DH_DATARATE_POWERDOWN);
Датчик так же предусматривает режимы работы с низким энергопотреблением ( LIS3DH_DATARATE_LOWPOWER_1K6HZ
и LIS3DH_DATARATE_LOWPOWER_5KHZ).
Включить датчик можно установкой любого другого значения.

BMP280

Для использования средств низкого энергопотребления необходимо модернизировать библиотеку.
В файле Adafruit_BMP280.h после строчки «bool begin(uint8_t addr = BMP280_ADDRESS, uint8_t chipid = BMP280_CHIPID);» добавить 2 строчки: «void sleep(void);» и «void wakeup(void);». В файле Adafruit_BMP280.cpp до строчки «bool Adafruit_BMP280::begin(uint8_t a, uint8_t chipid) {» вставить «void Adafruit_BMP280::sleep() {
write8(BMP280_REGISTER_CONTROL, 0x3C);
}void Adafruit_BMP280::wakeup() {
write8(BMP280_REGISTER_CONTROL, 0x3F); }».
Это позволит пользоваться функциями sleep() и wakeup().
sleep() погружает датчик в сон, тем самым понижая его энергопотребление до минимума.
wakeup() пробуждает датчик от сна.

MAX17048

MAX17048 автоматически переходит в режим сна, если ему не приходят команды.

DS1337

DS1337 обладает низким энергопотреблением, можно использовать функции start() и stop() которые запустят и остановят отчёт времени.

MAX30102

MAX30102 по умолчанию выключен, так как выключен стабилизатор 1.8В, что бы включить его необходимо подать высокий уровень сигнала на 28 пин. Учтите что после отключения питания датчик необходимо будет инициализировать заново.
Программно датчик можно отключить с помощь команды shutDown() и включить командой wakeUp().

NRF24L01+

NRF24L01+ отключается командой powerDown() и включается powerUp().

Oled Дисплей

Для управления питанием дисплея используйте следующие команды:
display.SSD1306_command(SSD1306_DISPLAYOFF)
display.SSD1306_command(SSD1306_DISPLAYON)

Использование прерываний

Одним из главных методов является использование глубокого сна микроконтроллера и пробуждение его прерыванием.
Вы можете настроить пробуждение по одному или нескольким прерываниям.
Пример работы с библиотекой lowPower:

  1. #include "LowPower.h"
  2.  
  3. void wakeUp() {/*ничего не делаем(работает не стабильно)*/}
  4.  
  5. void loop() {
  6. 	//Выключаем все модули
  7. 	attachInterrupt(2, wakeUp, HIGH); //Включаем прерывание при нажатии на кнопку
  8. 	LowPower.powerDown(SLEEP_FOREVER,  ADC_OFF,  BOD_OFF);//Засыпаем
  9. 	detachInterrupt(2); //Проснулись, убираем прерывание
  10. 	//Пробуждаем все модули
  11. }

При этом важно не забыть выключить всю периферию микроконтроллера.
Ядро MightyCore предоставляет команды для лёгкого отключения периферии. Например можно отключить абсолютно всё с помощью disablePower(POWER_ALL) и включить с помощьюenablePower(POWER_ALL)
Более подробно про эти команды можно узнать тут.