COM-Port Kommunikation zwischen Windows und Raspberry Pi

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Moritz2016
User
Beiträge: 1
Registriert: Montag 28. November 2016, 15:32

Liebe Forengemeinde,

ich versuche derzeit, Strings zwischen einem Raspberry Pi sowie einem Rechner mit Windows 7 hin und her zu schicken. Dabei geht es mir zunächst darum, dass das prinzipiell funktioniert. Später möchte ich ein Skript auf dem Raspberry Pi dazu verwenden, um über den COM-Port eine Lichtquelle zu steuern.

In meinem Minimalbeispiel empfängt der Windows-Rechner einen Text. Dazu verwende ich den folgenden Code:

Code: Alles auswählen

import serial
ser = serial.Serial()
ser.port='COM1'
ser.baudrate=9600
ser.bytesize=8
ser.timeout=10
ser.parity=serial.PARITY_EVEN

ser.stopbits=1
ser.rtscts=1
ser.xonxoff=1

ser.open()

s=ser.read(1)
print(s)

ser.close()
Für das Raspberry Pi habe ich mir ein Konverter-Kabel von USB zu COM besorgt. Den COM habe ich an meinem Windows-Rechner eingestöpselt (wobei mein Kabel nur 8 von 9 Adern führt). Notwendige Treiber haben sich - so wie ich das sehe - automatisch installiert, so dass bei Einstecken des Konverterkabels der zusätzliche Port ttyUSB0 erscheint. Auf dem Raspberry lasse ich den folgenden Code laufen:

Code: Alles auswählen

import serial
ser = serial.Serial()
ser.port='/dev/ttyUSB0'
ser.baudrate=9600
ser.bytesize=8
ser.timeout=10
ser.parity=serial.PARITY_EVEN

ser.stopbits=1
ser.rtscts=1
ser.xonxoff=1

ser.open()
ser.write('Text!')
ser.close
Zuerst starte ich das Skript auf meinem Windows-Rechner. Anschließend lasse ich mein Raspberry einen Text senden. Leider ist der String aber stets leer.

Ich habe das obenstehende Skript schon in diversen Weisen variiert und es will einfach nicht klappen. Könntet ihr mir verraten, ob das alles prinzipiell schon so funktionieren sollte? Oder habe ich mich hier verrant?

Viele Grüße
Moritz
BlackJack

@Moritz2016: Beim lesen liest Du nur das erste Byte. Und beim senden könnte ein `flush()` helfen, beziehungsweise das schliessen der Verbindung. Du musst die Methode auch *aufrufen*, wie beim Empfänger. Am besten lässt man den Aufruf zum schliessen auch von der ``with``-Anweisung beim verlassen des Blocks erledigen.
Antworten