In diesem Beitrag zeige ich dir, wie du die Werte von einem Bodenfeuchtesensor auf einem OLED Display vom Typ SSD1306 mit einem Arduino UNO anzeigen lassen kannst.
Den kapazitiven Bodenfeuchtesensor habe ich dir bereits im Beitrag Arduino Lektion 28: Bodenfeuchtesensor vorgestellt. In diesem Beitrag soll es darum gehen, wie die Daten auf dem Display angezeigt werden können.
Die Idee zu diesem Beitrag kommt von einem Leser meines Blogs, welcher dieses kleine Projekt verwirklicht und etwas Hilfe bei der Umsetzung benötigt.
Benötigte Ressourcen für dieses Projekt
Für dieses Projekt benötigst du:
- einen Arduino UNO R3,
- ein USB Datenkabel,
- zwei (oder mehr) kapazitive Bodenfeuchte Sensoren,
- ein 0,96″ OLED Display mit I²C Schnittstelle,
- diverse Breadboardkabel,
- ein 400 Pin Breadboard
Da wir ein OLED Display mit I2C Schnittstelle gewählt haben, können wir für dieses Projekt maximal 3 analoge Bodenfeuchtesensoren einsetzen.
Warum ein kapazitiver Bodenfeuchtesensor?
Es gibt auf ebay.de , aliexpress.com etc. diverse günstige Bodenfeuchtesensoren welche eine sehr großen Nachteil haben. Diese günstigen / billigen Sensoren lösen sich mit der Zeit auf und geben sogar ihre Bestandteile an die umliegenden Gewächse ab.



Auf dem ersten Bild sind die günstigen Sensoren abgebildet, beim rechten Modell kann man sogar schon sehen, dass dieser sich etwas auflöst. In der Mitte ist der kapazitive Bodenfeuchtesensor abgebildet und rechts ein weiteres Model, welches mit stabilen Metallstäben daher kommt. Alles Modellen ist jedoch gleich, dass diese jeweils die Daten analog liefern bzw. die Daten über einen analogen Pin gelesen werden.
Aufbau der Schaltung
Der Aufbau der Schaltung ist am Breadboard recht einfach man benötigt lediglich 12 Breadboardkabel. Wobei ich rote / orange Kabel für die Pluspole und schwarze bzw. weiße Kabel für den Minuspol verwende.
Sensor / Aktor | Arduino UNO R3 |
---|---|
Bodenfeuchtesensor 1 | |
A0 | analoger Pin A0 |
D0 | – bleibt frei – |
VCC | 5 V |
GND | GND |
Bodenfeuchtesensor 2 | |
A0 | analoger Pin A1 |
D0 | – bleibt frei – |
VCC | 5 V |
GND | GND |
OLED Display | |
SCL | analoger Pin A5 |
SDA | analoger Pin A4 |
VCC | 3.3 V |
GND | GND |
Für einen Test verwende ich zusätzlich zwei kleine Blumentöpfe mit feuchter Erde.

Für den Aufbau verwende ich den Keyestudio UNO R3 welcher dem Arduino UNO R3 etwas ähnlich ist, jedoch hat dieser zusätzlichen Stiftleisten auf dem Board.
Programmieren in der Arduino IDE
Installieren der benötigen Bibliothek für das OLED Display
Für die Programmierung des Displays benötigen wir zusätzlich eine Bibliothek. Diese Bibliothek installieren wir über den Bibliotheksverwalter der Arduino IDE welchen wir über das Menü „Sketch“ > „Bibliothek einbinden“ > „Bibliotheken verwalten…“
Zunächst suchen wir mit dem Schlagwort „ssd“ und wählen dann in dem Eintrag „Adafruit SSD1306“ die Schaltfläche „Installieren“. Ggf. wird man während der Installation aufgefordert zusätzliche, benötigte Bibliotheken zu installieren, welches wir bestätigen.

Im Abschluss der Installation müssen wir nur noch die Schaltfläche „Schließen“ betätigen und können danach mit der eigentlichen Programmierung beginnen.
Erstellen des Sketches / Programmes
Das benötigte Programm erstellen wir in 3 Schritten.
- im ersten Schritt lesen wir die Sensoren aus,
- im zweiten Schritt zeigen wir die Daten auf dem OLED Display an,
- im dritten Schritt möchte ich die Daten auf dem Display visualisieren
Schritt 1 – auslesen der Sensoren
#define sensor1 A0 #define sensor2 A1 void setup() { Serial.begin(9600); } void loop() { int sensorValue1 = analogRead(sensor1); int sensorValue2 = analogRead(sensor2); Serial.print("Bodenfeuchtesensor 1:"); Serial.println(sensorValue1); Serial.print("Bodenfeuchtesensor 2:"); Serial.println(sensorValue2); delay(1500); }
Zunächst geben wir die Sensordaten auf der seriellen Schnittstelle aus.

