Lorsque j’ai acheté le RaspberryPi 3 modele A+, je me suis perdu dans la partie promotion de chez Kubii et j’ai craqué pour une matrice LED 16×32. La matrice reçue, je me suis posé deux questions : comment connecter la matrice aux ports GPIO du Raspberry et comment contrôler cette matrice. C’est ce que nous allons voir dans cet article.

Matériel Requis:

Commençons par la partie matériel et ce qui est nécessaire d’avoir pour faire fonctionner cette matrice.

Étape 1 : Connexion électrique

Dans un premier temps, il va falloir s’occuper de l’alimentation électrique. En effet, le câble électrique fournit avec des cosses en anneau. L’idée derrière cela étant de pouvoir connecter plusieurs panneaux sur un bornier.

Prises bornier

Dans notre cas, ce n’est pas vraiment pratique. Nous allons donc enlever les cosses et mettre à la place un connecteur Jack. Ceci nous permettra de brancher facilement notre panneau à une alimentation 5V.

Prise Jack

Étape 1 – bis : Connexion de la matrice LED aux GPIO

Passons maintenant à l’étape qui vous demandera le plus de patience : connecter la matrice LED aux GPIO du Raspberry.

Connexion de la matrice LED aux GPIO du Raspberry
Un beau sac de nœud

Commençons par un petit rappel de numérotation des GPIO: les pins de la partie gauche ont des numéros impaires, tandis que celles de la parties droites ont les numéros paires.

Connecteur Matrice LED
Connecteur Raspberry

Vous pouvez trouver dans les fichiers du projet « rpi-rgb-led-matrix » comment connecter la matrice aux GPIO. Cependant, je trouve l’explication peu intuitive : on part des pins du Raspberry pour aller vers la matrice. De plus, les informations étant étalées sur la page, nous sommes obligés de faire des allers-retours à chaque fil. Et je ne parle pas des notations des correspondances par émoji ! C’est pourquoi je vous propose de connecter dans l’autre sens, c’est-à-dire de prendre les pins de la matrice une à une et de les connecter aux RPI.

Dans le tableau ci-dessous, vous pouvez trouver la correspondance entre les pins de la matrice LED et celles du Raspberry.

Notez qu’au moins une des pins GND de la matrice LED ( pin 4, 8 et 16) doivent être relié à une pin GND du Raspberry. Pour ma part, j’ai connecté uniquement la pin 16 de la matrice à la pin 6 du Raspberry.

Matrice LEDRaspberryMatrice LEDRaspberry
123213
3264– (GND)
524621
7198– (GND)
9151016
11181222
1311147
1512166 (GND)

Si vous souhaitez avoir plus d’informations sur la fonctionnalité de chaque pin, ou si vous souhaitez connecter plusieurs matrices LED, je vous conseille d’aller sur cette page.

Étape 2 : Installation

Comme je l’ai mentionné précédemment, nous allons avoir besoin du projet « rpi-rgb-led-matrix ». Nous commençons donc par télécharger le projet en tapant la commande suivante:

git clone https://github.com/hzeller/rpi-rgb-led-matrix/

Puis nous allons compiler le projet. Pour ce faire, nous commençons par nous positionner dans le bon dossier :

cd rpi-rgb-led-matrix

Enfin, nous mettons à jour notre Raspberry, installons les paquets nécessaires, puis nous compilons le projet.

sudo apt-get update && sudo apt-get install python3-dev python3-pillow -y
make build-python PYTHON=$(which python3)
sudo make install-python PYTHON=$(which python3)

Une fois l’installation terminée, nous pouvons tester le bon fonctionnement

sudo ./examples-api-use/demo -D 0 --led-rows 16

Ce programme devrait vous afficher un carré multicolore, tournant au centre de la matrice.

fonction de démonstration de la matrice LED avec un Raspberry Pi 3 en utilisant le projet rpi-rgb-led-matrix

Étape 3: Utilisation de la matrice LED avec OpenCV

