Ambilight con Esp8266 e WS2812 (Aggiunta relè per accensione automatica striscia led)

Buonasera a tutti, ho realizzato un ambilight per il mio PC - DESKTOP che utilizza una striscia led WS2812 e un Esp8266 ( Wemos d1 mini pro). Tutto funziona correttamente con lo sketch che vi allego. Ho collegato il Wemos d1 mini pro tramite micro usb al pc e il pin D1 alla striscia led - che ha un'alimentazione a parte (tramite multipresa). Il problema è proprio questo: adesso accendo manualmente la multipresa per accendere la striscia e spengo la multipresa per spegnere la striscia, altrimenti - anche se spengo il PC - la striscia rimane accesa. Vorrei che la striscia led si accendesse automaticamente appena accendo il PC e si spegnesse appena spengo il PC. Mi stavo documentando sull'utilizzo di un relè 5v. Quindi vi chiedo: esiste un modo affinchè l'Esp8266 non appena "sente" l'alimentazione tramite micro usb attivi il relè a cui collegherò la striscia led? Conoscete qualche altro modo? Come sempre, se occorre qualche altra informazione, resto a disposizione. Grazie a chi potrà aiutarmi.

#include <FastLED.h>

/*
   Arduino interface for the use of WS2812 strip LEDs
   Uses Adalight protocol and is compatible with Boblight, Prismatik etc...
   "Magic Word" for synchronisation is 'Ada' followed by LED High, Low and Checksum
   @author: Wifsimster <wifsimster@gmail.com>
   @library: FastLED v3.001
   @date: 11/22/2015
*/
#define FASTLED_INTERRUPT_RETRY_COUNT 0
#define FASTLED_ESP8266_RAW_PIN_ORDER
#include <ESP8266WiFi.h>
#define NUM_LEDS 240
#define DATA_PIN D1
#define FASTLED_INTERRUPT_RETRY_COUNT 0
#define FASTLED_ESP8266_RAW_PIN_ORDER
// Baudrate, higher rate allows faster refresh rate and more LEDs (defined in /etc/boblight.conf)
#define serialRate 115200

// Adalight sends a "Magic Word" (defined in /etc/boblight.conf) before sending the pixel data
uint8_t prefix[] = {'A', 'd', 'a'}, hi, lo, chk, i;

// Initialise LED-array
CRGB leds[NUM_LEDS];

void setup() {
  // Use NEOPIXEL to keep true colors
  FastLED.addLeds<NEOPIXEL, DATA_PIN>(leds, NUM_LEDS);

  // Initial RGB flash
  LEDS.showColor(CRGB(255, 0, 0));
  delay(500);
  LEDS.showColor(CRGB(0, 255, 0));
  delay(500);
  LEDS.showColor(CRGB(0, 0, 255));
  delay(500);
  LEDS.showColor(CRGB(0, 0, 0));

  Serial.begin(serialRate);
  // Send "Magic Word" string to host
  Serial.print("Ada\n");
}

void loop() {
  // Wait for first byte of Magic Word
  for (i = 0; i < sizeof prefix; ++i) {
waitLoop: while (!Serial.available()) ;;
    // Check next byte in Magic Word
    if (prefix[i] == Serial.read()) continue;
    // otherwise, start over
    i = 0;
    goto waitLoop;
  }

  // Hi, Lo, Checksum
  while (!Serial.available()) ;;
  hi = Serial.read();
  while (!Serial.available()) ;;
  lo = Serial.read();
  while (!Serial.available()) ;;
  chk = Serial.read();

  // If checksum does not match go back to wait
  if (chk != (hi ^ lo ^ 0x55)) {
    i = 0;
    goto waitLoop;
  }

  memset(leds, 0, NUM_LEDS * sizeof(struct CRGB));
  // Read the transmission data and set LED values
  for (uint8_t i = 0; i < NUM_LEDS; i++) {
    byte r, g, b;
    while (!Serial.available());
    r = Serial.read();
    while (!Serial.available());
    g = Serial.read();
    while (!Serial.available());
    b = Serial.read();
    leds[i].r = r;
    leds[i].g = g;
    leds[i].b = b;
  }

  // Shows new values
  FastLED.show();
}

PS mi scuso se non ho postato nel luogo adatto o non ho rispettato dei criteri, ma manco da un pò sul forum Arduino.

Ma e' WS2812 o WS2812B? Wemos e' collegato a presa usb di pc?

WS2812B. Si, il Wemos d1 mini pro è collegato alla usb del PC tramite micro usb.

WS2812B anche se alimentato, non accende senza segnale da Wemos. Vuole dire che hai presa usb di PC alimentata anche se PC e' spento. Provi se altre prese comportano stesso modo. Altrimenti devi aprire case e trovare linea +5V che spegne insieme con computer. Rele' non ti serve.

Ho provato a vedere se la presa usb rimane alimentata, ma - con tester - mi dà 0 volt. Ho provato anche con un'altra usb, ma succede la stesaa cosa: per spegbere la striscia devo spegnere l'interruttore della ciabatta alla qyale è collegata per questo volevo intervenire tramite software

Non dovrebbe comportare cosi'. Forse' non hai collegato GND tra Wemos e WS2812B??

Non credo sia esattamente come dici te. Senza inviare dati, anche se è alimentati, i led non si accendono, ma una volta accesi con relativo segnale rimangono accesi anche se non invii più niente, ed è quello che penso succeda all'OP. Per ovviare potrebbe anche usare un relè a 5V comandato semplicemente da una USB del PC, senza necessariamente passare dal Wemos.

Ciao, Ale.

Sono accordo, dipende da striscia, ho provato ora due che ho e una tiene memoria anche se non connessa. Scusatemi. Quindi o con relay come scritto @Ilguargua o se striscia non e' lunghissima, alimentando striscia da PSU del computer (cavo rosso +5v e nero GND) .

Questa potrebbe essere una soluzione. Appena mi arriva il relè provo. Quindi collego la striscia led al relè (Normalmente Aperto?) e l'alimentazione del relè la prendo da una presa usb del pc?

Si, credo sia la cosa più semplice da fare. Metti un diodo in antiparallelo al relè (catodo verso il positivo), e non hai bisogno di altro.

Ciao, Ale.

Oppure se non hai porte usb da sprecare, puoi alimentare da pin 5V di Wemos.
O se hai un modulo rele' "arduino" in disposizione, puoi alimentare da Wemos con cavi jumper e diodo e' gia' incorporato nel modulo.

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.