MicroPython-8x8

De MCHobby - Wiki
Sauter à la navigation Sauter à la recherche

Introduction

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.

ADF-LED-BACKPACK-MATRICE-20mm-INTRO.jpg
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

Toutes les images ci-dessous: crédit AdaFruit Industries

ADF-LED-BACKPACK-MATRICE-20mm-01.jpg Quand vous achetez un backpack AdaFruit chez MCHobby, le backpack est livré assemblé et testé ... tout comme la matrice 8x8 également testée. La matrice est disponible dans différentes couleurs (rouge, jaune ou verte). Vous aurez besoin de souder la matrice sur le backpack mais c'est une tâche assez facile.
ADF-LED-BACKPACK-MATRICE-20mm-02.jpg Retirez les différents éléments de leur emballage et placer la matrice LED AU DESSUS de la sérigraphie (la partie imprimée). Vous pouvez la placer dans n'importe quel orientation - cette matrice ci est symétrique et par conséquent est fonctionnera dans n'importe quel sens de montage (pour autant qu'elle soit placée du côté sérigraphie :-) ). Ne souder pas la matrice au dessus du circuit intégré du backpack sinon cela ne fonctionnera pas!
ADF-LED-BACKPACK-MATRICE-20mm-03.jpg Retournez l'ensemble de façon a ce que le backpack repose bien à plat sur la matrice.
ADF-LED-BACKPACK-MATRICE-20mm-04.jpg Soudez les 16 broches.
ADF-LED-BACKPACK-MATRICE-20mm-06.jpg


ADF-LED-BACKPACK-MATRICE-20mm-07.jpg

Raccourcissez ensuite les broches avec un pince coupante.
ADF-LED-BACKPACK-7SEG-08.jpg A partir d'ici, vous pouvez soit brancher la matrice directement sur votre microcontroleur, soit utiliser un pinHeader (connecteur). Nous partons du principe que vous voudrez utiliser un pinHeader pour faire du prototypage sur Breadboard. Dans ce cas, coupez une section de 4 broches et insérez la partie la plus longue dans le breadboard.

notes:

  • Ne vous inquiétez pas des fils pour breadboard, ils ne sont pas nécessaires pour l'instant.
  • De même, l'Arduino sur l'image (provenant d'un autre tuto) n'est pas nécessaire.
ADF-LED-BACKPACK-MATRICE-20mm-08.jpg


ADF-LED-BACKPACK-MATRICE-20mm-09.jpg

Placez ensuite le backpack au dessus.

Soudez ensuite les 4 broches

C'est fini! Vous êtes maintenant prêt à passer à la partie logicielle!

Brancher sur la PyBoard

PyBoard-matrice-8x8-raccordement.jpg

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.

PyBoard-8x8-bibliotheque.jpg

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).

PyBoard-8x8-matrix-check.jpg

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.

PyBoard-4x7-Segment-i2c-scan.jpg

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

Ou acheter