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) ```