lundi 29 juillet 2019

ESP 32: Utilisation des broches tactiles

L'ESP32 comporte 10 broches tactiles, c'est à dire des entrées qui peuvent détecter si on les touche du doigt. Cette fonctionnalité peut servir, par exemple, à remplacer des boutons poussoirs par des surfaces conductrices. Voyons comment les utiliser.

(Dans le présent tuto, nous programmons l'ESP32 au moyen de l'IDE Arduino. Si vous n'avez jamais programmé l'ESP32 avec l'IDE Arduino, vous pouvez vous référer à ce précédent billet).

Identification des broches tactiles

Les broches qui peuvent être utilisées pour détecter un contact avec le doigt sont:

GPIO 0 (si disponible), GPIO 2, GPIO 4, GPIO 12, GPIO 13, GPIO 14, GPIO 15, GPIO 27, GPIO 32 et GPIO 33.

Le schéma ci-dessous montre la position des broches tactiles sur la carte de développement que j'utilise. Sur cette carte, GPIO 0 n'est pas accessible, car elle est utilisée pour autre chose, ce qui laisse la possibilité d'utiliser jusqu'à 9 broches tactiles.

Notez les deux façons possibles d'identifier les broches dans un sketch: pour lire l'état de la broche GPIO 32, par exemple, on pourra écrire touchRead(32) ou touchRead(T9), avec le même résultat.



Fabrication d'un pavé tactile

On pourrait se contenter de toucher directement les broches de la carte de développement ESP32 mais, pour une meilleure ergonomie, j'ai fabriqué un pavé tactile rudimentaire comportant 3 "boutons", chaque bouton étant constitué d'un petit carré découpé dans une feuille d'aluminium et relié par un fil conducteur à une broche tactile.




Pour mes tests, j'ai branché le bouton de gauche (bouton A) à la broche GPIO 13, le bouton du centre (bouton B) à la broche GPIO 12, et le bouton de droite (bouton C) à la broche GPIO 14.

Premier sketch: affichage des valeurs brutes

Côté programmation, rien de plus facile: la fonction touchRead() retourne un entier qui n'a pas la même valeur selon qu'on touche la broche ou non. Il s'agit de passer le numéro de la broche en argument: touchRead(13) pour lire la broche GPIO 13, etc. Puisque GPIO 13 est la broche tactile numéro 4, on obtiendra le même résultat avec touchRead(T4).

Voici donc un sketch qui affiche dans le moniteur série la valeur retournée par touchRead() pour chacun de nos 3 "boutons":


Lorsqu'on ne touche aucun des carrés conducteurs, touchRead() retourne une valeur située entre 70 et 80 (la valeur exacte peut dépendre de la taille du carré d'aluminium).


Lorsqu'on touche du doigt un carré d'aluminium, la valeur retournée par touchRead() diminue pour atteindre une valeur inférieure à 20. Dans la capture ci-dessous, j'avais le doigt sur le bouton A:


Deuxième sketch: interprétation des valeurs mesurées

Maintenant qu'on a une idée des valeurs retournées par touchRead() selon qu'on touche ou non chaque bouton, la stratégie à adopter est évidente: il s'agit d'établir une valeur seuil en-deça de laquelle nous sommes certains qu'un doigt est en contact avec le bouton. Dans le sketch ci-dessous, j'ai utilisé 30.  Ce sketch affiche chaque seconde le nom de chaque bouton pour lequel il y a contact (nous pouvons toucher plus d'un bouton à la fois, si désiré).

-----------------



Voilà! Il ne reste plus qu'à décider ce que fera votre ESP32 lorsque vous toucherez une de ses broches tactiles.

Yves Pelletier   (TwitterFacebook)

2 commentaires:

  1. Salut
    Est-ce uniquement Tactile ou aussi CAPACITIF : Si on ajoute un isolant sur les carrés d'alu, la detection peut toujours se faire ?
    Il y a une librairie qui permet de faire cela (= du capacitif et/ou tactile) sur Arduino ;)

    RépondreSupprimer
    Réponses
    1. La documentation de l'ESP32 parle effectivement de "capacitive touch pins". En ajoutant une feuille de papier par dessus mes carrés d'aluminium, les valeurs mesurées sont d'environ 30 quand je pose le doigt sur le papier.

      Supprimer