Schritt 2 – anzeigen der Daten auf dem OLED Display
#include <SPI.h> #include <Wire.h> #include <Adafruit_GFX.h> #include <Adafruit_SSD1306.h> #define SCREEN_WIDTH 128 #define SCREEN_HEIGHT 64 #define OLED_RESET 4 #define SCREEN_ADDRESS 0x3C Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET); #define sensor1 A0 #define sensor2 A1 void setup() { Serial.begin(9600); if(!display.begin(SSD1306_SWITCHCAPVCC, SCREEN_ADDRESS)) { Serial.println("Fehler, Display wurde nicht erkannt!"); } display.clearDisplay(); } void loop() { int sensorValue1 = analogRead(sensor1); int sensorValue2 = analogRead(sensor2); Serial.print("Bodenfeuchtesensor 1:"); Serial.println(sensorValue1); Serial.print("Bodenfeuchtesensor 2:"); Serial.println(sensorValue2); showText("Bodenfeuchtesensor", 10, 0); showSensorValue("Sensor 1:", sensorValue1, 15); showSensorValue("Sensor 2:", sensorValue2, 25); display.display(); delay(1500); display.clearDisplay(); } void showSensorValue(String desc, int value, int row){ showText(desc, 0, row); showText(String(value, DEC), 65, row); } void showText(String value, int col, int row){ display.setTextSize(1); display.setTextColor(SSD1306_WHITE); display.setCursor(col, row); display.println(value); }
Es werden nun die Sensordaten auf dem OLED Display angezeigt.
Schritt 3 – visualisieren der Daten
Im nun dritten und letzten Schritt wollen wir die Sensordaten auf dem Display visualisieren.
Dazu teilen wir den maximalen Wert von 1023 in sechs Blöcke auf und für jeden Block wird ein voller Kreis gezeichnet.

#include <SPI.h> #include <Wire.h> #include <Adafruit_GFX.h> #include <Adafruit_SSD1306.h> #define SCREEN_WIDTH 128 #define SCREEN_HEIGHT 64 #define OLED_RESET 4 #define SCREEN_ADDRESS 0x3C Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET); #define sensor1 A0 #define sensor2 A1 const int CIRCLES = 6; void setup() { Serial.begin(9600); if (!display.begin(SSD1306_SWITCHCAPVCC, SCREEN_ADDRESS)) { Serial.println("Fehler, Display nicht gefunden!"); } display.clearDisplay(); } void loop() { int sensorValue1 = analogRead(sensor1); int sensorValue2 = analogRead(sensor2); Serial.print("Sensor 1:"); Serial.println(sensorValue1); Serial.print("Sensor 2:"); Serial.println(sensorValue2); display.drawRect(2, 2, display.width() - 2, display.height() - 2, SSD1306_WHITE); display.drawLine(2, 14, display.width() - 2, 14, SSD1306_WHITE); showText("Bodenfeuchtesensor", 13, 5); showSensorValue("1:", sensorValue1, 27); showSensorValue("2:", sensorValue2, 43); display.display(); delay(1500); display.clearDisplay(); } void showSensorValue(String desc, int value, int row) { showText(desc, 8, row); showText(String(value, DEC), 20, row); drawCircles(row+3); drawFillCircles(row+3, value); } void showText(String value, int col, int row) { display.setTextSize(1); display.setTextColor(SSD1306_WHITE); display.setCursor(col, row); display.println(value); } void drawCircles(int row) { int col = 60; for (int i = 1; i <= CIRCLES; i++) { display.drawCircle(col, row, 5, SSD1306_WHITE); col = col + 10; } } void drawFillCircles(int row, int value) { int mapValue = map(value, 0, 1023, 1, CIRCLES); int col = 60; Serial.println(mapValue); for (int i = 1; i <= mapValue; i++) { display.fillCircle(col, row, 2, SSD1306_WHITE); col = col + 10; } }
Download
Hier nun der fertige Sketch zum bequemen download.
Hallo Stefan,
sehr gut und verständlich erklärte Vorgehensweise. Das Ergebnis der Visualisierung ist ebenfalls sehr ansprechend. Du zeigst wiedermal wie vielfältig das ganze Thema ist und was alles realisierbar ist.
Mach weiter so.
Gruß Klaus
Hallo Klaus,
vielen Dank für dein positives Feedback.
Gruß
Stefan Draeger