(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":
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/************************************************* | |
* Exploration des broches tactiles de l'ESP32 | |
* 3 broches sont activées: GPIO13, GPIO12, GPIO14 | |
* Dans cette version, on affiche dans le moniteur | |
* série la valeur brute retournée par touchRead() | |
Plus d'infos: | |
https://electroniqueamateur.blogspot.com/2019/07/esp-32-utilisation-des-broches-tactiles.html | |
*************************************************/ | |
const int boutonA = 13; // GPIO13 = T4 | |
const int boutonB = 12; // GPIO12 = T5 | |
const int boutonC = 14; // GPIO14 = T6 | |
void setup() | |
{ | |
Serial.begin(9600); | |
delay(1000); | |
} | |
void loop() | |
{ | |
Serial.print("Bouton A: "); | |
Serial.println(touchRead(boutonA)); | |
Serial.print("Bouton B: "); | |
Serial.println(touchRead(boutonB)); | |
Serial.print("Bouton C: "); | |
Serial.println(touchRead(boutonC)); | |
Serial.println(""); | |
delay(1000); | |
} |
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é).
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* | |
Exploration des broches tactiles de l'ESP32 | |
3 broches sont activées: GPIO13, GPIO12, GPIO14 | |
On écrit dans le moniteur série le nom de chaque broche touchée. | |
Plus d'infos: | |
https://electroniqueamateur.blogspot.com/2019/07/esp-32-utilisation-des-broches-tactiles.html | |
*/ | |
const int boutonA = 13; | |
const int boutonB = 12; | |
const int boutonC = 14; | |
void setup() | |
{ | |
Serial.begin(9600); | |
delay(1000); | |
Serial.println("Dans l'attente d'une touche"); | |
} | |
void loop() | |
{ | |
if ((touchRead(boutonA)) < 30) { | |
Serial.print(" Bouton A "); | |
} | |
if ((touchRead(boutonB)) < 30) { | |
Serial.print(" Bouton B "); | |
} | |
if ((touchRead(boutonC)) < 30) { | |
Serial.print(" Bouton C "); | |
} | |
Serial.println(""); | |
delay(1000); | |
} |
Voilà! Il ne reste plus qu'à décider ce que fera votre ESP32 lorsque vous toucherez une de ses broches tactiles.
Yves Pelletier (Twitter, Facebook)