ich möchte Temperatur und Lufftfeuchte gemessen über Arduino Mega und DHT11 über die Serielle Schnittstelle in Python einlesen und Plotten.
Hierzu hab ich auf youtube ein ganz gutes tutorial gefunden:
https://www.youtube.com/watch?v=zH0MGNJbenc
Allerdings arbeite ich in Python 3 über jupyter Notebook (ich hatte in der shell das modul "serial" nicht importiert bekommen).
Anscheinend scheint sich Python an dem split zu stören, wo ich die kommagetrennten Werte von Termeratur und Luftfeuchte aufspalten will, denn es kommt folgende Fehlermeldung:
Using matplotlib backend: Qt5Agg
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-30-5478ef3ba408> in <module>()
19 pass
20 arduinoString=arduinoData.readline()
---> 21 dataArray=arduinoString.split(',')
22 temp=float(dataArray[1])
23 P=float(dataArray[0])
TypeError: a bytes-like object is required, not 'str'
Hier der Code auf dem Arduino-Mega:
Code: Alles auswählen
#include "DHT.h" //DHT Bibliothek laden
#define DHTPIN 2 //Der Sensor wird an PIN 2 angeschlossen
#define DHTTYPE DHT11 // Es handelt sich um den DHT11 Sensor
DHT dht(DHTPIN, DHTTYPE); //Der Sensor wird ab jetzt mit „dth“ angesprochen
void setup() {
Serial.begin(9600); //Serielle Verbindung starten
dht.begin(); //DHT11 Sensor starten
}
void loop() {
delay(2000); //Zwei Sekunden Vorlaufzeit bis zur Messung (der Sensor ist etwas träge)
float humidity = dht.readHumidity(); //die Luftfeuchtigkeit auslesen und unter „Luftfeutchtigkeit“ speichern
float TempC = dht.readTemperature();//die Temperatur auslesen und unter „Temperatur“ speichern
//Serial.print("Luftfeuchtigkeit: "); //Im seriellen Monitor den Text und
Serial.print(TempC); //die Dazugehörigen Werte anzeigen für Luftfeuchtigkeit
//Serial.println(" %");
//Serial.print("Temperatur: ");
Serial.print(" , ");
Serial.println(humidity);
//Serial.println(" Grad Celsius");
Code: Alles auswählen
import serial
import numpy
import matplotlib.pyplot as plt
from drawnow import*
%matplotlib auto
tempF=[]
humidity=[]
arduinoData=serial.Serial('COM5',9600)
plt.ion()
def makeFig():
plt.plot(tempF,'ro-')
plt.show
while True:
while(arduinoData.inWaiting()==0):
pass
arduinoString=arduinoData.readline()
dataArray=arduinoString.split(',')
temp=float(dataArray[1])
H=float(dataArray[0])
tempF.append(temp)
humidity.append(H)
drawnow(makeFig)
plt.pause(.000001)
Ich bin für alle Tipps dankbar.
Viele Grüße,
Matthias