Aller au contenu


ESP01 Contrôle des diodes WS2812 à l’aide de l’IDE Arduino-Part5

Niveau:3

Introduction:

Dans ce chapitre, nous allons ajouter des fonctionnalités à notre client Web et la configuration du nombres de LED via la liaison série. Par exemple, un marche arrêt du bandeau. Bien sur, lors de cette mise à jour, j’en profite pour mieux organiser le programme.

Parenthèse:

Si vous souhaitez effectuer des requêtes, voici un logiciel facile à utiliser https://www.getpostman.com/.

Pour envoyer une commande de luminosité moins, taper 192.168.1.22/set?b=-  le serveur répondra OK.

Marche Arrêt du bandeau LED:

Ajout de la fonctionnalité dans le programme:

Dans le sous programme void srv_handle_set() et dans la boucle for (uint8_t i=0; i < server.args(); i++){. , ajouter le code ci dessous:

 if(server.argName(i) == "p") { // Marche arrêt bandeau LED
 if(server.arg(i)[0] == 'm') {
 ws2812fx.start();
 } else {
 ws2812fx.stop();;
 }
 }

Transférer le programme.

Modification du client Web:

Ouvrir le fichier index.html avec un éditeur. Par exemple notepad++.

Ajouter les lignes suivantes sous <div id=’controls’>:

 <ul id='power'>
 <li><a href='#' class='p' id='a'>Arrêt</a></li>
 <li><a href='#' class='p' id='m'>Marche</a></li>

et dans la zone des styles les linges ci-dessous:

 ul#power li {
 display:inline-block;
 width:30%;
 }

Faire une mise à jour avec la fonction ESP8266 Sketch Data Upload.

Configuration du nombres de LED via la liaison série:

Remplacer la défintion #define LED_COUNT 5 // Nombres de LED par #define LED_MAX 1000 // Nombres de LED MAX.Vous pouvez choisir une autre valeur.

Ajouter la ligne ci dessous pour définir l’adresse de sauvegarde des paramètres dans l’EEPROM.

#define ADRESS_NLED 109 // Adresse de départ paramètres nombres de LED (Fin ADRESS_NLED + 2 mots)109

Comme la valeur sera stockée sur 16 bits, nous allons modifier les sous programmes long EEPROMReadlong(long address) et void EEPROMWritelong(int address, long value) pour lire et écrire dans EEPROM sur 16 bits.

Remplacer LED_COUNT par 1.

WS2812FX ws2812fx = WS2812FX(1, LED_PIN, NEO_GRB + NEO_KHZ800);

Voici les sous programmes.

//This function will write a 4 byte (32bit) long to the eeprom at
//the specified address to address + 3.
//nbit=2 en 16 bits nbit=4 en 32 bits
void EEPROMWritelong(int address, long value,int nbit) 
 {
 //Decomposition from a long to 4 bytes by using bitshift.
 //One = Most significant -> Four = Least significant byte
 byte four = (value & 0xFF);
 byte three = ((value >> 8) & 0xFF);
 byte two = ((value >> 16) & 0xFF);
 byte one = ((value >> 24) & 0xFF);

//Write the 4 bytes into the eeprom memory.
 EEPROM.write(address, four);
 EEPROM.write(address + 1, three);
 if (nbit==4){
 EEPROM.write(address + 2, two);
 EEPROM.write(address + 3, one); 
 }

EEPROM.commit();
 EEPROM.end();
 }

//This function will return a 4 byte (32bit) long from the eeprom
//at the specified address to address + 3.
//nbit=2 en 16 bits nbit=4 en 32 bits
long EEPROMReadlong(long address,int nbit) 
 {
 //Read the 4 bytes from the eeprom memory.
 long four = EEPROM.read(address);
 long three = EEPROM.read(address + 1);
 long two = EEPROM.read(address + 2);
 long one = EEPROM.read(address + 3);

//Return the recomposed long by using bitshift.
 if (nbit==4) return long((four << 0) & 0xFF) + ((three << 8) & 0xFFFF) + ((two << 16) & 0xFFFFFF) + ((one << 24) & 0xFFFFFFFF);
 if (nbit==2) return uint16_t(((four << 0) & 0xFF) + ((three << 8) & 0xFFFF)); 
 }

Dans le programme, ajouter le paramètre 4 lors de l’appel au sous-programme.

ws2812fx.setColor(EEPROMReadlong(ADRESS_LED + 3,4));

EEPROMWritelong(ADRESS_LED + 3,tmp,4);

Dans le sous-programme setup, ajouter après Serial.print(« Alimentation Vcc: « ) les lignes ci dessous:

 if (EEPROMReadlong(ADRESS_NLED,2)>LED_MAX) EEPROMWritelong(ADRESS_NLED,LED_MAX,2); 
 Serial.print("Nombres de Led: ");
 Serial.printf("%d",EEPROMReadlong(ADRESS_NLED,2);
 Serial.println();

Nous ajoutons la configuration du bandeau depuis la liaison série au dessus de celle du WIFI if (valeur== »wifi »):

if (valeur=="led"){
 Serial.println("Entrer le nombres de LED");
 while (Serial.available()==0) { //Attendre la saisie
 }
 valeur=Serial.readString();
 EEPROMWritelong(ADRESS_NLED,valeur.toInt(),2); // valeur nombres de LED
 Serial.println();
 Serial.print("Nombres de Led: ");
 Serial.printf("%d",EEPROMReadlong(ADRESS_NLED,2));
 EEPROM.commit(); 
 ESP.reset(); // Reset du module ESP01
}

Et pour finir ajoutons la ligne ci dessous au dessus de ws2812fx.init();

 ws2812fx.stop();
 ws2812fx.setLength(EEPROMReadlong(ADRESS_NLED,2));

Transférer le programme. Faire un reset.

Maintenant taper led pour configurer le nombre de LED que vous avez puis mettre le circuit hors tension puis sous tension.

Voici l’ensemble du projet: esp8266_webinterface_1.5.zip

Version avec mémorisation de la mise en marche/arrêt du bandeau LED. Cela permet de redémarrer dans le même état. esp8266_webinterface_1.5.1.zip

Nombre de visiteurs depuis le 07/2012: