dimanche 28 mars 2021

Écrire des nombres sur une matrice de LEDs RGB 16 X 16 WS2812B

J'ai déjà eu l'occasion de présenter mon panneau constituée de 256 LEDs RGB muni du contrôleur WS2812B: nous avions vu comment le brancher à un Arduino Uno et dessiner des formes simples grâces aux bibliothèques FastLED et LEDMatrix.


Cette fois, j'ai eu envie d'écrire des informations textuelles sur ma matrice. Malheureusement, sa forme carrée n'est pas tellement appropriée pour l'affichage d'un texte, même en le faisant défiler de droite à gauche. On peut tracer des caractères lisibles et élégants sur des rectangles de 5 pixels de largeur par 7 pixels de hauteur, ce qui ne me permet guère d'afficher plus de 2 caractères à la fois (puisqu'il faut aussi prévoir un espace d'au moins un pixel entre deux caractères). Je pourrais remédier à la situation en branchant plusieurs panneaux à la queue-leu-leu, mais je n'en ai qu'un seul.

J'ai toutefois assez d'espace pour afficher des nombres à deux chiffres, et même le nombre "100" (puisque le "1" occupe un peu moins d'espace que les autres chiffres). J'ai donc écrit deux courts programmes qui affichent des nombres entiers s'échelonnant entre 0 et 100.

Bibliothèques

J'ai continué d'utilisé les bibliothèques FastlLED de Daniel Garcia (disponible dans le gestionnaire de bibliothèque) et LEDMatrix de Jorgen - VikingGod.

Sketch #1: Un compte à rebours

Ce premier sketch présente un compte à rebours de 100 à 0.

-
-

Sketch #2: Affichage d'une valeur analogique

Ce deuxième sketch affiche la valeur mesurée sur l'entrée analogique A0 de l'Arduino Uno. Le résultat est étalonné de 0 à 100%, et est également illustré sur une petite jauge linéaire horizontale.

-
-

vendredi 26 mars 2021

ESP32 et VS1003 / VS1053 : écouter la radio sur internet

Grâce à l'internet, il est possible de capter, avec une excellente qualité sonore, des émissions radiophoniques qui proviennent de n'importe quel endroit dans le monde. Dans cet article, j'explore la réception de webradio avec un module ESP32 et un module VS1003 ou VS1053.


Matériel

Fidèle à mon habitude, j'ai programmé le module ESP32 au moyen de l'IDE Arduino. Au besoin, vous pouvez consulter cet article pour plus d'informations sur la façon de procéder.

Le VS1053 de VLSI est un circuit intégré qui a été conçu spécialement pour décoder les principaux formats de fichiers musicaux: Ogg Vorbis, mp3, AAC, WMA, FLAC, MIDI...

Le module VS1053 que j'ai utilisé porte la mention "LCSOFT STUDIO VS1003/1053 MP3  CODEC", mais il existe d'autres modèles, comme par exemple ceux qui sont commercialisés par Sparkfun et par Adafruit.

Une prise jack sur le module VS1053 permet de brancher un casque d'écoute ou des enceintes amplifiée.

Connexions

Le module VS1053 est branché à l'ESP32 de cette façon:

  • Broche 5V du VS1053 : Broche VIN (5V) de l'ESP32
  • Broche DGND du VS1053 : Broche GND de l'ESP32
  • Broche MISO du VS1053 : Broche D19 de l'ESP32
  • Broche MOSI du VS1053 : Broche D23 de l'ESP32
  • Broche SCK du VS1053 : Broche D18 de l'ESP32
  • Broche DREQ du VS1053 : Broche D4 de l'ESP32
  • Broche XRST du VS1053 : Broche EN de l'ESP32
  • Broche XCS du VS1053 : Broche D5 de l'ESP32
  • Broche XDCS du VS1053 : Broche RX2 - D16 de l'ESP32


Installation de la bibliothèque ESP VS1053

J'ai installé la bibliothèque ESP VS1053 mise au point par Baldram.

Sketch

Mon point de départ a été l'exemple WebRadioDemo par Vince Gellar, qui accompagne la bibliothèque de Baldram. J'ai ajouté la possibilité de changer de chaîne et de modifier le volume sonore par l'entremise du moniteur série (pour un produit autonome, il sera facile de remplacer le moniteur série par des boutons, par des encodeurs rotatifs ou par une télécommande infrarouge).

-

-

Dans cet exemple, on peu écouter les émissions en provenance de 7 serveurs différents. On peut passer à la prochaine chaîne en tapant la lettre "n" dans le moniteur série. On augmente le volume sonore en envoyant "+", et on le diminue en envoyant "-".


Vous pouvez évidemment remplacer les stations de webradio utilisées dans ce sketch par d'autres qui correspondent plus à vos intérêts: il est facile de trouver sur internet des répertoires qui permettent de trouver l'adresse des serveurs (comme par exemple celui-ci). Je dois toutefois avouer avoir obtenu des résultats très variables selon la station que je tentais de capter: si le son est à peu près impeccable pour un grand nombre d'émissions, d'autres subissent de fréquentes coupures qui rendent leur écoute assez désagréable, voire carrément impossible.


À lire également


Yves Pelletier (TwitterFacebook)

lundi 22 mars 2021

ESP32 et VS1003 / VS1053: écouter les fichiers mp3 d'une carte SD

Dans cet article, j'utilise un module ESP32, un module VS1053 et un lecteur de carte SD pour jouer des fichiers mp3 préalablement enregistrés sur une carte SD.


Matériel

Mon module ESP32 sera, comme d'habitude, programmé au moyen de l'IDE Arduino.

Le VS1053 de VLSI Solutions est un circuit intégré spécialement conçu pour décoder les principaux formats de fichiers musicaux: Ogg Vorbis, mp3, AAC, WMA, FLAC, MIDI...

J'ai utilisé un module fabriqué en Chine qu'on trouve facilement sur les sites de vente en ligne. Le mien porte la mention "LCSOFT STUDIO VS1003/1053 MP3  CODEC".  Adafruit et Sparkfun ont également mis au point leur propre modèle.

Une prise jack permet de brancher un casque d'écoute au module VS1053, ou encore des enceintes amplifiée.

Tout comme le VS1053, le module lecteur de cartes SD communique avec le microcontrôleur par le protocole SPI, à un niveau logique de 3,3 V.


Connexions

Le module VS1053 est branché à l'ESP32 de la façon suivante:

  • Broche 5V du VS1053 : Broche VIN (5V) de l'ESP32
  • Broche DGND du VS1053 : Broche GND de l'ESP32
  • Broche MISO du VS1053 : Broche D19 de l'ESP32
  • Broche MOSI du VS1053 : Broche D23 de l'ESP32
  • Broche SCK du VS1053 : Broche D18 de l'ESP32
  • Broche DREQ du VS1053 : Broche D4 de l'ESP32
  • Broche XRST du VS1053 : Broche EN de l'ESP32
  • Broche XCS du VS1053 : Broche D5 de l'ESP32
  • Broche XDCS du VS1053 : Broche RX2 - D16 de l'ESP32

...alors que le module carte SD est branché à l'ESP32 de cette façon:

  • Broche GND du module carte SD : broche GND de l'ESP32
  • Broche 5 V du module carte SD : broche VIN (5V) de l'ESP32
  • Broche CS du module carte SD : broche D22 de l'ESP32
  • Broche MOSI du module carte SD : broche D23 de l'ESP32
  • Broche SCK du module carte SD : broche D18 de l'ESP32
  • Broche MISO du moudle caret SD : broche D19 de l'ESP32


Installation de la bibliothèque ESP VS1053

J'ai installé la bibliothèque ESP VS1053 mise au point par Baldram; elle est également compatible avec l'ESP8266.

Préparation de la carte SD

J'ai copié quelques fichiers MP3 à la racine de la carte SD. 


Sketch #1 : jouer un fichier mp3

Dans ce premier exemple de sketch, un fichier mp3 est joué au complet. Le chemin d'accès de ce fichier doit être écrit dans le sketch (constante "nomFichier"). Il sera facile de modifier programme pour jouer un fichier différent selon le bouton appuyé par l'utilisateur, saluer un visiteur lorsque sa présence est détectée, etc.

-

-

Sketch #2: lecture de tous les fichiers mp3 présents sur la carte SD

Ce deuxième sketch fait jouer successivement tous les fichiers qui se trouvent à la racine de la carte SD, peu importe leur nom. J'ai également ajouté quelques commandes qui peuvent être envoyées à l'ESP32 par le moniteur série:  "n" pour passer à la piste suivante, "p" pour mettre en pause, "+" pour augmenter le volume sonore, etc.

-

-

À lire également:


Yves Pelletier (TwitterFacebook)

samedi 6 mars 2021

Essai de l'IDE Arduino version 2.0 beta

Depuis quelques jours, il est possible d'installer la version beta 2.0 de l'IDE Arduino, qui présente quelques nouvelles fonctionnalités.

J'ai installé cette version sur deux ordinateurs (un sous Ubuntu et l'autre sous Windows 10). Notez que l'installation de la version 2.0 de l'IDE n'affecte en rien la version 1.8, si elle est déjà installée. Vous pourrez continuer d'utiliser l'IDE version 1.8 après l'installation de la version 2.0.  Les fichiers d'installation peuvent être téléchargées sur le site officiel Arduino.


