Neues Modul zur Steuerung von WS2812b LED stripes

Begonnen von swhome, 03 März 2016, 13:27:41

Vorheriges Thema - Nächstes Thema

swhome

Hallo Forum,

zur Steuerung der WS2812b LED Streifen habe ich einen kleinen Controller mit Hilfe eines Arduino mit Ethernet Shield (Wiznet oder UIP) selbst gebaut. Mittlerweile funktioniert es auch mit einem ESP 8266 per WLAN.

Der Anschluß der LED an den Controller kommt ohne weitere Bauteile aus und ist hier gut beschrieben.

An der Netzwerkschnittstelle steht ein einfaches http-basiertes Protokoll zur Verfügung um die LEDs anzusteuern. Das zugehörige FHEM Modul bietet einen einfachen Befehlssatz mit folgenden Funktionen:

  • alle LED mit einer Farbe aus dem Color-Picker setzen
  • eine einzelne LED individuell ansteuern
  • eine Reihe von LED mit der gleichen Farbe setzen
  • die individuellen Farben aller LED in einem Aufruf definieren
  • einen in einer Datei definierten Lichteffekt abspielen
  • Feuereffekt starten
  • Regenbogen-Lauflicht starten
  • alle LEDs ausschalten

Insbesondere die Abspielfunktion aus Dateien ermöglicht trickreiches Lichtdesign, zum Beispiel Sonnenaufgänge oder sanfte Farbwechsel. Leider ist die Anzahl der ansteuerbaren Farben in diesem Modus noch auf 4096 beschränkt aber das will ich bei Gelegenheit noch ändern.

Wer das LED Netzteil nicht nur im Standby lassen sondern gern richtig ausschalten will, kann einen zusätzlichen Schaltkanal mit dem Attribut power_switch deklarieren. Das Modul wird diesen Kanal dann einschalten bevor LEDs aktiviert werden und ihn beim Kommando off wieder ausschalten.

Installation des Moduls aus GitHub: Hierzu in der FHEM Kommandozeile folgendes eingeben:
update all https://raw.githubusercontent.com/sw-home/FHEM-LEDStripe/master/controls_ledstripe.txt

Arduino

Die Anzahl der LEDs muss im Sketch eingestellt werden:

#define NUMPIXELS1     150
#define NUMPIXELS2     150

Der Arduino-Sketch kann zwei LED-Streifen steuern und ist so gedacht, daß der Controller in der Mitte der beiden Streifen plaziert wird. Das ist aber optional, die Länge des zweiten Streifens kann auch 0 sein.

Im Moment benutze ich einen alternativen Bootloader der ein Sketch-Update übers Netzwerk ermöglicht. Die IP-Adresse wird im Flash hinterlegt, und auch der Sketch verwendet diese. Alternativ kann die MAC und IP auch im Sketch definiert werden, das ist im Source auskommentiert.

Limitierend ist mitunter der Speicherbedarf im Microcontroller, bei Einzelansteuerung pro LED 3 Byte. Nachdem die Netzwerk-Libraries je nach Implementierung ziemlich speicherhungrig sind, kann es bei hunderten von LEDs schnell eng werden. Mit dem originalen Ethernet-Shield oder einem Arduino Ethernet sind bei mir 220 LED möglich, aber schon grenzwertig. Andere Netzwerk-Libs nehmen noch mehr Speicher und erlauben weniger LEDs. Im Zweifel muss man einen Arduino Mega benutzen. Wenn der Controller nicht richtig funktioniert, liegts am Speicher...

Man braucht eine ordentliche 5V Spannungsversorgung und sollte längere Streifen mit parallelen Versorgungsleitungen unterstützen. Ich habe den Controller an der 5V-Leitung direkt angeklemmt was in der Szene umstritten ist aber prima funktioniert. Wenn alle LEDs mit allen Farben voll aufgedreht werden, fließen 60mA pro LED, bei 200 Stück also 12A. In der Praxis braucht man meist weniger weil dies ja eher eine Akzentbeleuchtung sein soll. Denkbar wäre auch eine Limitierung des Stromverbrauchs im FHEM-Modul.

Modul LEDStripe

Define

define <name> LEDStripe <ip_address>

Defines a module for controlling WS2812b LED stripes connected to an Arduino with Ethernet shield
  define LED_Wohnzimmer LEDStripe 192.168.1.21
  attr LED_Wohnzimmer playfile /opt/fhem/ledwall.txt

Attributes

  •     attr <name> playfile <string>
            Points to a file with LED color information containing several lines in the pixels format described below
  •     attr <name> playtimer <integer>
            Delay in seconds when playing a LED color file
  •     attr <name> webCmd rgb:off:rgb 5a2000:rgb 654D8A
            Show a color picker and color buttons (the colors are just examples, any combinations are possible).
  •     attr <name> power_switch <on/off-channel>
            Control LED power on/off using s switch channel
