Skip to main content

RGB/Underglow/Neopixel

Quer um teclado brilhante? Coloque alguma luz nele!

CircuitPython

Se não estiver usando KMKpython, isto vai exigir a biblioteca neopixel da Adafruit. Ela pode ser baixada aqui. É parte do Pacotão Adafruit CircuitPython. Coloque-o na raiz do seu dispositivo circuitpython. Se não souber qual é, é o diretório com main.py nele, e deve ser o primeiro diretório que você vê ao abrir o dispositivo.

Atualmente suportamos os LEDs endereçáveis a seguir:

  • WS2811, WS2812, WS2812B, WS2812C, etc.
  • SK6812, SK6812MINI, SK6805

Seleção de Cores

KMK usa o sistema Hue-Saturation-Value para selecionar as cores, em vez do RGB. A roda de cores abaixo demonstra seu funcionamento.

  • Mudar o Hue dá a volta no círculo.
  • Mudar o Saturation move entre as seções internas e externas do círculo, afetando a intensidade da cor.
  • Mudar o Value atribui o valor do brilho total.

Habilitando a Extensão

Os únicos valores exigidos para a extensão RGB devem ser o pino de pixel e o número de pixels/LEDs. Se estiver usando um teclado repartido, este número é por parte, não pelo total das duas.

from kmk.extensions.RGB import RGB
from kb import rgb_pixel_pin # This can be imported or defined manually

rgb_ext = RGB(pixel_pin=rgb_pixel_pin, num_pixels=27)
keyboard.extensions.append(rgb_ext)

[Keycodes]

KeyAliasesDescrição
KC.RGB_TOGLiga/desliga o RGB
KC.RGB_HUIAumenta Hue
KC.RGB_HUDDiminui Hue
KC.RGB_SAIAumenta Saturation
KC.RGB_SADDiminui Saturation
KC.RGB_VAIAumenta Value
KC.RGB_VADDiminui Value
KC.RGB_ANIAumenta a velocidade da animação
KC.RGB_ANDDiminui a velocidade da animação
KC.RGB_MODE_PLAINRGB_M_PRGB Estático
KC.RGB_MODE_BREATHERGB_M_BAnimação de Respiração
KC.RGB_MODE_RAINBOWRGB_M_RAnimação de Arco-Íris
KC.RGB_MODE_BREATHE_RAINBOWRGB_M_BRAnimação de Arco-Íris Respirando
KC.RGB_MODE_KNIGHTRGB_M_KAnimação de SuperMáquina (Knight Rider)
KC.RGB_MODE_SWIRLRGB_M_SAnimação de Redemoinho

Configuração

DefiniçãoPadrãoDescrição
keyboard.pixel_pinO pino conectado ao pino de dados dos LEDs
keyboard.num_pixelsO número de LEDs conectados
keyboard.rgb_config['rgb_order'](1, 0, 2)A ordem dos pixels RGB, e opcionalmente branco. Exemplo: (1, 0, 2, 3)
keyboard.rgb_config['hue_step']10O número de passos para ciclar ao longo do Hue
keyboard.rgb_config['sat_step']17O número de passos para mudar a Saturation
keyboard.rgb_config['val_step']17O número de passos para mudar o Value (brilho)
keyboard.rgb_config['hue_default']0Hue padrão quando o teclado inicia
keyboard.rgb_config['sat_default']100Saturation padrão quando o teclado inicia
keyboard.rgb_config['val_default']100Value padrão (brilho) quando o teclado inicia
keyboard.rgb_config['val_limit']255Nível máximo de brilho

Configuração da Animação Embutida

DefiniçãoPadrãoDescrição
keyboard.rgb_config['breathe_center']1.5Usado para calcular a curva da animação de respiração. Qualquer valor em 1.0-2.7 é válido.
keyboard.rgb_config['knight_effect_length']4O número de LEDs a ligar para a animação do KITT (SuperMáquina)

Funções

Se você quer criar suas próprias animações, ou por exemplo mudar a luminosidade numa macro, ou numa troca de camadas, eis algumas funções disponíveis:

