dimanche 17 mai 2020

Matrice de LEDs et ESP8266 / ESP32

Je vous présente aujourd'hui un dispositif qui permet de contrôler à distance, par l'entremise d'une page web, une matrice de 64 LEDs. Pour ce faire, j'ai utilisé un ESP8266 ou un ESP32, un circuit intégré MAX7219 et une matrice de 8 X 8 LEDs.



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.

-
/**********************************************************************
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&eacute;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


Yves Pelletier (TwitterFacebook)

Aucun commentaire:

Enregistrer un commentaire