Projekt:SpaceLED: Unterschied zwischen den Versionen
Dg3hda (Diskussion | Beiträge) Keine Bearbeitungszusammenfassung |
Dg3hda (Diskussion | Beiträge) Keine Bearbeitungszusammenfassung |
||
(15 dazwischenliegende Versionen von 4 Benutzern werden nicht angezeigt) | |||
Zeile 1: | Zeile 1: | ||
{{Infobox Projekt | |||
|name = SpaceLED | |||
|status = stable | |||
|beschreibung = Anzeige ob Space offen | |||
|autor = [[Benutzer:Dg3hda|Hendi]] | |||
|owner = Dg3hda | |||
|image = LeuchtiAKASpaceLED.jpg | |||
|imagesize =240 | |||
}} | |||
= Übersicht = | = Ü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. | 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. Ein C++ code für die Arduino IDE entsteht auch. | ||
== Ansprechpartner == | == Ansprechpartner == | ||
Hendrik | * Hendrik[[Datei:rindphi.jpg|50px|]]: Idee, Implementierung mit BASIC | ||
* Marcel: C++ Versionen | |||
''Artikel in Arbeit'' | ''Artikel in Arbeit'' | ||
==Hardware== | ==Hardware== | ||
Zeile 26: | Zeile 34: | ||
[[:File:SpaceLED V1.PNG]] | [[:File:SpaceLED V1.PNG]] | ||
== Implementierung mit ESP8266BASIC== | |||
Mein NodeMCU habe ich der guten alten Zeit willen mit [http://www.esp8266basic.com/ ESP8266BASIC] beladen. Wie es geht, steht auf deren Website. | |||
===Hinweise:=== | |||
* Bei neueren Versionen muss in Einstellungen ein Häkchen bei "default Skript automatisch starten" (oder so ähnlich) gesetzt werden (nach der sleep-phase startet der esp neu und macht daher ohne aktivierten autostart einfach nichts mehr) | |||
* Der Arduino (wie es auf der Basic-Website zu sehen) wird nur gebraucht wenn man einen nackten ESP flashen will. Wahrscheinlich hast du aber ein "Entwicklerboard", wie z.B. NodeMCU, das du per USB an deinen Rechner hängen kannst - diese kannst du direkt mit dem Programm von der Website flashen | |||
===Funktionsweise Software=== | ===Funktionsweise Software=== | ||
Zeile 38: | Zeile 53: | ||
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 und bedeutet WLAN ansprechbar. | 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 und bedeutet WLAN ansprechbar. | ||
==Code== | == Implementierung mit C++ == | ||
* Marcel hat inzwischen auch eine C++ Variante mit der Arduino IDE geschrieben. Den Sketch gibt's <u>[https://github.com/Schaffenburg/SpaceLED-ESP8266-cpp hier bei Github]</u> (Ist noch in der Beta, Code ist für ansteuerbare LED, normale RGB-LED und auch für einzelne LEDs geeignet, Stromsparmodi fehlen noch.) | |||
==Code BASIC== | |||
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. | ||
Zeile 73: | Zeile 91: | ||
Dieser Code verwendet den Sleepmode des ESP8266 sowie eine WS2812 LED, letztere leuchtet dann anhand der letzten Vorgabe weiter die das ESP8266 vor dem Einschlafen absendet... | Dieser Code verwendet den Sleepmode des ESP8266 sowie eine WS2812 LED, letztere leuchtet dann anhand der letzten Vorgabe weiter die das ESP8266 vor dem Einschlafen absendet... | ||
<pre> | <pre> | ||
let toffen = | let toffen = 300 | ||
let tzu = | let tzu = 300 | ||
timer | let boottime=30 | ||
let graceperiod=60 | |||
timer 200,[service] | |||
wait | wait | ||
[service] | [service] | ||
timer 0 | |||
neo(0,25,25,25) | neo(0,25,25,25) | ||
cls | cls | ||
Zeile 86: | Zeile 107: | ||
if Status == "v" then neo(0,25,0,10) | if Status == "v" then neo(0,25,0,10) | ||
if Status == "o" then neo(0,0,25,10) | if Status == "o" then neo(0,0,25,10) | ||
if Status == "v" then wprint "verriegelt" | if Status == "v" then wprint "Spacestatus verriegelt erkannt" | ||
if Status == "o" then wprint "offen" | if Status == "o" then wprint "Spacestatus offen erkannt" | ||
timer | timer graceperiod*1000,[disc] | ||
wait | wait | ||
Zeile 94: | Zeile 115: | ||
neo(0,0,0,0) | neo(0,0,0,0) | ||
if Status == "v" then tdown = tzu else tdown=toffen | if Status == "v" then tdown = tzu else tdown=toffen | ||
tdown=tdown-boottime | |||
tdown=tdown-graceperiod | |||
if Status == "v" then neo(0,25,0,0) | if Status == "v" then neo(0,25,0,0) | ||
if Status == "o" then neo(0,0,25,0) | if Status == "o" then neo(0,0,25,0) | ||
Zeile 99: | Zeile 122: | ||
wait | wait | ||
</pre> | </pre> | ||
=== | |||
==Lesestoff== | ==Lesestoff== |
Aktuelle Version vom 6. Januar 2019, 16:06 Uhr
SpaceLED
Status: stable | |
---|---|
Beschreibung | Anzeige ob Space offen |
Ansprechpartner | Hendi |
Ü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. Ein C++ code für die Arduino IDE entsteht auch.
Ansprechpartner
Artikel in Arbeit
Hardware
Variante V0 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.
Variante V1 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. 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. Das gilt bei Helligkeitseinstellung 25, also weniger als volle Helligkeit. 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.
Implementierung mit ESP8266BASIC
Mein NodeMCU habe ich der guten alten Zeit willen mit ESP8266BASIC beladen. Wie es geht, steht auf deren Website.
Hinweise:
- Bei neueren Versionen muss in Einstellungen ein Häkchen bei "default Skript automatisch starten" (oder so ähnlich) gesetzt werden (nach der sleep-phase startet der esp neu und macht daher ohne aktivierten autostart einfach nichts mehr)
- Der Arduino (wie es auf der Basic-Website zu sehen) wird nur gebraucht wenn man einen nackten ESP flashen will. Wahrscheinlich hast du aber ein "Entwicklerboard", wie z.B. NodeMCU, das du per USB an deinen Rechner hängen kannst - diese kannst du direkt mit dem Programm von der Website flashen
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
- AUS: Störung, z.B. Server nicht erreichbar
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 und bedeutet WLAN ansprechbar.
Implementierung mit C++
- Marcel hat inzwischen auch eine C++ Variante mit der Arduino IDE geschrieben. Den Sketch gibt's hier bei Github (Ist noch in der Beta, Code ist für ansteuerbare LED, normale RGB-LED und auch für einzelne LEDs geeignet, Stromsparmodi fehlen noch.)
Code BASIC
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 = "Gestoert" Status = left(wget("status.schaffenburg.org/"),1) po 4 1 if Status == "v" then po 0 1 if Status == "v" then po 5 0 if Status == "o" then po 0 0 if Status == "o" then po 5 1 if Status == "v" then wprint "verriegelt" if Status == "o" then 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 sowie eine WS2812 LED, letztere leuchtet dann anhand der letzten Vorgabe weiter die das ESP8266 vor dem Einschlafen absendet...
let toffen = 300 let tzu = 300 let boottime=30 let graceperiod=60 timer 200,[service] wait [service] timer 0 neo(0,25,25,25) cls Status="gestoert" Status = left(wget("status.schaffenburg.org/"),1) neo(0,0,0,25) if Status == "v" then neo(0,25,0,10) if Status == "o" then neo(0,0,25,10) if Status == "v" then wprint "Spacestatus verriegelt erkannt" if Status == "o" then wprint "Spacestatus offen erkannt" timer graceperiod*1000,[disc] wait [disc] neo(0,0,0,0) if Status == "v" then tdown = tzu else tdown=toffen tdown=tdown-boottime tdown=tdown-graceperiod if Status == "v" then neo(0,25,0,0) if Status == "o" then 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.
- 09.05.2016 Buggycode entfernt