FunctionDescrição
keyboard.pixels.set_hsv_fill(hue, sat, val)Preenche todos os LEDs com valores HSV
keyboard.pixels.set_hsv(hue, sat, val, index)Atribui um valor HSV a um LED específico
keyboard.pixels.set_rgb_fill((r, g, b))Preenche todos os LEDs com valores RGB(W)
keyboard.pixels.set_rgb((r, g, b), index)Atribui um valor RGB(W) a um LED específico
keyboard.pixels.disable_auto_write(bool)Quando True, desabilita mostrar as mudanças. Bom para atribuir múltiplas mudanças de LEDs antes de uma atualização visível
keyboard.pixels.increase_hue(step)Aumenta Hue de um step dado
keyboard.pixels.decrease_hue(step)Diminui Hue de um step dado
keyboard.pixels.increase_sat(step)Aumenta Saturation de um step dado
keyboard.pixels.decrease_sat(step)Diminui Saturation de um step dado
keyboard.pixels.increase_val(step)Aumenta Value (brilho) de um step dado
keyboard.pixels.decrease_val(step)Diminui Value (brilho) de um step dado
keyboard.pixels.increase_ani()Aumenta a velocidade da animação de 1. Máximo 10
keyboard.pixels.decrease_ani()Diminui a velocidade da animação de 1. Mínimo 10
keyboard.pixels.off()Desliga todos os LEDs
keyboard.pixels.show()Exibe todas as configurações armazenadas para os LEDs. Útil quando disable_auto_write explicado abaixo
keyboard.pixels.time_ms()Retorna um tempo em milissegundos desde que o teclado foi ligado. Útil para temporizadores de início/parada

Acesso Direto às Variáveis

DefiniçãoPadrãoDescrição
keyboard.pixels.hue0Atribui à Hue, 0-360
keyboard.pixels.sat100Atribui à Saturation, 0-100
keyboard.pixels.val80Atribui ao Brightness, 1-255
keyboard.pixels.reverse_animationFalseSe True, algumas animações vão rodar ao contrário. Pode ser usado seguramente em animações do usuário
keyboard.pixels.animation_modestaticIsto pode ser modificado para quaisquer modos inclusos, ou para algo customizado para interações do usuário. Qualquer string é válida.
keyboard.pixels.animation_speed1Aumenta a velocidade da animação na maior parte das animações. Recomendado 1-5, máximo 10.
from kmk.extensions.rgb import AnimationModes
rgb_ext = RGB(pixel_pin=rgb_pixel_pin,
num_pixels=27
num_pixels=0,
val_limit=100,
hue_default=0,
sat_default=100,
rgb_order=(1, 0, 2), # GRB WS2812
val_default=100,
hue_step=5,
sat_step=5,
val_step=5,
animation_speed=1,
breathe_center=1, # 1.0-2.7
knight_effect_length=3,
animation_mode=AnimationModes.STATIC,
reverse_animation=False,
)

Modificação do Hardware

Para incluir LEDS em placas que não têm suporte nativo, você terá que acrescentar três fios. O de força correm nos pinos de 3.3V ou 5V (dependendo do LED), pinos de terra e dados precisarão ser adicionados a um pino não usado em seu micro-controlador a não ser que seu teclado tenha pontos de soldagem específicos para eles. Com estes três fios conectados, atribua ao pixel_pin como descrito acima, e você está pronto para usar seus RGB LED's/Neopixels.

Consertando os Problemas

Cores Incorretas

Se as cores estão erradas, confira a ordem dos pixels nos seus LEDs específicos. Eis alguns comuns.

  • WS2811, WS2812, WS2812B, WS2812C são todos GRB (1, 0, 2)
  • SK6812, SK6812MINI, SK6805 são todos GRB (1, 0, 2)
  • Neopixels variam dependendo de onde você compra. Isto vem informado na página do produto.

Luzes não ligam

Certifique-se de que sua placa suporta luz de fundo de LED, conferindo por uma linha com PIXEL_PIN. Se não tiver, você pode adicionar ao seu keymap. Se você adicionou os LEDs por conta própria, você também precisa atribuir a num_pixels o número total de LEDs instalados.