Étape 1: Connectez configuration logiciel RGB LED et bande LED
Un bon schéma pour le branchement de la bande de LED RGB à le RasPi se trouvent sur le site d’adafruit.
Souder le 5V, sol, horloge et les données des lignes à la fin de l’entrée de la bande de LED et se connecter à la Pi comme indiqué au lien ou dans mes photos. N’oubliez pas de connecter la terre de l’alimentation 5V sur le sol de la Pi !
Prenez le logiciel et suivez les instructions pour récuperer la Pi en mesure de sortie à SPI. Il est important que vous utilisiez le matériel SPI parce que toute approche de bit-frapper ne sera pas assez rapide.
sudo raspi-configpour activer le matériel SPI (suivez les instructions à la page git).
J’ai ajouté le répertoire d’installation de mon PYTHONPATH dans bashrc alors je pourrais appeler les fonctions de n’importe où.
à l’intérieur du .bashrc :
Export PYTHONPATH = $PYTHONPATH: / home/pi/IPD-LPD8806-master
tester que la bande fonctionne en exécutant l’exemple de code :
python example.py
Le code lumière de Noël, que nous allons pour télécharger plus tard veut courir en tant que root, et lorsque vous exécutez des choses avec un sudo devant, les variables d’environnement, plus précisément, PYTHONPATH ne sont pas transférés.
J’ai dû modifier/etc/sudoers en tapant
sudo visudo
puis ajouté au bas
Par défaut env_keep = SYNCHRONIZED_LIGHTS_HOME
Valeurs par défaut env_keep += PYTHONPATH
la première ligne est quelque chose que nous avons besoin pour le paquet de lumière de Noël devait être installé ultérieurement. Ceux-ci s’assurer que ces variables d’environnement rester dans les parages lorsque vous exécutez des choses comme sudo.
Pour vérifier que vous l’avez droit d’installation, fermez le terminal et le ré-ouvrir, puis tapez
sudo python
de bootstrap import *
LED.Fill(Color(50,50,50),0,10)
LED.Update()
qui doit s’allumer les 10 premiers LEDs.
Une dernière étape consiste à faire quelques modifications afin d’accélérer l’écriture dans la bande.
À l’intérieur de la ledstrip.py, rendre sûr use_py_spi = True dans la ligne de def __init__
def __init__ (self, leds, use_py_spi = vrai, dev="/dev/spidev0.0 », pilote ="LPD8806"):
Maintenant à l’intérieur de la LPD8806.py, nous allons changer la vitesse SPI à 16MHz
Si self.use_py_spi :
importation spidevSelf.SPI = spidev. SpiDev() self.spi.open(0,0)
self.spi.max_speed_hz = 16000000
imprimer ' py-spidev MHz: %d "% (self.spi.max_speed_hz / 1000000.0)
Que l’instruction print est là juste pour s’assurer que tout est bien positionné.
Une modification finale apportée à la LPD8806.py fichier se trouve dans la fonction update(). Pour une raison quelconque, j’ai remarqué led.update() prenait une longue période, upwords de 25 ms. Pour obtenir un bon effet visuel, j’ai voulu ma toute boucle analyse et affichage d’exécuter à 20Hz, ou 50ms par boucle et brûler la moitié qui ne fonctionnerait pas le temps d’attente pour la bande de LED. Et bizarrement, à 16MHz, il aurait dû prendre moins d’une Mme 3 octets par à led, 152 LED, (3 * 152 * 8 bits / 16M) =.2ms ! (pas de 25ms) Quand j’ai mis une portée jusqu’au port SPI, chaque octet sortait à 16 MHz, mais il y avait une pause 160uS après chaque appel à self.spi.xfer2(). Ma solution était de collecter l’ensemble de la chaîne d’octets dans une mémoire tampon et seulement appelez self.spi.xfer2() immédiatement :
mise à jour de DEF (self, tampon) :
temp_buffer =]Si self.use_py_spi :
pour x dans range(self.leds) :
temp_buffer = temp_buffer + [i car moi dans tampon [x]]
#self.spi.xfer2 ([i pour i en buffer[x]])
Self.SPI.xfer2 (temp_buffer)
Self.SPI.xfer2([0x00,0x00,0x00]) #zero remplir le dernier afin d’éviter les couleurs errants à la fin
Self.SPI.xfer2([0x00]) #once plus avec sentiment - cela aide:) time2 = time.time()
Écrivant dans 152 LEDs à 16 que MHz ne devrait prendre aucun temps--vous devriez voir le dernier changement de LED en même temps que la première fait
D’autres personnes ont eu du mal avec cela et a obtenu autour de lui, découvrez l’incroyable effet vidéo POV avec une seule bande de LED verticale (envoi de données à 8 MHz à travers 20 ft de cat 5!) :