Как правильно уложить спать ESP32-S2 с FSM-ULP при использовании WiFi

แชร์
ฝัง
  • เผยแพร่เมื่อ 17 มิ.ย. 2023
  • Об утечке тока в глубоком сне МК ESP32-S2 с активным FSM-ULP ядром после использования WiFi.
    Код из видео: github.com/MoonFox2006/Power_...
    Ссылка на обзор мультиметра GVDA GD128PLUS: • Мультиметр GVDA GD128PLUS
  • วิทยาศาสตร์และเทคโนโลยี

ความคิดเห็น • 23

  • @ViktorNiniadis
    @ViktorNiniadis ปีที่แล้ว +1

    Спасибо! Очень познавательно.

  • @leshek9604
    @leshek9604 ปีที่แล้ว

    Спасибо, очень полезно для меня

  • @chegleeff
    @chegleeff ปีที่แล้ว +1

    Спасибо за детектив 😁

  • @krepton85you
    @krepton85you 11 หลายเดือนก่อน +1

    Советую попробовать в качестве батарейки для esp32S2 LS14500 Li-SOCl2 на 3,6 В (можно использовать на прямую без LDO). Батарейка не обычная, если esp32s2 подключен к wi-fi (ток 80 - 90мА) то батарейка даёт просадку напряжения до 3,2 3,3 В (из упаковки 3,66В), но когда esp32s2 уходит в сон на час или более, то напряжение восстанавливается до 3,63 В и держится постоянна на этом уровне (опыт без ULP ядра). В принципе если устройство пробуждается не каждых 10 минут, то отличный вариант. Батарейка как заявляет производитель имеет емкость 2600мА/ч, но очень слаботоковая, продолжительная нагрузка не более 50мА должна быть, я так понимаю если бы esp32S2 постоянно находился в рабочем режиме, то этой батарейки на долго бы не хватило и 2600мА даже не "выжать" из её, но в таком импульсном режиме, с микро заполнением она работает не плохо и даже любит такой режим, т. к. переодически этим батарейкам необходимо проводить депасивацию. А еще это максимальная плотнасть энергии при таком компактном размере батарейки AA, для которой батарейный отсек найти не проблема.

    • @alexmorozov73
      @alexmorozov73  11 หลายเดือนก่อน

      Я использую LiFePo4 аккумы в форм-факторе CR123A или 18650, их макс. напряжение 3.6 В тоже прекрасно без LDO подходит к ESP. И они легко тянут работу МК с WiFi.
      Сейчас тестирую счетчики воды с аккумом CR123A на 500 мАч (ULP каждые 50 мс., сброс в телеграмм каждые сутки), за месяц напряжение уменьшилось на 0.01-0.02 В, жаль тестирование занимает так много времени...

  • @alexandrmalkov5850
    @alexandrmalkov5850 ปีที่แล้ว

    На обычном ESP-32 примерно такой же результат при работе ULP, только без доп. манипуляций по отключению wifi, а по поводу как тут пишут "зашкала" - 4095 на ADC1, это у них известный баг, причём с ADC2 ещё веселее.....

    • @toshibamaster2210
      @toshibamaster2210 ปีที่แล้ว

      У меня был зашкал Ацп STM32 блу пилл
      вход АЦП был от Rail-to-Rail Opamp с питанием +5.
      Vcc < на входе 3,7V код подал примерно до 3500 ..
      пришлось ограниничивать .
      но питать Rail-to-Rail Opamp от 3.3 не красиво так как выход может чуть не дотягивать до Vcc ..

  • @MaksimTeltsov
    @MaksimTeltsov ปีที่แล้ว

    Такие нюансы не на поверхности лежать. Мне кажется, такое надо в исходную документацию включать.

  • @krepton85you
    @krepton85you ปีที่แล้ว +2

    Я еще нашел одну проблему с этим модулем, если сделать замер с помощью АЦП (analogRead(1)) до подключения к WiFi, то все нормально, но если потом и после подключения к WiFi, то АЦП уже выдает "зашкал" - 4095. А если вообще не вызывать analogRead(1) до подключения к WiFi, то АЦП прекрасно измеряет и с подключенным WiFi.

    • @alexmorozov73
      @alexmorozov73  ปีที่แล้ว

      Вы же именно про ESP32-S2 говорите, не про ESP32?
      В доке утверждается, что только ADC2 используется для WiFi, а это GPIO11-20. Я замеряю напряжение батареи до передачи данных по WiFi, поэтому с таким не сталкивался. И в любом случае, я для замера использую ESP-IDF, т.к. там просто подтянуть заводскую калибровку и получить сразу милливольты, а не "попугаи в вакууме". И из-за волатильности ADC на ESP, делаю 3-5 замеров и беру медиану.

    • @alexmorozov73
      @alexmorozov73  ปีที่แล้ว

      Не знаю, только что собрал в PIO на актуальных сейчас версиях пример с подключением к WiFi и потом чтением analogRead(1) на ESP32-S2 - все работает, более того, у ESP32-S2 ADC 13-ти битный, поэтому через мой делитель показания >4096, так что возможно у вас версия фреймворка древняя?

    • @krepton85you
      @krepton85you ปีที่แล้ว

      @@alexmorozov73 тут опционально с битностью АЦП, можно хоть 10, хоть 12 или 13 выбрать, я выбрал 12. Версия фреймворка самая последняя. 2.0.9 если память не изменяет.

    • @alexmorozov73
      @alexmorozov73  ปีที่แล้ว

      Судя по коду в дурино фреймворке, АЦП выставляют на максимум битности, а возвращаемое значение сдвигают вправо при необходимости понижения битности.
      Но в любом случае, я вашу проблему воспроизвести не смог, у меня все работает с GPIO1 как положено.

  • @ciklomat
    @ciklomat ปีที่แล้ว +1

    А есть полное описание устройства, которое должно работать год и посылать данные счетчика?

    • @alexmorozov73
      @alexmorozov73  ปีที่แล้ว +2

      ESP-12H на ESP32-S2 без LDO в глубоком сне с ULP каждые 50 мс. потребляет около 150 мкА, т. е. батареи на 1500 мАч хватит на год.

    • @leonid768
      @leonid768 ปีที่แล้ว

      WiFi много жрёт, у меня получилось от него отказаться.
      Как автономное устройство использую ble термометр сяоми даже с обычной мощностью пробивает дальше WiFi в мох условиях, прошивка не родная вещает через интервалы - время, температуру, напряжение. Есть контакт для использования как вход или выход
      Приемник бот уже на esp может принимать несколько термометров.
      Для счетчиков ещё не применял

    • @alexmorozov73
      @alexmorozov73  ปีที่แล้ว

      По даташиту BT тоже немалый ток потребляет на передачу, только что в случае с BT можно обойтись без установления сессии, а значит время передачи значительно сократится. Я делал ролик о передаче данных адвертайзными пакетами, правда их любой может прочитать, но счетчики (имхо) не являются чувствительной информацией.
      И на МК из видео (ESP32-S2) нет BT, так что такая оптимизация неприменима. А в ESP32-C3 нет ULP, надо брать или ESP32 или ESP32-S3.
      Немного "удивил" меня ватериус, открытый проект на связке ESP-01 и аттини. По их расчетам все должно работать 4 года. Правда они считают, что ESP-01 в глубоком сне потребляет 17 мкА (как написано в даташите), а пот факту это совсем не так, потребление составляет сотни мкА. Это помимо подтягивающих резисторов меньше 10 кОм, а значит ток через них уже будет весьма заметным, а в счетчиках герконы могут быть замкнуты на довольно долгое время в случае "неудачной" остановки расхода...

    • @leonid768
      @leonid768 ปีที่แล้ว

      @@alexmorozov73 есть stm8l она тоже "ничего" не потребляет в связке с есп ее можно раз в сутки будить или по "тревоге".
      Конкретно мне нужен в первую очередь термометр а у сяоми за 400р готовое решение с автономность в год минимум, ну если не перепрошивать каждый день

    • @alexmorozov73
      @alexmorozov73  ปีที่แล้ว

      Так глубокий сон с пробуждением по таймеру без использования всяких ULP и т.п. и так на всех ESP потребляет десятки мкА, что в пересчете на емкость средней батареи дает год+. Проблема наступает тогда, когда надо не только раз в сутки просыпаться, а еще что-то делать в процессе сна. И желательно обойтись без зоопарка только средствами выбранного основного МК.
      Готовые решения термометров с BT скорее всего используют МК NRF, так что сравнение с ESP некорректно в принципе.

  • @plantingAsia
    @plantingAsia 11 หลายเดือนก่อน +1

    Зачем столько выноса мозга. Вы нещаднык чужому времени.
    Сразу бы сказали суть, что улп ядро не умеет нормально засыпать

  • @user-wh6hn7tr5e
    @user-wh6hn7tr5e 11 หลายเดือนก่อน

    static void disablePeripherals() {
    const int pins[] = { 32, 33, 25, 26, 27, 14, 12, 13, 15, 0, 4, 16, 17, 5, 18, 19, 21, 22, 23 };
    for (int i = 0; i < sizeof(pins) / sizeof(pins[0]); i++) {
    pinMode(pins[i], INPUT);
    }
    WiFi.mode(WIFI_OFF);
    if (btStarted()) {
    btStop();
    }
    }0 и просыпается до 0.020врде) при проверке пина А так Спосибо хорошие подсказки.... Все супер работает.Будем тестить. if (DEBUG_MODE) Serial.begin(115200);
    gpio_pad_select_gpio(WAKEUP_GPIO);
    gpio_set_direction(WAKEUP_GPIO, GPIO_MODE_INPUT);
    gpio_set_pull_mode(WAKEUP_GPIO, GPIO_PULLUP_ONLY);
    esp_sleep_enable_ext0_wakeup(WAKEUP_GPIO, 1);
    if (LedOn) rtc_gpio_init(LED_PIN);
    if (LedOn) rtc_gpio_set_direction(LED_PIN, RTC_GPIO_MODE_OUTPUT_ONLY);
    if (LedOn) rtc_gpio_set_level(LED_PIN, 0);
    }

    • @alexmorozov73
      @alexmorozov73  11 หลายเดือนก่อน

      Пины, которые не подключены к RTC периферии, в глубоком сне в любом случае будут полностью отключены, ничего с ними делать не нужно. И потом, все пины при инициализации выключены (не входы и не выходы), а не входы как на AVR, так что лучше что не используется - то и не трогать.
      Ну и три команды с одним и тем же условием выполнения очевидно являются составным оператором { ... }, зачем их отдельно писать? :)