Labortagebuch - Arduino - Raspberry Pi
22.12.2025 - ESP32 - SD-Card - Data Logger - DS18B20
1. Temperatursensor DS18B20 - Ausgabe in Processing
2. Temperatursensor DS18B20 - Ausgabe in Python
3. Temperatursensor DS18B20 - Ausgabe in Python u. Tkinter
1. ESP32 - DS18B20 - Ausgabe mit Processing
Im vorliegenden zweiten Teil wird die Ausgabe des Temperaturwerts in anderen Formen durchgeführt. Als erstes soll der Temperaturwert in einem Textfeld in Processing ausgegeben werden. Dieses geschieht über die gemeinsame serielle Schnittstelle. Dazu muss der Wert des Temperatursensors DS18B20 seriell ausgegeben werden. Das bedeutet, dass der Arduino-Sketch hochgeladen und ausgeführt wird. Zu beachten ist, dass beim Hochladen der Temperatursensor noch nicht über den Plus- und Minuspol angeschlossen ist. Nach dem Hochladen muss der Sensors angeschlossen werden. An dieser Stelle kann man zur Kontrolle den seriellen Monitor aufrufen und die Ausgabe der Werte überprüfen. Dieser serielle Monitor muss aber geschlossen werden, sobald das Processing-Programm gestartet wird.

Die Verkabelung des Temperatursensors sieht man auf dem unteren Bild.
Wasserdichte Sonde
TO-92 Gehäuse
Die Verkabelung
Als erstes wird der Arduino-Sketch hochgeladen. Achtung: Vor dem Hochladen den Temperatursensor vom Mikrocontroller trennen.

Arduino-Sketch
#include < OneWire.h >
#include < DallasTemperature.h >
#define ONE_WIRE_BUS 2 // GPIO 2
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
void setup() {
Serial.begin(115200);
sensors.begin();}
void loop() {
sensors.requestTemperatures();
float tempC = sensors.getTempCByIndex(0);
Serial.println(tempC); // Sendet Werte an die Processing-IDE
delay(1000);}

Arduino-Sketch zur Ausgabe mit Processing
Als nächstes wird der Sketch für die Processing-IDE geladen und dann gestartet.
Processing-Sketch
import controlP5.*;
import processing.serial.*;
ControlP5 cp5;
Serial myPort;
PFont font1;
PFont font2;
float temperature = 0;
void setup(){
size(500, 200);
println(Serial.list());
// >>> Ändere den Index [0] ggf. auf den richtigen Port! <<<
myPort =new Serial(this, "/dev/ttyUSB0", 115200);
// Die Baudrate muss identisch mit der im Arduino-SKetch sein
myPort.bufferUntil('\n');
cp5 = new ControlP5(this);
font1 = createFont("Caladea-Regular-48", 20);
font2 = createFont("Caladea-Regular-48", 16);
// Dummy Slider zum Zeichnen der Bar
cp5.addSlider("temperature")
.setPosition(100, 100)
.setSize(200, 30)
.setRange(-10, 50) // je nach Erwartung
.setColorForeground(color(200, 100, 100))
.setColorBackground(color(100, 50, 50))
.setColorActive(color(255, 0, 0))
void draw(){
background(30);
fill(255);
textFont(font1);
//textSize(16);
textAlign(CENTER);
text("Temperatur: " + nf(temperature, 1, 2) + " °C", width / 2, 80);
}
void serialEvent(Serial myPort) {
String inString = myPort.readStringUntil('\n');
if (inString != null) {
inString = trim(inString);>br> try {
temperature = float(inString);
cp5.getController("temperature").setValue(temperature);
} catch (Exception e) {
println("Fehler beim Parsen: " + inString);
}
}
}

Der Processing-Sketch
Ausgabe mit Processing 4
2. Temperatursensor DS18B20 - Ausgabe in Python
Die Ausgabe der Temperaturwerte soll jetzt durch die Python-Programmierung erfolgen. Dieses geschieht genauso wie bei der Processing-IDE über die serielle Schnittstelle. Dazu muss als erstes wird der Arduino-Sketch (DS18B20_Processing_Arduino_Sketch.ino) hochgeladen werden. Achtung: Vor dem Hochladen den Temperatursensor vom Mikrocontroller trennen.

Arduino-Sketch
#include < OneWire.h >
#include < DallasTemperature.h >
#define ONE_WIRE_BUS 2 // GPIO 2
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
void setup() {
Serial.begin(115200);
sensors.begin();}
void loop() {
sensors.requestTemperatures();
float tempC = sensors.getTempCByIndex(0);
Serial.println(tempC); // Sendet Werte an die Processing-IDE
delay(1000);}

Arduino-Sketch zur Ausgabe mit Python
Dann wird die Python-IDE gestartet. Hier ist es die Thonny-IDE für Python. Das Python-Programm wird geladen und gestartet. Je nachdem ob das Betriebssystem Windows oder Linux ist, muss der Port entsprechend geändert werden.

Python Code

import serial
ser = serial.Serial(
port='/dev/ttyUSB0', # Windows: COM3 | Linux: /dev/ttyUSB0
baudrate=115200,
timeout=1 )
print("Empfange Daten vom ESP32...")
while True:
line = ser.readline().decode('utf-8').strip()
if line:
try:
temp = float(line)
print(f"Temperatur: {temp:.2f} °C")
except ValueError:
print("Fehlerhafte Daten:", line)

Python-Code
Ausgabe mit Python
3. Temperatursensor DS18B20 - Ausgabe in Python und tkinter
Die Ausgabe der Temperaturwerte soll jetzt in einem Textfeld mit tkinter erfolgen. Dazu wird als erstes wieder der obige Sketch der Arduino IDE hochgeladen und gestartet. Dann wird das Python-Programm geladen und gestartet
Python-Programm

import serial
import tkinter as tk
# Serielle Verbindung anpassen!
ser = serial.Serial(
port='/dev/ttyUSB0', # unter Linux z.B. /dev/ttyUSB0
baudrate=115200,
timeout=1
) def read_serial():
if ser.in_waiting:
line = ser.readline().decode('utf-8').strip()
text.insert(tk.END, f"Temperatur: {line} °C\n")
text.see(tk.END)
root.after(500, read_serial)
root = tk.Tk()
root.title("ESP32 DS18B20 Temperatur")
text = tk.Text(root, height=10, width=30)
text.pack(padx=10, pady=10)
read_serial()
root.mainloop()
Python-Code zur Ausgabe mit Python und tkinter
Ausgabe mit Python und tkinter