Bastelprojekt WLAN RGB Controller für ca. 6€

Begonnen von Samsi, 28 Februar 2015, 13:16:07

Vorheriges Thema - Nächstes Thema

Samsi

Zitates ist etwas Glücksspiel um wirklich 4A-Steuerelemente zu bekommen, zumindest liest sich das so
fh168 hat es auch mit dem 2A RGB modul hinbekommen. Ich habe da meins irgendwie gehimmelt. Ich vermute aber, das ich irgendwie einen Fehler gemacht hatte, ich sehe nämlich auch keinen Grund warum es nicht auch mit dem 2A modul gehen sollte.

Du könntest aber auch die MosFets und Widerstände nehmen wie hier in dem Projekt:

http://forum.fhem.de/index.php/topic,13890.0.html

Genauso könntest Du auch die Spannungsversorgung für 3.3v von dem Projekt nehmen, wenn Du es ohnehin auf Lochraster aufbauen willst.

Ich hab das nur mit dem Step Down Modul gemacht, weil ich es recht klein haben wollte, damit alles in das kleine Gehäuse passt.
FHEM 5.5 / BBB Debian Wheezy

Homematic CFG-LAN

HM-Sec-MDIR / HM-Sec-SD / HM-Sec-WDS / HM-LC-Sw2-FM / HM-Sec-SC / HM-LC-Sw1PBU-FM / HM-SCI-3-FM / HM-Sec-Key / HM-RC-Key3-B / HM-LC-Dim1TPBU-FM /  HM-CC-RT-DN / HM-PBI-4-FM / HM-RC-Key4-2 / HM-ES-PMSw1-Pl / HM-LC-Sw4-WM

Fabeulous

#61
Hey Leute,
Hab hier bisher immer nur mitgelesen und nie wirklich was beigetragen. Deswegen will ich jetzt auch mal was zurückgeben. :)

Ich weiß nicht ob zwischendurch schon Mal jemand auf die Idee kam, aber mit einem ESP8266, WS2812 LED's und kleinen Modifikationen in Samsis Code lassen sich recht günstig(ca.5€ je nach Anzahl der WS2812 LED's) LED Lampen bauen die sich dann  über FHEM ansteuern lassen.
Das praktische ist, dass man mit dem ESP8266 direkt(also ohne zwischengeschaltete Arduino o.ä.) die WS2812 LED's ansteuern kann. Eigentlich sind die LED's für 5V Pegel ausgelegt aber anscheinend so tolerant, dass man sie auch mit dem 3,3V Pegeln des ESP8266 ansteuern kann. Für die, die WS2812 LED's noch nicht kennen: Das sind LED's die sich einzeln über ein 1Wire-Interface ansteuern lassen. Das heißt wenn man sie als LED Streifen zusammenschaltet(Wie es sie auch meistens zu kaufen gibt) kann man die Helligkeit und Farbe jeder einzelnen LED individuell steuern.
Ich steuere hier aber jede LED immer mit der gleichen Farbe an.


Hardware:

