Utiliser les capteurs capacitifs de l’ESP32 en MicroPython
(Mis à jour le 04/01/2023)
L’ESP32 est doté de capteurs capacitifs qui peuvent être utilisés pour remplacer les boutons-poussoirs traditionnels. Appelés parfois “TOUCH” sur les pinouts des ESP32 disponibles sur Internet, on en trouve 10 sur les cartes ESP32 d’uPesy que l’on pourra contrôler avec MicroPython.

Comment fonctionne un capteur capacitif ?
Ces capteurs capacitifs sont très populaires pour détecter la pression de nos doigts sur les appareils du quotidien. Ils font office de boutons-poussoirs.

Ils se basent sur la variation de capacité d’un condensateur quand on touche le capteur. En fait, un condensateur est composé de deux plaques métalliques qui se font face, séparées par un substrat non conducteur. Sur le capteur, il n’y en a qu’une seule, la deuxième étant votre doigt. Cette variation est convertie ensuite en valeur analogique par l’ADC de l’ESP32.
Note
Il est important de noter que les capteurs capacitifs ne sont pas aussi fiables que les boutons-poussoirs mécaniques. Ces derniers sont plus susceptibles d’être affectés par les parasites provenant de l’environnement.
En effet, il y a des facteurs qui peuvent interférer et affecter les valeurs obtenues. Voici un schéma qui vous donne une meilleure compréhension des sources de perturbations :

Pour obtenir de bons résultats, il est nécessaire de prendre en compte tous ces paramètres et de concevoir un circuit électrique plus rigoureux et complexe que celui présenté plus tard. Détecter la pression d’un doigt peut se faire très simplement avec uniquement un fil de cuivre.

Utiliser les capteurs capacitifs de l’ESP32 avec MicroPython
Avec Micro-Python, le procédé est très comparable aux mesures analogiques. Contrairement aux boutons-poussoirs, la valeur récupérée n’est pas binaire (LOW
ou HIGH
), mais une valeur analogique comprise entre 0 et 4095.
Note
Dans le script Python, on indique le numéro de la broche qui possède une fonctionnalité TOUCH
. Par exemple, ici nous utilisons le TOUCH0
, qui est hébergé sur le pin GPIO4
.
from machine import TouchPad, Pin
import time
touch_pin = TouchPad(Pin(4, mode=Pin.IN))
while True:
touch_value = touch_pin.read()
print(touch_value)
time.sleep_ms(500)
Pour ce qui est du code, il est identique à celui de l’ADC, à l’exception du changement de ADC(Pin(36, mode=Pin.IN))
à TouchPad(Pin(4, mode=Pin.IN))
.
La valeur étant analogique, il est nécessaire de définir un seuil à partir duquel nous pourrons détecter une pression. Quand il n’y a rien, la valeur est considérée comme étant élevée. Par contre, lorsque le fil est touché, celle-ci chute significativement.

Note
Il n’y a pas de valeur de seuil universelle. Cela varie selon le matériel utilisé (fil, longueur, breadboard…) et vous devrez le régler de votre côté.
Voici un exemple avec un seuil de 150
:
from machine import TouchPad, Pin
import time
capacitiveValue = 500
threshold = 150 # Seuil à ajuster
touch_pin = TouchPad(Pin(4))
print("\nESP32 Touch Demo")
while True: # Boucle infinie
capacitiveValue = touch_pin.read()
if capacitiveValue < threshold:
print("Fil touché")
time.sleep_ms(500)
Voyez par vous-même le résultat !

C’est tout ! Il y a des modules de capteurs capacitifs déjà prêts qui incluent un circuit qui convertit le niveau de capacité en une valeur binaire.

De ce côté, il y a uniquement le circuit de conversion, pas de plaque

Si vous souhaitez en obtenir, préférez les modules ne contenant pas ce circuit de conversion, ce qui vous donnera un signal brut qui pourra ensuite être converti par l’ESP32 en utilisant son circuit interne. En soi, une PCB avec juste un endroit pour mettre son doigt.