79519960

Date: 2025-03-19 10:58:53
Score: 1.5
Natty:
Report link

работающий легкий сон по таймеру и прерыванию, платка HW-628 v1.1 ток сна 18мА, ток просыпания скачек под 80ма, ток в loop() 33мА

#include "user_interface.h" // для сохранения времени во время легкого сна на основе RTC

#define WAKE_UP_PIN 0 // D3

void wakeupCallback() {//функцию обратного вызова,чтобы лёгкий сон возобновился сразу после тайм-аута или прерывания (без ожидания полной продолжительности delay()
  delay(3);// без этого запустится  delay(sleepSeconds * 1000 + 1)
  Serial.println("обр вызов, сон кончился");
  // этот сброс имеет решающее значение, возможно, потому, что это блокирующая команда, которая
  // позволяет процессору выйти из функции delay(sleepSeconds * 1000 + 1)
  Serial.flush();
}

void sleep(int sleepSeconds) {
  extern os_timer_t *timer_list;
  timer_list = nullptr;
  //  wifi_station_disconnect(); //not needed
  wifi_set_opmode_current(NULL_MODE);//NULL_MODE — этот параметр отключает Wi-Fi модуль.
  wifi_fpm_open();
  wifi_fpm_set_sleep_type(LIGHT_SLEEP_T);
  Serial.println("переход в сон");
    Serial.flush();
  gpio_pin_wakeup_enable(GPIO_ID_PIN(WAKE_UP_PIN), GPIO_PIN_INTR_LOLEVEL);
  wifi_fpm_set_wakeup_cb(wakeupCallback); //функция обязательно, чтобы НЕ выполнялся delay после следующей строки
  wifi_fpm_do_sleep(sleepSeconds * 1000 * 1000);//Лёгкий сон по таймеру может длиться от ~10 000 до 0xFFFFFFE = 2^28-1 = 268435454 микросекунд (~4 1/2 минуты)
  delay(sleepSeconds * 1000 + 1); // за командой лёгкого сна должен следовать delay() (указанный в миллисекундах), который как минимум на 1 мс длиннее, чем время сна
}



void setup() {
  pinMode(WAKE_UP_PIN, INPUT_PULLUP);
  Serial.begin(9600);
  Serial.println();
}

void loop() {
  delay(3); //без этого уходит в сон, но не просыпается

  for (int i = 0; i < 3; ++i) {
    // Выводим номер пина и соответствующее значение
    Serial.print("Analog Pin ");
    Serial.print(i + 1);
    Serial.print("= ");
    Serial.println(analogRead(A0));
    delay(1000);
  }

  sleep(15);

}
Reasons:
  • Long answer (-1):
  • Has code block (-0.5):
  • Unregistered user (0.5):
  • No latin characters (1.5):
  • Low reputation (1):
Posted by: Олег