Forum: Projekte & Code SmartLEDLamp/Mood Light (IKEA Vidja-Korpus + WS2801 Stripes + ESP8266)


von ghmartin77 (Gast)


Angehängte Dateien:

Lesenswert?

Hallo zusammen,

wer Interesse an einer smarten LED-Lampe hat, findet hier Code und 
Hobbybastler-kompatible Bauanleitung. Funktioniert vom Prinzip natürlich 
auch mit anderen Lampen(formen):
https://github.com/ghmartin77/SmartLEDLamp

Features:
- Einfarbig im vollen RGB-Farbraum (8 Bit/Kanal, allerdings 
eingeschränkt auf die Leuchtfähigkeiten der verwendeten Stripes, die 
sicher nicht volle 8 Bit Differenzierung hergeben)
- Diverse, konfigurierbare Farbanimationen: Feuer, Lava-Lampe, Blobs, 
Regenbogen... (VU Meter vorbereitet aber im Code auskommentiert)
- Steuerbar per IR-Fernbedienung oder Weboberfläche (läuft im ESP)
- Durch simple Web-API auch einfach in Home Automation Tools wie OpenHAB 
integrierbar.

Viele Grüße
ghmartin77

von Jan L. (ranzcopter)


Lesenswert?

kompiliert leider noch immer nicht:
1
LEDLamp:44: error: 'IRrecv' does not name a type
2
3
 IRrecv irrecv(PIN_RECV_IR);

ohne diesen "Fix":
1
#include <IRrecv.h>

das hier kann man dann weglassen, da dann automatisch gezogen:
//#include <IRremoteESP8266.h>

womit baust du das ganze? In der Doku steht ja nur "compile & upload"... 
:)

Die Arduino-IDE jedenfalls will das so wie oben haben; kann mir aber 
kaum vorstellen, dass andere IDEs das irgendwie automagisch hinbekommen.

von ghmartin77 (Gast)


Lesenswert?

Baue mit Eclipse und ArduinoCDT-Plugin.

Für die ArduinoIDE sollte kompilieren aber auch gehen, wenn man 
LEDLamp.cpp in SmartLEDLamp.ino (oder wie auch immer passend zum 
enthaltenen Ordner) umbenennt.

Dein Compile-Fehler liegt an der "falschen" Lib; s. Doku:
IRemoteESP8266 - https://github.com/sebastienwarin/IRremoteESP8266

Hatte bei meiner ersten Antwort (im anderen Thread) leider etwas zu fix 
auf die markszabo-Variante geschossen. Hatte seinerzeit aber die oben 
und in der Doku genannte Variante genommen (mittlerweile hat die andere 
aber für die ESP8266-Unterstützung nachgezogen, so dass man drauf 
portieren könnte).

Grüße
ghmartin77

von Jan L. (ranzcopter)


Angehängte Dateien:

Lesenswert?

ghmartin77 schrieb:
>
> Dein Compile-Fehler liegt an der "falschen" Lib; s. Doku:
> IRemoteESP8266 - https://github.com/sebastienwarin/IRremoteESP8266

s. Screenshot ;-)

Und das dürfte auch die "gepflegte" Version sein...

>
> Hatte bei meiner ersten Antwort (im anderen Thread) leider etwas zu fix
> auf die markszabo-Variante geschossen. Hatte seinerzeit aber die oben
> und in der Doku genannte Variante genommen (mittlerweile hat die andere
> aber für die ESP8266-Unterstützung nachgezogen, so dass man drauf
> portieren könnte).
>
> Grüße
> ghmartin77

von ghmartin77 (Gast)


Lesenswert?

Jan L. schrieb:
> s. Screenshot ;-)
>
> Und das dürfte auch die "gepflegte" Version sein...

Jepp, Recht hast Du...

Und den Fork, den ich von sebastienwarin genommen habe, scheint (heute) 
steinalt zu sein: Gemäß Github "277 commits behind markszabo:master" :)

Die kompiliert allerdings problemlos mit dem Code wie im Repository 
(i.e. mit IRemoteESP8266.h-Include, aber ohne IRrecv.h-Include)
Vielleicht ist die von Dir beschriebene Änderung alles, was man tun 
muss, um auf die frische markszabo-Lib zu migrieren. Wenn Du bestätigen 
kannst, dass das läuft (nicht nur kompiliert), aktualisiere ich gern 
Code und Doku.

Grüße
ghmartin77

von Jan L. (ranzcopter)


Lesenswert?

ghmartin77 schrieb:
> Jan L. schrieb:
>> s. Screenshot ;-)
>>
>> Und das dürfte auch die "gepflegte" Version sein...
>
> Jepp, Recht hast Du...
>
> Und den Fork, den ich von sebastienwarin genommen habe, scheint (heute)
> steinalt zu sein: Gemäß Github "277 commits behind markszabo:master" :)
>
> Die kompiliert allerdings problemlos mit dem Code wie im Repository
> (i.e. mit IRemoteESP8266.h-Include, aber ohne IRrecv.h-Include)
> Vielleicht ist die von Dir beschriebene Änderung alles, was man tun
> muss, um auf die frische markszabo-Lib zu migrieren. Wenn Du bestätigen
> kannst, dass das läuft (nicht nur kompiliert), aktualisiere ich gern

Habe leider keinen WS2801 zur Hand, da läuft also derzeit noch nix...
Und auf LPD8806 umstellen scheint für mich eine Nummer zu gross zu sein, 
da du neben der FastLED Lib ja auch noch die von Adafruit einsetzt, und 
zwar deren netten Matrix-Modus. Den gibt‘s sonst wohl eher selten.
Da muss ich wohl mal einen 2801 bestellen.


> Code und Doku.
>
> Grüße
> ghmartin77

von ghmartin77 (Gast)


Angehängte Dateien:

Lesenswert?

Jan L. schrieb:
> Und auf LPD8806 umstellen scheint für mich eine Nummer zu gross zu sein

Ist doch nur Code... No Respect :) Probier einfach mal rum... Patch 
anbei könnte tun... (Rotation-Feature der LEDMatrix-Klasse ist 
allerdings kaputtgeschrieben und vermutlich musst du den Code passend zu 
deiner Stripe-Montage justieren, aber das sieht überschaubar aus).

Good Luck!

Grüße
ghmartin77

von Jan L. (ranzcopter)


Lesenswert?

cool, danke! Kompiliert auf Anhieb, werde jetzt mal was zusammenstöpseln 
und ausprobieren...

von Jan L. (ranzcopter)


Lesenswert?

Kurze Rückmeldung: Funktioniert ‚im Prinzip‘ (mit LPD8806)!

- musste Fastled von RGB auf GRB umstellen, dann liessen sich die 
richtigen Farben auf der virtuellen Remote einstellen

- in config.html reagiert blau bei der Kalibrierung irgendwie gar nicht, 
bleibt dunkel

- bei einigen Effekten ist mir unklar, ob das so richtig ist, oder bei 
der Ansteuerung am Stripe noch bissel entstört werden müsste :). In der 
Doku werden ja ‚resistors and caps‘ erwähnt, leider nicht, wofür genau 
die sich empfehlen würden. Das Bild der Rückseite der Platine hilft 
leider nicht wirklich...
(allerdings ist der Stripe bri mir noch am Stück, daher werden einige 
Effekte eh‘ noch nicht richtig erkennbar sein)

Habe bislang einfach nur Data und Clock per Pullup auf 5V gelegt, das 
scheint soweit zu tun...

von ghmartin77 (Gast)


Lesenswert?

Cool, freut mich :)

Zur Beschaltung guck doch mal hier: 
https://github.com/ghmartin77/SmartLEDLamp/tree/master/PCB
Caps und Resistors hab ich nur zur Spannungsstabilisierung respektive 
Anschluss des IR-Sensors genutzt. Die Stripes hängen über einen 
Level-Shifter direkt an den Pins des ESPs (allerdings WS2801). Sollte 
für die LPDs genauso gehen. Je nachdem, wieviel Widerstand Du beim 
Verlöten der LED-Streifen (an Clock und Data) "einbaust", kannst Du das 
ganze auch ohne Levelshifter ohne Probleme betreiben. Data und Clock auf 
High zu ziehen hab ich in noch keinem Verschaltungsplan gesehen. Sicher, 
dass das so soll?

Ob die Darstellung der Effekte richtig ist, wäre noch rauszufummeln...
Wenn Du allerdings die "Reinfarben" Rot, Grün, Blau sauber dargestellt 
bekommst, dann ist der Rest (sollte da noch was verschoben sein/auf dem 
Kopf stehen) nur noch ein bissel Mathe in LEDMatrix::update().
Apropos Mathe: Der Code ist auf 4 Streifen a 40 LEDs ausgelegt (i.e. 
eine 5m Rolle mit 160 LEDs geht genau auf). Ist das für Deine LPDs die 
gleiche Menge?

Thema Kallibrierung: Hab gerade mal durch den Code gestöbert. Warum Blau 
nicht funktionieren sollte, erschließt sich mir noch nicht. Guck ich mir 
später mal an...

Grüße
ghmartin77

von Jan L. (ranzcopter)


Lesenswert?

ghmartin77 schrieb:
> Cool, freut mich :)
>
> Zur Beschaltung guck doch mal hier:
> https://github.com/ghmartin77/SmartLEDLamp/tree/master/PCB

ah, hatte ich übersehen, danke...
(wobei der "Schaltplan" wohl mit Vorsicht zu geniessen ist - zumindest 
der IR-Anschluss sieht bissel buggy aus...;-)

> Caps und Resistors hab ich nur zur Spannungsstabilisierung respektive
> Anschluss des IR-Sensors genutzt. Die Stripes hängen über einen
> Level-Shifter direkt an den Pins des ESPs (allerdings WS2801). Sollte
> für die LPDs genauso gehen. Je nachdem, wieviel Widerstand Du beim
> Verlöten der LED-Streifen (an Clock und Data) "einbaust", kannst Du das

Der LPD klappt wohl auch "regulär" mit 3.3V

> ganze auch ohne Levelshifter ohne Probleme betreiben. Data und Clock auf
> High zu ziehen hab ich in noch keinem Verschaltungsplan gesehen. Sicher,
> dass das so soll?

Nee, das hat nix gebracht - ist wieder weg.

>
> Ob die Darstellung der Effekte richtig ist, wäre noch rauszufummeln...
> Wenn Du allerdings die "Reinfarben" Rot, Grün, Blau sauber dargestellt
> bekommst, dann ist der Rest (sollte da noch was verschoben sein/auf dem
> Kopf stehen) nur noch ein bissel Mathe in LEDMatrix::update().
> Apropos Mathe: Der Code ist auf 4 Streifen a 40 LEDs ausgelegt (i.e.
> eine 5m Rolle mit 160 LEDs geht genau auf). Ist das für Deine LPDs die
> gleiche Menge?

Ja, hatte mich zwar erst verzählt (und einen neuen #define LED_NUM 
eingeführt), letztlich sind's aber auch zufällig 160 LEDS.

>
> Thema Kallibrierung: Hab gerade mal durch den Code gestöbert. Warum Blau
> nicht funktionieren sollte, erschließt sich mir noch nicht. Guck ich mir
> später mal an...

Bin nicht sicher, ob das so gewollt ist, aber offenbar muss man vor 
dem Aufruf der config.html (zum Kalibieren) erstmal in der control.html 
auf "weiss" stellen. Ich hatte wohl zuerst irgendwas anderes aktiv, und 
dachte, die config.html stellt beim Kalibrieren automatisch was 
Sinnvolles ein. Ist wohl nicht so, daher fehlte zufällig dann blau.
Mit "weiss" vorher eingestellt, klappt das nun.

Jan

>
> Grüße
> ghmartin77

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.