Projekt 1 – Weihnachten bis zum Äußersten

Der Dezember ist da und zur vorweihnachtlichen Stimmung gehört natürlich ein festlich illuminierter Garten. Nun sind die Geschmäcker bekanntlich verschieden und so mag der eine eher eine besinnliche Variante, der andere möchte bei Farbwahl und Helligkeit eher Richtung „Weihnachtsmarkt-Disko“ tendieren. Die Beleuchtung sollte also variabel ansteuerbar sein und das am besten direkt vom Smartphone.

Individuelles Licht -> NeoPixel

Ein kleiner kostengünstiger Webserver? Ein Fall für den ESP32!

Idee und Komponenten

Das System besteht aus einer Lichterkette und einer Steuereinheit. Die Helligkeit und Farbe jedes einzelnen LED-Elements ist individuell programmatisch ansteuerbar, um sowohl kontinuierliche Beleuchtung in dunklem, warmen Licht, als auch knallige Leuchteffekte zu ermöglichen. Hier bieten sich NeoPixel an, die es auf den einschlägigen Plattformen als meterlange Leuchtbänder auch in IP67 Ausführung für den Outdoorbetrieb für kleines Geld gibt.

Als Controller verwende ich einen ESP32, da dieser neben dem Steuerausgang von Haus aus auch WLAN mitbringt. Die ESP-DEV kit 4 Board gibt es für unter 10 Euro und sie bringen, wie wir später sehen werden, noch einen weiteren Vorteil gegenüber einer Lösung auf Arduino-Basis.

Realisierung der Hardware

Die Schaltung ist extrem simple. Der Aufbau ist nicht für die Ewigkeit bestimmt, insofern dient eine einfache Lochrasterplatine als Basis. Darauf werden zwei Buchsenleisten zur Aufnahme des ESP32 verlötet, die Verbindungen werden mit versilbertem Kupferdraht erstellt. Ich empfehle, den ESP32 nie direkt in Platinen zu verlöten. Der gesteckte Controller ist schnell getauscht. Entlöten eines defekten Microcontrollerboards mit 40 Pins ist nahezu unmöglich.

Realisierung der kleinen Schaltung auf einer Lochrasterplatine

Zu den NeoPixel LED-Streifen findet man reichlich Beschreibungen im Netz. Die NeoPixel sind für erste Programmierspielereien mit dem Arduino oder Raspberry sehr zu empfehlen, weil sofort witzige Resultate zu sehen sind. Jedes einzelne Neopixel-Element verfügt über einen kleinen Microkontroller, der drei LEDs (rot/grün/blau) ansteuert.

Hier mehr dazu: WS2812 „NeoPixel“

Detailaufnahme NeoPixel

Die tolle Idee dabei: Jedes Element hat neben den Vcc und GND Anschlüssen einen Ein- und einen Ausgang. Somit lassen sich diese Elemente auf sehr einfache Weise aneinander reihen und mit nur einem PIN des Microcontrollers ansteuern. Klasse für Leuchtbänder, aber auch für große, helle Displays. Im Falle dieser Weihnachtsbeleuchtung werden 500 NeoPixel angesteuert.

Im Video ein erster Test:

NeoPixel

Auf den Strom achten! Da der Controller und die Neopixel mit dem selben Netzteil betrieben werden, könnte der Controller abstürzen, sollte die Versorgungsspannung absinken. Werden alle Pixel gleichzeitig maximal angesteuert benötigt das System fast 8A. Passende Netzteile (in kostengünstig) gibt es ebenfalls bei den bekannten Quellen in Fernost. Um die ärgsten Stromspitzen abzufangen habe ich einen 1000µF Elko parallel an den Spannungsanschluss des LED-Streifens angeschlossen. Und das Oszi sprach: es war gut.

Das ESP32-DEV Board hat auch einen 5V-Eingang. Ein Spannungsregler auf dem Board erzeugt daraus die 3,3V für den Microcontroller. Obwohl die NeoPixel für 5V Steuersignale ausgelegt sind, funktioniert die Schaltung auch mit den 3,3V Signalen des ESP32. Um die NeoPixel insbesondere beim Einschalten zu schützen, wird oft ein Widerstand, z.B. 150 Ohm, zwischen GPIO und Eingang der ersten NeoPixel-LED geschaltet.

Kleines Extra: Temperatursensor

Wenn wir schon einen Microcontroller im Garten betreiben, kann er sich auch nützlich machen. Ich hatte noch Wetterfeste DS18B20 Temperatursensoren. Diese werden über nur einen Pin ausgelesen und akzeptieren sowohl 3,3 als auch 5V. Die Datenleitung wird über 4,7kOhm mit Vcc(Pullup) verbunden. Noch Vcc und GND verbunden und fertig ist die Zusatzfunktion. Der Temperatursensor ist frei zugänglich und kann z.B. auch zur Überprüfung der Glühweintemperatur genutzt werden.

D18B20 Temperatursensor

Da das Projekt mal eben, an einem Abend realisiert werden sollte (wurde nachher natürlich doch mehr), musste eine schnelle Gehäuselösung her, die zudem noch wasserdicht ist. Es gab an dem Abend niedersächsisches Hochzeitssuppe und das Glas lachte mich so an… In den Deckel wurde ein Loch gebohrt, die Kabel hindurchgeführt und anschließend alles mit der Heißklebepistole normgerecht wasserdicht verschlossen.

