ESP32 Matrice de led

De knowledge
Aller à la navigation Aller à la recherche

Présentation

LED Matrix 32x8.png

On veut utiliser une carte prototype standard ESP32 pour afficher du texte sur une matrice de LED 32x8 (4 modules 8x9) . A noter que c'est la même chose pour n'importe quel nombre de Modules.

Cet afficheur utilise le contrôleur MAX7219. Ce contrôleur fonctionne suivant le protocole SPI. Plusieurs contrôleurs peuvent être chainés entre eux. Le contrôleur prends en charge, soit 8 afficheurs 7 segments soit une matrice de LED 8x8. Ici 4 afficheurs LED 8x8 utiliseront 4 MAX7219 (regardez sous les afficheurs il y a le circuit).

Beaucoup de librairies existent, on peut même attaquer le contrôleur directement en SPI ce qui est un joli exercice. Cependant ici je vais utilise une librairie assez classique MD_MAX72xx.

Le branchement se fait selon le "pinout":

ESP32 dev kit MAX7219 module
VIN Vcc Attention l'afficheur consomme beaucoup! Vous pouvez brancher sur le 3.3V mais ca surcharge le régulateur. VIN est directement sur l'alimUSB*.
GND GND Rien a dire
D23 DIN MOSI (Master out slave in) c'est un standard SPI
D21 CS Ca se configure dans le code
D18 CLK SCK du protocole SPI

J'utilise pour cet exemple une carte basée ESP32 WROOM-32 appelée ESP32 DEVKITV1.

Dans tous les cas une alim externe spécifique à l'afficheur serait plus raisonnable. Avec l'afficheur branché sur le VIN j'ai du mal a reprogrammer l'ESP32 en même temps que les LEDs brillent. Pour que cela fonctionne à tous les coups j'utilise un câble USBC-µUSB pour relier la carte breakout au dock de mon Laptop. (Lenovo ThinkPad pour les deux). Là j'ai assez le courant pour faire briller les LEDS a fond et continuer a utiliser le port série USB.

Le programme

On utilise donc les librairies MD_Parola.h et MD_MAX72xx.h.

/*
 * This ESP32 code is created by esp32io.com
 *
 * This ESP32 code is released in the public domain
 *
 * For more detail (instruction and wiring diagram), visit https://esp32io.com/tutorials/esp32-led-matrix
 */

#include <MD_Parola.h>
#include <MD_MAX72xx.h>

#define HARDWARE_TYPE MD_MAX72XX::FC16_HW
#define MAX_DEVICES 4 // 4 blocks
#define CS_PIN 21

// create an instance of the MD_Parola class
MD_Parola ledMatrix = MD_Parola(HARDWARE_TYPE, CS_PIN, MAX_DEVICES);

void setup() {
  ledMatrix.begin();         // initialize the LED Matrix
  ledMatrix.setIntensity(0); // set the brightness of the LED matrix display (from 0 to 15)
  ledMatrix.displayClear();  // clear LED matrix display
}

void loop() {
  ledMatrix.setTextAlignment(PA_CENTER);
  ledMatrix.print("Hello!"); // display text
  delay(2000);

}

Dotmatrixhello.png

J'aime beaucoup cette librairie car elle sait gérer des caractères proportionnels (les "l" prennent moins de place que les "e") ca nous permet d'écrire "Hello" sur un afficheur qui ne serait capable d'afficher que 4 lettres avec des caractères 7x7 (ou 5 avec des caractères 5x7)