Complétion automatique

L'auto-complétion est désormais une caractéristique essentielle de n'importe quel éditeur de code, et son absence était une lacune importante de l'IDE Arduino. Dans l'exemple ci-dessous, je n'ai eu qu'à taper quelques lettres pour que l'IDE me propose la suite de la fonction. L'avantage est évident, et pas seulement pour ceux qui écrivent lentement: ça aide à utiliser la syntaxe exacte d'une fonction qu'on ne connaît qu'approximativement.

Notez que pour que les fonctionnalités de complétion automatique soient activées, il faut obligatoirement avoir sélectionné une carte dans le menu "Type de cartes".

Débogueur

J'aurais aimé essayer le débogueur mais il ne peut être utilisé qu'avec des cartes Arduino de types SAMD et Mbed. Pour corriger les bugs, les utilisateurs d'Arduino Uno continueront d'afficher le contenu des variables dans le moniteur série...


Moniteur série

Le moniteur série s'affiche désormais au bas du sketch plutôt que dans sa propre fenêtre. Chaque sketch a son propre moniteur série.

Il est donc possible de programmer un Arduino Uno sur le port série COM6 et d'observer ce qu'il envoie dans son moniteur série et, dans une autre fenêtre, programmer un ESP8266 sur le port série COM7 et regarder les informations envoyées par l'ESP8266 sur son propre moniteur série.