Suppenglas als Outdoorgehäuse

Software

Die Programmierung der NeoPixel gestaltet sich nach Ansicht der Adafruit Beipielprogramme sehr einfach. Für den „Weihnachts-Diskomodus“ wurde weite Teile des Beispielsketches übernommen.

#include <Adafruit_NeoPixel.h>
#define LED_PIN    25
#define LED_COUNT 500
Adafruit_NeoPixel strip(LED_COUNT, LED_PIN, NEO_GRB + NEO_KHZ800);

void setup() {
  strip.begin();           // Starten
  strip.show();            // Alle NeoPixel aus
  strip.setBrightness(255); //  Helligkeit, max = 255
}

Der Besinnlichkeitsmodus sieht folgendermaßen aus und zeigt gut die Programmierung der Pixel:

void besinnlichmode(){
  strip.clear(); // Alle Pixel aus
  for (int i=0;i<LED_COUNT;i++){
    strip.setPixelColor(i, strip.Color(5, 5, 0));  
    //das i.te NeoPixel ansteuert rot,grün, blau, je 0-255
  }
  strip.show();
}

Wie der DS18B20-Temperatursensor zu programmieren ist, erschießt sich ebenfalls sofort aus den verfügbaren Beispielsketches.

#include <OneWire.h>
#include <DallasTemperature.h>
#define ONE_WIRE_BUS 17
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);

void setup() {
 sensors.begin();}

void loop() {
  //Temperatursensor
  float tempc=0.0;
  sensors.requestTemperatures(); // Temperaturen anfordern
  tempc = sensors.getTempCByIndex(0);
  if(tempc != DEVICE_DISCONNECTED_C) 
  {
    Serial.print("Temperature for the device 1 (index 0) is: ");
    Serial.println(tempc);
  } 
  else
  {
    Serial.println("Fehler: keine Temperaturdaten");
  }
}

Jetzt wird es spannend: Aus dem ESP32 wird ein WEB-Server aufgesetzt, der Chip logt sich in das vorhandene WLAN ein. Auch dies ist mit kleiner Adaption der vorhandenen Beispielsketches schnell umzusetzen. Der Server stellt eine kleine Website mit Information bzgl. aktuellem Status (Modus=“Besinnlich“ oder Modus=“Krischan“) und der aktuellen Temperatur bereit. Darüber hinaus gibt es einen Button, um den Modus zu wechseln.

Webseite des ESP32

Hier der ganze Sketch zum Download:

https://github.com/KrischanForscht/Projekt1-Weihnachtshydrant

Nutzung beider Prozessorkerne

Das funktionierte zwar irgendwie, allerdings war die Bedienung sehr hakelig und immer im „Krischan-Modus“, war der Web-Server lange nicht zu erreichen. Nach einiger Überlegung war klar: Solange die Funktion „Disco“ durchlaufen wurde, gab es keine Abfragen, ob eine neue Anfrage an den Server vorliegt. Erster Lösungsansatz: die Funktion sehr häufig an vielen Stellen in der Funktion „Disco()“ aufrufen. Das hat das Problem aber eher noch verschlimmert. Zweite Lösungs-Idee „mit einer Interrupt Service Routine“ Arbeiten, die in bestimmen Zeitabständen aufgerufen wird (dies wäre meine Lösung auf dem Arduino gewesen). Dies könnte aber dazu führen, dass der Programmablauf bei Übertragungsproblemen länger unterbrochen wird und dann die gar festlichen Lauflichteffekte haken.

Der ESP32 hat ein ganz besonders Feature, dass ich bis dahin noch gar nicht genutzt hatte, er besitzt nämlich zwei Prozessorkerne, die unabhängig voneinander verschiedene Aufgaben ausführen können. Nach kurzer Internet-Recherche fand ich eine recht einfache Möglichkeit, die zwei Kerne auch mit der Arduino IDE einsetzen zu können: https://randomnerdtutorials.com/esp32-dual-core-arduino-ide/.

Und tatsächlich nun läuft die WLAN-Funktionalität auf Kern 2 sehr schön parallel zu der eigentlichen loop() auf Kern 1. Cool.

Erster Test, Neopixel LED-Bänder mit improvisiertem IP65+ Gehäuse auf Hochzeitssuppenglasbasis

Das fertige System

Ab in den Garten und den Hydranten geschmückt! Bei uns steht ein (ehemaliger) Überflurhydrant im Garten, er muss bereits als Stehtisch herhalten. Bitte keine „aktiven“ Hydranten dekorieren, es könnte sein, dass diese einmal schnell gebraucht werden.

Und voilaa:

Zurückhaltend im „Besinnlich-Mode“
Das fertige Projekt – frohe Weihnachten!
QuelleThema
https://techtutorialsx.com/2017/05/09/esp32-running-code-on-a-specific-core/Dual Core ESP32
Microcontroller ESP32, Udo Brandes, Rheinwerk 2020Webserver
http://www.netzmafia.de/skripten/hardware/Arduino/Onewire/index.htmlD18B20 Temperatursensor
https://learn.adafruit.com/adafruit-neopixel-uberguide/arduino-library-useNeoPixel
Linksammlung/Referenzen/Quellen

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.