jeudi 10 septembre 2026

Exploration du Cheap Yellow Display (ESP32-2432S028)

Dans cet article, je fais une première exploration de l'ESP32-2432S028, que ses utilisateurs ont affectueusement rebaptisé "Cheap Yellow Display" ou CYD (qui peut se traduire par "écran jaune bon marché").


Cette carte combine dans un format compact un microcontrôleur ESP32, un écran tactile, un lecteur de cartes microSD en plus de quelques autres gadgets que j'aurai l'occasion d'énumérer plus loin dans cet article. 

Notez que la carte existe depuis déjà quelques années. La principale raison pour laquelle je ne me suis pas précipité pour en acquérir une plus tôt (et je crois bien qu'il s'agit de son principal inconvénient), c'est qu'avec tout ce qui est déjà inclus sur la carte, il ne reste que très peu de broches GPIO disponibles (seulement 3, en fait). Dans les circonstances, le CYD s'apparente plus à un minuscule ordinateur à programmer soi-même qu'à une véritable carte de prototypage...un joujou pour informaticien plutôt qu'un joujou pour électronicien.

Cette contrainte est contournable (le CYD pourrait, par exemple, communiquer par WiFi, Bluetooth ou autre avec un deuxième module ESP32 qui, lui, disposerait de dizaines de ports GPIO utilisables). Mais comme vous le constaterez plus loin dans cette article, je trouve que les concepteurs auraient pu libérer quelques broches supplémentaires.

Et il faut bien admettre que le CYD comporte des avantages évidents. Pour brancher un écran tactile à un module ESP32 conventionnel, il faut quand même brancher 14 bouts de fil! Alors qu'ici, tout est déjà branché dès le départ.


J'ai donc commandé un Cheap Yellow Display auprès d'un revendeur chinois. Une semaine plus tard, on le déposait devant ma porte, au Québec. Ça vient avec un câble USB, un stylet en plastique et quelques fils utiles pour brancher un éventuel capteur. 

Voici le verso du CYD. Au cas où vous n'auriez pas fait le lien, ça s'appelle "Cheap Yellow Display" parce que le circuit imprimé est de couleur jaune.


Vous constaterez peut-être que j'ai hérité du modèle qui comporte deux ports USB (un USB-C et un micro-USB). Les deux ports ont la même fonction (alimenter et programmer la carte). On utilise celui qu'on préfère. D'autres modèles ne comportent qu'un port micro-USB.

Lorsque j'ai alimenté la carte par le port USB, un petit programme s'est exécuté, ce qui m'a permis de constater rapidement que ma carte était fonctionnelle.

Premier test: le WiFi

Pour programmer la carte, j'ai utilisé l'IDE Arduino, en réglant le type de carte à "ESP32 Dev Module".

( Menu Outils / Carte / esp32 / ESP32 Dev Module )


(Si les cartes ESP32 ne sont pas visibles dans le menu Carte, vous pouvez les installer en consultant ce guide).

Puisque l'élément central de la carte est l'ESP32, mon premier programme a consisté à vérifier rapidement si le WiFi était fonctionnel­.

Pour ce faire, j'ai téléversé dans la carte le programme d'exemple "WiFiScan".


( Menu Ficher / Exemples / WiFi / WiFiScan )

Lors de l'exécution du programme, une liste des réseaux Wi-Fi détectés s'affiche dans le moniteur série. De l'IDE Arduino.


Affichage à l'écran

Maintenant que nous avons vérifié que l'ESP32 est fonctionnel, essayons d'afficher quelque chose à l'écran.

Une première difficulté, c'est que certains exemplaires du CYD sont munis d'un écran qui utilise le contrôleur ILI9341, alors que d'autres utilisent plutôt le ST7789. Il faut parfois faire quelques essais pour découvrir soi-même de quel type d'écran il s'agit.  Dans mon cas, c'est le ST7789.

Peu importe le type de contrôleur, la bibliothèque TFT_eSPI de Bodmer fera parfaitement l'affaire (on dit également beaucoup de bien de la bibliothèque Lovyan GFX, mais je ne l'ai encore jamais essayée). 

Donc, installation de la bibliothèque TFT_eSPI au moyen du gestionnaire de bibliothèque de l'IDE Arduino.


