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: 13004
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.
“Most people find the concept of programming obvious, but the doing impossible.” — Alan J. Perlis
Antworten