[/li][/list]
Commands

  •     set <name> on
            Start 'playing' the file with LED color information
  •     set <name> off
            Switch all LEDs off and stop any effects
  •     set <name> rgb rrggbb
            Switch all LEDs to RGB color specified in hex values. This is compatible with the Color.pm color picker
  •     set <name> pixel <led id> <red> <green> <blue>
            Set the color of a single LED, index starts at 0, color values are from 0-255
  •     set <name> range <start id> <end id> <red> <green> <blue>
            Set the color of a range of LEDs, start and end are inclusive beginning with 0
  •     set <name> pixels <color data>
            Define the color of all LEDs, the color data consists of three hex digits per LED containing the three colors, e.g. 000 would be off, F00 would be all red, 080 would be 50% green, 001 a faint blue
  •     set <name> fire
            Start a 'fire' light effect on all LEDs
  •     set <name> rainbow <string>
            Start a 'rainbow color chase' light effect on all LEDs


Im Einsatz: FHEM auf Raspberry Pi mit 350 devices, hauptsächlich Homematic Wired und HM-Heizungsregler, dazu diverse Eigenbauten für Fussbodenheizung und LED Beleuchtung. Und jetzt mit Alexa!

swhome

Anbei noch ein Foto wie ich die Lichtleisten an der Decke montiert habe.
Im Einsatz: FHEM auf Raspberry Pi mit 350 devices, hauptsächlich Homematic Wired und HM-Heizungsregler, dazu diverse Eigenbauten für Fussbodenheizung und LED Beleuchtung. Und jetzt mit Alexa!

roedert

Interessante Geschichte ... werd ich direkt mal nachbauen :)
Soll nicht zur Beleuchtung dienen, sondern als Statusanzeige - diesen Ansatz gabs hier schon mehrfach.

Zitat von: swhome am 03 März 2016, 13:27:41
Im Moment benutze ich einen alternativen Bootloader der ein Sketch-Update übers Netzwerk ermöglicht. Die IP-Adresse wird im Flash hinterlegt, und auch der Sketch verwendet diese. Alternativ kann die MAC und IP auch im Sketch definiert werden, das ist im Source auskommentiert.
Kannst du mehr zu diesem Bootloader sagen?
Bzw. zum Festlegen der IP im Quelltext ... dort steht nur:
// Enter a MAC address and IP address for your controller below
// uncomment if using fixed IP:
//byte mac[] = { 0x90, 0x42, 0xDA, 0x0D, 0x5D, 0x99 };

// The IP address will be dependent on your local network
// uncomment if using fixed IP:
//IPAddress ip(10,222,11,42);

Mac-Adresse ... kann ich mir eine aussuchen? Hat die Netzwerkkarte keien fest "eingebrannte"?
Was ist mit den restlichen infos wie Netzmaske und Gateway?

swhome

Bei diesen sehr simplen Netzwerkkarten ist keine MAC gespeichert, das muss man in der eigenen Firmware machen. Wenn man eine echte Arduino Komponente kauft, ist eine MAC als Aufkleber dabei, die man in den eigenen Code übernehmen kann, ansonsten muss man sich halt selber eine ausdenken. Die anderen TCP Parameter hab ich vergessen, wahrscheinlich passen die defaults zu meinem Netzwerk. Schau mal hier:

https://www.arduino.cc/en/Reference/EthernetIPAddress

Die Sache mit dem Bootloader ist noch etwas unfertig. Mein Wunsch ist, den oben in der Zwischendecke sitzenden Controller ohne Baumaßnahmen neu flashen zu können. Der Code stammt von hier:

http://playground.arduino.cc/Code/TFTPBootloader1

Allerdings hab ich jetzt irgendwo anders einen Bootloader mit DHCP/Bootp gefunden, das erscheint mir noch viel eleganter. Die ganze Geschichte mit der statischen Netzwerkkonfiguration im Flash entfiele, und auch das etwas fummelige 5 Sekunden Timing.

Viel Erfolg beim Bauen, bin gespannt auf deine Resultate. An eine Statusanzeige hatte ich auch schon gedacht, oder an eine raumfüllende Zeitanzeige...
Im Einsatz: FHEM auf Raspberry Pi mit 350 devices, hauptsächlich Homematic Wired und HM-Heizungsregler, dazu diverse Eigenbauten für Fussbodenheizung und LED Beleuchtung. Und jetzt mit Alexa!

roedert

gekauft, Sketch angepasst und hochgeladen, bisschen gelötet ..... läuft alles prima :)

