pySerial unterschied Python 2 zu Python 3

Sockets, TCP/IP, (XML-)RPC und ähnliche Themen gehören in dieses Forum
Antworten
zockerholick
User
Beiträge: 1
Registriert: Dienstag 6. November 2018, 11:58

Hallo! Ich habe eine Frage zum pySerial modul.

Ich habe es geschafft, eine elektronische Last mit einem Raspi und Python 2.7 anzusteuern. Hier einmal mein funktionierender Code:

Code: Alles auswählen

import serial
ser = serial.Serial('/dev/ttyUSB0', 57600)
ser.write('pow 300\n')
ser.write('pow?\n')
ser.readline()
'300\n'
ser.write('load on\n')
Wenn ich den gleichen Code in Python 3 verwenden will, erhalte ich folgenden Fehler:

Code: Alles auswählen

TypeError: unicode strings are not supported, please encode to bytes: 'pow 300\n'
Danach habe ich es auf folgende weise versucht:

Code: Alles auswählen

ser.write('pow 300'.encode())
Ich bekomme dann keine Fehlermeldung mehr, aber das Gerät reagiert auf keinen der Befehle.

Hat jemand eine Idee, wie ich meine Befehle formulieren muss, damit Python3 sie ordentlich weiter gibt?

Danke im Voraus!
Benutzeravatar
__blackjack__
User
Beiträge: 14237
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@zockerholick: Warum lässt Du denn unter Python 3 das Zeilenendezeichen weg? Daran wird das Gerät ziemlich wahrscheinlich erkennen wann eine Zeile/ein Befehl vollständig ist und ausgeführt werden soll/muss.

Statt `encode()` würde ich einfach direkt Bytes-Literale hinschreiben.
“Ich bin für die Todesstrafe. Wer schreckliche Dinge getan hat, muss eine angemessene Strafe bekommen. So lernt er seine Lektion für das nächste Mal.” — Britney Spears, Interview in der französischen Zeitung Libération, 2. April 2002
Antworten