Le module matrice 8 X 8 et MAX7219
Si, comme moi, vous désirez fabriquer votre propre module en connectant une matrice de 64 LEDs (8 X 8) à un circuit intégré MAX7219 (ou MAX7221), je vous invite à lire cet article, publié il y a près de 5 ans, qui contient tous les détails concernant le circuit. Si vous préférez, vous pouvez facilement vous procurer un module prêt à l'emploi, combinant déjà une matrice de LEDs et un MAX7219.
Connexions du module à l'ESP32 ou ESP8266
5 connexions sont suffisantes pour contrôler le module MAX7219:
- VCC du module MAX7219: sortie 5 V de l'ESP8266 ou de l'ESP32
- GND du module MAX7219: broche GND de l'ESP8266 ou de l'ESP32
- DIN du module MAX7219: broche GPIO 12 de l'ESP8266 ou de l'ESP32
- CS (LOAD) du module MAX7219: broche GPIO 15 de l'ESP8266 ou de l'ESP32
- CLK du module MAX7219: broche GPIO 13 de l'ESP8266 ou de l'ESP32
Installation et modification de la bibliothèque LED Control
L'IDE Arduino doit avoir été configuré pour programmer une carte ESP8266 ou ESP32. Si ce n'est pas le cas, référez-vous à ces guides détaillés: pour l'ESP8266 ou pour l'ESP32.
Il faut également installer la bibliothèque LedControl par Eberhard Fahle. Ça peut se faire par le gestionnaire de bibliothèques.
Si vous utilisez un ESP32, il faudra probablement effectuer une petite modification dans le fichier LedControl.h de cette bibliothèque: il faut inclure le fichier "pgmspace.h" plutôt que "avr\pgmspace.h", sinon ça provoque une erreur de compilation (je n'ai pas eu ce problème avec l'ESP8266, toutefois).
Sketch
Voici le sketch qui construit une page web comportant une matrice de 64 cases à cocher, et qui allume les LEDs de la matrice qui correspondent aux cases cochées par l'utilisateur.
Avant de pouvoir utiliser ce sketch, il faudra y écrire le nom et le mot de passe de votre réseau WiFi.
-
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/********************************************************************** | |
ESP_Matrice_LEDs | |
Contrôle d'une matrice de LEDs 8 X 8 | |
branchée à un ESP8266 ou ESP32 | |
Înformations détaillées: | |
https://electroniqueamateur.blogspot.com/2020/05/matrice-de-leds-et-esp8266-esp32.html | |
***********************************************************************/ | |
// inclusion des bibliothèques utiles | |
// pour la communication WiFi | |
#if defined ARDUINO_ARCH_ESP8266 // s'il s'agit d'un ESP8266 | |
#include <ESP8266WiFi.h> | |
#include <ESP8266WebServer.h> | |
#elif defined ARDUINO_ARCH_ESP32 // s'il s'agit d'un ESP32 | |
#include "WiFi.h" | |
#include <WebServer.h> | |
#endif | |
#include <WiFiClient.h> | |
#include "LedControl.h" // bibliotheque LEDControl | |
// modifiez ces deux constantes pour qu'elles contiennent les caractéristiques de | |
// votre réseau Wifi | |
#define ssid "********" // le nom (SSID) de votre réseau WiFi | |
#define password "********" // votre mot de passe WiFi | |
LedControl lc = LedControl(12, 13, 15, 1); // DIN, CLK, CS, 1 seule matrice | |
#if defined ARDUINO_ARCH_ESP8266 // s'il s'agit d'un ESP8266 | |
ESP8266WebServer server(80); | |
#elif defined ARDUINO_ARCH_ESP32 // s'il s'agit d'un ESP32 | |
WebServer server(80); | |
#endif | |
byte grille[8][8]; // tableau contenant l'état de chaque LED | |
/* La fonction construitPage retourne un string qui contient toute notre page web */ | |
String construitPage() { | |
String page = "<html lang=fr-FR><head>"; | |
page += "<title>Matrice de LEDs</title>"; | |
page += "</head><body><h1>Matrice de 64 LEDs</h1>"; | |
page +="<p> Cliquez sur les LEDs que vous désirez allumer.</p>"; | |
page += "<form action='/' method='POST'>"; | |
for (int i = 0; i <= 63; i++) { | |
page += "<INPUT type='checkbox' name='" + String(i) + "'"; | |
if (grille[i/8][i%8]){ | |
page += " checked "; | |
} | |
page += ">"; | |
if (i % 8 == 7) { | |
page += "<br>"; | |
} | |
} | |
page += "<br> <br> "; | |
page += "<INPUT type='submit' value='Appliquer'><br><br>"; | |
page += "</body></html>"; | |
return page; | |
} | |
/* La fonction gestionPage modifie l'état des LEDs | |
quand le bouton Appliquer a été cliqué. */ | |
void gestionPage() { | |
String numero; | |
for (int i = 0; i <= 63; i++) { | |
numero = String(i); | |
grille[i/8][i%8] = server.hasArg(numero); | |
} | |
gestionLEDs(); | |
server.send ( 200, "text/html", construitPage() ); | |
} | |
/* Contrôle des LEDS de la matrice 8 X 8 */ | |
void gestionLEDs() { | |
for (int ligne = 0; ligne < 8; ligne++) | |
{ | |
for (int col = 0; col < 8; col++) | |
{ | |
lc.setLed(0, ligne, col, grille[ligne][col]); | |
} | |
} | |
} | |
void setup() { | |
lc.shutdown(0, false); // interruption du mode "économie d'énergie" | |
lc.setIntensity(0, 8); // réglage d'intensité (0~15) | |
lc.clearDisplay(0);// on éteint toutes les LEDs | |
// pour affichage dans le moniteur série | |
Serial.begin ( 115200 ); | |
Serial.println(""); | |
WiFi.mode(WIFI_STA); | |
// initialisation de la communication WiFi | |
WiFi.begin ( ssid, password ); | |
while ( WiFi.status() != WL_CONNECTED ) { | |
delay ( 500 ); Serial.print ( "." ); | |
} | |
Serial.println ( "" ); | |
Serial.print ( "Maintenant connecte a " ); | |
Serial.println ( ssid ); | |
Serial.print ( "Adresse IP: " ); | |
Serial.println ( WiFi.localIP() ); | |
// On indique le nom de la fonction qui gère l'interraction avec la page web | |
server.on ( "/", gestionPage ); | |
server.begin(); | |
Serial.println ( "Serveur HTTP en fonction" ); | |
} | |
void loop() { | |
server.handleClient(); | |
} |
-
Résultat
Lors du démarrage du programme, le moniteur série indique l'URL de l'ESP8266 / ESP32.
On copie cette adresse dans un navigateur web, ce qui nous donne accès à une page web comportant une matrice de 64 cases à cocher. Lorsque vous cliquez sur le bouton "Appliquer", les LEDs correspondant aux cases que vous avez cochées s'allument.
À lire également
- Utilisation de la même matrice de LEDs avec un Arduino Uno
- Autres projets impliquant un ESP8266 ou un ESP32.
Aucun commentaire:
Enregistrer un commentaire