Día 2 — RasPi Gamer

Publicado el: 24 de julio de 2020
Última actualización: 10 de septiembre de 2020
cd ..

Antes que nada, usando el adaptador de Plug hembra y un poco de electricidad, ahora puedo encender la Raspberry usando el pin de 5V en vez de el puerto MicroUSB.

Ahora, el…

RGB GAMING

Resulta que el mi conversor de niveles es ligeramente distinto que el de Adafruit, pero hace lo mismo. Así que, el pinout quedaría así (gracias a este post de Luis Llama y a Alice por compartírmelo):

ComponentePinConversor de Niveles
Raspberry Pi3.3VLV
Raspberry PiGPIO12LVX
NeoPixelDINHVX
PSU5VHV
PSUGNDGND

La X es porque podés usar cualquiera de los canales. Por supuesto, usa solo uno.

Momento Python

Instalé la librería de los NeoPixel:

$ sudo pip3 install rpi_ws281x adafruit-circuitpython-neopixel
$ sudo python3 -m pip install --force-reinstall adafruit-blinka

Y ejecuté este script en modo root:

# Test simple de NeoPixels en una Raspberry Pi
import time
import board
import neopixel

# Los NeoPixels deben conectarse a D10, D12, D18 o D21 para funcionar.
pixel_pin = board.D12

# Cantidad de pixeles
num_pixels = 60

# El orden de los colores: RGB o GRB. ¡Algunos NeoPixels lo tienen al revés!
ORDER = neopixel.GRB

# auto_write=False no ejecuta ningún cambio hasta que no se corra pixels.show()
pixels = neopixel.NeoPixel(
    pixel_pin, num_pixels, brightness=0.2, auto_write=False, pixel_order=ORDER
)


def wheel(pos):
    # Recibe un número entre 0 y 255 devuelve un color.
    # Los colores van de r - g - b - y luego a r.
    if pos < 0 or pos > 255:
        r = g = b = 0
    elif pos < 85:
        r = int(pos * 3)
        g = int(255 - pos * 3)
        b = 0
    elif pos < 170:
        pos -= 85
        r = int(255 - pos * 3)
        g = 0
        b = int(pos * 3)
    else:
        pos -= 170
        r = 0
        g = int(pos * 3)
        b = int(255 - pos * 3)
    return (r, g, b)


def rainbow_cycle(wait):
    for j in range(255):
        for i in range(num_pixels):
            pixel_index = (i * 256 // num_pixels) + j
            pixels[i] = wheel(pixel_index & 255)
        pixels.show()
        time.sleep(wait)


while True:
    pixels.fill((255, 0, 0))
    pixels.show()
    time.sleep(1)

    pixels.fill((0, 255, 0))
    pixels.show()
    time.sleep(1)

    pixels.fill((0, 0, 255))
    pixels.show()
    time.sleep(1)

    rainbow_cycle(0.001)  # 1ms de delay entre cada paso

← Día 1 | Día 3 →