Ich versuche gerade eine Waage mit einem Raspberry Pi auszuwerten. Die Waage verfügt über eine RS232 Schnittstelle und ist mit einem Kabel an einem USB zu RS232 Adapter angeschlossen. Um nun das aktuelle Gewicht auszugeben, muss man die Hardwarenummer (eingestellt 27 bzw. 0x1B) + das Zeichen "p" (0x70) über die serielle Schnittstelle senden. Das funktioniert auch problemlos. Der einfache Code dazu sieht so aus:
Code: Alles auswählen
import atexit
import serial
import time
ser = serial.Serial(port='/dev/ttyUSB0', baudrate=9600, timeout=0.1)
atexit.register(ser.close)
while True:
ser.write(b'\x1B\x70') # x1B -> 27 x70 -> p
print(ser.readline())
time.sleep(1)
Code: Alles auswählen
b' 57.372 ct\r\n'
b' 57.372 ct\r\n'
b' 57.372 ct\r\n'
Ich würde aber gerne eine Funktion einbauen um den übertragenen String auf die aktuell eingestellte Gewichtseinheit zu überprüfen und bei Abweichung solange den Code für das Ändern der Gewichtseinheit senden bis die gewünschte Einheit eingestellt ist.
Hier mal meine Überlegung:
Code: Alles auswählen
import atexit
import serial
import time
ser = serial.Serial(port='/dev/ttyUSB0', baudrate=9600, timeout=0.1)
atexit.register(ser.close)
def change_Units():
ser.write(b'\x1B\x73')
def read_Units():
ser.write(b'\x1B\x70')
units = ser.readline()
units = units[9:12]
if units != " GN":
change_Units()
time.sleep(1)
print(units)
if __name__ == "__main__":
while True:
read_Units()
Hier noch ein kurzer Auszug aus dem Manual:


Wäre toll wenn mal jemand da drüber sehen würde.