Wemos D1 e WS2812 usando FastLED.h

Buonasera a tutti.
Sto cercando di controllare una striscia led WS2812 con un Wemos D1 ma senza successo. Ho collegato i pin 5v e GND del Wemos ai corrispettivi della striscia led e il pin D0 al pin per il segnale, ma la striscia non accenna ad accendersi. Non capisco davvero dove sbaglio.
Posto il mio codice:

#include <FastLED.h>
 
#define LED_PIN 16
#define NUM_LED 27
 
CRGB leds[NUM_LED];

void setup() {
  pinMode(LED_PIN, OUTPUT);
  FastLED.addLeds<WS2812, LED_PIN, GRB>(leds, NUM_LED);

  for(int i=0; i<NUM_LED; i++){
    leds[i].setHSV(100, 255, 255);
  }
  FastLED.show();
}
  
void loop() {

}

Purtroppo ho visto veramente poche volte (a seconda del produttore) i WS2812 poter essere comandati a 3.3V ... con meno di 5V anche sul pin dei dati diffcilmente vanno ...

Potresti provare ad inserire il seguente semplicissimo circuito per portare il segnale del pin di dati a 5V:

pnp_e-follower

o, ancora meglio, usare dei traslatori di livello che provvedono a portare i segnali da una tensione all'altra (anche in modo bidirezionale).

Guglielmo

Ma il Wemos ha il pin a 5v. Pensi sia comunque un problema di tensione? Posso provare a collegarli ad una alimentazione esterna

Non hai letto bene ...
... NON è l'alimentazione (che gli stai dando a 5V) è il pin dove trasmetti i dati, LED_PIN, che esce a 3.3V e può dare questi problemi.

Guglielmo

Aaaah certo non avevo letto bene. Ma potrei usare un C945 in sostituzione del 2N3906?

NO, è un NPN mentre il 2N3906 è un PNP ... puoi cercare dei BC557, 2N4403, 2N2907, BC527, BC558, ecc.

Screenshot 2021-05-23 at 14.04.30

Guglielmo

Mi sono procurato il transistor e oggi farò delle prove. Ma come regola generale, come si fanno a calcolare i valori delle resistenze di questo circuito? Perché sembra molto utile e mi piacerebbe avere qualche conoscenza teorica in più.

Comunque ho provato ad inserire il circuito ma non i led comunque non si accendono.