samedi 10 avril 2021

Rasbperry Pi Pico: programmation en micropython

Dans cet article, je fais l'essai de mon tout nouveau Raspberry Pi Pico en expérimentant quelques programmes simples en micropython (allumer une LED, lire un bouton poussoir, lire un potentiomètre).


Installation de Thonny sur l'ordinateur

Pour programmé le Pico, j'ai utilisé un ordinateur de bureau fonctionnant sous Ubuntu: l'IDE Thonny (version 3.2.7) y était déjà installé. Vous pouvez facilement installer Thonny sur Linux, Windows ou MacOS.


Installation de micropython dans le Pico

J'ai téléchargé le fichier micropython.uf2 sur cette page de la fondation Rasperry Pi (en cliquant sur le bouton vert "Download UF2 File").

En maintenant enfoncé le bouton "Bootsel" du Pico, j'ai branché le Pico au port USB de l'ordinateur, et j'ai attendu quelques secondes avant de relâcher le bouton. Le Pico est alors apparu comme une unité de stockage nommée RPI-RP2: j'ai glissé-déposé le fichier micropython.uf2 dans le volume RPI-RP2.



Réglages de Thonny pour programmer le Pico

Par défaut, Thonny est réglé pour exécuter nos scripts en python sur l'ordinateur où il est installé: nous devons plutôt lui demander de les transférer au Pico.

Dans le menu "Exécuter", j'ai choisi "Sélectionner l'interpréteur..."


Si votre liste comporte l'item "MicroPython (Raspberry Pi Pico)": sélectionnez-le! Sinon, "MicroPython (générique)" fait parfaitement l'affaire.


Le port série utilisé par le Pico devrait apparaître dans le menu déroulant "Port".


Au bas de la fenêtre, la console de Thonny confirme que je programme maintenant un Raspberry Pi Pico en MicroPython v1.14.



Un premier script: faire clignoter la LED embarquée

Le Pico comporte une LED connectée à la broche GP25 (elle se trouve tout près du connecteur microUSB).

Le script ci-dessous la fera clignoter:

-

-

Pour exécuter ce script, on clique sur le bouton "Run" de Thonny (ou on appuie sur la touche F5).

À la question "Where to save to?", je réponds "appareil MicroPyhton", en constatant que quelqu'un a inversé le "t" et le "h" dans "MicroPython".


