Esp32S3 forte consommation en deepsleep

Bonjour à tous,

Je souhaitais utiliser des ESP32S3 pour différents projets sur batterie (notamment suivi humidité de sol) dans home assistant, via Esphome.
Mon problème : 2,5ma consommés en deepsleep au lieu de quelques µa.
Les batteries sont donc drainées en quelques jours...

Pour affiner le "diagnostic" je repars donc de zéro:
-j'utilise une carte "nue" (simplement +3.3v, gnd et enable reliés à mon alimentation 3,3V via des pogo, un seul condensateur pour stabiliser le tout, pas de LDO)
-J'utilise l'exemple fourni par la bibliothèque esp32 de l'Arduino IDE (j'abandonne esphome pour les tests, afin de m'assurer que le problème ne venait pas de là) - j'ai aussi tenté de désactiver la wifi et l'ADC...
-je teste plusieurs cartes ESP32S3
-Je teste le même montage/même code avec des ESP32C3

Résultats : systématiquement 2,5ma consommées par les ESP32S3 et moins de 10 µa par l'ESP32C3...

Le code et le montage étant identiques et simplifiés au maximum, je n'arrive pas à trouver la cause de cette consommation aussi élevée

Je privilégie l'ESP32S3 car il expose plus de GPIO que le C3.

Merci par avance pour toute suggestion ou tout lien sur cette problématique...!

/*
Simple Deep Sleep with Timer Wake Up
=====================================
ESP32 offers a deep sleep mode for effective power
saving as power is an important factor for IoT
applications. In this mode CPUs, most of the RAM,
and all the digital peripherals which are clocked
from APB_CLK are powered off. The only parts of
the chip which can still be powered on are:
RTC controller, RTC peripherals ,and RTC memories

This code displays the most basic deep sleep with
a timer to wake it up and how to store data in
RTC memory to use it over reboots

This code is under Public Domain License.

Author:
Pranav Cherukupalli <cherukupallip@gmail.com>
*/

#define uS_TO_S_FACTOR 1000000ULL /* Conversion factor for micro seconds to seconds */
#define TIME_TO_SLEEP 60          /* Time ESP32 will go to sleep (in seconds) */

RTC_DATA_ATTR int bootCount = 0;

/*
Method to print the reason by which ESP32
has been awaken from sleep
*/
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 setup() {
  Serial.begin(115200);
  delay(1000);  //Take some time to open up the Serial Monitor

  //Increment boot number and print it every reboot
  ++bootCount;
  Serial.println("Boot number: " + String(bootCount));

  //Print the wakeup reason for ESP32
  print_wakeup_reason();

  /*
  First we configure the wake up source
  We set our ESP32 to wake up every 5 seconds
  */
  esp_sleep_enable_timer_wakeup(TIME_TO_SLEEP * uS_TO_S_FACTOR);
  Serial.println("Setup ESP32 to sleep for every " + String(TIME_TO_SLEEP) + " Seconds");

  /*
  Next we decide what all peripherals to shut down/keep on
  By default, ESP32 will automatically power down the peripherals
  not needed by the wakeup source, but if you want to be a poweruser
  this is for you. Read in detail at the API docs
  http://esp-idf.readthedocs.io/en/latest/api-reference/system/deep_sleep.html
  Left the line commented as an example of how to configure peripherals.
  The line below turns off all RTC peripherals in deep sleep.
  */
  //esp_deep_sleep_pd_config(ESP_PD_DOMAIN_RTC_PERIPH, ESP_PD_OPTION_OFF);
  //Serial.println("Configured all RTC Peripherals to be powered down in sleep");

  /*
  Now that we have setup a wake cause and if needed setup the
  peripherals state in deep sleep, we can now start going to
  deep sleep.
  In the case that no wake up sources were provided but deep
  sleep was started, it will sleep forever unless hardware
  reset occurs.
  */
  Serial.println("Going to sleep now");
  Serial.flush();
  esp_deep_sleep_start();
  Serial.println("This will never be printed");
}

void loop() {
  //This is not going to be called
}

Bonsoir

Pourrais tu faire un petit schéma montrant les connections de ton module WROOM ESP32-S3 ?

je ne suis pas certain de bien interprêter la photo

La consommation de deep-sleep avec le code testé est effectivement anormale

Merci d'avoir pris le temps de me lire !
voici un schéma (le montage est strictement identique avec les ESP32C3) :


Le multimètre est nécessaire car la résolution de ma petite alim' est de l'ordre du ma.

En reliant également la borne 1 du module à la masse, y -a-t-il du mieux ?
+Relier GPIO0 à 3,3V
(pour EN et GPIO0 je préfére insérer une résistance entre la broche et 3V3, ça facilite le basculement en mode flashage)

pour info : environ 50µA avec l'exemple TimerWakeup,
Extension ESP32 en version 3.04
Carte Lolin S3 Mini alimentée en 3,3V en sortie du régulateur linéaire laissé en place (un petit courant entre donc dans le pont diviseur de tension du régulateur en plus du courant alimentant le circuit intégré ESP32-S3FH4R2)

Borne 1 reliée à la masse et GPIO0 à 3.3v, aucun changement...
Je te rejoins pour les pullups, le montage illustré avait pour objectif de limiter au maximum les composants, (quoiqu'avec esphome je n'utilise que des màj OTA donc pas forcément besoin de prévoir de repasser en flashage)

J'ai oublié de préciser qu'il s'agit de cartes chinoises, donc peut-être un soucis de ce côté...

Espressif étant une entreprise chinoise sérieuse qui conçoit et produit ses circuits intégrés et les divers modules WROOM .... il vaut mieux moduler les préjugés ou abandonner tous les ESP...... :wink:

Bien entendu avec une copie (chinoise ou pas) de module ESP32-S3-WROOM-1U sans logo Espressif tout peut arriver .......en fonction de ce qui est sous le capot, tant pour les composants que pir le schéma.


contre

OTA , comment t'y prends tu pour flasher avec le deep-sleep activé ?

Je vais donc moduler mes préjugés car c'est la première fois que je reçois une carte qui ne respecte pas la datasheet ! J'aurais pu rédiger différemment en précisant qu'il s'agit de copies achetées sur Ali...

Pour les màj OTA, j'ai une variable binaire sur Home assistant qui me permet de désactiver le deepsleep, donc j'active cette variable puis je redémarre la carte (via EN)

Si sur le lien de la boutique sur Aliexpress la photo de l'annonce montrait un module WROOM avec logo Espressif tu peux te faire rembourser pour non conformité

la consommation constatée en deep-sleep avec ton module Silnet (?) me fait penser à une carte LOLIN 32 Lite (pas un module) ou le Chip Select de la mémoire Flash était en l'air pendant le deep sleep, mémoire Flash pas correctemebt désactivée...

Pas de tromperie sur la marchandise, Espressif n'était pas présent sur les photos, la marque indiquée est Siinst, je n'ai pas trouvé de datasheet spécifique.

Oula, penses tu que ce soit gérable d'un point de vue logiciel ? Ou nécessaire d'ajouter une résistance de pulldown sur le chip select ?

gérable du point de vue logiciel ? ce n'est pas mon point fort !

Pas gérable d'un point du vue matériel si le schéma interne de ton module Siinst est identique à celui de l'original d'Espressif : le signal SPICS0 qui sort du circuit intégré ESP32-S3 pour aller vers la mémoire Flash SPI ne sort pas du module (cf Figure 6 de la Data Shett des modues ESP32-S3-WROOM 1 et 1U

Effectivement ça paraît compromis pour trouver une solution de ce côté ...

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.