Ws2812-Tonne

Aus c3RE.de
Wechseln zu: Navigation, Suche

Ws2812-Tonne.jpg

Die WS2812-Tonne ist ein Zylinder, der spiralig mit einem WS2812 "NeoPixel" LED-Streifen umwickelt ist. Der Streifen hat eine Länge von 5 Metern mit einer Pixeldichte von 30 px/m. Die Tonne hängt über dem Ws2812-UFO. Die Stromversorgung kommt aus dem PC Netzteil im MCU/Hüttenpi Schaltschrank. Die Tonne hat 150 Pixel. Pixel 0 ist unten, Pixel 149 ist oben. Gesteuert wird die Tonne mit einem ESP8266.

Der Tonnenumfang beträgt ca. 10½ Pixelabstände. Das bedeutet, dass die Pixel in übereinanderliegenden Reihen um einen halben Pixelabstand versetzt sind und erst die Pixel der jeweils übernächsten Reihe wieder (ungefähr) passend stehen. Anders gesagt: Alle 21 Pixel macht der Streifen ca. 2 volle Umrundungen.

alte MQTT & ws2812FX Firmware: https://gist.github.com/mherweg/4b230ef389f1ed14669c07fd357b8f7b

aktuelle Firmware: McLighting(FabLab Lünen Edition) - kann auch MQTT.

MQTT-Topic: tonne/in/

IP: 10.2.3.226

In der Hütte gibt es noch 3 weitere Objekte mit dieser Firmware:

  • laserschwert (an der Wand)
  • schwanzus-longus (im Regal)
  • kitchen (Küchen-Regal)

In nodered, CYBER-Alarm gibt es 2 Funktionen, welche diese Objekte steuern: "Alarm aktivieren" und "Alarm deaktivieren":

var top2 = "laserschwert/in";
node.send({topic: top2, payload: "/1"});        // mode: blink
node.send({topic: top2, payload: "#FC0000"});   // color
node.send({topic: top2, payload: "%255"});      // brightness
node.send({topic: top2, payload: "?245"});      // speed



==DEPRICATED

Beschreibung der alten Firmware:


Topic: huette/clubraum/000/ws2812tonne/actuators/set_pixel

Folgende Befehle kann man an dieses Topic senden:

  • 0-255 #RRGGBB (set one/all pixel)
  • mode 0-46 (WS2812FX mode)
  • speed 0-255
  • brightness 0-255
  • color #RRGGBB

Zweites Topic:

huette/clubraum/000/ws2812tonne/actuators/frame

- hier kann man Frames (1D Bilder) hin senden. Binär, 3 bytes pro pixel (r,g,b). Eventuell muss in libraries/PubSubClient/src/PubSubClient.h MQTT_MAX_PACKET_SIZE auf z.B. 1024 erhöht werden, bevor man die Firmware kompiliert. Siehe: https://github.com/knolleary/pubsubclient/pull/282/commits/a257083a66433e71fc43fb714da499016589ece4

Beispiele in bash (Topic anpassen!): https://github.com/c3re/zechenclock_scripts

Beispiel in python:

#!/usr/bin/env python
import time

import paho.mqtt.client as mqtt


topic = "huette/clubraum/000/ws2812tonne/actuators/set_pixel"
topic2 = "huette/clubraum/000/ws2812tonne/actuators/frame"


def on_connect(client, userdata, flags, rc):
    print("Connected with result code " + str(rc))

client = mqtt.Client()
client.on_connect = on_connect

client.connect("mqtt.lan", 1883, 60)

client.loop_start()

a=-1

while True:
    time.sleep(0.1)
    a=a+1
    if (a==151):
        a=0
    pixel= str(a)
    client.publish( topic, pixel+" #880000")
    pixel=str(a-1)
    client.publish( topic, pixel+" #000000")
    

Beispiel für das senden von 2 Frames:

#!/usr/bin/env python
import time
import paho.mqtt.client as mqtt

topic2 = "huette/clubraum/000/ws2812tonne/actuators/frame"

def on_connect(client, userdata, flags, rc):
    print("Connected with result code " + str(rc))

client = mqtt.Client()
client.on_connect = on_connect
client.connect("mqtt", 1883, 60)

client.loop_start()
#               pixel      0      1         2     3     4    ...
#                       R         G         B   r g b r g b  
byteArray =  bytearray([55,0,0, 0,55,0, 0,0,55, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0])
#                                                         B                                               G                                     G                            B         
byteArray2 = bytearray([0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,0,0,0,0,0,0,0,0,0,0,0,0,255])

while True:
    client.publish( topic2, byteArray)
    time.sleep(1.2)
    client.publish( topic2, byteArray2)
    time.sleep(1.2)


Jeden ws2812FX Effekt 10 Sekunden lang anzeigen:

#!/usr/bin/env python
import time
import paho.mqtt.client as mqtt

topic = "huette/clubraum/000/ws2812tonne/actuators/set_pixel"

def on_connect(client, userdata, flags, rc):
    print("Connected with result code " + str(rc))

client = mqtt.Client()
client.on_connect = on_connect
client.connect("mqtt", 1883, 60)
client.loop_start()
client.publish( topic, "brightness 200")

# show each mode for 10 seconds
for x in range(0, 0x2e):
    print(x)
    client.publish( topic, "mode "+str(x))
    time.sleep(10)

Auflistung aller Effekte: https://github.com/kitesurfer1404/WS2812FX

Editor's choice:

  • 7 - bonbonfarben
  • 9 - rainbow
  • - Scan
  • - Dual Scan - Runs two pixel back and forth in opposite directions.
  • - Theater Chase Rainbow - Theatre-style crawling lights with rainbow effect.
  • - Running Lights - Running lights effect with smooth sine transition.
  • - Twinkle Fade Random - Blink several LEDs in random colors on, fading out.
  • - Hyper Sparkle - Like flash sparkle. With more flash.
  • - weißes Lauflicht vor gewählter Farbe
  • - weißes Lauflicht vor wanderndem Regenbogen
  • - wandernder Regenbogen mit schwarzer Lücke
  • - Theater Chase mit weiß + gewählter Farbe
  • - Running Random - Random colored pixels running.
  • - Fireworks Random - Random colored firework sparks.


Nodered-tonne.png