Bonjour galien
Comme exemple, je t'ai fait un bout de programme pour gérer tes LED via des commandes dans le moniteur:
Ces ordres sont LED, LUM, TEMPO et OFF, ils sont détaillés, dans le sketch, audessus de void cmdExecute(String cmdRx)
Au départ la durée de l'allumage en secondes est défini par:
int ledOnTemps = 0; // Durée d'allumage de la LED, si 0 = continu
Le programme:
/*
Name: AF_galien_RgmtCasierLed.ino
Created: 11.03.2025
Author: galien/jpbbricole
Remarque: Commande de LED pour casier de rangement, depuis smartphone
https://forum.arduino.cc/t/aide-pour-developper-app-telephone-arduino-leds/1362675
13.03.2025 Première version #5
*/
#include <Adafruit_NeoPixel.h>
//------------------------------------- LED
const int ledPin = 6; // Connexion du bus des LED
const int ledNombre = 16; // Nombre de LED LED
int ledOnTemps = 0; // Durée d'allumage de la LED, si 0 = continu
Adafruit_NeoPixel leds(ledNombre, ledPin, NEO_GRB + NEO_KHZ800);
enum ledlColorsIndex {ledsColOff, ledsColGreen, ledsColBlue, ledsColRed, ledsColOrange, ledsColYellow, ledsColWithe, ledsColNombre};
uint32_t ledsColors[ledsColNombre];// Valeurs RGB pour les couleurs (Tableau)
const int ledsBrightMax = 25;// LED Luminosité maximum
void setup()
{
Serial.begin(115200); // Pour la console et l'introduction des commandes
signLedInitialisation();
leds.show();
delay(500);
leds.clear();
leds.show();
}
void loop()
{
if (Serial.available()) // Si commande dans la console
{
cmdExecute(Serial.readStringUntil('\n')); // Lire la commande jusqu'au caractère nouvelle ligne
}
}
//------------------------------------- Exécution de la commande
/*
Commandes non sensibles à la casse
Commandes reconnues:
LEDllcc commande de la LED ll à la couleur cc (ledlColorsIndex)
LUMlll commande de luminosité générale (0-255)
TEMPOttt Temps d'allumage des LED. Si 0 alumage continu
OFF Extinction complète
*/
void cmdExecute(String cmdRx)
{
cmdRx.trim(); // Commande nettoyage des caractères "parasites"
// https://www.arduino.cc/reference/fr/language/variables/data-types/string/functions/trim/
cmdRx.toUpperCase(); // Commande en majuscules
cmdRx.replace(" ", ""); // Commande suppression des espaces
if (cmdRx.startsWith(F("LED"))) // Si commande LED
{
cmdRx.replace(F("LED"), ""); // On supprime la commande pour ne garder que les paramètres
int ledNum = cmdRx.substring(0, 2).toInt(); // Extraction du numéro de la LED
int ledCol = cmdRx.substring(2).toInt(); // Extraction de la couleur de la LED
ledAllumage(ledNum, ledCol); // Commande allumage
}
else if (cmdRx.startsWith(F("LUM"))) // Si commande luminosité
{
cmdRx.replace(F("LUM"), "");
Serial.println("Luminosite: " + cmdRx);
leds.setBrightness(cmdRx.toInt());
leds.show();
}
else if (cmdRx.startsWith(F("TEMPO"))) // Si commande temps d'allumage si 0 allumage continu
{
cmdRx.replace(F("TEMPO"), "");
Serial.println("Temporisation: " + cmdRx);
ledOnTemps = cmdRx.toInt();
}
else if (cmdRx == (F("OFF"))) // Si commande extinction complète
{
Serial.println("Extinction");
leds.clear();
leds.show();
}
else
{
Serial.println("Commande inconnue: " + cmdRx);
}
}
void ledAllumage(int ledNum, int ledCouleur)
{
Serial.print("Allumage LED " + String(ledNum));
Serial.println("\tcouleur " + String(ledCouleur));
leds.setPixelColor(ledNum, ledsColors[ledCouleur]); // Allumage de la LED
leds.show();
if (ledOnTemps > 0)
{
delay(ledOnTemps * 1000);
leds.setPixelColor(ledNum, ledsColors[ledsColOff]); // Extinction de la LED
leds.show();
}
}
void signLedInitialisation() // Initialisation des leds et des couleurs
{
ledsColors[ledsColOff] = leds.Color(0, 0, 0);
ledsColors[ledsColRed] = leds.Color(255, 0, 0); // Définition des couleurs
ledsColors[ledsColGreen] = leds.Color(0, 255, 0);
ledsColors[ledsColBlue] = leds.Color(0, 0, 255);
ledsColors[ledsColYellow] = leds.Color(255, 255, 0);
ledsColors[ledsColOrange] = leds.Color(255, 165, 0);
ledsColors[ledsColWithe] = leds.Color(255, 255, 255);
leds.begin();
leds.setBrightness(ledsBrightMax);
leds.clear();
leds.show();
}
Ensuite, une fois le programme MAI fonctionnel ainsi que son serveur Web sur ESP, le programme ci-dessus viendra simplement se greffer au serveur.
N'hésites surtout pas à poser des questions, si nécessaire
A+
Bonne journée
jpbbricole