neopixel.py

LattePanda 3 Delta (id: lattepanda-3) · Archivo : neopixel.py · Lenguaje : Python · Uso : Animer un ruban WS2812 depuis Python

La trama WS2812 a 800 kHz la genera el MCU, la animación viene de Python: la tira de direccionables se sube al nivel de los scripts del PC. Ambiente luminoso pilotable por cámara o música.

Hardware necesario

Una LattePanda 3 Delta (x86 Intel N5105, Windows 10/11 o Ubuntu) con su coprocesador Arduino compatible (ATmega32U4) conectado a los dos conectores de 50 pines. 12 WS2812 + alimentación externa de 5 V ≥ 1 A + resistencia de 330-470 Ω en la data.

Cableado

Data de la tira por 470 Ω a D5, VDD a la alimentación externa, GND común con el conector. Condensador de 1000 µF en la alimentación de la tira, recomendado.

Funcionamiento

La librería envía la lista de colores al firmware PinPong, que hace bit-bang de la trama NRZ en el timer. El PC marca el ritmo, el MCU sostiene los 1,25 µs por bit. Lado anfitrión: pip install pinpong y python3. Lado MCU: el ATmega32U4 aparece como puerto COM — prográmelo con el Arduino IDE (placa « Arduino Leonardo »).

Para ir más lejos

Mando por análisis espectral del micrófono (música → luz), o tiempo en degradado de color.

neopixel.py

#!/usr/bin/env python3
# 12 WS2812 sur D5 — PinPong pilote la trame, le MCU la genere.
from pinpong.board import Board, Pin
from pinpong.libs.dfrobot_neopixel import Neopixel
import time

Board().begin()
ruban = Neopixel(Pin.D5, 12)

COULEURS = [(255, 0, 0), (0, 255, 0), (0, 0, 255), (255, 255, 0)]

print("Comete RGB (Ctrl-C pour sortir)")
try:
    tete = 0
    while True:
        ruban.rainbow(0)                  # fond discret
        for i in range(12):
            r, g, b = COULEURS[(tete + i) % 4]
            ruban.set_pixel(i, r // 4, g // 4, b // 4)
        ruban.set_pixel(tete, 255, 255, 255)   # tete blanche
        ruban.show()
        tete = (tete + 1) % 12
        time.sleep(0.08)
except KeyboardInterrupt:
    ruban.rainbow(0)
    print("\nRuban eteint")

← Volver a la ficha