Pourquoi votre capteur analogique sur ESP32 s'affole dès la connexion au Wi-Fi

Si votre capteur analogique renvoie des valeurs aberrantes dès que le Wi-Fi s'active, vous l'avez branché sur une broche ADC2. La radio Wi-Fi de l'ESP32 monopolise l'ADC2 ; déplacer votre capteur vers l'ADC1 résout immédiatement le problème.
Votre capteur analogique renvoie des valeurs nettes et cohérentes lors des tests sur le port série USB. Dès l'instant où votre code exécute WiFi.begin() et établit une connexion, les mesures oscillent de manière erratique, restent bloquées à 4095 ou chutent brutalement à zéro. Le capteur n'est pas endommagé, il ne manque aucune résistance de rappel (pull-up) et votre carte n'est pas défectueuse. Vous avez simplement branché votre capteur sur une broche de l'ADC2.
Le goulot d'étranglement matériel : ADC1 contre ADC2
La puce standard de l'ESP32 intègre deux convertisseurs analogique-numérique (CAN ou ADC) 12 bits distincts : ADC1 et ADC2. À eux deux, ils gèrent jusqu'à 18 broches d'entrée analogique sur la puce nue, bien que les cartes de développement n'en rendent accessible qu'une partie.
L'ADC1 fonctionne de manière totalement indépendante. L'ADC2, en revanche, partage des ressources matérielles internes avec le sous-système radio Wi-Fi et Bluetooth de l'ESP32. Dès que le pilote Wi-Fi s'active — qu'il s'agisse de rechercher un SSID, de gérer les négociations DHCP ou de transmettre une trame de télémétrie MQTT —, la pile réseau s'octroie un accès exclusif à l'ADC2 pour le calibrage des radiofréquences et les mesures de puissance internes.
Si votre code appelle analogRead() sur une broche de l'ADC2 alors que le pilote Wi-Fi fonctionne, ce dernier interrompt ou bloque la lecture. Avec le cœur Arduino ou sous MicroPython, le problème se manifeste de deux façons : la fonction de lecture échoue et renvoie une valeur nulle ou aberrante, ou bien les salves radioélectriques génèrent un bruit électrique majeur directement dans le périphérique, faisant basculer la conversion entre la saturation (4095) et la masse (0).
Le réassignement des broches : broches sûres et broches à éviter
La solution ne nécessite aucun bricolage logiciel : déplacez simplement le fil de signal de votre capteur de l'ADC2 vers une broche de l'ADC1. Les canaux de l'ADC1 sont électriquement indépendants de la bande de base Wi-Fi et continuent d'assurer des conversions fiables quelle que soit l'activité réseau.
| ADC Unit | GPIO Numbers | Wi-Fi Safe? | Classroom Notes |
|---|---|---|---|
| ADC1 | GPIO 32, 33, 34, 35, 36 (VP), 39 (VN) | Oui | Sans danger pour n'importe quel capteur analogique pendant l'émission Wi-Fi. Notez que les GPIO 34, 35, 36 et 39 fonctionnent uniquement en entrée (sans résistances internes de pull-up ou pull-down). |
| ADC2 | GPIO 0, 2, 4, 12, 13, 14, 15, 25, 26, 27 | Non | Inutilisable pour l'échantillonnage analogique dès l'appel à WiFi.begin(). Plusieurs de ces broches servent également au démarrage (bootstrapping). |
Les broches GPIO 36 et 39 sont souvent étiquetées VP et VN sur les cartes ESP32 NodeMCU/DevKit courantes à 30 et 38 broches. Avec les GPIO 32, 33, 34 et 35, ce sont vos broches prioritaires pour l'acquisition analogique.
Un exemple concret de câblage
Prenons l'exemple d'un projet IoT classique en classe : un système automatisé de surveillance de plante enregistrant l'humidité du sol ou la luminosité ambiante. Un élève raccorde une sonde analogique d'humidité du sol sur la GPIO 4 (canal 0 de l'ADC2), simplement parce qu'elle se trouve à côté de la broche de masse. Hors ligne, le moniteur série affiche des valeurs cohérentes comprises entre 1500 et 2800. Dès que la carte se connecte au point d'accès de l'école pour transmettre les données à un tableau de bord, les mesures se bloquent à 4095.
Pour corriger le problème :
- Déplacez le fil de liaison du signal de la GPIO 4 vers la GPIO 34 (ou 32, 33, 35).
- Mettez à jour la définition de la broche dans le code :
const int sensorPin = 34;. - Conservez la GPIO 4 pour des sorties numériques, par exemple pour piloter un module relais ou un transistor commandant une pompe submersible 5 V.
Si vous concevez des stations multicapteurs dédiées à la surveillance environnementale, vous pouvez découvrir du matériel pédagogique structuré et des plans de brochage sur Sheen IoT.
Facteur secondaire : la chute de tension sur le rail d'alimentation
Si vous avez déplacé votre capteur sur l'ADC1 (par exemple sur la GPIO 32) et que vous constatez toujours de légers pics aberrants durant l'émission, vous êtes confronté à un problème de stabilité de l'alimentation plutôt qu'à un verrouillage de l'ADC. Lorsque l'ESP32 active son émetteur radio, la consommation de courant grimpe brutalement d'environ 50 mA à plus de 300 ou 400 mA pendant quelques millisecondes.
Si la carte est alimentée par le port USB parasité d'un vieux chariot d'ordinateurs portables de classe ou par des câbles de prototypage trop fins, le rail d'alimentation 3,3 V subit une baisse de tension momentanée. Comme les conversions analogiques mesurent une tension par rapport au rail d'alimentation (la tension de référence), une chute sur ce rail donne l'impression que la tension analogique externe bondit vers le haut. L'ajout d'un condensateur électrolytique de 100 µF entre les lignes 3V3 et GND de votre plaque d'essai élimine totalement ces perturbations transitoires liées à la radio.



