101 lines
3.5 KiB
Plaintext
101 lines
3.5 KiB
Plaintext
== 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.
|
|
: <source lang=bash>ssh pi@172.22.99.206</source>
|
|
: 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 <tt>/dev/urandom</tt>:
|
|
: <source lang=bash>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</source>
|
|
|
|
|
|
Alle LEDs auf grün stellen:
|
|
: <source lang=bash>( echo -en '\x00\x00\x02\xA6'; for i in {1..226}; do echo -en '\x00\xFF\x00'; done ) | ncat --send-only --udp ledbeere 2342</source>
|
|
|
|
=== python ===
|
|
|
|
Ein einfaches Beispiel in Python:
|
|
|
|
<source lang=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()
|
|
</source>
|
|
Das sollte alle LEDs nacheinander auf Grün, Rot, Blau stellen.
|
|
|
|
[[Kategorie:Projekt]]
|