Voici un exemple prévu pour un M5stack, c'est un ESP32 avec un affichage LCD couleur, 3 boutons et plein d'autre choses.
L'exemple est un serveur de boutons, chaque fois que l'on appuie sur un (ou plusieurs) bouton(s) l'état des boutons est envoyé au client connecté, on pourrait facilement le transformer en serveur de signal.
Comme l'ESP est doté d'un affichage celui ci est utilisé pour afficher l'état WIFI et l'état du client, tout ce qui concerne l'affichage est dans un onglet séparé (affichage.h). Il faut aussi gérer l'affichage et les boutons, toutes les méthodes nécessaires sont préfixées par "M5".
Le programme serveur.ino
// LCD 320x240
// 16 bit/pixel color order (R:5-bit, G:6-bit, B:5-bit), 65,536 colors
IPAddress ip; // adresse ip du serveur
#include <WiFi.h>
#include <M5Stack.h>
#include "Affichage.h"
char ssid[]="WIFI MAC"; // nom du reseau
char pass[]="Ma phrase de securite"; // mot de passe WPA
WiFiServer server(22); // serveur sur le port 22
int status=WL_IDLE_STATUS; // etat connexion wifi
void setup() {
M5.begin();
afficher(false,false);
while (status!=WL_CONNECTED) { // connexion wifi
status=WiFi.begin(ssid, pass);
delay(5000);
}
server.begin(); // demarrage du serveur (config)
ip=WiFi.localIP(); // obtention de l'adresse ip du serveur
afficher(true,false);
}
void loop() {
WiFiClient client=server.available(); // test si client connecte
if (client) { byte data; int color; // client connecte
afficher(true,true);
while (client.connected()) { // boucle de traitement
data=M5.BtnA.read()*4+M5.BtnB.read()*2+M5.BtnC.read(); // lecture des boutons
client.write(data); // envoi au client
boutons(data);
delay(100);
}
afficher(true,false);
client.stop(); // client deconnecte
}
}
Si on veut des adresses IP fixes il faut changer "server.begin()"; en "server.config(...);"
Accessoirement le fichier faisant les affichages :
void afficher(boolean b1,boolean b2) { // affichage des messages
M5.Lcd.setTextColor(BLACK);
M5.Lcd.setTextFont(4);
M5.Lcd.fillScreen(WHITE);
M5.Lcd.setCursor(25,50);
if (!b1) {
M5.Lcd.print("Connexion WIFI ...");
return;
}
else {
M5.Lcd.print("Serveur : ");
M5.Lcd.print(ip);
}
if (b2) {
M5.Lcd.setTextColor(RED);
M5.Lcd.setCursor(25,100);
M5.Lcd.print("Client connecte");
}
}
void boutons(byte data) { int color; // affichage des boutons
if ((data&4)!=0) color=BLACK; else color=WHITE;
M5.Lcd.fillRoundRect(35,165,60,40,4,color);
if ((data&2)!=0) color=BLACK; else color=WHITE;
M5.Lcd.fillRoundRect(35+35+60,165,60,40,4,color);
if ((data&1)!=0) color=BLACK; else color=WHITE;
M5.Lcd.fillRoundRect(35+35+35+60+60,165,60,40,4,color);
}
Pierre