La bibliothèque TFT_eSpi a une particularité inhabituelle:  avant de l'utiliser, il faut obligatoirement modifier le contenu du fichier "User_Setup.h" situé dans le répertoire de la bibliothèque afin d'y indiquer les paramètres correspondant à notre écran et à notre microcontrôleur. 


Vous pouvez voir ci-dessous le contenu du fichier User_Setup.h que j'ai utilisé. Il provient du gitHub de witnessmenow.

-

-

Il s'agit des instructions appropriées pour les CYD comportant 2 ports USB. Pour les autres modèles, il est possible que vous deviez plutôt utiliser le contrôleur ILI9341. Si vous constatez que les couleurs à l'écran son inversée, effacez l'instruction "#define TFT_INVERSION_OFF".

Pour vérifier que je peux efficacement programmer l'affichage à l'écran, j'ai téléversé l'exemple "Demo_3D_cube".

(Menu Fichier - Exemples - TFT_eSPI - 480 x 320 - Demo_3D_Cube)



Un cube tourne et se déplace sur l'écran. 


Détection d'une touche sur l'écran

L'écran comporte également un contrôleur XPT2046 pour détecter les positions où on touche l'écran. La bibliothèque TFT_eSPI que nous venons d'utiliser comporte en principe tout ce qui est nécessaire pour accomplir cette tâche...mais pas dans le cas du Cheap Yellow Display. La raison? Le contrôleur tactile XPT2046 n'est pas connecté aux mêmes broches SPI que le contrôleur d'image ST7789. 

Le remède consiste à utiliser une autre bibliothèque pour détecter les touches. (C'est un peu frustrant: les sketches que j'ai déjà conçus pour un écran tactile branché à un ESP32 ne fonctionnent donc pas sur le Cheap Yellow Display!)

J'ai choisi la bibliothèque XPT2046_Bitbang_Slim qui permet à l'utilisateur de définir les broches SPI dédiées au contrôleur tactile. Il s'agit d'une bibliothèque assez minimaliste, mais elle fonctionne bien et, contrairement à d'autres bibliothèques, elle n'interfère pas avec le fonctionnement du lecteur de carte SD.

On peut l'installer facilement dans le gestionnaire de bibliothèque.


Voici un sketch inspiré de l'exemple fourni avec la bibliothèque. Chaque fois que vous touchez l'écran, les coordonnées brutes et calibrées sont affichées à l'écran et dans le moniteur série.

-

-



Les coordonnées brutes s'échelonnent grosso modo de 0 à 4000 mais leur valeur exacte varie d'un écran à l'autre. Si la calibration est juste, les valeurs calibrées correspondront aux coordonnées des pixels sur l'écran (de 0 à 320 pour x, et de 0 à 240 pour y). 

Avec le stylet, touchez un point situé complètement à la gauche de l'écran, afin de connaître la plus petite valeur brute de la coordonnée x. Il faut assigner cette valeur à la constante xRawMin du sketch, et procéder de façon similaire pour xRawMax, yRawMin et yRawMax.


Utilisation d'une carte microSD

Aucune mauvaise surprise concernant le lecteur de carte microSD. J'ai inséré une carte dans le lecteur, et exécuté l'exemple "SDtest", qui a fonctionné correctement sans nécessiter la moindre modification.

(Menu Fichier - Exemples - SD - SD_Test )

Ce script affiche dans le moniteur série le nom des fichiers et répertoires qui se trouvent sur la carte.


Contrôle de la LED RGB

La présence d'une LED sur une carte de développement n''est généralement pas matière à débat, et c'est souvent le point de départ pour nous assurer que la carte fonctionne correctement. Dans le cas du CYD, il s'agit d'une LED RGB, donc en fait 3 LEDs: une rouge, une verte et une bleue. Dans un contexte où les entrées/sorties disponibles sont rares,  3 sorties réservées à cette seule LED, c'est beaucoup! On peut aussi critiquer son positionnement (au verso de l'écran) et déplorer l'absence de diffuseur (si on tente de mélanger les couleurs, ça donne en fait 3 points lumineux bien distincts).

Personnellement, j'aurais préféré une seule LED située au recto à côté de l'écran, et les deux autres sorties auraient été disponibles pour y brancher ce qu'on veut!

Vous pouvez allumer ou faire clignoter chaque couleur sachant que la LED rouge est contrôlée par la broche GPIO 4, la verte est contrôlée par la broche GPIO 16 et la bleue est contrôlée par la broche GPIO 17.

