Hallo,
ich versuche binäre Daten von einem Messinstrument mit einem Pi 3 zu loggen. Dazu habe ich schon folgendes Script gefunden, welches den ASCII-Header perfekt in eine Datei schreibt, die binären Messdaten allerdings nicht. Wie muss ich das Script umschreiben, um auch die binären Daten zu bekommen?
Danke schonmal
#!/usr/bin/env python
# Log data from serial port
# Author: Diego Herranz
import argparse
import serial
import datetime
import time
import os
parser = argparse.ArgumentParser(formatter_class=argparse.ArgumentDefaultsHelpFormatter)
parser.add_argument("-d", "--device", help="device to read from", default="/dev/ttyUSB0")
parser.add_argument("-s", "--speed", help="speed in bps", default=9600, type=int)
args = parser.parse_args()
outputFilePath = os.path.join(os.path.dirname(__file__),
datetime.datetime.now().strftime("%Y-%m-%dT%H.%M.%S") + ".bin")
with serial.Serial(args.device, args.speed) as ser, open(outputFilePath, mode='wb') as outputFile:
print("Logging started. Ctrl-C to stop.")
try:
while True:
time.sleep(1)
outputFile.write((ser.read(ser.inWaiting())))
outputFile.flush()
except KeyboardInterrupt:
print("Logging stopped")
binäre Daten loggen mit Raspberry Pi
Bitte benutze die Code Tags zur Formatierung deines Codes. Sonst ist der nicht zu entziffern, da die in Python wichtigen Einrückungen verloren gehen.
Und das Skript schreibt binäre Daten. Denn es schreibt ALLE Daten. Wenn da etwas fehlt, hat das mit was anderem zu tun. Zb das man das Gerät erst in einen Modus zur Produktion der Daten bringen muss. Oder das du die binären Daten nicht angezeigt bekommst, weil die nicht druckbare Zeichen sind.
Und das Skript schreibt binäre Daten. Denn es schreibt ALLE Daten. Wenn da etwas fehlt, hat das mit was anderem zu tun. Zb das man das Gerät erst in einen Modus zur Produktion der Daten bringen muss. Oder das du die binären Daten nicht angezeigt bekommst, weil die nicht druckbare Zeichen sind.
Danke dir. Ich hab den Code mal in eine Codebox getan, hoffe jetzt ist er besser verständlich. Gut, dann werde ich mal weitersuchen.
Gibt es für mich eine Möglichkeit, Stopbits und Parität einzustellen, so wie das bei der Baudrate schon passiert ist?
Gibt es für mich eine Möglichkeit, Stopbits und Parität einzustellen, so wie das bei der Baudrate schon passiert ist?
Code: Alles auswählen
#!/usr/bin/env python
# Log data from serial port
# Author: Diego Herranz
import argparse
import serial
import datetime
import time
import os
parser = argparse.ArgumentParser(formatter_class=argparse.ArgumentDefaultsHelpFormatter)
parser.add_argument("-d", "--device", help="device to read from", default="/dev/ttyUSB0")
parser.add_argument("-s", "--speed", help="speed in bps", default=9600, type=int)
args = parser.parse_args()
outputFilePath = os.path.join(os.path.dirname(__file__),
datetime.datetime.now().strftime("%Y-%m-%dT%H.%M.%S") + ".bin")
with serial.Serial(args.device, args.speed) as ser, open(outputFilePath, mode='wb') as outputFile:
print("Logging started. Ctrl-C to stop.")
try:
while True:
time.sleep(1)
outputFile.write((ser.read(ser.inWaiting())))
outputFile.flush()
except KeyboardInterrupt:
print("Logging stopped")
Natürlich. Steht alles in der serial Dokumentation. Mir persönlich ist außer 8N1 niemals was anderes begegnet. Und das ist der default. Außerdem würdest du auch keine lesbaren ASCII Daten bekommen, wenn das nicht stimmt.