Vous choisissez un nom de fichier qui vous plaît (et qui se termine par l'extension ".py").


... et la LED du Pico devrait se mettre à clignoter.


(vous pouvez interrompre le programme en cliquant sur le bouton STOP de Thonny).

Deuxième script: LED contrôlée par un bouton

Comme deuxième essai, j'ai branché une LED externe à la broche GP15 et un bouton poussoir à la broche GP16 (pour le bouton, j'ai utilisé une résistance de tirage vers le bas, mais il serait également possible d'activer la résistance de tirage interne du Pico dans le script).

(rappel: le nom des broches est imprimé au verso du Pico).




Lorsqu'on exécute ce script: la LED s'allume lorsque le bouton poussoir est enfoncé.

-





Troisième script: lecture d'un potentiomètre

Trois des broches du Pico peuvent être utilisées comme entrées analogique.  Le prochain script affiche la valeur d'un potentiomètre branché à la broche GP26_ADC0 du Pico.

-
-

Pendant qu'on tourne le bouton du potentiomètre, la console de Thonny affiche des valeurs s'échelonnant entre 0 et 65535. 




Quelques ressources complémentaires pour débuter:

Sur Framboise 314, une présentation détaillée du Raspberry Pi Pico, et un guide pour programmer le Pico en micropython avec un Raspberry Pi.

Si vous comprenez l'anglais, le livre "Get Started with MicroPython on Raspberry Pi Pico" est très bien fait, et peut être obtenu gratuitement en format pdf. Il s'adresse aux débutants.


Yves Pelletier (TwitterFacebook)

mercredi 7 avril 2021

Utilisation d'un écran tactile TFT SPI 240 X 320 (ILI9341) avec un ESP8266

Dans cet article, nous branchons à un ESP8266 un écran tactile TFT de 240 X 320 pixels (2,4"), muni d'un contrôleur ILI9341, qui communique sur le bus SPI. 



Pour interagir avec l'écran, il est possible d'utiliser un doigt; mais puisque sa surface utile est assez petite (5 cm par 4 cm), l'écran est accompagné d'un stylet qui permet de toucher une position beaucoup plus précise.

Attention: on trouve sur le marché des versions non-tactiles de cet écran. Lisez soigneusement la description avant d'acheter...



Connexions

Le module comporte 18 broches: 
  • 2 broches pour l'alimentation
  • 7 broches pour l'affichage
  • 5 broches pour le capteur tactile
  • 4 broches pour le lecteur de carte SD (que je n'utilise pas dans cet article)


J'ai branché l'écran à l'ESP8266 de cette façon:

  • Broche VCC de l'écran - Sortie 3,3 V de l'ESP8266
  • Broche GND de l'écran - Broche GND de l'ESP8266
  • Broche CS de l'écran - Broche GPIO 15 (D8) de l'ESP8266
  • Broche RESET de l'écran - Broche GPIO 2 (D4)  de l'ESP8266
  • Broche DC/RS de l'écran - Broche GPIO 0 (D3) de l'ESP8266
  • Broche SDI (MOSI) de l'écran - Broche GPIO 13 (D7) de l'ESP8266
  • Broche SCK de l'écran - Broche GPIO 14 (D5) de l'ESP8266
  • Broche LED de l'écran - Sortie 3,3 V de l'ESP8266
  • Broche SDO (MISO) de l'écran - Broche GPIO 12 (D6) de l'ESP8266
  • Broche T_CLK de l'écran - Broche GPIO 14 (D5) de l'ESP8266
  • Broche T_CS de l'écran - Broche GPIO 4 (D2) de l'ESP8266
  • Broche T_DIN de l'écran - Broche GPIO 13 (D7) de l'ESP8266
  • Broche T_DO de l'écran - Broche GPIO 12 (D6) de l'ESP8266
  • Broche T_IRQ de l'écran - pas connectée
Les broches dont le symbole commence par la lettre T concernent le capteur tactile: il n'est pas nécessaire de les brancher si vous désirez utiliser l'écran comme simple afficheur.

Installation de la bibliothèque

J'ai installé la bibliothèque TFT_eSPI de Bodmer par l'entremise du gestionnaire de bibliothèques de l'IDE Arduino.

Configuration de la bibliothèque (fichiers User_Setup)

Avant d'utiliser la bibliothèque TFT_eSPI, il est important de la configurer en fonction du type d'écran que nous utilisons.  Pour ce faire, vous devez ouvrir le répertoire où la bibliothèque TFT_eSPI a été installée (dans le dossier "libraries" de votre sketchbook Arduino).

Deux possibilités s'offrent à vous: 

  • Apporter les modifications nécessaires dans le fichier User_Setup.h
  • Sélectionner un fichier User_Setup prédéfini

C'est cette deuxième option que j'ai utilisé: j'ai d'abord ouvert le fichier "User_Setup_Select.h" et j'y ai décommenté la ligne 24: "#include <User_Setups/Setup1_ILI9341.h>". De cette façon, la bibliothèque utilisera les informations consignées dans le fichier "Setup1_ILI9341.h"


J'ai ensuite ouvert le fichier "Setup1_ILI9341.h" qui se trouve dans le dossier "User_setups".


Aux lignes 6, 7 et 8, on choisi le numéro des broches de l'ESP8266 qui correspondent aux broches CS, DC et RST de l'écran. Les broches indiquées sont déjà correctes si vous utilisez un module NodeMcu. Si ce n'est pas le cas, vous devrez probablement remplacer "PIN_D8" par "15", "PIN_D3" par "0" et "PIN_D4" par 2.

Sur la capture d'écran ci-dessus, portez attention à la ligne 11, qui ne se trouvait pas dans le fichier au départ: j'ai indiqué la broche qui correspond à la broche T_CS (chip select du capteur tactile):

"#define TOUCH_CS PIN_D2"

Ici encore, si vous n'utilisez pas un module NodeMcu, vous devrez peut-être utiliser le numéro de la broche GPIO 4:

"#define TOUCH_CS 4"

La bibliothèque TFT_eSPI est maintenant configurée pour l'utilisation de notre écran avec un ESP8266. Si, à une autre occasion, vous désirez utiliser un autre microcontrôleur ou un autre écran, il s'agira de sélectionner un autre fichier User_Setup.

Exemple de sketch

La bibliothèque TFT_eSPI comporte un grand nombre d'exemples très instructifs.


Je vous propose ci-dessous un sketch très simple qui permet d'explorer l'affichage de texte et de formes géométriques simples, ainsi que la gestion de boutons virtuels à l'écran.

Deux boutons s'affichent au bas de l'écran: un bouton qu'on touche pour faire apparaître un rectangle, et un autre qui permet d'afficher un cercle.


L'exemple Keypad_240X320 (fourni avec la bibliothèque) montre comment conserver les données de calibration de l'écran dans un fichier SPIFF pour qu'il ne soit pas nécessaire de répéter cette calibration à chaque utilisation (je n'ai pas inclus cette fonctionnalité dans mon sketch).

-

-


À lire également

D'autres afficheurs utilisés avec l'ESP8266:


Yves Pelletier (TwitterFacebook)


dimanche 4 avril 2021

VS1003 / VS1053 en mode MIDI (Arduino, ESP32, ESP8266)

Au cours des dernières semaines, j'ai utilisé mon module VS1003 / VS1053 pour jouer des fichiers mp3 ainsi que des émissions de webradio. Mais ce module peut également être utilisé comme synthétiseur MIDI: il génère des sons qui correspondent aux commandes MIDI que vous lui transmettez (ces messages peuvent être générés par un contrôleur MIDI ou par votre sketch Arduino).

En principe, la méthode recommandée pour mettre le VS1053 en mode "MIDI temps réel" consiste à faire un reset en soumettant sa broche GPIO 0 à une signal logique bas, et sa broche GPIO 1 à un signal logique haut. On peut ensuite lui acheminer les messages MIDI par son entrée RX.

Tout ça est bien joli si les broches GPIO et RX sont accessibles sur le module que vous utilisez. C'est le cas, par exemple, pour les modules mis en marché par Sparkfun et par Adafruit, mais ce n'est pas le cas pour le module "LCSoft Studio" que j'utilise.

Il existe heureusement une autre solution qui, elle, est applicable à mon module: grâce à des patches logicielles fournies par VLSI, le module peut exécuter les commandes MIDI reçues sur le bus SPI. Cette méthode nécessite des programmes un tout petit peu plus compliqués, d'autant plus que le VS1003 et le VS1053 requièrent un traitement légèrement différent (les deux modèles sont généralement interchangeables, à un point tel que je croyais être propriétaire d'un VS1053, alors qu'il s'agit finalement d'un VS1003).

Heureusement, Kevin, l'auteur de l'excellent blog Simple DIY Electronic Music Projects a écrit un sketch Arduino qui permet de contrôler un VS1003 ou un VS1053 au moyen d'un contrôleur MIDI (un clavier musical, par exemple). Un potentiomètre branché à l'Arduino permet de modifier le timbre de l'instrument (piano, vibraphone, flûte, etc.). Ses travaux sont présentés dans trois articles: 

J'ai testé avec succès le sketch de Kevin sur un Arduino Uno, sur un ESP8266 et sur un ESP32.

Le sketch

Vous trouverez sur Github le sketch ArduinoMIDIVS10xxSynth ainsi que les 4 fichiers qui doivent être placés dans le même dossier.


Le sketch fonctionne pour le VS1003 et pour le VS1053, mais vous devez indiquer de quel module il s'agit en commentant la ligne 63 ou la ligne 64. 


Si vous branchez un potentiomètre à l'entrée A0 de l'Arduino pour sélectionner le timbre de l'instrument, prenez soin de décommenter la ligne 87. Vous pouvez aussi ajouter un contrôle de volume à l'entrée A1, mais je ne le recommande pas lors des premiers essais (le son était inaudible pour la plupart des positions du potentiomètre).


Si vous préservez la ligne 53, une suite de notes sera jouée au démarrage du programme, ce qui constitue une excellente façon de vérifier que tout fonctionne correctement.

Circuit: Arduno Uno

Le circuit intégré VS1053 est conçu pour fonctionner à un niveau logique de 3,3 V, c'est pourquoi j'ai utilisé un circuit intégré 4050 pour abaisser les signaux de 5 V générés par l'Arduino (au besoin, vous pouvez consulter cet article pour plus d'informations sur l'utilisation d'un 4050).

Voici donc les connexions du module VS1003 avec l'Arduino:

  • Broche 5 V du VS1003 - Broche 5 V de l'Arduino Uno
  • Broche XGND du VS1003 - Broche GND de l'Arduino Uno
  • Broche MISO du VS1003 - Broche 12 de l'Arduino Uno*
  • Broche MOSI du VS1003 - 4050 - Broche 11 de l'Arduino Uno
  • Broche SCK du VS1003 - 4050 - Broche 13 de l'Arduino Uno
  • Broche DREQ du VS1003 - Broche 2 de l'Arduino Uno*
  • Broche XRST du VS1003 - 4050 - Broche 8 de l'Arduino Uno
  • Broche XCS du VS1003 - 4050 - Broche 6 de l'Arduino Uno
  • Broche XDCS du VS1003 - 4050 - Broche 7 de l'Arduino Uno
* Les broches MISO et DREQ sont des sorties du VS1003 et leur signal ne doit donc pas être abaissé par le 4050.

Pour la réception des messages MIDI, la sortie MIDI d'un clavier musical était branchée à la broche 0 (RX) de l'Arduino Uno par l'entremise d'un optocoupleur 4N35 (plus de détails dans cet article). 

Finalement, un potentiomètre est branché à l'entrée A0 de l'Arduino: il permet de sélectionner le timbre ("sound bank") du son généré par le VS1003.


J'ai dû apporter des modifications aux lignes 102 à 105 du sketch pour qu'elles concordent avec mes connexions:

Circuit: ESP8266

Le programme fonctionne également avec un ESP8266. Presque toutes les broches GPIO de l'ESP8266 sont utilisées, mais il n'est pas nécessaire d'adapter les niveaux logiques. Cette fois, l'optocoupleur 4N35 doit être branché à 3,3 V plutôt qu'à 5 V.

  • Broche 5 V du VS1003 - Broche 5 V de l'ESP8266
  • Broche XGND du VS1003 - Broche GND de l'ESP8266
  • Broche MISO du VS1003 - Broche GPIO12 de l'ESP8266
  • Broche MOSI du VS1003 - Broche GPIO13 de l'ESP8266
  • Broche SCK du VS1003 - Broche GPIO14 de l'ESP8266
  • Broche DREQ du VS1003 - Broche GPIO4 de l'ESP8266
  • Broche XRST du VS1003 - Broche GPIO5 de l'ESP8266
  • Broche XCS du VS1003 - Broche GPIO16 de l'ESP8266
  • Broche XDCS du VS1003 - Broche GPIO2 de l'ESP8266

Pour la réception des signaux MIDI,  l'optocoupleur 4N35 est branché à la broche RX de l'ESP8266.

Finalement, un potentiomètre est branché à l'entrée A0 de l'ESP8266.

(Le schéma montre mon Wemo D1 Mini)



Pour l'ESP8266, j'ai aussi modifié les lignes 102 à 105 du sketch de la façon suivante:


Circuit: ESP32

Ça fontionne aussi avec l'ESP32.

J'ai utilisé ces connexions:

  • Broche 5 V du VS1003 - Broche VIN de l'ESP32
  • Broche XGND du VS1003 - Broche GND de l'ESP32
  • Broche MISO du VS1003 - Broche D19 de l'ESP32
  • Broche MOSI du VS1003 - Broche D23 de l'ESP32
  • Broche SCK du VS1003 - Broche D18 de l'ESP32
  • Broche DREQ du VS1003 - Broche D4 de l'ESP32
  • Broche XRST du VS1003 - Broche D21 de l'ESP32
  • Broche XCS du VS1003 - Broche D5 de l'ESP32
  • Broche XDCS du VS1003 - Broche D16 de l'ESP32

Pour la réception des signaux MIDI,  l'optocoupleur 4N35 est branché à la broche RX de l'ESP8266.

Finalement, un potentiomètre est branché à l'entrée A0 de l'ESP8266.


... et j'ai modifié les lignes 102 à 105 du sketch de cette façon:


À lire également


Yves Pelletier (TwitterFacebook)