J'ai besoin d'un coup de main sur un problème de DeepSleep sur un Esp-01S.
Je suis en train de mettre au point un projet dont le montage ressemble à l'image ci-dessous. J'ai simplifié pour que ce soit plus clair. J'ai bien les autres broches correctement connectée (Ch_PD et RST sur VCC).
Pour résumer la situation :
J'ai un interrupteur sur le câble vers GND qui alimente l'esp. Quand le courant passe, l'esp est allumé et la LED également.
Quand l'interrupteur est ouvert, le courant ne passe plus : Esp et LED s'éteignent.
J'ai besoin de connaitre l'état (HIGH / LOW) d'un autre câble. Je recorde donc ce dernier à la broche Rx que je configure comme GPIO01 avec une résistance de pullup ( pinMode( 1 , INPUT_PULLUP ); )
Tout fonctionne parfaitement : Ma broche GPIO01 détecte bien quand l'état passe à GND et quand le cable est libre, je reçois bien le signal Vcc grâce à la résistance de pullup.
Quand j'ouvre l'interrupteur, tout s’éteint : ESP et LED.
Le problème :
Le problème que j'ai surviens quand je passe l'ESP en mode DeepSleep et que la broche GPIO01 est connectée à GND.
Dans ce cas, quand j'ouvre l'interrupteur, l'Esp ne s'éteint plus et la LED continue à briller.
J'en déduis qu'il y a dans le microcontrôleur une connexion. qui se fait entre GPIO1 et GND lorsque ce dernier entre en mode DeepSleep.
C'est très pénalisant pour mon projet car l'interrupteur ne pouvant plus couper l'alimentation de l'Esp, je ne peux plus redémarrer ce dernier pour le sortir du sommeil.
Pouvez vous me dire s'il y a un moyen d'éviter cet effet ? de configurer la broche pour qu'elle ne puisse pas conduire le courant en mode DeepSleep ?
Pourquoi ne pas metttre l’interrupteur sur le fil rouge?
Sinon il y a un registre de l’ESP qui dit à quel état (PULLUP ou DOWN) mettre les pins pendant le sleep - cf iomux Pin Registers (le lien est pour RTOS mais c’est matériel, faut juste trouver la bonne doc)
En tout cas merci d'étudier mon probléme.
Je ne coupe pas le fil rouge car sur l'ESP01 les broches disposent d'une résistance de PULLUP interne et pas de PULLDOWN.
J'ai modifié mon schéma pour que ce soit plus clair par rapport à mon projet réél.
Il y a deux interrupteurs qui fonctionnent en bascule NO/NC.
Quand ils sont tous les deux sur NC le circuit est censé ne plus être alimenté. Par contre RX reçoit toujours le GND. Cela fonctionne parfaitement en temps normal. Le circuit se coupe bien
Le problème survient quand je passe l'ESP en DeepSleep.
Par exemple, imaginons que le mircrorupteur 1 est sur l'état NO et le 2 (celui du bas) et dans l'état tel que sur le circuit.
Si je passe le mircrorupteur 1 sur NC, le circuit se coupe et tout s'éteint, la LED y compris.
Par contre, si je suis dans la même situation initiale, c'est à dire mircrorupteur 1 sur NO et mircrorupteur 2 sur NC et que je passe l'ESP en mode DeepSleep, dans ce cas, lorsque je vais passer mircrorupteur 1 sur NC, cela ne coupe pas le courant comme précédemment. La LED continue à fonctionner et un retour du courant ne réveille pas l'ESP.
Voila, c'est un peu "spécialisé" comme problème mais si parmi vous il y a des spécialistes du "sommeil profond" on ne sait jamais.
je dois dire que j'ai du mal à comprendre la logique de ce montage...ni le phénomène décrit
Quelle est la valeur de Vcc ?
-le réveil du deepsleep se fait principe se fait par une brève mise à la masse de CH-PD , voire RST(ou par le timer interne si GPIO16 est accessible)
-en deepsleep le montage doit être alimenté
-chez moi sur un ESP12 la mise à la masse de RX ne gène pas le deepsleep (très faible consommation et réveil sans probleme par timer interne)
Par ailleurs , que le courant trouve son chemin vers la masse par un GPIO d'un µC non relié à la masse n'est pas surprenant en soi. Nous ne connaissons pas la structure des GPIO (NMOS, PMOS, diodes parasites....). Le comportement d'un GPIO dans ce fonctionnement atypique peut surprendre. Içi il y a probablement, sur le chemin, un PMOS qui , mal polarisé, n'est pas bloqué comme il devrait l'être et laisse passer le courant.
Les caractéristiques annoncées pour un composant supposent une alimentation dans la plage indiquée... et par les "voies normales".(pas par un GPIO)
Il vaudrait mieux repartir à zéro avec un ESP alimenté en permanence avec gestion complète du deepsleep.
Le deepsleep est un mode tel que la consommation du circuit est très réduite. Du coup je ne vois pas bien l’intérêt de couper en plus l'alimentation. De manière générale, piloter un composant actif en coupant sa masse est une source potentielle de problème.
Merci pour tous ces éléments et conseils. Je vais revoir l'architecture. Mais je vais devoir mettre une résistance de pullup externe sur mon GPIO qui détecte l'état.
Cette résistance va générer une consommation électrique même quand le circuit ne fonctionne pas ?
J'ai fait un calcul mais je me trompe peut etre.
Si la résistance R1 est de 10kOhm et la tension de 3.3v, je vais avoir une consommation "passive" de 0,33mA. Est-ce correct ?
Ce qui me donne une consommation de 0.33*3600 = 1188mAh !
Donc en gros, ça vide une pile par heure ?
Est-ce que mon calcul est bon ou je me trompe quelque part ?
Si la résistance R1 est de 10kOhm et la tension de 3.3v, je vais avoir une consommation "passive" de 0,33mA. Est-ce correct
cette valeur de courant correspond au cas ou l'entrée du GPIO est à la masse..... ce qui ne sera pas toujours le cas.
le courant devenant négligeable quand l'entrée est à l'état haut.
Ce qui me donne une consommation de 0.33*3600 = 1188mA.h !
petite confusion entre la quantité de courant exprimée en A.h ou en Coulomb (=produit avec I.t avec I en Ampère et t en secondes)
Un courant constant de 0,33 mA circulant pendant une heure correspond à 0,33 mA.h, tout simplement. (7,92 mA.h pour une journée)
Si tu veux calculer en Coulomb ça donne 0,33.10-3 *3600 = 1,188 C (en divisant ce résultat par 3600 tu trouves boen les 0,33 mA.h)
al1fch:
Bonjourcette valeur de courant correspond au cas ou l'entrée du GPIO est à la masse..... ce qui ne sera pas toujours le cas. le courant devenant négligeable quand l'entrée est à l'état haut.
D’où l’intérêt d’utiliser le registre qui configue l’état des GPIO en mode sommeil. mettez les en PULLUP et le courant chutera à quasiment rien en effet —> cf la Memory-Map de l’ESP
60000800h 44h iomux The IO MUX config registers, see include/eagle_soc.hp/sub]