MicroPython-8x8
Introduction
En cours de rédaction, nous avons constaté que l'afficheur ne fonctionnait pas correctement avec la classe Matrix8x8. Projet mis en attente. |
Que pourrait-il y avoir de mieux qu'une seul LED? Plein de LEDs! Elle permettent de réaliser des petits affichages en utilisant des matrices 8x8. De telles matrices utilisent le 'multiplexage'. Pour contrôler 7 segments de leds, il faut donc 14 broches. Cela représente donc beaucoup de broches, il existe bien des circuits de contrôle comme le MAX7219 pour gérer des matrices mais cela nécessite beaucoup de raccordements qui utilisent une tonne de place.
AdaFruit à bien entendu trouvé une solution à cette pesante situation et a mis au point un breakout permettant de contrôler des tonnes de LEDs en matrice sans devoir passer la moitié de la journée à faire des raccordements :-) Ce breakout permet de contrôler une mini matrice 8x8 avec led verte, jaune ou rouge.
Ajouter des afficheurs LED matriciel à vos projets devient totalement trivial.
Crédit: AdaFruit Industries www.adafruit.com
Cette version du BackPack LED est conçu pour des matrices 8x8 LEDs (20mm de côté). Comme ces matrices ne font que 20mm x 20mm, ce serait une horreur de devoir utiliser un ensemble massif de composant pour les contrôler. Ce backpack résout l'ennuyeux problème d'avoir 16 broches/pins disponible sur son microcontrôleur... ainsi que les composants nécessaires pour assurer une alimentation à courant constant (pour avoir un éclairage homogène des LEDs). Ce backpack propose le tout dans un seul composant et dispose en plus d'une interface I2C. Il est tellement petit qu'il tient derrière la carte et prend soin de tout, est capable de contrôler 64 LEDs (en tâche de fond), en n'utilisant que deux broches du microcontrôleur (pour le bus I2C).
Tout ce que vous avez à faire, c'est d'envoyer des donnée en utilisant le bus I2C. Ce breakout dispose de deux cavaliers (jumper à souder) permettant d'assigner l'adresse du module sur le bus I2C . Avec 2 cavaliers, vous pouvez assigner 4 adresses différents au module... et donc en placer jusque 4 sur un même bus I2C (ou avec autant de senseur et autre composant I2C que vous voulez... pour autant que chaque adresse soit unique sur le bus).
Le composant pilotant l'afficheur est capable d'ajuster la luminosité de l'afficheur (de tout l'afficheur dans son ensemble) par pas de 1/16 de la puissance lumineuse maximale. Notez qu'il n'est pas possible de modifier la luminosité d'une seule LED... mais uniquement de tout l'afficheur.
Assemblage
Ces instructions d'assemblage ne s'applique qu'à la matrice LED 8x8 de 20mm! Si vous disposez d'une matrice Bi-Colore ou une matrice de 30mm alors utilisez le manuel correspondant que vous trouverez dans la fiche produit (sur shop.mchobby.be). |
Toutes les images ci-dessous: crédit AdaFruit Industries
C'est fini! Vous êtes maintenant prêt à passer à la partie logicielle!
Brancher sur la PyBoard
Voici les raccordements opérés:
PyBoard | Breakout | Description |
X9 | C | SCL - I2C Clock, le signal d'horloge I2C |
X10 | D | SDA - I2C Data, la ligne de donnée |
GND | - | Masse |
VIN | + | Le breakout s'alimente en 5V. Nous allons donc utiliser VIn (il ne faudra pas dépasser 5V sur l'alimentation de la PyBoard si vous utilisez un bloc pile!!) |
La bibliothèque
Jan Dednarik (voir section ressources) à réaliser une excellente classe bibliothèque pour prendre le contrôle de cet afficheur.
Il n'est vraiment pas nécessaire de réinventer la roue si quelqu'un à déjà fait un travail remarquable. Je vous propose donc de repartir de ce travail.
Télécharger
Vous pourrez trouver le code de son module matrix8x8.py dans le lien suivant:
Note: L'archive contient également un code de test.
Mettre sur la PyBoard
Branchez votre Pyboard sur votre ordinateur, ce doit apparaître comme un lecteur Flash.
Nous allons copier le module matrix8x8.py et le fichier de test sur notre PyBoard.
Tester l'afficheur
Ouvrez une ligne de commande sur votre Pyboard (voyez notre tutoriel "L'invite REPL").
Nous allons commencer par vérifier que les fichiers soient bien là en les listant:
import os os.listdir()
Nous devons clairement voir apparaître le fichier "matrix8x8.py" et le fichier de test dans la liste (comme sur l'image ci-dessous).
Maintenant que nous avons localiser le fichier, nous allons pouvoir l'importer
from matrix8x8 import *
Selon le montage réalisé, nous nous trouvons sur le bus I2C(1) et l'adresse du breakout est 0x70 (adresse par défaut).
Nous allons néanmoins scanner le bus I2C et identifier l'adresse de notre breakout. Dans ce cas de figure, notre breakout est un esclave et notre PyBoard le maitre (master) du bus.
from pyb import I2C i2c = I2C( 1, I2C.MASTER ) i2c.scan()
cela retourne la liste suivante.
Nous pouvons constater que l'adresse 112 (décimale) est bien utilisée (112 décimal correspond à 70 en hexadécimal dont la notation est 0x70). Pour connaître la représentation d'une valeur décimale, vous pouvez utiliser l'instruction print( '%x' % 112 )
Créons maintenant notre objet led4x7 puisque nous connaissons tous les paramètres nécessaires.
disp = Matrix8x8( addr=0x70, i2c=i2c ) disp.set_row( 2, 0xFF ) # active la ligne 2 (3ieme ligne ) disp.set_row( 3, 0xFF ) # active la ligne 3 (4ieme ligne ) disp.clear() disp.set_column( 1, 0xFF ) # active la ligne 1 (2ieme ligne) disp.clear() disp.set_pixel(0,0) disp.clear() for i in range( 0, 8 ): # ligne en diagonale print( i ) disp.set_pixel( i, i )
Il y a d'autres exemples de méthodes utilisables comme set_blinking pour le clignotement, set pour afficher un "bitmap" et set_brightness pour la luminosité.
Ressources
- MicroPython Matrix8x8 Driver (Réalisée par JanBednarik)
Un chouette GitHub pour le module 8x8.