C'est un peu plus complexe ... je mets le code en entier mais ça va de suite être plus compliqué.
Infos : ce n'est pas 1 led mais 4 relais (rouge, vert, bleu, et vcc).
Je mets un relais sur le VCC à cause d'un défaut d'isolement électrique.
#include <ESP8266WiFi.h>
#include "Adafruit_MQTT.h"
#include "Adafruit_MQTT_Client.h"
#include <FS.h>
#define WIFI_SSID "****"
#define WIFI_PASS "****"
#define MQTT_SERV "io.adafruit.com"
#define MQTT_PORT 1883
#define MQTT_NAME "****"
#define MQTT_PASS "****"
String red = "R";
String green = "G";
String blue = "B";
String cyan = "C";
String magenta = "M";
String yellow = "Y";
String white = "W";
String off = "OFF";
int r = D1;
int g = D2;
int b = D3;
int VCC = D0;
String fileTxt;
//INIT
WiFiClient client;
Adafruit_MQTT_Client mqtt(&client, MQTT_SERV, MQTT_PORT, MQTT_NAME, MQTT_PASS);
Adafruit_MQTT_Subscribe onoff = Adafruit_MQTT_Subscribe(&mqtt, MQTT_NAME "/f/RGB");
void setup()
{
Serial.begin(9600);
SPIFFS.begin();
pinMode(LED_BUILTIN, OUTPUT);
pinMode(r, OUTPUT);
pinMode(g, OUTPUT);
pinMode(b, OUTPUT);
pinMode(VCC, OUTPUT);
WiFi.begin(WIFI_SSID, WIFI_PASS);
WiFi.mode(WIFI_STA);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");}
digitalWrite(LED_BUILTIN, HIGH);
Serial.println("OK!");
mqtt.subscribe(&onoff);
File f = SPIFFS.open("/rgb.txt", "r");
fileTxt = f.readString();
Serial.println(fileTxt);
if(fileTxt == red){
digitalWrite(r, HIGH);
digitalWrite(g, LOW);
digitalWrite(b, LOW);
digitalWrite(VCC, HIGH);}
else if(fileTxt == green){
digitalWrite(r, LOW);
digitalWrite(g, HIGH);
digitalWrite(b, LOW);
digitalWrite(VCC, HIGH);}
else if(fileTxt == blue){
digitalWrite(r, LOW);
digitalWrite(g, LOW);
digitalWrite(b, HIGH);
digitalWrite(VCC, HIGH);}
else if(fileTxt == cyan){
digitalWrite(r, LOW);
digitalWrite(g, HIGH);
digitalWrite(b, HIGH);
digitalWrite(VCC, HIGH);}
else if(fileTxt == magenta){
digitalWrite(r, HIGH);
digitalWrite(g, LOW);
digitalWrite(b, HIGH);
digitalWrite(VCC, HIGH);}
else if(fileTxt == yellow){
digitalWrite(r, HIGH);
digitalWrite(g, HIGH);
digitalWrite(b, LOW);
digitalWrite(VCC, HIGH);}
else if(fileTxt == white){
digitalWrite(r, HIGH);
digitalWrite(g, HIGH);
digitalWrite(b, HIGH);
digitalWrite(VCC, HIGH);}
else if(fileTxt == off){
digitalWrite(r, LOW);
digitalWrite(g, LOW);
digitalWrite(b, LOW);
digitalWrite(VCC, LOW);}
f.close();
}
void loop()
{
MQTT_connect();
Adafruit_MQTT_Subscribe * subscription;
while ((subscription = mqtt.readSubscription(5000)))
{
if (subscription == &onoff){
File f = SPIFFS.open("/rgb.txt", "w");
Serial.print("onoff: ");
Serial.println((char*) onoff.lastread);
if (!strcmp((char*) onoff.lastread, "R"))
{
digitalWrite(r, HIGH);
digitalWrite(g, LOW);
digitalWrite(b, LOW);
digitalWrite(VCC, HIGH);
f.println("R");
delay(50);
}
else if (!strcmp((char*) onoff.lastread, "G"))
{
digitalWrite(r, LOW);
digitalWrite(g, HIGH);
digitalWrite(b, LOW);
digitalWrite(VCC, HIGH);
f.println("G");
delay(50);
}
else if (!strcmp((char*) onoff.lastread, "B"))
{
digitalWrite(r, LOW);
digitalWrite(g, LOW);
digitalWrite(b, HIGH);
digitalWrite(VCC, HIGH);
f.println("B");
delay(50);
}
else if (!strcmp((char*) onoff.lastread, "C"))
{
digitalWrite(r, LOW);
digitalWrite(g, HIGH);
digitalWrite(b, HIGH);
digitalWrite(VCC, HIGH);
f.println("C");
delay(50);
}
else if (!strcmp((char*) onoff.lastread, "M"))
{
digitalWrite(r, HIGH);
digitalWrite(g, LOW);
digitalWrite(b, HIGH);
digitalWrite(VCC, HIGH);
f.println("M");
delay(50);
}
else if (!strcmp((char*) onoff.lastread, "Y"))
{
digitalWrite(r, HIGH);
digitalWrite(g, HIGH);
digitalWrite(b, LOW);
digitalWrite(VCC, HIGH);
f.println("Y");
delay(50);
}
else if (!strcmp((char*) onoff.lastread, "W"))
{
digitalWrite(r, HIGH);
digitalWrite(g, HIGH);
digitalWrite(b, HIGH);
digitalWrite(VCC, HIGH);
f.println("W");
delay(50);
}
else if (!strcmp((char*) onoff.lastread, "OFF"))
{
digitalWrite(r, LOW);
digitalWrite(g, LOW);
digitalWrite(b, LOW);
digitalWrite(VCC, LOW);
f.println("OFF");
delay(50);}
f.close();
}
}
}
void MQTT_connect()
{
if (mqtt.connected() && mqtt.ping())
{
return;
}
int8_t ret;
mqtt.disconnect();
Serial.print("Connecting to MQTT... ");
uint8_t retries = 3;
while ((ret = mqtt.connect()) != 0)
{
Serial.println(mqtt.connectErrorString(ret));
Serial.println("Retrying MQTT connection in 5 seconds...");
mqtt.disconnect();
delay(5000);
retries--;
if (retries == 0)
{
ESP.reset();
}
}
Serial.println("MQTT Connected!");
}