Sortie pour haut-parleur

La broche GPIO 26. est branchée à un amplificateur, ce qui nous permet d'y brancher directement un haut-parleur, même s'il est de faible impédance (connecteur SPEAK). L'idée n'est pas mauvaise, mais les utilisateurs se plaignent souvent de la mauvaise qualité sonore, le gain de l'amplificateur étant beaucoup trop élevé.

Utilisation de la photorésistance

Une photorésistance été placée sur la carte, en principe pour permettre au programmeur de varier l'intensité du rétroéclairage de l'écran en fonction de l'intensité lumineuse ambiante. Ce capteur de lumière est très peu sensible et il a été maladroitement positionné près d'une ouverture sur le côté de l'écran qui laisse passer la lumière du rétroéclairage . Dans mon cas, rien à faire: j'ai beau modifier la sensibilité du convertisseur analogique/numérique, la photorésistance retourne le même résultat peu importe qu'il fasse nuit noire où qu'on soit en plein soleil! 

En ce qui me concerne, il s'agit d'un autre gaspillage des broches GPIO de l'ESP32 (la broche GPIO 34 dans ce cas)!

Brancher un capteur à une broche GPIO disponible

Les entrées/sorties disponibles sont rares, et étrangement conçues. Un connecteur JST nommé "CN1" permet d'accéder à GND, GPIO 22, GPIO 27 et 3,3 V.  Un  autre connecteur du même genre, nommé P3, permet d'accéder à GND, GPIO 35, GPIO 22 et GPIO 21.

...Sauf que la broche GPIO 21 contrôle le rétroéclairage de l'écran, ce qui la rend à peu près inutilisable pour toute autre fonction (pourquoi les concepteurs l'ont-ils rendue accessible?). La broche GPIO 22 est accessible à deux endroits différents, et la broche GPIO 35 peut uniquement servir comme sortie. 

Si on met de côté les broches d'alimentation (GND et 3,3V), il ne nous reste que trois broches utilisables: GPIO 22, GPIO 27 et GPIO 35! C'est bien peu!

Vous désirez brancher un capteur I2C? C'est faisable, en utilisant les broches du connecteur CN1. Mais puisque la broche 27 n'est généralement pas utilisée pour les communications I2C, il faut la désigner explicitement à l'intérieur de notre programme ce qui, encore une fois, complique inutilement la programmation (il sera parfois nécessaire de modifier une bibliothèque pour que ça fonctionne).

Conclusion

Le produit est certainement intéressant, malgré quelques lacunes irritantes.


Yves Pelletier


À lire également:

mercredi 17 décembre 2025

Transformation d'une batterie "guitar hero" en contrôleur MIDI

J'ai une batterie conçue pour le jeu vidéo "Guitar Hero 3 World Tour" (version Wii) . qui n'a pas été utilisée depuis quelques années (entres autre choses par manque d'intérêt, mais aussi parce que sa pédale a été égarée).

 

Malgré l'absence de la pédale, l'appareil comporte 3 tambours et 2 cymbales, chacun étant muni d'un capteur piézoélectrique...pourquoi ne pas en profiter pour transformer ce jouet en véritable instrument de musique? 

Cerise sur le gâteau: on trouve, à l'arrière de l'appareil, une mystérieuse entrée MIDI IN, que je transformerai en sortie MIDI OUT: en branchant la batterie à la prise MIDI IN de mon clavier MIDI, je pourrai produire des sons de mon choix en frappant sur les tambours­.  

 

Quelques mises en garde, avant d'aller plus loin:

  • Il ne s'agira pas d'un instrument autonome: pour que la batterie génère des sons, elle devra être branchée à un synthétiseur MIDI (clavier MIDI, logiciel MIDI sur un ordinateur...).
  • Puisque je n'ai plus la pédale de cette batterie, mon projet ne comportera pas de pédale.
  • Puisque le clavier MIDI que j'utilise pour générer les sons ne tient pas compte du paramètre "vélocité" des notes MIDI pour les sons de percussion, mon instrument génèrera des notes MIDI de vélocité égale, peu importe que le tambour ait été frappé doucement ou brusquement.
  • Je vais utiliser une carte Arduino. Les premiers tests seront effectués sur un Arduino Uno, mais dans le produit fini il sera remplacé par un vieux Arduino Nano qui traînait dans le fond d'un de mes tiroirs.

Exploration de la batterie, avant sa modification 

La photo ci-dessous montre l'intérieur de la batterie, vue d'en-dessous. On peut voir un petit disque piézoélectrique collé au centre de chacun des trois tambours.


 Chaque cymbale comporte aussi un disque piézoélectrique.

 

Je ne conserverai pas ce circuit imprimé, qui sert d'intermédiaire entre les 5 capteurs piézoélectriques et la "Wiimote" (que je n'ai aucune intention d'utiliser non plus). Vous pouvez distinguer sur la photo les 5 connecteurs blancs qui proviennent des capteurs piézoélectriques (la couleur des fils correspond à la couleur des tambours ou cymbales: ça aide à s'y retrouver).



