Led RGB WS2812B

Un altro componente decisamente utile, anche se dal pilotaggio non proprio semplice.

In pratica si tratta di un LED RGB con pilotaggio seriale, con cascading automatico. Quindi con solo tre fili (compresi i due di alimentazione) è possibile pilotare indipendentemente "qualunque" numero di LED -- fino a un migliaio di LED con un refresh di 30Hz!

Tutto molto bello, ma quello che spesso non viene detto è che:

  1. le temporizzazioni sono molto strette, inadatte all'uso con bit banging da sistemi multitasking
  2. ogni LED consuma, quando completamente acceso in bianco, ben 55mA, quindi 100 LED consumeranno ben 5,5A... o, in altri termini, da una porta USB standard non si possono alimentare più di 9 elementi! E questo senza considerare il consumo del circuito di controllo

Volendoli pilotare da un ESP8266, si trovano facilmente alcune librerie che usano bit banging, adatte per pilotare solo 2-3 LED, ma che lasciano la possibilità di collegarli ad un pin qualsiasi. Utili in tanti casi, ma non se si vuole pilotare una strip.

Un'idea più furba è usare la seriale a velocità più alta dei "canonici" 115200bps, come fa NeoPixelBus, portandola a ben 3.2Mbps (4x800kHz) con 6N1 ed inversione dei livelli logici, trasmettendo quindi due NeoPixel-bit per ogni UART-byte. Il difetto di questa libreria è che, per ammissione dello stesso autore, non è in grado di gestire più di un centinaio di pixel -- probabilmente è un problema di buffer che non possono venir riempiti abbastanza velocemente. Probabilmente, con qualche modifica è possibile fargli usare Serial1 invece di Serial. Update al 2017-08-02: di default ora usa Serial1 (GPIO2). Interessante anche FastLed, molto ottimizzata.

Ma la volpata più grande, per gestire veramente tanti pixel, è quella di usare la linea dati di I2S, come fa esp8266_ws2812_i2s con buffer DMA linkati. Si "sacrifica" la possibilità di usare la seriale (stessi pin...), ma non "pesa" quasi nulla sul normale flusso del programma e non ha limiti stringenti sul numero di LED gestibili (basta che il buffer stia in RAM, IIUC, quindi teoricamente alcune migliaia).
Purtroppo, una volta avviata la trasmissione non c'è modo di fermarla senza che il "giochino" si blocchi, quindi nel caso si volesse ottenere una certificazione EMC potrebbe esserci qualche problema. Inoltre, ovviamente, funziona esclusivamente con il pin usato da I2S e non c'è modo di "spostarlo".

Un'ultima nota: attenzione che i WS2812B vogliono alimentazione a 5V, mentre l'ESP8266 lavora esclusivamente a 3.3V. Fortunatamente un '1' logico a 3.3V in uscita dall'ESP è tranquillamente letto come '1' logico a 5V in ingresso al WS2812B, senza alcun bisogno di circuiti adattatori. Poi il primo LED provvederà a rigenerare il segnale con un livello sufficiente a pilotare senza problemi il secondo e così via.

0
Il tuo voto: Nessuna
Realizzato con Drupal, un sistema open source per la gestione dei contenuti