add deep sleep mode

This commit is contained in:
2025-04-19 16:00:18 +02:00
parent 9abfb936a3
commit e4663df500
4 changed files with 47 additions and 0 deletions

View File

@@ -35,3 +35,8 @@ void Display::print_weight(double val) {
this->_display->printf("%.2f g", val);
this->_display->refresh();
}
void Display::clear() {
this->_display->clearDisplay();
this->_display->refresh();
}

View File

@@ -20,6 +20,7 @@
void setup();
void print(const char* text);
void print_weight(double weight);
void clear();
};
#endif

View File

@@ -1,5 +1,8 @@
#ifndef ENV
#define ENV
#include <Arduino.h>
#include "driver/rtc_io.h"
#include <BLEDevice.h>
#include <BLEUtils.h>
#include <BLEScan.h>
@@ -9,6 +12,11 @@
#include <Adafruit_GFX.h>
#include <Fonts/FreeSans9pt7b.h>
/********************* General ****************************/
#define BUTTON_PIN_BITMASK(GPIO) (1ULL << GPIO)
#define WAKEUP_GPIO GPIO_NUM_1
#define SLEEP_GPIO 1
/********************* NAU7802 ****************************/
#define LDO NAU7802_3V3

View File

@@ -5,6 +5,7 @@ Display display;
Adafruit_NAU7802 nau;
unsigned long _millis = 0;
int32_t val = 0;
bool goToSleep = False;
#if BLE
BLEServer *pServer = NULL;
BLECharacteristic *millisCharacteristic = NULL;
@@ -26,10 +27,42 @@ int32_t val = 0;
};
#endif
void print_wakeup_reason() {
esp_sleep_wakeup_cause_t wakeup_reason;
wakeup_reason = esp_sleep_get_wakeup_cause();
switch (wakeup_reason) {
case ESP_SLEEP_WAKEUP_EXT0: Serial.println("Wakeup caused by external signal using RTC_IO"); break;
case ESP_SLEEP_WAKEUP_EXT1: Serial.println("Wakeup caused by external signal using RTC_CNTL"); break;
case ESP_SLEEP_WAKEUP_TIMER: Serial.println("Wakeup caused by timer"); break;
case ESP_SLEEP_WAKEUP_TOUCHPAD: Serial.println("Wakeup caused by touchpad"); break;
case ESP_SLEEP_WAKEUP_ULP: Serial.println("Wakeup caused by ULP program"); break;
default: Serial.printf("Wakeup was not caused by deep sleep: %d\n", wakeup_reason); break;
}
}
void IRAM_ATTR startSleep() {
display.clear();
esp_sleep_enable_ext0_wakeup(WAKEUP_GPIO, 1);
rtc_gpio_pullup_dis(WAKEUP_GPIO);
rtc_gpio_pulldown_en(WAKEUP_GPIO);
esp_deep_sleep_start();
}
void setup() {
Serial.begin(115200);
display.setup();
print_wakeup_reason();
/**** setup sleep interrupt ******/
pinMode(SLEEP_GPIO, INPUT);
attachInterrupt(digitalPinToInterrupt(SLEEP_GPIO), startSleep, FALLING);
if (! nau.begin()) {
Serial.println("Failed to find NAU7802");
while (1) delay(10); // Don't proceed.