Les disques piézoélectriques

On utilise souvent les piézos pour produire un son: le piézo transforme une oscillation électrique en oscillation mécanique.

Mais dans une batterie électronique, nous utilisons l'effet inverse: lorsqu'on frappe le piézo, il génère une tension électrique qui peut être détectée par un microcontrôleur.  

 

La méthode généralement recommandée pour brancher un disque piézo à un Arduino consiste à brancher l'électrode centrale à une entrée analogique, brancher l'autre électrode du piézo à la masse (GND), et d'ajouter une résistance de 1 MΩ (un million de ohms) en parallèle avec le piézo. C'est, par exemple, ce qui est décrit dans l'exemple "Knock" fourni avec l'IDE Arduino.

Mais en faisant des tests, j'ai constaté que, lorsqu'on les frappe, les piézos produisent une oscillation pendant laquelle l'oscillation électrique change de polarité: la tension devient négative.  De plus, la tension positive produite par le piézo peut largement dépasser 5 volts. Ces deux caractéristiques ne semblent pas tellement souhaitables si je veux que l'Arduino survive à des heures et des heures de solos de batterie endiablés.

En principe, les entrées de l'Arduino comportent un certain niveau de protection contre les surtensions et les tensions négatives, mais j'ai quand même préféré faire quelques ajouts au circuit. Tout d'abord, une diode schottky permet d'éliminer la partie négative de la tension produite par le piézo (la diode devient passante dès que la tension descend sous zéro). Ensuite, grâce à un diviseur de tension, l'entrée analogique de l'Arduino ne sera soumise qu'à une fraction de la tension générée par le piézo.

J'ai fait ce circuit pour chacun des 5 piézos, ce qui m'a donné la carte ci-dessous (les 5 piézos se branchent aux connecteurs du bas, alors que les 6 connecteurs du haut se branchent à l'Arduino (GND, A0, A1, A2, A3 et A4).

 

J'ai branché les piézos à l'Arduino de la façon suivante:

  • tambour rouge: entrée A0
  • tambour bleu: entrée A1 
  • tambour vert: entrée A2
  • cymbale jaune: entrée A3
  • cymbale orange: entrée A4 

 

Le connecteur MIDI

Pour utiliser le port MIDI déjà présent à l'arrière de la batterie, il faut le transformer en sortie MIDI. Heureusement, le circuit pour une sortie MIDI n'est pas compliqué. Seules les broches 5, 2 et 4 ont besoin d'être connectées.

 

La photo ci-dessous montre la numérotation des broches du connecteur DIN5 femelle.

  

Sur la photo ci-dessous, on peut voir où j'ai soudé les trois fils. Le fil vert est branché à une résistance de 220 Ω qui est elle-même branchée à la sortie UART TX (broche 1) de l'Arduino, le fil noir est branché au GND de l'Arduino, et le fil rouge est branché à une résistance de 220 Ω, qui est elle-même reliée à la sortie 5 V de l'Arduino.

 

Cette photographie montre l'intérieur de la batterie après le recâblage des piézos et du connecteur MIDI. On ne voit pas l'Arduino qui est situé à l'extérieur de la batterie (pour faciliter les améliorations ultérieures).


Le sketch

Puisque je n'ai pas à évaluer la force de frappe, le sketch de l'Arduino est relativement simple: il s'agit de surveiller la tension à chacune des 5 entrées analogiques. Lorsqu'une tension dépasse une valeur seuil pré-définie, on en déduit que le tambour correspondant a été frappé. La valeur seuil est déterminée empiriquement; on la veut la plus basse possible pour que toutes les frappes, même légères, soient prises en compte. Mais si la valeur est trop basse, on détecte des frappes fantômes comme, par exemple, la vibration causée par un choc sur un autre tambour). De plus, le seuil peut être légèrement différent d'un tambour à l'autre (les cymbales, par exemples, ont tendance à être moins sensibles que les tambours).

