Ich lese schon lange mit wie auch in allen anderen Foren und Blogs die man so findet im world wide web.
Vorweg. Ich sitze an meiner Bachelorarbeit. Eine wahre Herausforderung für mich, da ich kaum programmieren konnte und dennoch eine riesen Aufgabe für mich selbst angenommen habe und als willkommene Herausforderung sehe.
Ich hoffe auf Hilfe. Selbstverständlich frage ich erst, wenn ich wirklich nicht weiter weiß. Oft kann ich es mir leider nicht erlauben, drei lange Tage an einer Kleinigkeit zu sitzen.
Aber worum genau geht es mir?
Ich darf eine Kalibrier"software" erstellen für geodätische Messgeräte. Im Kleinen vorerst versteht sich. Aber ich habe natürlich einen gewissen Anspruch an mich selbst.
Ich habe einen Raspberry Pi 3b+ sowie einen Arduino, 2 DS18B20 Sensoren und ein Inklinometer, sprich Neigungsmesser.
Ich habe derweil meinen RPi eingerichtet, die Temperatursensoren mit Adresse ausgelesen und kann eine Ausgabe in Python erzeugen nach folgendem Muster:
Code: Alles auswählen
Sensorbezeichnung und Temperaturwert:
28-0113161bd91d 24.19 °C 2018-12-24 22:42:36 DatapartsNr: 1
Sensorbezeichnung und Temperaturwert:
28-0113167ce9ad 24.25 °C 2018-12-24 22:42:36 DatapartsNr: 2
Sensorbezeichnung und Temperaturwert:
28-0113161bd91d 24.19 °C 2018-12-24 22:42:39 DatapartsNr: 3
Sensorbezeichnung und Temperaturwert:
Die Datenaufnahme wurde anhand der zuvor angebebenen Laufzeit beendet.
Die Daten befinden sich in der txt Datei 'Datenausgabe DS18B20.txt'
Die Weiterverarbeitung der Daten beginnt.
Ausgabe als Diagramm abhängig von der Zeit wird aufgerufen
Hier einmal mein bisheriges Erzeugnis
Code: Alles auswählen
import os, sys, time
import matplotlib as mlp
import matplotlib.pyplot as plt
import datetime
# Global für vorhandene Temperatursensoren
tempSensorBezeichnung = [] #Liste mit den einzelnen Sensor-Kennungen
tempSensorAnzahl = 0 #INT für die Anzahl der gelesenen Sensoren
tempSensorWert = [] #Liste mit den einzelnen Sensor-Werten
# Global für Programmstatus
programmStatus = 1
def ds18b20einlesen():
global tempSensorBezeichnung, tempSensorAnzahl, programmStatus
#Verzeichnisinhalt auslesen mit allen vorhandenen Sensorbezeichnungen 28-xxxx
try:
for x in os.listdir("/sys/bus/w1/devices"):
if (x.split("-")[0] == "28") or (x.split("-")[0] == "10"):
tempSensorBezeichnung.append(x)
tempSensorAnzahl = tempSensorAnzahl + 1
except:
# Auslesefehler
print ("Der Verzeichnisinhalt konnte nicht ausgelesen werden.")
programmStatus = 0
def ds18b20auslesen():
global tempSensorBezeichnung, tempSensorAnzahl, tempSensorWert, programmStatus
x = 0
try:
# 1-Wire Slave Dateien gemäß der ermittelten Anzahl auslesen
while x < tempSensorAnzahl:
dateiName = "/sys/bus/w1/devices/" + tempSensorBezeichnung[x] + "/w1_slave"
file = open(dateiName)
filecontent = file.read()
file.close()
# Temperaturwerte auslesen und konvertieren
stringvalue = filecontent.split("\n")[1].split(" ")[9]
sensorwert = float(stringvalue[2:]) / 1000
temperatur = '%6.2f' % sensorwert #Sensor- bzw Temperaturwert auf 2 Dezimalstellen formatiert
tempSensorWert.insert(x,temperatur) #Wert in Liste aktualisieren
x = x + 1
except:
#Fehler bei Auslesung der Sensoren
print ("Die Auslesung der DS18B20 Sensoren war nicht möglich")
programmStatus = 0
#Programminitialisierung
ds18b20einlesen() #Anzahl und Bezeichnungen der vorhandenen Temperatursensoren einlesen
counter = 0
#Temperaturausgabe in Schleife
while programmStatus == 1 and counter < 10:
x = 0
ds18b20auslesen()
while x < tempSensorAnzahl and counter < 10:
print ("Sensorbezeichnung und Temperaturwert:")
dateYMD = datetime.date.today().isoformat()
dateHMS = time.strftime("%H:%M:%S")
counter = counter + 1
print (tempSensorBezeichnung[x] , (" ") , tempSensorWert[x] , (" °C"), dateYMD, dateHMS, "DatapartsNr: ", counter)
x = x + 1
tempSensorBezeichnung = tempSensorBezeichnung
# Schreiben in Datei der Daten
file = open("Datenausgabe DS18B20.txt", "a")
#testList = [str(tempSensorBezeichnung[x]), (" ") ,str(tempSensorWert[x]) , (" °C") , dateYMD, dateHMS]
file.write(str(tempSensorBezeichnung[1]) + str(tempSensorWert[1]) + str(" °C") + ' ' + str(dateYMD) + str(dateHMS) + '\n')
file.close()
time.sleep(0.5)
#print ("\n")
Code: Alles auswählen
28-0113167ce9ad 24.25 °C 2018-12-2422:55:43
28-0113167ce9ad 24.25 °C 2018-12-2422:55:43
28-0113167ce9ad 24.25 °C 2018-12-2422:55:45
28-0113167ce9ad 24.25 °C 2018-12-2422:55:45
28-0113167ce9ad 24.25 °C 2018-12-2422:55:47
28-0113167ce9ad 24.25 °C 2018-12-2422:55:47
28-0113167ce9ad 24.25 °C 2018-12-2422:55:50
28-0113167ce9ad 24.25 °C 2018-12-2422:55:50
28-0113167ce9ad 24.31 °C 2018-12-2422:55:52
28-0113167ce9ad 24.31 °C 2018-12-2422:55:52
Viel Geschreibe um sicher eine Kleinigkeit. Aber damit schon mal klar ist, worum es hier geht, wenn weitere Fragen auftauchen.
Das viel größere Problem wird letztlich die Übertragung der "theoretischen" Programmierung in das GUI erstellt mit QtDesigner. Da war ich schnell am Ende und muss noch viel lesen und erarbeiten.
Ich danke im Voraus für alle nützlichen Tipps.