roedert

Alle Tests bisher erfolgreich .... nun muss der fliegende Testaufbau nur noch "schön" gemacht werden.

Plan ist es eine Raumecke neben der Tür mit einer Platte "abzuschrägen", darauf komtm dann der Cubietruck mit FHEM, HM-LAN-CFG, Huebridge und eben das Statusdisplay optisch angelehnt an diese Umsetzung:
https://forum.fhem.de/index.php/topic,28025.0.html

Möchtest du dein Modul nicht "offiziell" machen und einen entsprechenden Wiki-Eintrag mit den zugehörigen Infos zum Nachbau ... Hardware, Verkabelung, Sketch etc.

swhome

Na klar da spricht nichts dagegen. Ich wollte hier erstmal das Interesse checken  ;D
Im Einsatz: FHEM auf Raspberry Pi mit 350 devices, hauptsächlich Homematic Wired und HM-Heizungsregler, dazu diverse Eigenbauten für Fussbodenheizung und LED Beleuchtung. Und jetzt mit Alexa!

roedert

....einen Fan hast du schon ;)

Vielleicht weisst du auf die Schnelle die Lösung .... wie kann ich die ständigen Logmeldungen
2016.03.18 23:34:32 3: set Statusdisplay pixel 19 0 0 0 : LEDStripe returned OK,60,8, new state is on
verhindern?

attr verbose 0 hat nix genützt :(

swhome

#8
Oh sorry ja das ist dumm. Falls du es auf die Schnelle ändern willst, entferne in diesen Zeilen
$rc = LEDStripe_request($hash,$URL);
die Zuweisung $rc=, dann sollte das Resultat des http Aufrufes nicht mehr geloggt oder angezeigt werden. Ich mache am Wochenende mal ein Update des ersten Beitrages.
Im Einsatz: FHEM auf Raspberry Pi mit 350 devices, hauptsächlich Homematic Wired und HM-Heizungsregler, dazu diverse Eigenbauten für Fussbodenheizung und LED Beleuchtung. Und jetzt mit Alexa!

Papaloewe

Bin schon lange auf der Suche nach einem solchen Modul, das auch die Einzelansteuerung und Effekte unterstüzt.
Wäre es vielleicht auch prinzipiell anpassbar, damit es auf einem ESP8266 mit WIFI Anbindung läuft?
Das fände ich dann richtig spannend und würde sofort einen Testaufbau machen.

Gruß
Thomas

swhome

Hi, ich bin ziemlich sicher dass es mit dem ESP funktionieren würde, aber ich bin noch nicht dazu gekommen es auszuprobieren. Aktuell hab ich noch ein anderes dringenderes ESP Projekt das noch nicht so recht laufen will...
Im Einsatz: FHEM auf Raspberry Pi mit 350 devices, hauptsächlich Homematic Wired und HM-Heizungsregler, dazu diverse Eigenbauten für Fussbodenheizung und LED Beleuchtung. Und jetzt mit Alexa!

harway2007

würde gern ein raspberry 2 oder 3 als Kontroller benutzen .. was ist da zu beachten oder zu ändern?

swhome

Hi, Arduino und Raspberry sind total verschiedene Dinge. Soviel ich weiß kann man die WS2812 nicht zuverlässig direkt mit einen Pi ansteuern. Bei mir läuft FHEM auf dem Pi, du brauchst also nur noch den Arduino dazu :-)
Im Einsatz: FHEM auf Raspberry Pi mit 350 devices, hauptsächlich Homematic Wired und HM-Heizungsregler, dazu diverse Eigenbauten für Fussbodenheizung und LED Beleuchtung. Und jetzt mit Alexa!

dev0

Und für den Anschluss direkt an den Raspi eigenen sich WS2801 besser.

rippi46

Hallo swhome,

wirklich tolle Geschichte. :)

Habe aber leider das Problem, dass beim Absetzen eines Befehls zuerst einmal nichts passiert. Erst wenn ich noch einmal einen Befehl abschicke ändert sich am Stripe etwas.

Dicht gefolgte Befehle funktionieren sofort. Es sieht so aus als ob die Verbindug verloren geht.

Hast du ähnliche Probleme?

Gruß rippi
FHEM, LMS, VDR ,Dell 9010 Ubuntu 20.04,Raspimatic, HM/HMIP, Max, Elro, Brennenstuhl u. Intertechno mit Connair.
Picoreplayer, Raspi IR-Lanadapter, Firmata(wifi), LaCrosse,
nanocul433, nanocul868, Signalduino, Connexoon,
MySensor-GW+Sensoren, RGBWW, Zigbee2mqtt,Xiaomi,Nextion,LEDMatrix,Alexa