La tension électrique générée par une frappe sur le piézo dure un certain temps: pour cette raison, on s'abstient de prendre d'autres mesures pendant environ 20 millisecondes, pour éviter de détecter plusieurs frappes alors qu'il n'y en a eu qu'une seule.

Et bien sûr, suite à la détection d'une frappe, on envoie un message MIDI "note on", immédiatement suivi d'un message "note off" (qui est en fait un "note on" avec une vélocité nulle sur le canal MIDI numéro 10 qui est, par convention, réservé aux percussions.

-

 

Et ensuite?

J'ai volontairement laissé l'Arduino à l'extérieur de la batterie afin de pouvoir plus facilement apporter des améliorations à l'instrument. Par exemple, ce serait chouette de pouvoir modifier l'instrument associé à chaque tambour sans être obligé de reprogrammer l'Arduino. On pourrait aussi ajouter un mode "séquenceur" qui permettrait à l'utilisateur de programmer un motif rythmique qui serait ensuite reproduit en boucle avec le tempo désiré.

 

Yves Pelletier

 

dimanche 21 septembre 2025

Mini-Piano Arduino

Dans cet article, je présente la réalisation d'un mini-clavier musical réalisé au moyen d'un Arduino Uno, d'un shield TFT (écran tactile) et d'un haut-parleur.


Un clavier de piano s'affiche sur l'écran. Lorsqu'on appuie sur une touche, elle se met en rouge et la note appropriée est émise par le haut-parleur (nous utiliserons la fonction tone).

 

 

Réaliser le projet a été clairement plus amusant qu'utiliser le produit fini: cet instrument de musique n'est pas très ergonomique! En plus d'être limité à une seule note à la fois, il faut être très précis pour ne pas toucher à côté des bonnes notes.

L'écran tactile

J'ai encore une fois utilisé le shield TFT 2.8 pouces (240 X 320 pixels) pour Arduino, conçu par la compagnie Adafruit, dont je vous avais parlé dans cet article il y a quelques semaines. Cet écran utilise le circuit intégré ILI9341 pour l'affichage et TSC2007 pour la détection tactile. Il est possible d'adapter ce projet à un autre écran tactile, mais vous devrez possiblement faire quelques modifications dans le sketch.

Connexion du haut-parleur

Puisqu'un haut-parleur a une très faible résistance (typiquement 2 Ω à 8 Ω), il est hors de question de le connecter directement à une sortie de l'Arduino. J'ai utilisé le circuit illustré ci-dessous, qui implique l'utilisation d'un transistor NPN.


Si vous préférez, vous pouvez remplacer le haut-parleur par un buzzer piézoélectrique, dont la résistance est beaucoup plus élevée. L'avantage, c'est que le buzzer peut être branché directement à la sortie de l'Arduino sans qu'il soit nécessaire d'ajouter un transistor.

 

Bibliothèques utilisées

Le sketh ci-dessous nécessite l'installation de trois bibliothèques conçues par Adafruit: Adafruit ILI9341, Adafruit GFX Library et Adafruit TSC2007

 

Le sketch

Après les obligatoires initialisations, le sketch s'occupe essentiellement:

  • de dessiner un clavier d'un octave à l'écran (lignes 60 à 64)
  • de détecter si on a touché une des touches du clavier (lignes 74 à 120)

Si une des touches du clavier a été touchée, il faut:

  • la redessiner en rouge (lignes 124 à 141)
  • écrire le nom de la note à l'écran (lignes 162 à 174)
  • émettre la note avec le haut-parleur  (lignes 176 à 180)

Si une des touches a été relâchée, il faut

  • la redessiner dans son état initial (lignes 143 à 159)
  • effacer le nom de la note précédemment jouée (ligne 165)
  • interrompre la note émise par le haut-parleur (ligne 179)

 

Voici le sketch complet:

---

---

Yves Pelletier

 

À lire également: