Os LEDs WS2812B são endereçáveis, o que significa que cada [[Diodo emissor de luz|LED]] na faixa pode ser controlado individualmente.
[DATASHEET DO LED](https://d229kd5ey79jzj.cloudfront.net/1125/ws2812b%20datasheet.pdf) fornece informações importantes sobre suas características.
- Para usar esta fita com [[Raspberry Pi]] é recomendado usar a biblioteca [RPI-wws281x-python] (https://github.com/rpi-ws281x/rpi-ws281x-python/blob/master/ library/ RPI_WS281x/RPI_WS281x.py).
- Para usar esta faixa com um [[Arduino]] é recomendado usar a biblioteca [[Fastled]] (https://github.com/fastled/fastled).
# PRINCIPAIS CARACTERÍSTICAS
- **Tensão**: 5V (não use tensão mais alta) para VCC
- **Transmissão de dados**: Controle usando PWM.
- **Corrente**: 60MA por LED com brilho máximo (RGB - 255, 255, 255)
# Dicas para Usar a Faixa de LED
- Geralmente a entrada de dados é feita através do pino 18 ou 13 do [[Raspberry Pi]]. A comunicação PWM é necessária para controlar os LEDs. Verifique [[GPIO para a Raspberry Pi 3 model B+]] para mais informações
- Existem fitas de LED mais antigas operando com dados de 5V e versões mais novas operando a 3.3V. Certifique-se de verificar o que você tem!
- Cuidado com o dimensionamento dos LEDs. 1m de faixa de 60 LEDs (a faixa mais comum) pode consumir 3.6A com brilho máximo (o que significa RGB 255,255,255). Certifique-se de ter a fonte de alimentação externa apropriada, se necessário.
# Código de Teste no [[Raspberry Pi]]
O código para usar com [[Raspberry Pi]] pode ser visto abaixo. Este código executa uma série de diferentes modos de iluminação em sequência. É uma maneira simples de validar a operação do LED.
```python
Import Time
From RPI_WS281X Import Pixelstrip, Color, WS
import argparse
# Configuração da Fita de LED:
LED_COUNT = 20 # Número de pixels de LED.
LED_PIN = 18 # PINO GPIO CONECTADO AOS PIXELS (18 PWM!).
# LED_PIN = 10 # PINO GPIO CONECTADO AOS PIXELS (10 USA SPI /DEV/SPIDEV0.0).
LED_FREQ_Hz = 800000 # FREQUÊNCIA DO SINAL DO LED EM HERTZ (Geralmente 800KHz)
Led_dma = 10 # Canal DMA a ser usado para gerar o sinal (Tente 10)
Led_brightness = 240 # defina 0 para o mais escuro e 255 para o mais brilhante
LED_INVERT = false # verdadeiro para inverter o sinal
LED_CHANNEL = 0 # defina para '1' para pinos 13, 19, 41, 45 ou 53
Led_strip = ws.ws2811_strip_brg # Tipo de fita e Ordem de Cores
# Define Funções Que Animam LEDs de Várias Maneiras.
def ColorWipe (strip, color, wait_ms = 50):
"" "Apaga a cor na tela um pixel por vez." ""
for i in range (strip.numpixels ()):
Strip.setpixelcolor (i, color)
Strip.show ()
time.sleep (wait_ms / 1000.0)
def theaterchase (strip, color, wait_ms = 50, iteractions = 10):
"" "Animação de perseguição estilo luz de cinema." ""
For J In Range (itractions):
for q in range (3):
for i in range (0, strip.numpixels (), 3):
strip.setpixelcolor (i + q, color)
Strip.show ()
time.sleep (wait_ms / 1000.0)
for i in range (0, strip.numpixels (), 3):
strip.setpixelcolor (i + q, 0)
DEF Wheel (POS):
"" "Gera cores de arco-íris em posições de 0-255." ""
if pos <85:
Return Color (POS * 3, 255 - POS * 3, 0)
ELIF POS <170:
POS -= 85
Return Color (255 - POS * 3, 0, POS * 3)
else:
POS -= 170
Return Color (0, Pos * 3, 255 - POS * 3)
def Rainbow (strip, wait_ms = 20, iteractions = 1):
"" "Desenha um arco-íris que desvanece em todos os pixels de uma vez." ""
For J In Range (256 * Itertations):
for i in range (strip.numpixels ()):
strip.setpixelcolor (I, Wheel ((i + j) & 255)))
Strip.show ()
time.sleep (wait_ms / 1000.0)
def Rainbowcycle (strip, wait_ms = 20, iteractions = 5):
"" Desenha um Arco-Íris Que Se Distribui Uniformemente Por Todos os Pixels. ""
For J In Range (256 * Itertations):
for i in range (strip.numpixels ()):
strip.setpixelcolor (I, Wheel (
(int (i * 256 / strip.numpixels ()) + j) & 255))))
Strip.show ()
time.sleep (wait_ms / 1000.0)
def theaterchaserainbow (strip, wait_ms = 50):
"" "Animação de perseguição estilo luz de cinema arco-íris." ""
For J In Range (256):
for q in range (3):
for i in range (0, strip.numpixels (), 3):
strip.setpixelcolor (i + q, Wheel ((i + j) % 255)))
Strip.show ()
time.sleep (wait_ms / 1000.0)
for i in range (0, strip.numpixels (), 3):
strip.setpixelcolor (i + q, 0)
# A Lógica Principal do Programa Segue:
if __name__ == '__main__':
# Processa Argumentos
parser = argparse.argumentparser ()
parser.add_argument ('-c', '-clerk', action = 'store_true', help = 'Limpar o display na saída')
args = parser.pass_args ()
# Cria Objeto Neopixel com Configuração Apropriada.
Strip = pixelstrip (led_count, led_pin, led_freq_hz, led_invert, led_brightness, led_channel, led_strip)
# Inicializa a Biblioteca (Deve Ser Chamada Uma Vez Antes de Outras Funções).
Strip.begin ()
Print ('Pressione Ctrl-C para Sair.')
if not args.Clear:
Print ('Use o argumento "-c" para Apagar os LEDs ao Sair')
Try:
While True:
Print ('Animações de Limpeza de Cor.')
colorWipe (strip, color (255, 0, 0)) # Limpeza Vermelha
colorWipe (strip, color (0, 255, 0)) # Limpeza Verde
colorWipe (strip, color (0, 0, 255)) # Limpeza Azul
Print ('Animações de Perseguição de Cinema.')
Theaterchase (strip, color (127, 127, 127)) # Perseguição de Cinema Branca
Theaterchase (strip, color (127, 0, 0)) # Perseguição de Cinema Vermelha
Theaterchase (strip, color (0, 0, 127)) # Perseguição de Cinema Azul
Print ('Animações de Arco-Íris.')
Rainbow (strip)
Rainbowcycle (strip)
Theaterchaserainbow (strip)
Exception Keyboardinterruct:
if args.Clear:
colorWipe (strip, color (0, 0, 0), 10)
```