ESP32 Matrice de led
Présentation
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 sus 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 |
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.
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);
}