|
|
|
@ -10,6 +10,7 @@ int color = LED_COLOR_DEFAULT; |
|
|
|
int speed = LED_SPEED_DEFAULT; |
|
|
|
CRGB leds[LED_NUM]; |
|
|
|
int ledEffect = LED_EFFECT_OFF; |
|
|
|
boolean ledState = false; |
|
|
|
|
|
|
|
// WIFI
|
|
|
|
WiFiClient espClient; |
|
|
|
@ -18,7 +19,8 @@ WiFiClient espClient; |
|
|
|
char message_buff[100]; |
|
|
|
PubSubClient client(espClient); |
|
|
|
|
|
|
|
void setup() { |
|
|
|
void setup() |
|
|
|
{ |
|
|
|
Serial.begin(SERIAL_SPEED); |
|
|
|
Serial.println("\nresetting"); |
|
|
|
|
|
|
|
@ -29,19 +31,20 @@ void setup() { |
|
|
|
client.setServer(MQTT_SERVER, MQTT_PORT); |
|
|
|
client.setCallback(callbackMQTT); |
|
|
|
testConnectMQTT(); |
|
|
|
client.subscribe(MQTT_LED_EFFECT); |
|
|
|
client.subscribe(MQTT_LED_BRIGHTNESS); |
|
|
|
client.subscribe(MQTT_LED_COLOR); |
|
|
|
client.subscribe(MQTT_LED_SPEED); |
|
|
|
client.subscribe(MQTT_LED_EFFECT_COMMAND); |
|
|
|
client.subscribe(MQTT_LED_BRIGHTNESS_COMMAND); |
|
|
|
client.subscribe(MQTT_LED_COLOR_COMMAND); |
|
|
|
client.subscribe(MQTT_LED_SPEED_COMMAND); |
|
|
|
|
|
|
|
// LED
|
|
|
|
LEDS.addLeds<LED_CHIPSET,LED_PIN, LED_COLOR_ORDER>(leds, LED_NUM).setCorrection(TypicalSMD5050); |
|
|
|
FastLED.setBrightness(brightness); |
|
|
|
ledBlackAll(); |
|
|
|
FastLED.setBrightness(brightness); |
|
|
|
} |
|
|
|
|
|
|
|
// WIFI
|
|
|
|
void setupWifi() { |
|
|
|
void setupWifi() |
|
|
|
{ |
|
|
|
Serial.print("Connexion a "); |
|
|
|
Serial.print(WIFI_SSID); |
|
|
|
WiFi.mode(WIFI_STA); |
|
|
|
@ -58,7 +61,8 @@ void setupWifi() { |
|
|
|
} |
|
|
|
|
|
|
|
// MQTT
|
|
|
|
void testConnectMQTT() { |
|
|
|
void testConnectMQTT() |
|
|
|
{ |
|
|
|
while (!client.connected()) { |
|
|
|
Serial.print("Connexion au serveur MQTT... "); |
|
|
|
if (client.connect("ESP8266Client", MQTT_USER, MQTT_PASS)) { |
|
|
|
@ -74,54 +78,44 @@ void testConnectMQTT() { |
|
|
|
} |
|
|
|
|
|
|
|
// Déclenche les actions à la réception d'un message
|
|
|
|
void callbackMQTT(char* topic, byte* payload, unsigned int length) { |
|
|
|
if (String(topic) == MQTT_LED_EFFECT) { |
|
|
|
Serial.print("Received [" + String(topic) + "] : "); |
|
|
|
|
|
|
|
Serial.print(payload[0]); |
|
|
|
Serial.print(" ~ "); |
|
|
|
Serial.print(payload[0] - '0'); |
|
|
|
|
|
|
|
ledEffect = payload[0] - '0'; |
|
|
|
Serial.print("["); |
|
|
|
Serial.print(ledEffect); |
|
|
|
Serial.println("]"); |
|
|
|
|
|
|
|
void callbackMQTT(char* topic, byte* payload, unsigned int length) |
|
|
|
{ |
|
|
|
String stopic = String(topic); |
|
|
|
|
|
|
|
unsigned int i = 0; |
|
|
|
for(i = 0; i < length; i++) { |
|
|
|
message_buff[i] = payload[i]; |
|
|
|
} |
|
|
|
message_buff[i] = '\0'; |
|
|
|
String msgString = String(message_buff); |
|
|
|
|
|
|
|
Serial.print("Received [" + stopic + "] : "); |
|
|
|
Serial.println(msgString); |
|
|
|
|
|
|
|
if (stopic == MQTT_LED_COMMAND) { |
|
|
|
if (msgString == "ON") { |
|
|
|
ledState = true; |
|
|
|
client.publish(MQTT_LED_STATE, message_buff, true); |
|
|
|
} else { |
|
|
|
ledState = false; |
|
|
|
client.publish(MQTT_LED_STATE, message_buff, true); |
|
|
|
} |
|
|
|
} else if (stopic == MQTT_LED_EFFECT_COMMAND) { |
|
|
|
// Si on ne repasse pas tout à noir, cela peut faire des effets surprenants
|
|
|
|
ledBlackAll(); |
|
|
|
} else if (String(topic) == MQTT_LED_BRIGHTNESS) { |
|
|
|
unsigned int i = 0; |
|
|
|
for(i = 0; i < length; i++) { |
|
|
|
message_buff[i] = payload[i]; |
|
|
|
} |
|
|
|
message_buff[i] = '\0'; |
|
|
|
// TODO : il est surement possible de faire plus propre
|
|
|
|
String msgString = String(message_buff); |
|
|
|
ledEffect = msgString.toInt(); |
|
|
|
// TODO : a vraiment tester
|
|
|
|
client.publish(MQTT_LED_EFFECT_STATE, message_buff, true); |
|
|
|
} else if (stopic == MQTT_LED_BRIGHTNESS_COMMAND) { |
|
|
|
brightness = msgString.toInt(); |
|
|
|
FastLED.setBrightness(brightness); |
|
|
|
|
|
|
|
Serial.print("Received [" + String(topic) + "] : "); |
|
|
|
Serial.println(msgString); |
|
|
|
} else if (String(topic) == MQTT_LED_COLOR) { |
|
|
|
unsigned int i = 0; |
|
|
|
for(i = 0; i < length; i++) { |
|
|
|
message_buff[i] = payload[i]; |
|
|
|
} |
|
|
|
message_buff[i] = '\0'; |
|
|
|
String msgString = String(message_buff); |
|
|
|
client.publish(MQTT_LED_BRIGHTNESS_STATE, message_buff, true); |
|
|
|
} else if (stopic == MQTT_LED_COLOR_COMMAND) { |
|
|
|
color = msgString.toInt(); |
|
|
|
Serial.print("Received [" + String(topic) + "] : "); |
|
|
|
Serial.println(msgString); |
|
|
|
} else if (String(topic) == MQTT_LED_SPEED) { |
|
|
|
unsigned int i = 0; |
|
|
|
for(i = 0; i < length; i++) { |
|
|
|
message_buff[i] = payload[i]; |
|
|
|
} |
|
|
|
message_buff[i] = '\0'; |
|
|
|
String msgString = String(message_buff); |
|
|
|
client.publish(MQTT_LED_COLOR_STATE, message_buff, true); |
|
|
|
} else if (stopic == MQTT_LED_SPEED_COMMAND) { |
|
|
|
speed = msgString.toInt(); |
|
|
|
Serial.print("Received [" + String(topic) + "] : "); |
|
|
|
Serial.println(msgString); |
|
|
|
client.publish(MQTT_LED_SPEED_STATE, message_buff, true); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
@ -196,31 +190,34 @@ void loop() { |
|
|
|
testConnectMQTT(); |
|
|
|
client.loop(); |
|
|
|
|
|
|
|
// TODO : à retirer je pense
|
|
|
|
EVERY_N_SECONDS(180) { |
|
|
|
Serial.print("MQTT Subscribe refresh"); |
|
|
|
client.subscribe(MQTT_LED_EFFECT); |
|
|
|
client.subscribe(MQTT_LED_BRIGHTNESS); |
|
|
|
client.subscribe(MQTT_LED_COLOR); |
|
|
|
client.subscribe(MQTT_LED_SPEED); |
|
|
|
client.subscribe(MQTT_LED_EFFECT_COMMAND); |
|
|
|
client.subscribe(MQTT_LED_BRIGHTNESS_COMMAND); |
|
|
|
client.subscribe(MQTT_LED_COLOR_COMMAND); |
|
|
|
client.subscribe(MQTT_LED_SPEED_COMMAND); |
|
|
|
Serial.println(" done"); |
|
|
|
} |
|
|
|
|
|
|
|
// LED
|
|
|
|
switch(ledEffect) |
|
|
|
{ |
|
|
|
case LED_EFFECT_OFF: |
|
|
|
ledBlackAll(); |
|
|
|
break; |
|
|
|
case LED_EFFECT_CYLON: |
|
|
|
ledCylon(); |
|
|
|
break; |
|
|
|
case LED_EFFECT_FULLRED: |
|
|
|
ledFullRed(); |
|
|
|
break; |
|
|
|
default: |
|
|
|
ledError(); |
|
|
|
break; |
|
|
|
if (!ledState) { |
|
|
|
ledBlackAll(); |
|
|
|
FastLED.delay(1000); |
|
|
|
} else { |
|
|
|
switch(ledEffect) |
|
|
|
{ |
|
|
|
case LED_EFFECT_CYLON: |
|
|
|
ledCylon(); |
|
|
|
break; |
|
|
|
case LED_EFFECT_FULLRED: |
|
|
|
ledFullRed(); |
|
|
|
break; |
|
|
|
default: |
|
|
|
ledError(); |
|
|
|
break; |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
// TODO : regrouper input et select en un seul group, l'input enverrait directement Off et les effets ne seraient que effets
|
|
|
|
// TODO : regrouper input et select en un seul group, l'input enverrait directement Off et les effets ne seraient que effets
|