|
|
||||
|
||||
|
|
||||
|
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. |
|
|||
![]() |
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);} |
|||
|
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); } } } | |||
![]() |
||||
|
|
||||
|
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);} |
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) |
|||
![]() |
||||
|
|
||||
|
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() |
![]() |
|||