Stap 1: Maak verbinding met LED-strip en RGB LED software installatie
Een goed schema voor het aansluiten van de RGB LED-strip aan de RasPi kan worden gevonden op de adafruit site.
Soldeer de 5V, grond, Clock en Data lijnen aan het einde van de Input van de LED-strip en sluit aan op de Pi, zoals op de link of in mijn foto's. Zorg ervoor dat de grond voor de levering van 5V verbinden met de grond van de Pi!
Pak de software en volg de instructies voor het krijgen van de staat waar de output heengaat SPI Pi. Het is belangrijk dat u de hardware SPI gebruiken, omdat iedere bit-banging benadering zal niet snel genoeg.
sudo raspi-configom hardware SPI (Zie de instructies bij git pagina).
Ik voegde de installatiemap aan mijn PYTHONPATH in bashrc zodat ik de functies vanuit een willekeurige locatie aanroepen kon.
binnen .bashrc:
exporteren van PYTHONPATH = $PYTHONPATH: / home/pi/RPi-LPD8806-master
uit testen dat de strip werkt door het uitvoeren van de voorbeeldcode in het volgende:
python-example.py
De lichte code van xmas dat we gaan om te downloaden later wil draaien als root, en wanneer u dingen met een sudo vooraan, de variabelen van het milieu, specifiek, PYTHONPATH zijn niet overgebracht.
Ik moest /etc/sudoers bewerken door te typen
sudo visudo
en vervolgens toegevoegd aan de onderkant
Standaard env_keep = SYNCHRONIZED_LIGHTS_HOME
Standaard env_keep += PYTHONPATH
de eerste regel is iets wat die we moeten voor de xmas licht pakket later worden geïnstalleerd. Dit zorg ervoor dat deze variabelen van het milieu rond de stok wanneer u dingen als sudo uitvoert.
Om te testen dat je setup rechts hebt, sluit de terminal en opnieuw te openen, typ
sudo python
van bootstrap importeren *
LED.Fill(Color(50,50,50),0,10)
LED.update()
dat moet de eerste 10 LEDs inschakelen.
Een laatste stap is het maken van enkele wijzigingen te bespoedigen schrijven naar de strip.
Binnen ledstrip.py, zorg ervoor dat use_py_spi = True in de def __init__ lijn
def __init__ (zelf, leds, use_py_spi = ware, dev="/dev/spidev0.0", stuurprogramma = "LPD8806"):
Nu binnen LPD8806.py, we gonna de SPI-snelheid tot 16MHz wijzigen
als self.use_py_spi:
import spidevSelf.spi = spidev. SpiDev() self.spi.open(0,0)
self.spi.max_speed_hz = 16000000
afdrukken ' py-spidev MHz: %d "% (self.spi.max_speed_hz / 1000000.0)
Dat print-statement er is alleen maar om ervoor te zorgen alles wordt correct ingesteld.
Een definitieve verandering in het LPD8806.py bestand bevindt zich in de update() functie. Voor welke reden dan ook, ik heb gemerkt led.update() nam een lange tijd, upwords van 25ms. Als u een goed visueel effect, wilde ik mijn volledige analyse en display lus uitgevoerd bij 20Hz of 50 MS per lus, en het branden van de helft die tijd wachten op de LED strip niet zou werken. En vreemd, van 16MHz, het moet hebben genomen minder dan een ms. 3 bytes per geleid, 152 LEDs, (3 * 152 * 8 bits / 16M) =.2ms! (niet 25ms) Toen ik een bereik tot de SPI-poort, elke byte kwam uit op 16 MHz, maar er was een 160uS pauze na elke aanroep van self.spi.xfer2(). Mijn oplossing was voor het verzamelen van de gehele tekenreeks van bytes in een buffer en alleen bellen self.spi.xfer2() eens:
def update (self, buffer):
temp_buffer =]als self.use_py_spi:
voor x in range(self.leds):
temp_buffer = temp_buffer + [i want ik in buffer [x]]
#self.spi.xfer2 ([i want ik in buffer[x]])
Self.SPI.xfer2 (temp_buffer)
Self.SPI.xfer2([0x00,0x00,0x00]) #zero vullen de laatste om te voorkomen dat strooilicht kleuren aan het einde
Self.SPI.xfer2([0x00]) #once meer met gevoel - dit helpt :) time2 = time.time()
Schrijven van 152 LEDs op 16 dat MHz moet geen tijd--nemen moet u de laatste wijziging van de LED tegelijkertijd die het ene doet
Sommige andere mensen hebben moeite met dit en kreeg eromheen, check out de verbazingwekkende POV video-effect met een enkele verticale LED-strip (verzenden gegevens op 8 MHz t/m 20 ft voor cat 5!):