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)

mardi 23 juillet 2019

Livre: Circuits électroniques pour les Kids


Circuits électroniques pour les kids
Øyvind Nydal Dahl
Éditions Eyrolles, 2019
Collection "Pour les kids"

Ce nouveau livre, à ne pas confondre avec "L'électronique pour les kids", du même auteur, propose aux électroniciens néophytes 10 circuits classiques :

- une simple LED qui s'allume
- un jeu d'adresse
- un interrupteur sensitif
- une alarme antivol (buzzer qui s'active à partir d'une certaine intensité lumineuse)
- une veilleuse de nuit  (LED qui s'allume quand il fait noir)
- une LED clignotante
- un feu de signalisation (deux LEDs qui clignotent en alternance)
- un éclairage de fête (plusieurs LEDs clignotantes)
- un piano numérique
- chenillard de LED

Tous ces montages sont réalisés au moyen de composants classiques: résistances, condensateurs, transistors bipolaires, LEDs, photorésistance, et trois circuits intégrés incontournables: le temporisateur NE555, le compteur décimal CD4017, et les portes inverseuses 74C14.

L'approche pédagoque m'a semblé simple et efficace. Dans les premières pages du livre, on explique comment construire sur breadboard un circuit simple qui correspond à un schéma conventionnel. Pour les autres circuits, on ne fournit que le schéma. Le lecteur est donc encouragé à comprendre comment passer de la représentation schématique à un circuit réel.

Pour la plupart des circuits, on fournit d'abord le schéma, on donne quelques recommandations sur la marche à suivre, puis on fournit une liste "d'erreurs fréquentes" à surveiller si le circuit ne fonctionne pas au premier essai. Finalement, on explique pourquoi le circuit se comporte comme il le fait: il ne s'agit donc pas de suivre une recette sans avoir la moindre idée de la théorie qui explique son fonctionnement.

Le livre cible un public jeune (à partir de 10 ans). À mon avis, ça peut tout aussi bien être utile à un adulte, peu importe son âge, qui désire faire ses tous premiers pas en électronique.

Yves Pelletier   (TwitterFacebook)

samedi 20 juillet 2019

Test de vitesse: Arduino Uno / STM32 / ESP8266 / ESP32

Aujourd'hui, j'organise une petite course afin de comparer la vitesse de quatre cartes programmables au moyen de l'IDE Arduino:
  • Arduino Uno (ATmega328P, 8 bits, 16 MHz)
  • Blue Pill (STM32F103, 32 bits, 72 MHz)
  • Wemos D1 R1 (ESP8266, 32 bits, 80 MHz)
  • ESP32 (32 bits, 240 MHz)

Pour ce faire, j'ai utilisé le sketch Arduino Speed Test, une version améliorée d'un programme initialement publié sur arduino.cc. Le fonctionnement de ce programme n'a rien de bien compliqué: il consiste à chronométrer le temps nécessaire pour effectuer une même tâche plusieurs fois de suite, et à calculer la moyenne.

Un aspect intéressant, c'est que nous obtenons une comparaison des performances lorsque les 4 cartes sont programmées de la même manière, au moyen de l'IDE Arduino. La simplicité du "langage" Arduino se fait souvent au détriment de la performance, mais cette contrainte ne devrait pas désavantager une carte par rapport aux autres.

De plus, aucune des 4 cartes ne coûte significativement plus cher que les autres: il s'agit strictement de cartes offertes à très bas prix, et faciles à trouver.

Le tableau ci-dessous présente la durée de chaque test, pour chacune des 4 cartes analysées. Plus le temps mesuré est court, plus la carte est rapide.

Signification des couleurs:

Le plus rapide Le deuxième Le troisième Le plus lent

Tous les temps sont en microsecondes:

Test Uno Blue Pill ESP8266 ESP32
1/F_CPU 0,0625 0,0139 0,0125 0,0042
nop (overload) 0,26 0,07 0,05 0,021
digitalRead 4,842 0,604 0,54 0,141
digitalWrite 4,184 0,626 1,045 0,106
pinMode 4,467 2,211 1,475 2,744
multiply byte 0,632 0,11 0,1 0,037
divide byte 5,412 0,114 0,403 0,049
add byte 0,568 0,098 0,1 0,032
multiply int 1,386 0,082 0,148 0,053
divide integer 14,272 0,096 0,437 0,054
add integer 0,883 0,082 0,135 0,053
multiply long 6,102 0,084 0,148 0,051
divide long 38,662 0,096 0,422 0,049
add long 1,764 0,083 0,135 0,053
multiply float 7,49 0,989 0,738 0,051
divide float 80,187 6,971 3,772 0,224
add float 9,417 1,236 0,683 0,049
itoa() 12,957 NA 2,582 0,699
ltoa() 12,987 NA 9,297 0,699
dtostrf() 80,687 93,321 NA 11,149
random() 92,612 1,571 0,998 0,699
y |= (1<<x) 0,568 0,069 0,11 0,045
bitSet() 0,568 0,069 0,11 0,045


Les résultats sont conformes à ce que la vitesse d'horloge de chaque microcontrôleur nous permettait de prévoir: l'Arduino Uno est le plus lent, et de loin, pour la grande majorité des tests. La STM32 Blue Pill et l'ESP8266 offrent souvent des performances assez comparables, et l'ESP32 est beaucoup plus rapide que tous les autres.

La fréquence d'horloge de l'ESP32 est 15 fois plus rapide que celle de l'Arduino Uno, mais quand vient le temps de diviser deux entiers de type "long", l'ESP32 effectue l'opération...789 fois plus rapidement que le Uno!

Contrairement à ce qu'on pourrait croire à prime abord, l'utilisation d'un ESP32 n'est pas uniquement pertinente dans les applications qui nécessitent du WiFi: on peut très bien choisir de l'utiliser purement à cause de sa vitesse.

Bien sûr, ce n'est pas une raison pour jeter votre Arduino Uno à la poubelle: pour la plupart des applications, sa "faible" vitesse d'exécution est amplement suffisante.

Yves Pelletier   (TwitterFacebook)