Effet cylon sur un bandeau de LED contrôlé par HomeAssistant
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
#include "mqttfastled.local.h"
#include "mqttfastled.h"
#define FASTLED_ESP8266_NODEMCU_PIN_ORDER
#include <FastLED.h>
#include <ESP8266WiFi.h>
#include <PubSubClient.h>
// LED
CRGB leds[NUM_LEDS];bool ledGo = false;
// WIFI
WiFiClient espClient;
// MQTT
char message_buff[100];PubSubClient client(espClient);
void setup() { Serial.begin(115200); Serial.println("\nresetting"); // WIFI
setupWifi(); // MQTT
client.setServer(mqtt_server, mqtt_port); client.setCallback(callbackMQTT); testConnectMQTT(); client.subscribe("homeassistant/switch1"); // LED
LEDS.addLeds<CHIPSET,LED_PIN, COLOR_ORDER>(leds, NUM_LEDS); FastLED.setBrightness(BRIGHTNESS); fill_solid(leds, NUM_LEDS, CRGB::Black); FastLED.show();}
// WIFI
void setupWifi() { Serial.println(); Serial.print("Connexion a "); Serial.print(wifi_ssid); WiFi.begin(wifi_ssid, wifi_password); while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } Serial.println(); Serial.print("IP : "); Serial.println(WiFi.localIP());}
// MQTT
void testConnectMQTT() { while (!client.connected()) { Serial.print("Connexion au serveur MQTT... "); if (client.connect("ESP8266Client", mqtt_user, mqtt_password)) { Serial.println("OK"); } else { Serial.print("KO, erreur : "); Serial.print(client.state()); Serial.println(", on attend 5 secondes avant de recommencer"); delay(5000); } }}
// Déclenche les actions à la réception d'un message
void callbackMQTT(char* topic, byte* payload, unsigned int length) { unsigned int i = 0; Serial.print("Received [" + String(topic) + "] : "); // create character buffer with ending null terminator (string)
for(i = 0; i < length; i++) { message_buff[i] = payload[i]; } message_buff[i] = '\0'; String msgString = String(message_buff); Serial.println(msgString); if (msgString == "ON") { ledGo = true; } else { ledGo = false; }}
// LED
void ledCylon(){ // Effet cylon : on allume une led, on attends, on eteinds, on passe à la suivante
for(int i = 0; i < NUM_LEDS; i++) { if ((i % 10) == 0) { client.loop(); } leds[i] = CRGB::Red; FastLED.show(); FastLED.delay(1000 / FRAMES_PER_SECOND); leds[i] = CRGB::Black; FastLED.show(); FastLED.delay(1000 / FRAMES_PER_SECOND); } for(int i = NUM_LEDS - 1; i > 0; i--) { if ((i % 10) == 0) { client.loop(); } leds[i] = CRGB::Red; FastLED.show(); FastLED.delay(1000 / FRAMES_PER_SECOND); leds[i] = CRGB::Black; FastLED.show(); } FastLED.delay(1000 / FRAMES_PER_SECOND);}
void loop() { // MQTT
testConnectMQTT(); client.loop(); EVERY_N_SECONDS(180) { Serial.print("MQTT Subscribe refresh"); client.subscribe("homeassistant/select1"); Serial.println(" done"); } // LED
if (ledGo) { ledCylon(); } else { fill_solid(leds, NUM_LEDS, CRGB::Black); FastLED.show(); FastLED.delay(1000 / FRAMES_PER_SECOND); }}
|