Nous pouvons maintenant passer à l’utilisation de la matrice avec OpenCV. Pour cet exemple, nous allons voir comment afficher une image sur la matrice.

Note: Si vous ne disposez pas d’OpenCV, vous pouvez suivre ce tutoriel.

Nous commençons par créer un fichier control_matrice.py et importons les bibliothèques nécessaires

import argparse
import cv2
from PIL import Image
from rgbmatrix import RGBMatrix, RGBMatrixOptions

La première bibliothèque que nous importons est argparse, qui nous permet de gérer les arguments lors de l’appel de notre programme. Nous importons OpenCV, puis PIL, une autre bibliothèque de traitement d’image. Enfin nous appelons les fonctions de la librairie rgbmatrix.

Faisons maintenant une petite pause pour comprendre pourquoi nous avons besoin de deux bibliothèques de traitement d’image. La librairie rgbmatrix à besoin d’une image de type PIL.Image, il nous faudra donc passer d’une image de type np.array à une image au bon format. La question que l’on se pause ensuite est: a-t-on besoin d’OpenCV ? En effet, il est possible d’ouvrir directement une image avec PIL et dans notre exemple, cela suffirai amplement. Cependant cela se compliquera lorsque nous voudrons réaliser des opérations plus complexes ou bien afficher une vidéo (ce qui n’a que peut d’intérêt avec une matrice 16×32). Cet article vous aidera ainsi à réaliser vos futurs projets.

Continuons avec notre programme et récupérons l’argument passé lors de l’appel de la fonction. Cet argument nous permet lire l’image voulu.

ap = argparse.ArgumentParser()
ap.add_argument("-i", "--image", required=True, help="Chemin de l'image")
args = vars(ap.parse_args())

image = cv2.imread(args["image"])

Préparation de la matrice

options = RGBMatrixOptions()
options.rows = 16
options.chain_length = 1
options.parallel = 1
options.hardware_mapping = 'regular'
matrix = RGBMatrix(options = options)

Nous définissons donc les paramètres de notre installation. Nous disposons d’une matrice à 16 lignes (l. 13) et une seule matrice est utilisé (l.14-15). Il est en effet possible de connecter plusieurs matrices afin d’agrandir la zone d’affichage. Nous spécifions ensuite le branchement de notre matrice qui est ‘regular’. Si vous utilisez un HAT, il vous suffit de remplacer ‘regular’ par ‘adafruit-hat’.

Enfin, nous appelons notre matrice avec les options que nous avons défini à la ligne 17.Reprenons maintenant avec l’image que nous avons ouverte à la ligne 9.

image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
image = Image.fromarray(image.astype('uint8'), 'RGB')

Du fait que OpenCV et PIL stocke les images différemment, nous devons transformer légèrement notre image. En effet, les couleurs des images ouvertes avec OpenCV sont stockées de base dans l’ordre bleu, vert, rouge. Or les images PIL sont dans l’ordre rouge, vert, bleu. Nous devons donc inverser le bleu et le rouge pour obtenir une image correcte.

Enfin, nous transformons l’image en format ‘numpy.array’ en image en format ‘PIL.Image’ à la ligne 20.

Il ne nous reste plus qu’à afficher l’image. Pour ce faire, nous avons besoin des deux lignes suivantes:

matrix.SetImage(image)
cv2.waitKey(0)

La première ligne nous sert à envoyer l’image vers la matrice. La seconde nous sert à définir le temps durant lequel nous voulons que notre image soit affichée. Dans notre cas, nous voulons que notre image soit tout le temps affichée d’où la valeur 0.

Affichage du résultat

Il ne nous reste plus qu’à observer le résultat.

sudo python3 control_matrice.py -i image.jpg
utilisation d'une Matrice led 16x32 avec OpenCV

Nous avons vu dans cet article comment afficher une image sur une matrice LED 16×32. Il est à noté que l’image que nous avons affiché est une image 16×32 également. Nous aborderons la problématique de recadrage d’image dans un autre article.

Catégories : Projets

0 commentaire

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.