NodeMCU mit DHT11 und OLED-Display

Am Wochenende haben mein großer Sohn und ich wieder ein wenig mit den „Minicomputern“, wie er sie nennt, gebastelt. Wir haben schon seit längerem ein OLED-Display mit 1,3 Zoll Größe, allerdings noch nichts damit gebaut. Aus diesem Grund haben wir uns hingesetzt und etwas auf die Beine gestellt.

Grundlage bildet ein NodeMCU v3 Board, mit ESP-12 Chip und WLAN-Funktionalität. An dieses haben wir das Display angeschlossen, sodass wir ein paar Angaben darauf ausgeben können. Im ersten Schritt mussten wir erst einmal herausfinden, wie wir das Display korrekt ansteuern. Verkauft wurde es ursprünglich mit dem Hinweis, dass des sich bei dem verbauten Controller um einen SD1306 handelt. Dem ist leider nicht so. Daher sind wir erstmal auf die Suche gegangen und um herauszufinden um welche Art Display es sich handelt. Nach kurzer Suche haben wir herausgefunden das es sich um ein SH1106 handelt und entsprechend haben wir ein paar Beispiele zu diesem gesucht.

Auf dieser Grundlagen haben wir mit dem Display experimentiert und ein paar Ausgaben auf dem Display gemacht und geschaut wie wir am besten vorgehen.

Der theoretische Aufbau in Fritzing

Nachdem wir das erledigt haben, wollten wir natürlich auch einen praktischen nutzen haben. So haben wir im ersten Schritt ein Modul für die Bodenfeuchte angeschlossen. So wäre es aber viel zu einfach und wir haben direkt noch ein DHT11-Sensor zur Ausgabe der Temperatur und Luftfeuchtigkeit angebaut. Jetzt haben wir genug Informationen um sie auf dem Display auszugeben. Den Aufbau in Fritzing sehr ihr im nachfolgenden Bild.

Nach anfänglichen Schwierigkeiten mit der Ausgabe auf dem Display ist uns ein ganz gutes Ergebnis gelungen. In den ersten Versuchen wurde direkt auf das Display geschrieben und einzelne Zeilen neu hinzugefügt, was allerdings dazu führte dass die Ausgabe flackerte. Ein wenig Recherche und ein Blick in die Bibliothek hat gezeigt, dass wir erst einmal den Aufbau gestalten und dann als ganzen in den Buffer des Displays schreiben.

Programmcode

Das Programm zu unserem Aufbau sieht so aus:

#include <oled.h>
#include <DHT.h>

#define DHTPIN D7
#define DHTTYPE DHT11

DHT dht(DHTPIN, DHTTYPE);

OLED Display=OLED(4,5,16,0x3C,128,64,true);

const int sensor = A0;
unsigned long currentMillis, lastMillis, lastMessure, lastDHT;
unsigned long startMillis;
int messwert = 0;
float luft, temp;

void setup() {
  Display.begin(); // Instead of Serial.begin(9600)
  dht.begin();
  startMillis = millis();
}

void loop() {
  Display.clear();
  currentMillis = millis();

  if (((currentMillis - lastMessure) >= 900000) || messwert == 0) {
    messwert = analogRead(sensor);
    lastMessure = millis();
  }

  if (((currentMillis - lastDHT) >= 5000) || lastDHT == 0) {
    temp = dht.readTemperature();
    luft = dht.readHumidity();
    lastDHT = millis();
  }
  Display.printf(4,10,"Temperatur: %.1f °C", temp);
  Display.printf(4,20,"Luftfeuchte: %.1f %%", luft);
  
  if ((currentMillis - lastMillis) >= 1000) {
    long seconds = currentMillis / 1000;
    if (seconds < 60) {
      Display.printf(4,30,"Uptime: %i s", seconds);
    } else {
      int minutes = seconds / 60;
      seconds = seconds - (minutes*60);
      Display.printf(4,30, "Uptime: %i min %i s", minutes, seconds);
    }
  }
  
  Display.printf(4,0,"Bodenfeuchte: %i", messwert);
  Display.display();
}

Wir wollten gerne ein wenig Bewegung unserem Display haben. Aus diesem Grund habe wir einen Timer programmiert der anzeigt wie lange der Mikrocontroller schon läuft. Das ist ein nettes Gimmick und hat Spaß gemacht.

Das Endergebnis

Unser Aufbau soll nicht nur in der Kiste verstauben. Aus diesem Grund haben wir uns eine Powerbank gesucht und an das NodeMCU angebaut und den Bodenfeuchtesensor in unsere Tomatenpflanzen gesteckt. So können wir gut abschätzen wann wir mal wieder gießen müssen. Im Sommer möchten wir gerne frische Tomaten von unserem Balkon essen. Das ist auch der Grund warum wir eine Bewässerungsanlage bauen wollen. Wir kennen uns zu gut und vergessen regelmäßig das Gießen.

Zum Abschluss noch ein paar Bilder:

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.