Il n'y a plus de traceur série malheureusement, mais il sera peut-être ressuscité dans une version ultérieure.

Gestionnaire de cartes

Le gestionnaire de cartes est maintenant accessible à partir d'un bouton situé du côté gauche de la fenêtre, et la liste des cartes disponibles s'affiche dans une colonne à gauche plutôt que dans sa propre fenêtre. 

Si vous installez l'IDE pour la première fois, aucune carte n'est pré-installée, même pas les cartes de base comme l'Arduino Uno: vous devez installer explicitement la catégorie "Arduino AVR Boards". Cette étape n'est pas nécessaire, toutefois, si une version précédente de l'IDE est déjà installée sur l'ordinateur.


Si vous avez déjà installé des cartes "non-officielles" au moyen d'une version précédente de l'IDE (ESP8266, ESP32, STM32, etc.), il n'est pas nécessaire de les installer à nouveau mais il faut inscrire les URLs appropriés dans le champ "Additionnal boards manager URLs" au bas de la fenêtre de préférences (et redémarrer l'IDE).


Dans le menu "Types de cartes", toutes les cartes d'un même type sont maintenant rassemblées dans un même sous-menu, ce qui devrait faciliter un peu la navigation.


Gestionnaire de bibliothèques

Le gestionnaire de bibliothèques est lui aussi accessible par un bouton situé du côté gauche de la fenêtre, et la liste des bibliothèques disponibles s'affiche directement dans la même fenêtre que le sketch plutôt que dans sa propre fenêtre. 


Compilation plus rapide...ou non?

Le communiqué de presse annonçant la version 2.0 mentionne explicitement un temps de compilation plus rapide. Puisque cette augmentation de vitesse ne sautait pas aux yeux, j'ai chronométré le temps nécessaire pour compiler et téléverser deux sketches conçus pour l'ESP8266. Dans les deux cas, la version 2.0 s'est révélée un peu plus lente que la version 1.8.9!  J'ai aussi l'impression que l'ouverture d'un fichier est significativement plus lente qu'avec l'ancienne version.

Pas encore tout à fait au point

Il s'agit vraiment d'une version beta, avec des bugs et des trucs à améliorer. Tout est en anglais, et seuls les principaux OS 64 bits sont supportés.

