Mein Controller empfängt Daten von einem Funkmodul über eine serielle Schnittstelle, er misst Temperatur und Luftfeuchtigkeit alle 1 Sekunde auf zwei Dezimalstellen und verwendet "a" als Zeitstempel. Zum Beispiel:In der Textdatei gespeicherte Daten sind inkonsistent
a21.12 65.43
a21.13 65.40
Hier ist der Code Ich verwende:
import serial
import datetime
connected = False
locations=['/dev/ttyUSB0','/dev/ttyUSB1','/dev/ttyUSB2','/dev/ttyUSB3']
for device in locations:
try:
print "Trying...",device
ser = serial.Serial(device, 9600)
break
except:
print "Failed to connect on",device
while not connected:
serin = ser.read()
connected = True
with open('tempdata.txt', 'w') as text_file:
while 1:
if ser.read() is 'a':
text_file.write(datetime.datetime.now().strftime('%d/%m/%Y %H:%M:%S'))
text_file.write(" ")
x = ser.read()
text_file.write(x)
text_file.flush()
ser.close()
Wenn ich meine Textdatei überprüfen danach das Ergebnis scheint jedes Mal anders zu sein. Wenn ich es für nur 2 oder 3 Sekunden laufen lasse, bekomme ich manchmal ein korrektes Ergebnis, manchmal bekomme ich nur die Feuchtigkeit, manchmal bekomme ich den Zeitstempel mit einer Nummer, die halbe Temperatur, halbe Luftfeuchtigkeit (wie 2.16.3) ist. Wenn ich es für mehr als ein paar Sekunden laufen lasse, ist die Datei einfach komplett leer.
Die Basis für meinen Code stammt von einer Frage, die zuvor hier gestellt wurde und es funktionierte gut, bis ich den Zeitstempelteil hinzufügte. Ich habe versucht, die Übertragungsrate von 9600 auf 4800 zu ändern, aber das hat nur die Zahlen in Müllzeichen verwandelt.
Ich betreibe dies auf einem Raspberry Pi 2 Modell B, so dass ich in kurzer Zeit zu viel davon verlangen könnte.
Die zur Fixierung des Ausgangs wirklich gut funktioniert, danke dafür. Ich bekomme immer noch eine völlig leere Textdatei, wenn ich es für mehr als 3 oder 4 Impulse laufen lasse. – rambopanda
Sie möchten wahrscheinlich den Modus ändern, um ''a'' – Nicarus
anhängen Das tat es, danke nochmal – rambopanda