LED-Stripe: Unterschied zwischen den Versionen

Aus C3D2
Zur Navigation springen Zur Suche springen
Keine Bearbeitungszusammenfassung
(Implementationen umsortiert)
Zeile 45: Zeile 45:
* Dann: 8 bit blau, 8 bit grün, 8 bit rot für 226 LEDs
* Dann: 8 bit blau, 8 bit grün, 8 bit rot für 226 LEDs


Ein einfaches Beispiel in Shell-Skript:
 
== 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 ) | 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>
: <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>
Das sollte alle LEDs auf grün stellen.
 
: <source lang=bash>while true; do ( echo -en '\x00\x00\x02\xA6'; dd if=/dev/urandom bs=678 count=1 ) | ncat --send-only --udp ledbeere 2342; sleep 0.1; done</source>
 
Das zeigt weißes Rauschen an, also Farbdaten aus <tt>/dev/urandom</tt>.
=== python ===


Ein einfaches Beispiel in Python:
Ein einfaches Beispiel in Python:
Zeile 73: Zeile 82:
</source>
</source>
Das sollte alle LEDs auf weiß stellen.
Das sollte alle LEDs auf weiß stellen.


[[Kategorie:Projekt]]
[[Kategorie:Projekt]]

Version vom 15. Januar 2016, 22:06 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

github:astro/pile

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.
https://github.com/DjangoOne/led-stripe-py
Python-Projekt

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 ) | 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
from struct import *

HOST = 'ledbeere'
PORT = 2342 

#header
data = [pack('b',0),pack('b',0), pack('!h',678)];

#farben für 226 leds 
for i in range(0,226):
    data.append(pack('BBB',255,255,255))

s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s.sendto("".join(data),(HOST,PORT))
s.close()

Das sollte alle LEDs auf weiß stellen.