Sur les deux ordinateurs que j'ai utilisés pour mes tests, la fenêtre était verticalement plus grande que l'écran. Il était impossible de redimensionner manuellement la fenêtre, dont la partie inférieure demeurait désespérément invisible. Sous Windows, j'ai pu régler la fenêtre en mode "plein écran", mais c'était impossible sous Ubuntu! Il s'agit d'un bug connu, qui sera corrigé (et que vous ne verrez jamais si votre écran est raisonnablement grand).

Chaque fois que vous ouvrez ou créez un sketch, vous devez sélectionner à nouveau le type de carte et le port série: l'IDE ne prend pas pour acquis que vous allez probablement continuer d'utiliser la même carte. Encore une fois, c'est certainement temporaire, mais c'est très, très irritant.

Voyez, par exemple, cette situation particulièrement absurde: 

Je commence par créer un nouveau sketch. En attendant que je l'enregistre, l'IDE lui donne un nom temporaire, comme il le faisait dans les versions antérieures: "sketch_mar5a.ino". Je sélectionne le type de carte (Arduino Uno) et le port série (/dev/ttyUSB0).


Je téléverse le sketch dans l'Arduino Uno; tout fonctionne bien mais, lors du téléversement, l'IDE ne me propose pas d'enregistrer mon fichier.

Suite au téléversement, je décide d'enregistrer mon fichier, en lui donnant un nom plus approprié ("essai_beta.ino"). Résultat: l'IDE enregistre mon fichier...et efface mon choix de carte et de port série, qui devront être sélectionnés à nouveau si je désire continuer à travailler sur mon sketch!


La raison pour laquelle l'IDE ne vous propose plus d'enregistrer votre fichier au moment du téléversement, c'est qu'il est maintenant réglé, par défaut, pour effectuer des sauvegardes automatiques deux fois par seconde (il est possible de désactiver cette sauvegarde automatique dans le menu Préférences).

En conclusion: la complétion automatique est un ajout intéressant, mais les imperfections de la version 2.0 sont tellement nombreuses que, en attendant qu'elle soit prête, je vais m'en tenir à la version 1.8.9.

Yves Pelletier (TwitterFacebook)

vendredi 5 mars 2021

Contrôler Powerpoint avec un Leonardo et une télécommande de téléviseur

Dans l'article précédent, nous avons vu qu'un Arduino Leonardo peut facilement être programmé de façon à contrôler un diaporama Powerpoint. Cette fois, nous ajoutons au Leonardo une télécommande infrarouge conçue pour le contrôle d'un téléviseur. Pendant que le Leonardo sera branché au port USB de l'ordinateur, la télécommande permettra au conférencier de contrôler à distance son diaporama Powerpoint.


Capteur TSOP4838

Pour capter les signaux infrarouges émis par la télécommande, j'ai utilisé le capteur TSOP4838 fabriqué par Vishay. Il est spécialement conçu pour capter les signaux modulés à 38 kHz.


J'ai branché la broche "Out" du TSOP4838 à la broche 11 de l'Arduino Leonardo. Les deux autres broches servent à alimenter le capteur: la broche centrale est connectée à GND alors que la dernière broche est branchée à une résistance de 100 Ω qui est elle-même reliée à 5 V. De plus, un condensateur de 4,7 µF est placé en parallèle avec les deux broches d'alimentation.

Bibliothèque IRremote

Grâce au gestionnaire de bibliothèques de l'IDE Arduino, j'ai installé la bibliothèque IRremote.

Trouver la commande envoyée par les touches de la télécommande

Pour ce premier prototype, je voulais activer 7 touches de la télécommande, qui auraient pour effet de passer à la diapo suivante, reculer d'une diapo, déplacer le pointeur à l'écran et simuler un clic de souris.

Afin de connaître le code envoyé par chacune de ces touches, j'ai téléversé dans le Léonardo l'exemple IRrecevieDump, qui est distribué avec la bibliothèque IRremote.


Chaque fois que j'appuie sur un bouton de la télécommande, des informations apparaissent dans le moniteur série de l'IDE Arduino. Par exemple, j'apprend que le bouton "prochaine diapo" envoie un message encodé selon le protocole Panasonic dont l'adresse est 0x8 et la commande est 0x34.


Connaissant la commande correspondant à chacun des 7 boutons qui m'intéressent, il a été facile de rédiger un sketch qui permet de contrôler le powerpoint lorsque j'appuie sur les boutons.

-

-

À lire aussi:


Yves Pelletier (TwitterFacebook)