LED-Stripe: Unterschied zwischen den Versionen
Zur Navigation springen
Zur Suche springen
Elias (Diskussion | Beiträge) Keine Bearbeitungszusammenfassung |
Elias (Diskussion | Beiträge) Keine Bearbeitungszusammenfassung |
||
Zeile 34: | Zeile 34: | ||
; piletop | ; piletop | ||
: Sollte das Serversystem in node.js werden, soll mal Konfiguration oder gar Code entgegennehmen und mehrere Ziele bespielen können. | : Sollte das Serversystem in node.js werden, soll mal Konfiguration oder gar Code entgegennehmen und mehrere Ziele bespielen können. | ||
; https://github.com/DjangoOne/led-stripe-py | ; [https://github.com/DjangoOne/led-stripe-py led-stripe-py] | ||
: Python- | : Python-Bibliothek von [[user:elias]] | ||
; [https://github.com/indietyp/LEDStripe-c3d2-ruby LEDStripe-ruby] | ; [https://github.com/indietyp/LEDStripe-c3d2-ruby LEDStripe-ruby] | ||
: Ruby-Projekt | : Ruby-Projekt |
Version vom 17. Januar 2016, 10:37 Uhr
Installation der Hardware
Zwei LED-Streifen à 3 m (206 LEDs) hängen an labilen Böcken in den Vorhangaufhängenischen über den Fenstern im großen Raum im GCHQ. Zusätzlich sind nun auch 20 LEDs rundum im Hardware-Kasten an der Wand.
Steuerung
Controller ist der Pi ledbeere.
Auf ledbeere kann sich per ssh verbunden werden.
- Ein Verbinden soll nur innerhalb des Netzes des HQ möglich sein.
ssh pi@172.22.99.206
- fe80::ba27:ebff:fe6d:b29b
Layout
- 0 <= x < 20
- Gehäusebeleuchtung (TODO: Details?)
- 20 <= x < 123
- Östlicher LED-Stripe
- 123 <= x < 226
- Westlicher LED-Stripe
Code
Bislang gibt es folgende Komponenten:
- ustriped
- Kleiner C-Server der Pixeldaten über UDP entgegennimmt und auf GPIO schreibt; kann Prioritäten
- ustripe-simplex
- Das gute alte Simplex-Plasma auf Priorität 255
- ustripe-pulse
- Musikvisualisierung von cider, läuft auf flatbert im Container ustriper, auf Priorität 253
- piletop
- Sollte das Serversystem in node.js werden, soll mal Konfiguration oder gar Code entgegennehmen und mehrere Ziele bespielen können.
- led-stripe-py
- Python-Bibliothek von user:elias
- LEDStripe-ruby
- Ruby-Projekt
Eine kompatible esp8266-Variante mit ws2812b-LED-Stripe von honky:
(https://github.com/PaulPetring/esp8266-ws2812b-open-pixel-control)
Protokoll
Per UDP an ledbeere:2342 für 226 LEDs:
- Byte 0: Priorität (255 für etwas was andauernd läuft, niedriger für kurzzeitigere Sachen)
- Byte 1: Kommando (0: CMD_SET_PIXEL_COLORS)
- Bytes 2 & 3: Länge der folgenden Daten in Network Byte Order; für 226 LEDs mit je 3 Byte: 678 = [0x02, 0xA6]
- Dann: 8 bit blau, 8 bit grün, 8 bit rot für 226 LEDs
Implementationen
shell
Weißes Rauschen anzeigen, also Farbdaten aus /dev/urandom:
while true; do ( echo -en '\x00\x00\x02\xA6'; dd if=/dev/urandom bs=678 count=1 status=none ) | ncat --send-only --udp ledbeere 2342; sleep 0.1; done
Alle LEDs auf grün stellen:
( echo -en '\x00\x00\x02\xA6'; for i in {1..226}; do echo -en '\x00\xFF\x00'; done ) | ncat --send-only --udp ledbeere 2342
python
Ein einfaches Beispiel in Python:
import socket
import time
from struct import *
HOST = 'ledbeere'
PORT = 2342
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
def send_rgb(r,g,b):
# header
data = [pack('b',0),pack('b',0), pack('!h',678)]
# Farben fuer 226 leds
for i in range(0,226):
data.append(pack('BBB',b,g,r))
s.sendto("".join(data),(HOST,PORT))
send_rgb(0,255,0)
time.sleep(0.5)
send_rgb(255,0,0)
time.sleep(0.5)
send_rgb(0,0,255)
time.sleep(0.5)
send_rgb(0,0,0)
s.close()
Das sollte alle LEDs nacheinander auf Grün, Rot, Blau stellen.