Ich habe einen Eagle Schaltplan und Layout angehängt.
Die Maße der Platine sind ausreichend klein um den ESP samt LED in einem ausgehölten E27 Glühbirnenkörper(Wie das geht findet man bei Google raus oder guckt zum Beispiel hier: http://www.fraumau.de/gluhbirnen-vase/. Schutzbrille nicht vergessen!) verschwinden zu lassen. Am Sockel guckt dann nur noch der Anschluss für den USB/Uart-Adapter und die Stromleitung raus.(Siehe Fotos)
Um die 3,3V für den ESP bereitzustellen braucht man noch einen Spannungsregler und zwei Kondensatoren.
Auf der Platine gibt es drei Anschlüsse:

SV1(Programmieranschluss):
SV4.Pin1: Anschluss zum USB/UartAdapter RX
SV4.Pin2: GND Zum programmieren muss GND auch mit dem GND eures Programmieradapters verbunden werden
SV4.Pin3: GPIO0 vom ESP8622. Falls ihr gezwungen seid NodeMCU neu zu programmieren müsst ihr diesen Pin auf GND legen
SV4.Pin4: Anschluss zum USB/UartAdapter TX

SV1(Anschluss an die LED's):
SV1.Pin1: +5V
SV1.Pin2: kommt von ESP8266.GPIO2 und soll an DI der ersten WS2812 LED
SV1.Pin3: GND

X2(Stromversorgung):
Die Pins sind hier leider nicht beschriftet. Man kann es aber auf dem Bild Schaltplan leicht erkennen. GND ist der Anschluss der auch mit SV4.Pin2 verbunden ist. +5V ist der Anschluss der mit SV1.Pin1 verbunden ist.

Beispiel-Einkaufsliste zur eigenen 5€ FHEM WLAN-Lampe:
Spannungsregler: zum Beispiel: ,,MCP 1702-3302" bei Reichelt.de (Beim verlöten auf der Platine muss man mit den Beinchen etwas tricksen, da die Beinchen nicht optimal zum Rastermaß passen.)
Kondensatoren: zum Beispiel: ,,TANTAL 1,0/35" bei Reichelt.de
Pfostenbuchse: zum Beispiel: ,,BL 1X20W 2,54" von Reichelt.de(Ist eine 20polige aber lässt sich mit einem handelsüblichen Seitenschneider ganz einfach auf die entsprechende Länge kürzen.)
ESP8266: am besten ESP8266-01 von Ebay (Warum die Version 01: Dieser hat nur zwei GPIO Pins. Wir brauchen aber auch nur einen um die LED's anzusteuern. Deswegen kann man ruhig die günstigste Version nehmen.)
LED: WS2812 von Ebay. Die 5mm Version(PL9823-F5) ließ sich bei mir NICHT direkt über den ESP8266 ansteuern. Anscheinend ist dieser nicht so tolerant.
Netzteil: Hier braucht mein ein Netzteil dass der Anzahl der LED's angepasst ist. Jede LED braucht im Maximalfall ca. 60mA. Bei einem LED Streifen mit 50 LEDs braucht man also ein Netzteil mit 50*0,06A=3A. Dazu würde ich aber noch 500mA draufschlagen. Einmal braucht der ESP8266 ja auch noch ein wenig Strom und manche Netzteile mögen es auch nicht die ganze Zeit am Leistungslimit betrieben zu werden. Im oben genannten Beispiel würde ich also ein Netzteil mit 3,5A sprich 17,5W bei 5V empfehlen. Mehr geht natürlich immer. Allerdings steigt dann auch der Verbrauch im StandBy.

Software:
Ich habe den modifizierten Code von Samsi angehängt.(Ich hoffe das ist okay?)
Die einzigen Änderungen die ich gemacht habe sind in der RGBController.setRGB() Funktion um die WS2812 anstatt der PWM anzusteuern und in der telnet.startServer() Funktion um anzuzeigen ob die Lampe sich ordnungsgemäß mit dem WLAN verbunden hat.
Die Lampe leuchtet nach dem einstecken erst Rot. Nur wenn sie sich erfolgreich mit dem vorher konfigurierten WLAN verbunden hat leuchtet sie kurz Grün und geht dann aus. Ab diesem Zeitpunkt kann sie genauso wie das Original von Samsi verwendet werden.
In der init.lua habe ich außerdem die Auskommentierung von run() entfernt, da der Code(bei mir zumindest) Problemlos läuft.

EDIT:
Fhem:
Ich habe die Lampe bei mir mit folgenden Befehlen integriert:
define KugelWLANpeWZ WifiLight RGB LW12:192.168.3.57
attr KugelWLANpeWZ webCmd RGB
attr KugelWLANpeWZ widgetOverride RGB:colorpicker,RGB
attr KugelWLANpeWZ icon light_light

Infos dazu gibt es auch auf der Modul-info-seite: http://www.fhemwiki.de/wiki/WifiLight

Um das Modul zu installieren habe ich es mir Manuell auf der entwicklerseite runtergeladen und in den modulordner kopiert. Per update-befehl ließ es sich nicht installieren.
Ich habe das ganze bisher in mehrere Versionen aufgebaut(Siehe Fotos). Einmal in einem Glühbirnenkörper einer ehemaligen 200W Lampe(direkt an ein 5V Netzteil angeschlossen) und nochmal in einer Ikea-Kugellampe. Dazu habe ich den Sockel einer alten Energiesparlampe geöffnet und die Kontakte an ein 5V Netzteil angeschlossen. Das ganze lässt sich dann wie gehabt in den Glühlampensockel einschrauben und wieder in der Kugellampe verstecken.(Wenn ihr das auch machen wollt und nicht vom Fach seid, lässt euch zumindest bei dem Anschluss des Netzteils an den Sockel helfen. Dort liegt Netzspannung an und die kann tödlich sein wenn nicht alles ordentlich angeschlossen und isoliert wurde.)
Außerdem habe ich auch noch eine Retro-Lichterkette aus mehreren ausgehölten Glühbirnenkörpern gebaut.

Gerade arbeite ich noch an einer Version, die sich über Batterien betreiben lässt. Wenn ich damit Fortschritte gemacht hab poste ich das hier auch nochmal.

Was vllt. noch eine ganz coole Modifikation des WifiLight-Moduls wäre, wäre wenn man die Farbe und Helligkeit von jeder einzelnen WS2812 LED einstellen könnte(und nicht alle auf einmal).
Dann ließe sich das Ganze auch sehr gut dazu ,,missbrauchen" um ein Status-Display aufzubauen. So wie zum Beispiel das Homematic ,,HM-OU-LED16".

So. ich hoffe ich hab nix vergessen. Würde mich freuen Feedback zu bekommen, wenn sich jemand die Mühe macht das nachzubauen.

herrmannj

Hallo Fabeulous,

schöne Umsetzung!

Zum ESP8266: wie viel Speicher (ROM/RAM) ist eigentlich mit dem sketch noch verfügbar ? Wenn da noch genügend frei ist könnte man vielleicht darüber nachdenken die transitions im ESP ablaufen zu lassen. Wenn Du eine Idee hast wie man die Einzelansteuerung der WS2812 auf der fhem Seite lösen kann wäre das gut.

vg
jörg

Fabeulous

Hallo Jörg,

Danke :)

Also zum Speicher sagt der ESP folgendes:
,,----------------------------
RGBController.lc : 568 bytes
RGBController.lua : 401 bytes
init.lua        : 101 bytes
myNode.lua      : 481 bytes
telnet.lc       : 1228 bytes
telnet.lua      : 777 bytes
----------------------------
Total file(s)   : 6
Total size      : 3556 bytes

> r,u,t=file.fsinfo() print("Total : "..t.." bytes\r\nUsed  : "..u.." bytes\r\nRemain: "..r.." bytes\r\n") r=nil u=nil t=nil
Total : 68021 bytes
Used  : 5773 bytes
Remain: 62248 bytes"

von den insgesamt fast 70 KB Speicher sind also noch 62 KB frei. Ich weiß nicht wie aufwendig das programmiertechnisch ist aber man hat auf jeden Fall noch etwas Platz.

Also ich hatte schon überlegt, dass ganze etwas improvisiert zu lösen indem man jede LED virtuell als einzelne Lampe betreibt die dann über wifilight angesprochen wird. Allerdings müsste man dann für jede LED ein Socket öffnen und das ganze würde meiner Meinung nach sowieso spätestens bei einem LED Streifen mit 50 LED's ziemlich ,,unelegant".
Ich hab mich noch nicht wirklich in das wifilight Modul eingearbeitet. Wenn ich es aber richtig verstanden habe(laut Code im ESP8266) sendet das Modul erst ein Steuerbyte dann drei Bytes mit den Helligkeitswerten für Rot, Grün und Blau und dann nochmal ein Steuerbyte.
Ich fände es am einfachsten, wenn man zu den drei Farb-Bytes einfach noch ein Byte sendet mit dem dann die entsprechende LED angesteuert wird. Dann könnte man 255 LED's einzeln ansteuern.
(Mehr macht glaube ich auch nicht unbedingt Sinn, da die 255 LED's im Extremfall dann schon fast 16A aufnehmen.)
Vllt. könnte man einen Wert des ,,Steuerungsbytes" noch reservieren um damit alle LED's gleichzeitig zu steuern. So braucht man bei einer Änderung des kompletten LED Streifens mit beispielsweise 100 LED's nur vier anstatt 400 Byte übertragen.

Ich stelle mir den Datenframe also so vor:
SteuerungszeichenAnfang|AngesprocheneLED|Rot|Grün|Blau|SteuerungszeichenEnde

Wobei ich dann zum Beispiel den Wert 255 des Bytes ,,AngesprocheneLED" dazu reservieren würde die Helligkeit aller angeschlossenen LED's auf einmal zu setzen.


Ich hab mich mit der Programmierung der Module noch keine Erfahrung und wäre dankbar, wenn jemand das Umsetzen würde. Falls sich jemand die Mühe macht die notwendigen Modifikationen im Modul umzusetzen würde ich mich auch um die Anpassungen im Code des ESP kümmern.

Lg
Fabian

herrmannj

Hi Fabian

62k frei sind eine Menge. Wie aufwendig ist es die colortransitions im Controller laufen zu lassen? Sehr. Ist praktisch ein port der Sachen die jetzt im Modul gemacht werden ... Im Ergebnis laufen die dann aber ganz flüssig und unabhängig von fhem. Wäre schon mal ein Projekt.

Bei der einzelansteuerung ist das Protokoll nicht so dass Problem. Bei 50 leds bekommst du dann halt in fhem 50x readings, 50 einzelne farbregler. Ganz zu schweigen davon das dann so Sachen wie bewegliche farbverlaufe noch gar nicht eingeplant sind.

Vg
Joerg

Bapt. Reverend Magersuppe

Hallo,
neben dem freien Speicher muss man auch auf den "Heap" achten, node.heap() gibt darüber Auskunft. Je nachdem wieviele Variablen da benötigt werden geht das leider schnell zu Ende.
--
If I was born in 1453, Leonardo da Vinci would be jealous of me.
Reverend Paul Egon Magersuppe
Aus versicherungstechnischen Gründen sind sämtliche Beiträge von mir rein spekulativer und theoretischer Natur und sollten nicht in die Tat umgesetzt werden!
Bin hier selten DRIN. AUS GRÜNDEN!

gloob

Köntest du vielleicht noch deine Integration in FHEM posten? Ich versuche das ganze aktuell mit MySensor aufzubauen und scheitere an dem Senden der Daten von FHEM zum Arduino.
Raspberry Pi 3 | miniCUL 433MHz | nanoCUL 868 MHz | nanoCUL 433 MHz | MySensors WLAN Gateway | LaCrosse WLAN Gateway | SignalESP 433 MHz | SignalESP 868 MHz | HM-MOD-UART WLAN Gateway | IR - 360 Grad WLAN Gateway

herrmannj

Hi Gloob,

wird über Wifilight auf Basis des LW12 abgebildet (RGB)

Auf Controllerseite:

TCP 5577
Protokoll : 0x56, $r, $g, $b, 0xAA   ( 5 Bytes )

vg
joerg


Fabeulous

@gloob:
Ich habe meinen ersten Post editiert und meine integration in FHEM eingetragen. Unter dem Softwarebereich ist der edit.

@Bapt. Reverend Magersuppe:
Danke für den Tipp. Werde ich bei geegenheit machen und auch hier posten. Momentan ist es bei mir zeitlich etwas eng zum basteln.

@All:
Ich tendiere dazu die Batteriebetriebsache zu lassen. Im niedrigsten Energiesparmodus in dem der ESP noch die WLAN-verbindung aufrecht hält verbaucht er ca. 20mA. Da hält die Batterie leider nicht lange. Bzw. nur so lange, dass ich dann doch lieber ein Kabel lege. :/

Bapt. Reverend Magersuppe

Zitat von: Fabeulous am 08 Juni 2015, 22:08:29
@Bapt. Reverend Magersuppe:
Danke für den Tipp. Werde ich bei geegenheit machen und auch hier posten. Momentan ist es bei mir zeitlich etwas eng zum basteln.

Hallo!
Ich experimentiere auch grad eifrig herum. Das mit dem LUA macht richtig Spaß! Leider stösst man da sehr schnell an die Speichergrenzen wenn man mehr als ein paar GPIOs an/aus zu schalten. Hoffe da tut sich in den nächsten Monaten noch was diesbezüglich von den Entwicklern.

Zusätzlich schaue ich mir gerade das Arduino-ESP-Paket an, das ist natürlich komplizierter. Aber mehr Freiheit im Speicher. Hat den Nachteil das man jedesmal kompilieren muss und dann im Flashmodus den ESP neu fleshen muss. Rapid-Protortyping geht flotter mit dem LUA.
--
If I was born in 1453, Leonardo da Vinci would be jealous of me.
Reverend Paul Egon Magersuppe
Aus versicherungstechnischen Gründen sind sämtliche Beiträge von mir rein spekulativer und theoretischer Natur und sollten nicht in die Tat umgesetzt werden!
Bin hier selten DRIN. AUS GRÜNDEN!

PeMue

Zitat von: Bapt. Reverend Magersuppe am 09 Juni 2015, 20:17:04
Das mit dem LUA macht richtig Spaß! Leider stösst man da sehr schnell an die Speichergrenzen wenn man mehr als ein paar GPIOs an/aus zu schalten ... Rapid-Protortyping geht flotter mit dem LUA.
Hallo Reverend,

bei mir ist es so, dass lua-Skripte, die am Tag vorher funktioniert haben, nicht mehr funktionieren bzw. nur teilweise. Wie ist Deine Erfahrung damit? Wie lädst Du die Skripte hoch? Mit dem Esplorer?
Ich denke, ich flashe die NodeMCU Firmware einfach noch mal drauf (quasi als Reset) und probiere es nochmal ...

Danke + Gruß

PeMue
RPi3Bv1.2 rpiaddon 1.66 6.0 1xHM-CC-RT-DN 1.4 1xHM-TC-IT-WM 1.1 2xHB-UW-Sen-THPL-O 0.15 1x-I 0.14OTAU  1xCUNO2 1.67 2xEM1000WZ 2xUniroll 1xASH2200 3xHMS100T(F) 1xRFXtrx 90 1xWT440H 3xTFA30.3150 5xFA21
RPi1Bv2 LCDCSM 1.63 5.8 2xMAX HKT 1xMAX RT V200KW1 Heizung Wasser

Bapt. Reverend Magersuppe

Zitat von: PeMue am 09 Juni 2015, 22:09:23
Hallo Reverend,

bei mir ist es so, dass lua-Skripte, die am Tag vorher funktioniert haben, nicht mehr funktionieren bzw. nur teilweise. Wie ist Deine Erfahrung damit? Wie lädst Du die Skripte hoch? Mit dem Esplorer?
PeMue

Hallo PeMue!
ich hatte testweise  mal ein Blinker-Skript mit einer LED und einem kleinen Relais laufen und gleichzeitig noch das ds18b20-Webskript.  Anfangs hing sich das auch mal auf. Ich habe dann einen fetten Elko als Stütze in die Stromversorgung gehängt. Die meisten Hänger scheinen an der Spannungstabilität zu liegen. Das müsste man mal checken. Als Versorgung nehme ich ein simples 5V-Netzteil und ein Breadboard-3.3V Adapter.
Da lief es dann tagelang problemlos bis mir gesagt wurde Mach das blöde Klicken mal aus :-)
--
If I was born in 1453, Leonardo da Vinci would be jealous of me.
Reverend Paul Egon Magersuppe
Aus versicherungstechnischen Gründen sind sämtliche Beiträge von mir rein spekulativer und theoretischer Natur und sollten nicht in die Tat umgesetzt werden!
Bin hier selten DRIN. AUS GRÜNDEN!

majorshark

Hallo Samsi.

Ich bin gerade dabei mich mit Deinem tollen Projekt auseinanderzusetzen. Bauelemente sind schon da.  :)

Im ersten Artikel schreibst Du:
ZitatUnd vergesst nicht nach dem flashen mit nodemcu erstmal die Wlan Verbindung einmalig einzurichten:

wifi.setmode(wifi.STATION)
wifi.sta.config ( "WIFI_SSID" , "PASSWORD" )

Wo genau muß ich muss ich das eintragen? Ich meine nicht die SSID und Passwd das ist klar sondern in welcher Software. ESPlorer oder wo?

Grüße aus Dewitz

VM auf Synology DS718+ mit FHEM 5.9 auf Debian 9.5/32-Bit (stretch)
Nächster Leipziger Stammtisch:

Samsi

Hi,

ja im Esplorer kann man Befehle direkt ausführen (einmalig). Damit setzt Du dauerhaft die WLAN Verbindung.
FHEM 5.5 / BBB Debian Wheezy

Homematic CFG-LAN

HM-Sec-MDIR / HM-Sec-SD / HM-Sec-WDS / HM-LC-Sw2-FM / HM-Sec-SC / HM-LC-Sw1PBU-FM / HM-SCI-3-FM / HM-Sec-Key / HM-RC-Key3-B / HM-LC-Dim1TPBU-FM /  HM-CC-RT-DN / HM-PBI-4-FM / HM-RC-Key4-2 / HM-ES-PMSw1-Pl / HM-LC-Sw4-WM

majorshark

Grüße aus Dewitz

VM auf Synology DS718+ mit FHEM 5.9 auf Debian 9.5/32-Bit (stretch)
Nächster Leipziger Stammtisch: