Projekt:SpaceLED: Unterschied zwischen den Versionen

Aus Schaffenburg
Zur Navigation springen Zur Suche springen
Keine Bearbeitungszusammenfassung
Zeile 1: Zeile 1:
= Übersicht =
= Übersicht =
Es wird beschrieben wie man mit einem NodeMCU-(Clone)-Board, WLAN, drei Widerständen und einer RGB-LED den Zustand des Space in sein Wohnzimmer holen kann. Sofern die Schaltung mit Strom und WLAN-Internetzugang versorgt wird ist sie aus, wenn der Space offen ist, oder rot, wenn ers nicht ist. Während des Update leuchtet sie blau.
Es wird beschrieben wie man mit einem auf dem ESP8266 "IoT Chip" basierenden NodeMCU-(Clone)-Board, WLAN, und etwas LED-Zauberei den Zustand des Space in sein Wohnzimmer holen kann. Es gibt zwei Varianten des Codes, eine für eine RGB-LED direkt an der GPIO des ESP-Moduls, eine andere verwendet eine LED mit eingebautem adressierbaren Treiber WS2812, welche die zuletzt gewählten Helligkeits- und Farbeinstellungen speichert und das etwas energiehungrigere ESP-Modul zwischen den Abfragen in den Sleepmodus versetzt wird.  


=== Ansprechpartner ===
=== Ansprechpartner ===
Zeile 14: Zeile 14:


===Funktionsweise Hardware===
===Funktionsweise Hardware===
Zwei Pins sind über Widerstände mit einer RGB-LED verbunden, wobei Port 0 die Rote versorgt, Port 4 die Blaue. Masse ist normal mit GND verbunden.
Mit RGB-LED:
 
Die GPIO Pins sind über 330 Ohm - Widerstände mit einer RGB-LED (common cathode) verbunden, wobei GPIO Port 0 (Nodemcu D3) die Rote versorgt, Port 4 (Nodemcu D2)die Blaue. LED-Kathode ist normal mit GND verbunden. Wer will kann noch die Grüne mit GPIO 5 (nodemcu D1) verbinden.
 
Mit WS2812 "intelligenter LED":
 
Die Versorgungsspannung erhält die (einzelne) WS2812 aus dem 3.3V Regler des ESP-Moduls, Port 15 (nodemcu D8)sendet die Daten zum DI-Eingang der LED. GND ist GND. Achtung, WS2812 nicht mit 5V versorgen, der IO des ESP8266 zuliebe! Selbst wenn es nicht zurückwirkt, bekäme der ESP wohl kaum den logischen HI-Pegel hin. GPIO16 (nodemcu D0) wird mit dem RST-Eingang verbunden, um das wiederaufwachen nach dem Ende des Sleepmode zu ermöglichen. Das Programm mit Sleepmode hat noch eine "grace period" von ca. 45s, in der das Modul vor dem Sleepmodus ansprechbar bleibt um z.B. Änderungen durchzuführen.


===Funktionsweise Software===
===Funktionsweise Software===
Das Programm ruft zeitgesteuert den Zustand von http://status.schaffenburg.org ab, schaut ob das erste Zeichen ein "v" für verriegelt ist. Wird der Space offen gemeldet, wird der Port an dem die rote LED hängt LO geschaltet, wird der Space verriegelt gemeldet, so wird der Pin high.  
Das Programm ruft zeitgesteuert den Zustand von http://status.schaffenburg.org ab, schaut ob das erste Zeichen ein "v" für verriegelt ist.  
 
Abhängig von der LED-Variante wird nun durch die LED-Farbe der Zustand des Space gemeldet:
 
* ROT: Tür verriegelt
* GRÜN: Tür offen
 
Dazu kommt zeitweise noch Weiß: Das sagt nichts über den Space. Es bedeutet: Abfrage läuft. Bei Sleepmode-Variante gibt es einen Blauschimmer während der grace period WLAN ansprechbar.


==Code==
==Code==
Der folgende Code ist mit ESP8266BASIC Version 2.0 Alpha 10 lauffähig. Voraussetzung ist das korrekte eintragen der Zugangsdaten als WLAN-Client und Freigabe für Internetzugriff. Ich habe dem Client nur Whitelistzugriff gegeben um ihn von anderen Websites fernzuhalten (damit er kein PR0N schaut) und hausintern einen DNS-Namen gegeben, um ihn nicht nur mit der IP-Adresse ansprechen zu können. Das Wiedernachschau-Intervall ist 5 Minuten, aber der Timer erschien mir bisher ein bischen flaky.
Der folgende Code ist mit ESP8266BASIC Version 2.0 Alpha 10 lauffähig. Voraussetzung ist das korrekte eintragen der Zugangsdaten als WLAN-Client und Freigabe für Internetzugriff. Ich habe dem Client nur Whitelistzugriff gegeben um ihn von anderen Websites fernzuhalten (damit er kein PR0N schaut) und hausintern einen DNS-Namen gegeben, um ihn nicht nur mit der IP-Adresse ansprechen zu können. Das Wiedernachschau-Intervall ist ~5 Minuten, aber der Timer erschien mir bisher ein bischen flaky.


Dieser Code ist für ein ESP8266 ohne WS2812.
Dieser Code ist für ein ESP8266 ohne WS2812.
Zeile 31: Zeile 44:


[service]
[service]
po 4 1
po 5 1
po 0 1
pcount=pcount+1
pcount=pcount+1
cls
cls
Status = left(wget("status.schaffenburg.org/"),1)
Status = left(wget("status.schaffenburg.org/"),1)
if Status == "v" then po 0 1 else po 0 0
if Status == "v" then po 0 1 else po 0 0
if Status == "v" then po 5 0 else po 5 1
if Status == "v" then wprint "Geschlossen" else wprint "Offen"
if Status == "v" then wprint "Geschlossen" else wprint "Offen"
if Status == "v" then tdown = tzu else tdown=toffen
if Status == "v" then tdown = tzu else tdown=toffen
print pcount
print pcount
po 4 0
timer tdown,[service]
timer tdown,[service]
wait
wait
</pre>
</pre>
Und der für ESP8266 mit Unterstützung durch WS2812l, ohne Stromsparmodus. Achtung: Bitte mit 3.3V betreiben den Pixel, der GPIO zuliebe!
<pre>
let pcount = 0
let toffen = 30000
let tzu = 30000
timer 100,[service]
wait
[service]
neo(0,25,25,25)
pcount=pcount+1
cls
Status = left(wget("status.schaffenburg.org/"),1)
if Status == "v" then neo(0,25,0,0) else neo(0,0,25,0)
if Status == "v" then wprint "Geschlossen" else wprint "Offen"
if Status == "v" then tdown = tzu else tdown=toffen
print pcount
timer tdown,[service]
wait
</pre>


Dieser Code verwendet den Sleepmode des ESP8266, die WS2812 LED leuchtet dann anhand der letzten Vorgabe weiter. Der Stromverbrauch incl. des integrierten Spannungsregler auf dem AMICA-Board ist ca. 100 mA wenn aktiv, ca. 20 mA im Sleepmode des ESP8266, wenn die LED weiter leuchtet.  
Dieser Code verwendet den Sleepmode des ESP8266, die WS2812 LED leuchtet dann anhand der letzten Vorgabe weiter. Der Stromverbrauch incl. des integrierten Spannungsregler auf dem AMICA-Board ist ca. 100 mA wenn aktiv, ca. 20 mA im Sleepmode des ESP8266, wenn die LED weiter leuchtet.  

Version vom 8. Mai 2016, 21:59 Uhr

Übersicht

Es wird beschrieben wie man mit einem auf dem ESP8266 "IoT Chip" basierenden NodeMCU-(Clone)-Board, WLAN, und etwas LED-Zauberei den Zustand des Space in sein Wohnzimmer holen kann. Es gibt zwei Varianten des Codes, eine für eine RGB-LED direkt an der GPIO des ESP-Moduls, eine andere verwendet eine LED mit eingebautem adressierbaren Treiber WS2812, welche die zuletzt gewählten Helligkeits- und Farbeinstellungen speichert und das etwas energiehungrigere ESP-Modul zwischen den Abfragen in den Sleepmodus versetzt wird.

Ansprechpartner

Hendrik

SpaceLED

Artikel in Arbeit

ESP8266BASIC

Mein NodeMCU habe ich der guten alten Zeit willen mit ESP8266BASIC beladen. Wie es geht, steht auf deren Website.

Funktionsweise Hardware

Mit RGB-LED:

Die GPIO Pins sind über 330 Ohm - Widerstände mit einer RGB-LED (common cathode) verbunden, wobei GPIO Port 0 (Nodemcu D3) die Rote versorgt, Port 4 (Nodemcu D2)die Blaue. LED-Kathode ist normal mit GND verbunden. Wer will kann noch die Grüne mit GPIO 5 (nodemcu D1) verbinden.

Mit WS2812 "intelligenter LED":

Die Versorgungsspannung erhält die (einzelne) WS2812 aus dem 3.3V Regler des ESP-Moduls, Port 15 (nodemcu D8)sendet die Daten zum DI-Eingang der LED. GND ist GND. Achtung, WS2812 nicht mit 5V versorgen, der IO des ESP8266 zuliebe! Selbst wenn es nicht zurückwirkt, bekäme der ESP wohl kaum den logischen HI-Pegel hin. GPIO16 (nodemcu D0) wird mit dem RST-Eingang verbunden, um das wiederaufwachen nach dem Ende des Sleepmode zu ermöglichen. Das Programm mit Sleepmode hat noch eine "grace period" von ca. 45s, in der das Modul vor dem Sleepmodus ansprechbar bleibt um z.B. Änderungen durchzuführen.

Funktionsweise Software

Das Programm ruft zeitgesteuert den Zustand von http://status.schaffenburg.org ab, schaut ob das erste Zeichen ein "v" für verriegelt ist.

Abhängig von der LED-Variante wird nun durch die LED-Farbe der Zustand des Space gemeldet:

  • ROT: Tür verriegelt
  • GRÜN: Tür offen

Dazu kommt zeitweise noch Weiß: Das sagt nichts über den Space. Es bedeutet: Abfrage läuft. Bei Sleepmode-Variante gibt es einen Blauschimmer während der grace period WLAN ansprechbar.

Code

Der folgende Code ist mit ESP8266BASIC Version 2.0 Alpha 10 lauffähig. Voraussetzung ist das korrekte eintragen der Zugangsdaten als WLAN-Client und Freigabe für Internetzugriff. Ich habe dem Client nur Whitelistzugriff gegeben um ihn von anderen Websites fernzuhalten (damit er kein PR0N schaut) und hausintern einen DNS-Namen gegeben, um ihn nicht nur mit der IP-Adresse ansprechen zu können. Das Wiedernachschau-Intervall ist ~5 Minuten, aber der Timer erschien mir bisher ein bischen flaky.

Dieser Code ist für ein ESP8266 ohne WS2812.

let pcount = 0
let toffen = 300000
let tzu = 300000
timer 100,[service]
wait

[service]
po 4 1
po 5 1
po 0 1
pcount=pcount+1
cls
Status = left(wget("status.schaffenburg.org/"),1)
if Status == "v" then po 0 1 else po 0 0
if Status == "v" then po 5 0 else po 5 1
if Status == "v" then wprint "Geschlossen" else wprint "Offen"
if Status == "v" then tdown = tzu else tdown=toffen
print pcount
po 4 0
timer tdown,[service]
wait

Dieser Code verwendet den Sleepmode des ESP8266, die WS2812 LED leuchtet dann anhand der letzten Vorgabe weiter. Der Stromverbrauch incl. des integrierten Spannungsregler auf dem AMICA-Board ist ca. 100 mA wenn aktiv, ca. 20 mA im Sleepmode des ESP8266, wenn die LED weiter leuchtet.

let pcount = 0
let toffen = 240
let tzu = 240
timer 100,[service]
wait

[service]
neo(0,25,25,25)
pcount=pcount+1
cls
Status = left(wget("status.schaffenburg.org/"),1)
if Status == "v" then neo(0,25,0,10) else neo(0,0,25,10)
if Status == "v" then wprint "Geschlossen" else wprint "Offen"
print pcount
timer 45000,[disc]
wait

[disc]
if Status == "v" then tdown = tzu else tdown=toffen
if Status == "v" then neo(0,25,0,0) else neo(0,0,25,0)
sleep tdown
wait

Lesestoff

Projekttagebuch:

  • 25.04.2016: Projektseite angefangen. Mangels Steckkontakten ist der grüne Die noch nicht angeschlossen und wird auch nicht angesteuert.
  • 30.04.2016 : Code buggy
  • 01.05.2016 : Code wieder ganz, Wifi-Down funktioniert. Geht immer nur ein Timer. Stromersparnis ist eher flach, Netzteil meint statt ~114 mA eher 104 mA anzuliefern (schwankend.) Next step: Schauen ob es GPIOs gibt die im Sleepmode Zustand halten, wenn nicht: WS2812 "Programmierbare LED" oder dergleichen, die während des ESP8266-Sleepmode weiter das letzte Kommando ausführt.
  • 02.05.2016: WS2812-Band geordert!
  • 04.05.2016: Code aufgeräumt, überflüssige Stromersparnis beseitigt.