== Installation der Hardware == Zwei LED-Streifen à 3 m (206 LEDs) hängen an labilen Böcken in den Vorhangaufhängenischen über den Fenstern (Südseite, Anm. zur Orientierung) im [[HQ/Raum#Prokrastinationraum | großen Raum im]] [[GCHQ]]. Zusätzlich sind nun auch 20 LEDs rundum im Hardware-Kasten an der Wand-Säule zwischen den Fenstern. == 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 == [[Bild:LED-Stripe-Gehaeuse.medium.jpg|thumb|Gehäusebeleuchtung]] ; 0 <= x < 20 : Gehäusebeleuchtung (TODO: Details?) ; 20 <= x < 120 : Östlicher LED-Stripe ; 121 <= x < 226 : Westlicher LED-Stripe == Code == [https://github.com/astro/pile github:astro/pile] Bislang gibt es folgende Komponenten: ; [https://github.com/astro/pile/blob/master/ustriped/main.c ustriped] : Kleiner C-Server der Pixeldaten über UDP entgegennimmt und auf GPIO schreibt; kann Prioritäten ; [https://github.com/astro/pile/blob/master/ustripe-simplex/main.js ustripe-simplex] : Das gute alte Simplex-Plasma auf Priorität 255 ; [https://github.com/astro/pile/tree/master/ustripe-pulse/src 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. ; [https://github.com/DjangoOne/led-stripe-py led-stripe-py] : Python-Bibliothek von [[user:elias]] ; [https://github.com/indietyp/LEDStripe-c3d2-ruby LEDStripe-ruby] : Ruby-Bibliothek von [[user:indietyp]] ; [https://github.com/PaulPetring/esp8266-ws2812b-open-pixel-control esp8266-ws2812b-open-pixel-control] : kompatible esp8266 Version des Stripes von [[user:Honky]] ; [https://github.com/PaulPetring/led-stripe-py-esp8266.git led-stripe-py-esp8266] : für den esp8266 angepasste Python-Bibliothek von [[user:elias]] == 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. [[Kategorie:Projekt]]