@ -10,6 +10,7 @@
# include "mqttfastledmenu.h"
# include "mqttfastledmenu.h"
// LED
// LED
// En déplaçant ces vars dans le .h + init dans le setup, cylon crash au moment du premier retour ?!
int brightness = LED_BRIGHTNESS_DEFAULT ;
int brightness = LED_BRIGHTNESS_DEFAULT ;
int color = LED_COLOR_DEFAULT ;
int color = LED_COLOR_DEFAULT ;
int speed = LED_SPEED_DEFAULT ;
int speed = LED_SPEED_DEFAULT ;
@ -24,7 +25,6 @@ WiFiClient espClient;
char message_buff [ 100 ] ;
char message_buff [ 100 ] ;
PubSubClient client ( espClient ) ;
PubSubClient client ( espClient ) ;
void setup ( )
void setup ( )
{
{
Serial . begin ( SERIAL_SPEED ) ;
Serial . begin ( SERIAL_SPEED ) ;
@ -33,32 +33,42 @@ void setup()
// WIFI
// WIFI
setupWifi ( ) ;
setupWifi ( ) ;
// LED
/*
brightness = LED_BRIGHTNESS_DEFAULT ;
color = LED_COLOR_DEFAULT ;
speed = LED_SPEED_DEFAULT ;
ledEffect = LED_EFFECT_ERROR ;
ledState = false ;
*/
LEDS . addLeds < LED_CHIPSET , LED_PIN , LED_COLOR_ORDER > ( leds , LED_NUM ) . setCorrection ( TypicalSMD5050 ) ;
ledBlackAll ( ) ;
FastLED . setBrightness ( brightness ) ;
//////////////////////////////// ColorPalette ///////////////////////////////
currentPalette = RainbowColors_p ;
currentBlending = LINEARBLEND ;
//////////////////////////////// ColorPalette ///////////////////////////////
// MQTT
// MQTT
client . setServer ( MQTT_SERVER , MQTT_PORT ) ;
client . setServer ( MQTT_SERVER , MQTT_PORT ) ;
client . setCallback ( callbackMQTT ) ;
client . setCallback ( callbackMQTT ) ;
testConnectMQTT ( ) ;
testConnectMQTT ( ) ;
// LED
LEDS . addLeds < LED_CHIPSET , LED_PIN , LED_COLOR_ORDER > ( leds , LED_NUM ) . setCorrection ( TypicalSMD5050 ) ;
ledBlackAll ( ) ;
FastLED . setBrightness ( brightness ) ;
Serial . println ( " Ready " ) ;
Serial . println ( " Ready " ) ;
/* MQTT
/* MQTT
* Il est important de faire un loop avant toute chose ,
* Il est important de faire un loop avant toute chose ,
* afin de récupérer les valeurs provenant du broker mqtt
* afin de récupérer les valeurs provenant du broker mqtt
* et pas démarrer avec de vieilles infos .
* et pas démarrer avec de vieilles infos .
* Il faut un certains nombres de tentative pour tout récuperer .
*/
*/
for ( short int i = 0 ; i < 10 ; i + + ) {
for ( short int i = 0 ; i < 10 ; i + + ) {
delay ( 200 ) ;
delay ( 200 ) ;
client . loop ( ) ;
client . loop ( ) ;
}
}
//////////////////////////////// ColorPalette ///////////////////////////////
currentPalette = RainbowColors_p ;
currentBlending = LINEARBLEND ;
//////////////////////////////// ColorPalette ///////////////////////////////
Serial . println ( " End of setup " ) ;
Serial . println ( " End of setup " ) ;
}
}
@ -85,12 +95,20 @@ void testConnectMQTT()
while ( ! client . connected ( ) ) {
while ( ! client . connected ( ) ) {
Serial . print ( " Connexion au serveur MQTT... " ) ;
Serial . print ( " Connexion au serveur MQTT... " ) ;
if ( client . connect ( " ESP8266Client " , MQTT_USER , MQTT_PASS ) ) {
if ( client . connect ( " ESP8266Client " , MQTT_USER , MQTT_PASS ) ) {
Serial . print ( " OK \n Send Current State " ) ;
mqttSendState ( ) ;
mqttSendSpeedState ( ) ;
mqttSendBrightnessState ( ) ;
mqttSendEffectState ( ) ;
mqttSendColorState ( ) ;
Serial . print ( " OK \n Subscribe " ) ;
Serial . print ( " OK \n Subscribe " ) ;
client . subscribe ( MQTT_LED_COMMAND ) ;
client . subscribe ( MQTT_LED_COMMAND ) ;
client . subscribe ( MQTT_LED_EFFECT_COMMAND ) ;
client . subscribe ( MQTT_LED_EFFECT_COMMAND ) ;
client . subscribe ( MQTT_LED_BRIGHTNESS_COMMAND ) ;
client . subscribe ( MQTT_LED_BRIGHTNESS_COMMAND ) ;
client . subscribe ( MQTT_LED_SPEED_COMMAND ) ;
client . subscribe ( MQTT_LED_SPEED_COMMAND ) ;
client . subscribe ( MQTT_LED_COLOR_COMMAND ) ;
client . subscribe ( MQTT_LED_COLOR_COMMAND ) ;
Serial . println ( " OK " ) ;
Serial . println ( " OK " ) ;
} else {
} else {
Serial . print ( " KO, erreur : " ) ;
Serial . print ( " KO, erreur : " ) ;
@ -119,21 +137,20 @@ void callbackMQTT(char* topic, byte* payload, unsigned int length)
if ( stopic = = MQTT_LED_COMMAND ) {
if ( stopic = = MQTT_LED_COMMAND ) {
if ( msgString = = " ON " ) {
if ( msgString = = " ON " ) {
ledState = true ;
ledState = true ;
client . publish ( MQTT_LED_STATE , message_buff , true ) ;
} else {
} else {
ledState = false ;
ledState = false ;
ledBlackAll ( ) ;
ledBlackAll ( ) ;
client . publish ( MQTT_LED_STATE , message_buff , true ) ;
}
}
mqttSendState ( ) ;
} else if ( stopic = = MQTT_LED_EFFECT_COMMAND ) {
} else if ( stopic = = MQTT_LED_EFFECT_COMMAND ) {
// Si on ne repasse pas tout à noir, cela peut faire des effets surprenants
// Si on ne repasse pas tout à noir, cela peut faire des effets surprenants
ledBlackAll ( ) ;
ledBlackAll ( ) ;
ledEffect = msgString ;
ledEffect = msgString ;
client . publish ( MQTT_LED_EFFECT_STATE , message_buff , true ) ;
mqttSendEffectState ( ) ;
} else if ( stopic = = MQTT_LED_BRIGHTNESS_COMMAND ) {
} else if ( stopic = = MQTT_LED_BRIGHTNESS_COMMAND ) {
brightness = msgString . toInt ( ) ;
brightness = msgString . toInt ( ) ;
FastLED . setBrightness ( brightness ) ;
FastLED . setBrightness ( brightness ) ;
client . publish ( MQTT_LED_BRIGHTNESS_STATE , message_buff , true ) ;
mqttSendBrightnessState ( ) ;
} else if ( stopic = = MQTT_LED_COLOR_COMMAND ) {
} else if ( stopic = = MQTT_LED_COLOR_COMMAND ) {
// Sample : 134,168,255
// Sample : 134,168,255
int red = msgString . substring ( 0 , msgString . indexOf ( ' , ' ) ) . toInt ( ) ;
int red = msgString . substring ( 0 , msgString . indexOf ( ' , ' ) ) . toInt ( ) ;
@ -141,13 +158,50 @@ void callbackMQTT(char* topic, byte* payload, unsigned int length)
int blue = msgString . substring ( msgString . lastIndexOf ( ' , ' ) + 1 ) . toInt ( ) ;
int blue = msgString . substring ( msgString . lastIndexOf ( ' , ' ) + 1 ) . toInt ( ) ;
color = ( ( red < < 16 ) | ( green < < 8 ) | blue ) ;
color = ( ( red < < 16 ) | ( green < < 8 ) | blue ) ;
client . publish ( MQTT_LED_COLOR_STATE , message_buff , true ) ;
mqttSendColorState ( ) ;
} else if ( stopic = = MQTT_LED_SPEED_COMMAND ) {
} else if ( stopic = = MQTT_LED_SPEED_COMMAND ) {
speed = msgString . toInt ( ) ;
speed = msgString . toInt ( ) ;
client . publish ( MQTT_LED_SPEED_STATE , message_buff , true ) ;
mqttSendSpeedState ( ) ;
}
}
}
}
void mqttSendState ( )
{
client . publish ( MQTT_LED_STATE , ( ledState ) ? " ON " : " OFF " , true ) ;
}
void mqttSendEffectState ( )
{
char buff [ ledEffect . length ( ) + 1 ] ;
ledEffect . toCharArray ( buff , ledEffect . length ( ) + 1 ) ;
client . publish ( MQTT_LED_EFFECT_STATE , buff , true ) ;
}
void mqttSendBrightnessState ( )
{
char buff [ 4 ] ;
itoa ( brightness , buff , 10 ) ;
client . publish ( MQTT_LED_BRIGHTNESS_STATE , buff , true ) ;
}
void mqttSendSpeedState ( )
{
char buff [ 4 ] ;
itoa ( speed , buff , 10 ) ;
client . publish ( MQTT_LED_SPEED_STATE , buff , true ) ;
}
void mqttSendColorState ( )
{
int red = color > > 16 & 0xFF ;
int green = color > > 8 & 0xFF ;
int blue = color & 0xFF ;
char buff [ 12 ] ;
sprintf ( buff , " %i,%i,%i " , red , green , blue ) ;
client . publish ( MQTT_LED_COLOR_STATE , buff , true ) ;
}
// LED
// LED
/**
/**
* Coupe tout le strip de led .
* Coupe tout le strip de led .
@ -164,13 +218,13 @@ void ledBlackAll()
*/
*/
void ledCylon ( )
void ledCylon ( )
{
{
for ( int i = 0 ; i < LED_NUM ; i + + ) {
for ( int i = 0 ; i < LED_NUM ; i + + ) {
client . loop ( ) ;
client . loop ( ) ;
if ( ledEffect ! = LED_EFFECT_CYLON ) {
if ( ledEffect ! = LED_EFFECT_CYLON ) {
return ;
return ;
}
}
if ( ( i - 3 ) > = 0 ) {
if ( ( i - 3 ) > = 0 ) {
leds [ i - 3 ] = CRGB : : Black ;
leds [ i - 3 ] = CRGB : : Black ;
}
}
@ -198,25 +252,22 @@ void ledCylon()
FastLED . delay ( 1000 / speed ) ;
FastLED . delay ( 1000 / speed ) ;
}
}
// Il faut nettoyer certaines cases avant la prochaine loop
// Il faut nettoyer certaines cases avant la prochaine loop
if ( ( LED_NUM - 2 ) > = 0 ) {
leds [ LED_NUM - 2 ] = color ;
leds [ LED_NUM - 2 ] . fadeLightBy ( 220 ) ;
}
if ( ( LED_NUM - 2 ) > = 0 ) {
leds [ LED_NUM - 2 ] = color ;
leds [ LED_NUM - 2 ] . fadeLightBy ( 220 ) ;
}
if ( ( LED_NUM - 1 ) > = 0 ) {
if ( ( LED_NUM - 1 ) > = 0 ) {
leds [ LED_NUM - 1 ] = CRGB : : Black ;
leds [ LED_NUM - 1 ] = CRGB : : Black ;
}
}
FastLED . show ( ) ;
FastLED . show ( ) ;
// led[0] et led[255] sont gérées par la loop précédante
// led[0] et led[255] sont gérées par la loop précédante
for ( int i = LED_NUM - 1 ; i > = 0 ; i - - ) {
for ( int i = LED_NUM - 1 ; i > = 0 ; i - - ) {
client . loop ( ) ;
client . loop ( ) ;
if ( ledEffect ! = LED_EFFECT_CYLON ) {
if ( ledEffect ! = LED_EFFECT_CYLON ) {
return ;
return ;
}
}
if ( ( i - 1 ) > = 0 ) {
if ( ( i - 1 ) > = 0 ) {
leds [ i - 1 ] = color ;
leds [ i - 1 ] = color ;
leds [ i - 1 ] . fadeLightBy ( 249 ) ;
leds [ i - 1 ] . fadeLightBy ( 249 ) ;
@ -228,14 +279,15 @@ if ((LED_NUM - 2) >= 0) {
leds [ i + 1 ] = color ;
leds [ i + 1 ] = color ;
leds [ i + 1 ] . fadeLightBy ( 200 ) ;
leds [ i + 1 ] . fadeLightBy ( 200 ) ;
}
}
if ( ( i + 2 ) < = LED_NUM ) {
if ( ( i + 2 ) < = LED_NUM ) {
leds [ i + 2 ] = color ;
leds [ i + 2 ] = color ;
leds [ i + 2 ] . fadeLightBy ( 220 ) ;
leds [ i + 2 ] . fadeLightBy ( 220 ) ;
}
}
if ( ( i + 3 ) < = LED_NUM ) {
if ( ( i + 3 ) < = LED_NUM ) {
leds [ i + 3 ] = CRGB : : Black ;
leds [ i + 3 ] = CRGB : : Black ;
}
}
FastLED . delay ( 1000 / speed ) ;
FastLED . delay ( 1000 / speed ) ;
}
}
// Il faut nettoyer certaines cases avant la prochaine loop
// Il faut nettoyer certaines cases avant la prochaine loop
@ -279,8 +331,8 @@ void ledFullColor()
// 0.36787944 ?? censé correspondre au minimum
// 0.36787944 ?? censé correspondre au minimum
// 108.4 ?? censé correspondre au maximum
// 108.4 ?? censé correspondre au maximum
int breath = ( exp ( sin ( millis ( ) / 2000.0 * PI ) ) - 0.3678794 ) * 108.4 ;
int breath = ( exp ( sin ( millis ( ) / 2000.0 * PI ) ) - 0.3678794 ) * 108.4 ;
Serial . print ( breath ) ;
Serial . println ( " / 255 " ) ;
//Serial.print(breath);
//Serial.println(" / 255");
FastLED . setBrightness ( breath ) ;
FastLED . setBrightness ( breath ) ;
FastLED . delay ( 100 / speed ) ;
FastLED . delay ( 100 / speed ) ;
}
}