uPesy ESP32 Wroom Low Power DevKit v1.2
(Mis à jour le 27/07/2023)
Voir aussi
Si vous venez de recevoir une carte uPesy ESP32 Wroom Low Power DevKit, je vous conseille d’abord de regarder le guide de prise en main rapide , si ce n’est pas déjà fait.
Voici la documentation technique de la carte uPesy ESP32 WROOM Low Power DevKit. Il s’agit d’une variante de la carte uPesy ESP32 Wroom Devkit optimisée pour minimiser la consommation de courant lorsque l’ESP32 est en mode Deep Sleep (en veille profonde). Les tests effectués sur différents modèles, montre une consommation comprise entre 8 et 15µA , ce qui la place dans le haut du podium des cartes ESP32 les plus économes en Deep Sleep .
Sur certains modèles, la consommation en mode Deep Sleep n’est que de 9µA !
Pinout
Le brochage est très similaire aux autres cartes uPesy ESP32. Pour rappel, chaque broche de la carte uPesy est identifiable par un numéro GPIOxx qui permet de connaître ses fonctionnalités. Vous recevez avec la carte un schéma sur le brochage sous forme papier. Voici la version complète :
Note
Les pins 36, 39, 34, à savoir les pins GPIO36, GPIO39, GPIO34, ne peuvent être utilisés qu’uniquement en entrée. Ils n’ont pas non plus de résistances pullup internes (On ne peut pas utiliser pinMode(36, INPUT_PULLUP)
).
Avertissement
Contrairement à la carte uPesy Wroom DevKit, le pin GPIO35 ne peut pas être utilisé, car celui-ci sert à mesurer la tension en entrée du régulateur, pour mesurer la tension de la batterie par exemple. Le résultat de la mesure est accessible via le code.
Avertissement
Il n’y a pas non plus de LED bleue sur le pin GPIO2
!
Si vous n’êtes pas à l’aise avec les pins GPIO de l’ESP32, je vous conseille de lire la documentation de la carte ESP32 basique d’uPesy, puis de compléter par la lecture du fonctionnement détaillé des broches de l’ESP32 .
Le connecteur pour la batterie externe est du type JST PH 2.0 (avec un pas de 2 mm)
Caractéristiques
La carte uPesy ESP32 WROOM Low Power DevKit peut être découpée en 4 principaux blocs :
Le module ESP32
Le convertisseur USB vers UART
La gestion de l’alimentation
La connectique
Module ESP32
Le cerveau de la carte est l’ESP32 : un microcontrôleur puissant fabriqué par Espressif . Sur cette carte, un module WROOM est utilisé (comme indiqué dans le nom de la carte 🤔). Il contient un chip ESP32 et un circuit élémentaire pour le faire fonctionner.
Vous trouverez toutes les informations techniques qui vous intéressent dans les datasheets du fabricant:
Convertisseur USB/UART
Puisque l’ESP32 ne comprend pas le protocole USB, un chip de Silicon Labs, le CP2102 joue le rôle de traducteur avec l’ordinateur. Il est nativement supporté par Windows, MacOS et Linux. Il n’y a donc pas besoin d’installer de driver supplémentaire, comme cela pourrait être le cas avec un CH340G.
Note
Si vous rencontrez l’erreur “A fatal error occurred: Failed to connect to ESP32: Timed out waiting for packet header”, vous pouvez essayer de rajouter un condensateur de 10 µF entre la broche EN
et GND
. Sinon il faudra utiliser la solution manuelle, décrite un peu plus bas.
Gestion de l’alimentation
Cette section de la carte est responsable de la gestion de l’alimentation. Elle contient entre autres un régulateur de tension 3.3V ainsi que des protections. Son fonctionnement sera détaillé dans la se ction Utilisation . Les composants ont été soigneusement choisis pour consommer un minimum de courant lorsque la carte est alimentée par batterie ou via une alimentation externe.
Connectique
Le connecteur USB-C permet d’alimenter la carte et de communiquer avec l’ordinateur. Il permet notamment de téléverser un programme, d’envoyer des messages via print()
…
Note
Il faut s’assurer d’utiliser un câble USB qui laisse transiter les données, et non pas un qui sert uniquement à charger un appareil.
Les 2 boutons EN
et BOOT
de la carte permettent de contrôler l’état de l’ESP32:
EN
: Ce bouton, appelé parfois RESET permet de redémarrer de force l’ESP32.BOOT
: L’utilisation seule de ce bouton n’a pas aucun effet lorsque l’ESP32 est déjà allumé. Il agit sur son comportement lors du démarrage (lors du boot).
On peut utiliser ces boutons pour mettre manuellement l’ESP32 en mode FLASH
, mode qui permet de charger un nouveau programme sur l’ESP32. Normalement, l’ESP32 se met automatiquement dans ce mode lorsque le téléversement se fait via USB grâce au convertisseur CP2102.
Astuce
C’est en général la solution manuelle de secours, lorsque l’on n’arrive pas à résoudre l’erreur : A fatal error occurred: Failed to connect to ESP32: Timed out waiting for packet header
Pour ce faire, lorsque l’étape de connexion avec l’ESP32 arrive :
Connecting........_____....._____....._____....._____....._____....._____....._____....._____....._____....._____
Il faut réaliser la combinaison suivante :
Maintenir appuyé en même temps les boutons
EN
etBOOT
pendant 2 secondes.Relâchez le bouton
EN
tout en maintenantBOOT
appuyé pendant 2 secondes.Relâchez le bouton
BOOT
Utilisation
Tolérance en tension des pins
L’ESP32 est un microcontrôleur qui fonctionne en 3.3V. Les niveaux logiques sont donc de 0 et 3.3V et non pas de 0 et 5V. C’est-à-dire que la tension en sortie des pins GPIO est de 3.3V et la tension en entrée ne doit pas excéder 3.3V. Les pins GPIO ne sont pas prévus pour avoir des niveaux logiques de 5V .
La tension mesurée par le convertisseur analogique numérique ne doit pas non plus excéder 3.3V (et pas non plus négative bien sûr).
Note
La plupart des modules/capteurs peuvent fonctionner avec des niveaux logiques de 3.3V, mais si ce n’est pas le cas, des levels shifters (ou a minima des ponts diviseurs de tension) seront nécessaires pour passer d’une tension de 3.3V à 5V et vice versa.
Avertissement
Puisque l’ESP32 n’a pas été prévu pour recevoir du 5V sur ces pins GPIO, les pins de l’ESP32 peuvent être endommagés s’ils sont exposés trop longtemps à cette tension.
Les différents modes d’alimentation
Il y a 3 façons d’alimenter la carte ESP32 Low Power, dont 2 sont optimisées pour la consommation de courant :
Via USB (\(V_{BUS}\) ) : On connecte la carte via son connecteur USB-C à un ordinateur ou à un chargeur de téléphone adéquat. Une LED rouge s’allume dès la mise sous tension. Ce mode d’alimentation n’est pas optimisé pour la consommation de courant.
-
Via une batterie externe (\(V_{BAT}\) ) : On connecte une batterie Lithium-ion/LiPo de 3.7V sur le connecteur JST PH 2.0. Si l’on branche l’USB en même temps, la carte recharge la batterie. Ce mode d’alimentation est optimisé pour la consommation de courant : la consommation sera < 15µA en Deep Sleep.
Via une alimentation externe (\(V_{IN}\) ) : On connecte sur la broche \(V_{IN}\) de la carte ESP32 une alimentation externe avec une tension comprise entre 3.5V et 7V maximum . Ce mode d’alimentation est optimisé pour la consommation de courant : la consommation sera également < 15µA en Deep Sleep.
Note
Dans les modes d’alimentation optimisés, aucune LED s’allume lorsque la carte est sous tension . En effet, même une simple LED consomme quelques mA.
Fonctionnement des modes d’alimentation
Puisqu’il y a plusieurs chemins d’alimentations possibles, voici des explications supplémentaires sur leurs interactions:
-
Dès que l’on alimente la carte par USB, une éventuelle alimentation externe qui serait branchée sur la broche \(V_{IN}\) ou bien une batterie branchée sur le connecteur sera désactivée. L’énergie électrique vient uniquement de l’USB.
Astuce
On peut avoir en toute sécurité, la carte alimentée par USB tout en ayant une alimentation externe ou une batterie de branchée.
Si une batterie est branchée, et quelle est en partie déchargée, le chargeur intégré de la carte va se mettre à la recharger : une led bleue s’allume.
Note
Notez qu’il y a une tension de 5V sur la broche
5V
de la carte uniquement lorsque la carte est branchée par USB. -
Le connecteur de la batterie est directement relié à la broche \(V_{IN}\) , par conséquent, si vous branchez une batterie, la tension de la batterie sera aussi disponible sur la broche \(V_{IN}\) .
Avertissement
Il faut donc jamais brancher en même temps une alimentation externe et une batterie ! Sinon sans ajout de protection de votre part, la batterie et/ou votre alimentation externe risque d’être endommagée, voire détruite.
Le connecteur de la batterie est également relié au circuit de recharge.
Le type de batterie à utiliser
La batterie utilisée doit être compatible avec le chargeur intégré de la carte uPesy. Le chargeur est un MCP73831 de chez MicroChip qui permet de recharger des batteries Li-Ion/Li-Polymer composées d’une seule cellule de 3.7V (ou 4.2V lorsque la batterie est complètement chargée).
Elles sont beaucoup utilisées dans les appareils mobiles.
Astuce
Pour ceux qui font du modélisme, cela correspond à un accu lipo 1S.
Avertissement
Il ne faut surtout pas utiliser des batteries qui contiennent plusieurs cellules (2S, 3S, …)
Avertissement
Il ne faut pas non plus utiliser des piles AAA, LR3, LR6 rechargeables ou non sur le rail \(V_{BAT}\) .
La capacité de la batterie à choisir dépendra de votre application et de tout les combien temps vous devrez recharger la batterie. Une capacité entre 1000mAh et 2000mAh sera amplement suffisante dans la plupart des cas.
L’autre point important est de vérifier que la polarité de votre batterie correspond bien à celle de la carte. Malheureusement, il semblerait qu’il n’y a pas de consensus sur la polarité des connecteurs des batteries.
Avertissement
Il n’y a pas de protection contre les inversions de polarité aux niveaux du connecteur de la batterie.
Référez-vous à l’image ci-dessus, pour vérifier la polarité : le 3.7V de la batterie, représenté par le fil de couleur rouge doit rentrer du côté du “+”. Dans le doute, vérifiez avec un voltmètre la polarité avant branchement.
Astuce
Vous pouvez facilement intervertir les 2 câbles du connecteur si la polarité est incorrecte.
Voici des exemples de batteries LiPo compatibles avec la carte uPesy :
https://www.amazon.com/dp/B087LTZW61 [connecteur JST 1.25]
https://www.amazon.com/dp/B082152887 [polarité inversée]
Le fonctionnement du chargement
Le rechargement d’une batterie déjà connectée sur le connecteur JST se passe de la manière suivante :
-
Lorsqu’un câble USB est branché, la batterie n’alimente plus la carte. C’est l’alimentation USB qui va à la fois alimenter la carte et charger la batterie en plus.
Note
C’est mieux de d’abord brancher la batterie, ensuite l’USB. Parfois, dans l’autre sens, le chargeur ne lance pas la recharge.
La LED bleue doit s’allumer. Quand une batterie est branchée, cette LED s’allume uniquement pendant son chargement.
Tant que la LED bleue est allumée, la batterie est en train de se charger.
Lorsque la LED est éteinte, c’est que la batterie est complètement chargée.
On peut débrancher le câble USB, et la batterie alimentera de nouveau l’ESP32.
Le courant de charge maximal est limité autour de 500 mA. En fonction de la capacité de la batterie, le temps de charge sera plus au moins long. Pour ce type de batterie, le courant de charge n’est pas tout le temps constant à 500mA, il décroît progressivement :
Pour une batterie de 1000mAh complètement vide, le temps de charge complet est autour de 3h30. 70% de la batterie est rechargée en 1h30, les 30% restants en 2h. Il peut être pertinent, pour une recharge “rapide” d’arrêter la charge vers 70%, au moment ou le courant de charge commence à diminuer. Malheureusement, ce type de chargeur n’indique pas ce changement de mode : la LED bleue ne sera éteinte qu’à la toute fin du cycle. Vous pouvez néanmoins implémenter un compteur dans l’ESP32 qui prévient à l’utilisateur au bout de 1h30 que la batterie est chargée autour de 70%.
Note
La procédure complète du chargement est disponible dans la datasheet du chargeur MCP73831 .
Connaître le déchargement de la batterie depuis un programme
Avec une batterie Li-Ion/Li-Polymer, on peut estimer sa capacité restante en se basant sur sa tension. La carte intègre un pont diviseur de tension, relié à la broche GPIO35
, qui divise la tension \(V_{DC}\) par un ratio.
Avertissement
Cette méthode fonctionne uniquement quand la carte est alimentée par batterie. La tension renvoyée sera erronée si l’USB est branché en même temps pour recharger la batterie.
On peut donc connaître soit la tension de la batterie \(V_{BAT}\) , soit d’une alimentation externe \(V_{IN}\) , voir celle de l’USB \(V_{BUS}\) avec la formule suivante :
Le ratio est de \(1.435\) . Le code Arduino suivant permet de mesurer la tension de la batterie :
void setup() {
pinMode(35, INPUT); // Il faut déclarer le pin en entrée
Serial.begin(115200);
}
void loop() {
float v_mes = analogRead(35);
float v_dc = 1.435*(v_mes/4095)*3.3;
Serial.println(v_dc);
delay(100);
}
Avec l’USB de branché, vous devriez obtenir une tension d’environ 4.74V.
Note
Dans certaines configurations, il se peut que la valeur obtenue soit anormalement basse, et qu’elle augmente progressivement jusqu’à atteindre la tension réelle de la batterie. (Environ 5 minutes).
À titre informatif, en théorie si l’on applique la formule classique, le rapport du pont diviseur devrait être égal à \(1.37\) et non \(1.435\) :
Mais en pratique, puisque le courant principal du pont diviseur est très faible vu les valeurs des résistances (1 et 2.7MΩ), on ne peut plus négliger le courant de fuite vers la broche GPIO35
. De là vient principalement la différence entre les valeurs. Votre ratio peut légèrement être différent de quelques centièmes, si l’on prend en compte la tolérance des résistances (1%).
Protections intégrées
La carte uPesy ESP32 WROOM Low Power DevKit intègre des fusibles pour sécuriser vos projets contre des courts-circuits :
Sur le rail de l’USB (\(V_{BUS}\) ), il y a un fusible thermique auto-réarmable de 750mA. Il s’active et se désactive automatiquement (c’est une résistance qui varie avec la température appelée polyfuse en anglais).
Note
Lors de la charge d’une batterie, il faudra donc éviter de tirer trop de courant sur d’autres circuits (sur des moteurs par exemple), pour éviter que ce fusible se déclenche.
-
Sur chacun des rails \(V_{BAT}\) et \(V_{IN}\) , il y a des fusibles non-réarmables de 750mA de chez LittelFuse : \(F_{BAT}\) et \(F_{VIN}\) . S’ils se déclenchent, il faudra en mettre des nouveaux car la carte ne sera plus alimentée. Heureusement, des emplacements ont été prévus à cet effet derrière la carte.
Astuce
Il est également possible de désactiver ces 2 fusibles en faisant un pont de soudure qu’ils soient grillés ou non. En désactivant cette sécurité, vous devrez vous assurer que votre alimentation (batterie ou alimentation externe) possède des protections efficaces contre des éventuels courts-circuits.
Il y a globalement moins de protection que sur la carte uPesy ESP32 Wroom DevKit, pour limiter au maximum la consommation et ainsi obtenir une très basse consommation en mode Deep Sleep. Il n’y a pas en autres de protections contre les surtensions sur les rails \(V_{BAT}\) et \(V_{IN}\) ni de protections contre les inversions de polarités au niveau de la batterie. À noter que les cartes ESP32 “génériques” ne disposent pas non plus de ses protections.
Fichiers mis à disposition
Modèle 3D (au format
.wrl
) : https://github.com/uPesy/kicad_lib_upesy/raw/master/assets/step_model/upesy_esp32_low_power.wrlPlan avec les dimensions : https://github.com/uPesy/kicad_lib_upesy/raw/master/assets/drawing/upesy_esp32_low_power_devkit_dimension.pdf
Librairie Fritzing : https://github.com/uPesy/fritzing_lib_upesy/raw/master/devkit_boards/uPesy ESP32 Wroom Low Power DevKit v1.fzpz
Librairie KiCad : https://github.com/uPesy/kicad_lib_upesy
Changelog | Historique des modifications
v1.2 (Février 2023)
Modifications de la carte pour pouvoir être assemblé dans la micro-usine d’uPesy :
Migration des composants au boîtier
0603
Déplacement des 2 boutons-poussoirs
v1.1
Changement de la charge maximale de 350mA vers 500mA.
Changement des fusibles de 500mA vers 750mA.
Ajout d’un condensateur de 100nF pour la mesure interne de la tension de la batterie par l’ADC (
GPIO35
).Ajustement du ratio du pont diviseur de tension de la broche
GPIO35
.
v1.0
Première version