mardi 18 juillet 2023

Matrice de LEDs RGB 16 X 16 WS2812B et Raspberry Pi Pico (Micropython)

Ce projet consiste à utiliser un Raspberry Pi Pico programmé en Micropython afin de contrôler une matrice de forme carrée comportant 256 LEDs RGB de type Neopixel (contrôleur WS2812B).


Connexions

Le verso de la matrice de LEDs comporte 8 connecteurs mais ils ne sont pas tous nécessaires. Le groupe de 3 fils du côté gauche de la photo (dont un fil porte la mention DOUT) ne sont utiles que lorsque vous désirez brancher plusieurs matrices à la queue-leu-leu.


Si vous n'en utilisez qu'une seule (256 LEDs, c'est déjà pas mal!) vous n'avez besoin que de 4 connexions:

Les deux fils situés au centre (un noir et un rouge) servent à l'alimentation des LEDs. Il faut une tension continue de 5 V, et l'alimentation doit être capable de fournir quelques ampères.

Dans le groupe de trois fils qu'on voit à droite sur la photo, le fil blanc (GND) doit être branché à une des broches GND du Raspberry Pi Pico, alors que le fil vert (DIN), qui transmettra l'information servant à contrôler la couleur et l'intensité de chaque LED sera branché à une broche du Raspberry Pi Pico de votre choix, que nous définirons à l'intérieur de notre programme en Micropython (j'ai utilisé la broche GP15 du Raspberry Pi Pico).

Installation de la bibliothèque NeoPixel

Pour réaliser ce projet, j'ai utilisé le pilote pi_pico_neopixel. Le fichier neopixel.py doit être copié dans le Raspberry Pi Pico.


Exemple 1: lignes mouvantes


Dans ce premier script en micropython, les 16 LEDs d'une même ligne s'allument avec la même couleur, et la couleur est différente pour chaque ligne. Un effet d'animation provoque un déplacement des lignes.


-

-

Le constructeur (ligne 18) requiert 3 paramètres: le nombre de LEDs (dans mon cas, il y en a 256), le numéro d'ID de la machine d'état PIO utilisée par la bibliothèque, et le numéro de la broche du Raspberry Pi Pico à laquelle nous avons branché la matrice de LEDs (dans mon cas, c'était la broche GP15).

pixels = Neopixel(nombre_de_LEDs, 1, broche)

Lorsqu'on veut régler les paramètres d'une seule LED, on utilise la méthode set_pixel. Pour cet exemple, toutefois, il était plus pratique d'utiliser la méthode set_pixel_line, qui permet de régler un groupe de LEDs adjacentes, à la condition qu'elles soient toutes de la même couleur.

set_pixel_line(numéro de la première LED, numéro de la dernière LED, couleur RGB)

Sur une matrice bidimensionnelle, la numérotation des LEDs est un peu problématique car la matrice est constituée d'un ruban linéaire disposé en zigag. Par exemple, les LEDs de la première ligne sont numérotées de 0 à 15 en allant de la gauche vers la droite. Celles de la deuxième ligne sont numérotés de 16 à 31, mais en allant de la droite vers la gauche.

Pour cet exemple, puisque toutes les LEDs situées sur une même ligne ont la même couleur, il s'agit d'assigner la couleur rouge aux LEDs 0 à 15, la couleur orange aux LEDs 16 à 31, etc.

La couleur RGB est une liste de 3 nombres entiers situés entre 0 et 255: le premier nombre indique la quantité de rouge, le deuxième indique la quantité de vert, et le troisième indique la quantité de bleu.

Finalement, pour que vos nouveaux réglages soient visibles, il est important de terminer avec la méthode show (ligne 31).

Exemple 2: promeneurs aléatoires


Dans ce deuxième exemple: 6 points de couleurs différentes se déplacent au hasard. À chaque itération, le "promeneur" peut bouger vers une position adjacente, mais bien sûr il ne peut pas sortir des limites de la matrice.


-

-

Chacun des 6 promeneurs est décrit par 2 caractéristiques: sa couleur et sa position (lignes 34 à 39).

Cette fois, il est essentiel de désigner les positions au moyen de coordonnées x et y (numéro de la colonne et numéro de la ligne): la fonction xy_a_nombre calcule le numéro de la LED à partir de ces deux coordonnées.


À lire aussi

J'ai également écrit un article sur l'utilisation de cette matrice de LEDs avec une carte Arduino, et un autre avec les cartes ESP32 et ESP8266.

Mes autres articles concernant la programmation du Raspberry Pi Pico en Micropython se trouvent dans la dernière moitié de cette page.


Yves Pelletier

Aucun commentaire:

Enregistrer un commentaire