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.