PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : [ERLEDIGT] RP6 über Seriellen Port mit Python connecten



johannes_b
15.01.2012, 18:13
Hi,
ich hab ein kleines Problem. Ich würde gerne eine Zeichen vom PC und zwar mit Python an den RP6 schicken. Hab mir nun PySerial (http://pyserial.sourceforge.net/index.html) heruntergeladen. Dann hab ich im Gerätemanager nachgeschaut welcher Port mein RP6 ist. Das war COM8. Also hab ich einfach mal dieses kleine Script für Python geschrieben:



import serial # Das ist diese PySerial Library
ser = serial.Serial(7) # Öffnet COM8
print ser.portstr # Das echot, dass es mit COM8 verbunden ist
ser.write("G") # Sendet ein "G"
ser.close() # schließt den PORT


So nun hab ich auf dem RP6 ein Programm, welches wenn eine Nachricht ankommt, eine LED leuchten lässt. Wenn ich über dieses Terminal vom dem RP6 Loader etwas sende, dann funktioniert das auch. Aber ich möchte es ja über Python machen. Doch hier geht das nicht, sondern der RP6 restartet sich.

Ich hoffe ihr könnt mir helfen.

Viele Grüße
Johannes

radbruch
15.01.2012, 18:35
Hallo

Beim RP6 dient das Steuersignal RTS der seriellen Schnittstelle als "Resetleitung" für den Mega32. Deshalb muss an der Schnittstelle RTS gesetzt werden.

https://www.roboternetz.de/community/threads/51989-RP6-Terminal-%C3%BCber-PC-ansprechen

Gruß

mic

johannes_b
15.01.2012, 19:22
Danke für deine Antwort. Hab jetzt ein bisschen rumprobiert und dann auch in der PySerial API (http://pyserial.sourceforge.net/pyserial_api.html) nachgelesen, wie man dieses RTS aktiviert. Das funktioniert mit dem Befehl: rtscts – Enable hardware (RTS/CTS) flow control. Hab das dann mal reingeschrieben:


import serial # Das ist diese PySerial Library
ser = serial.Serial(7, rtscts=1) # Öffnet COM8
print ser.portstr # Das echot, dass es mit COM8 verbunden ist
ser.write("G") # Sendet ein "G"
ser.close() # schließt den PORT

Leider hab ich aber immernoch das gleiche Problem, wie vorher.

radbruch
15.01.2012, 19:40
Hallo

Es geht hier nicht um die Flusskontrolle beim Senden der Zeichen. Diese muss immer ausgeschaltet sein. Vielmehr geht es um ein andauerndes Setzen der Steuerleitung:


setRTS(level=True)¶
Parameters:

* level – Set control line to logic level.

Set RTS line to specified logic level.
(Aus der oben erwähnten API)

Ob True oder False kann ich nicht sicher sagen, ich tippe auf True. Aber ich vermute, ein kleiner Test bringt dich schnell weiter.

Gruß

mic

johannes_b
15.01.2012, 21:13
Funktioniert damit auch nicht :(

radbruch
15.01.2012, 21:36
Grrr! Zeig doch mal, wie du es jetzt eingebaut hast. rtscts=1 muss natürlich wieder raus. Wo und wie werden die anderen Schnittstellenparameter eingestellt: 38400 Baud, 8 Datenbits, 1 Stopbit, keine Parityprüfung und keine Flusskontrolle

johannes_b
15.01.2012, 22:17
Also mit diesem ZOC Terminal funktioniert das ganze, bloß mit Python wieder nicht.



import serial

ser = serial.Serial('/dev/ttyUSB0', 38400, parity = serial.PARITY_NONE, stopbits = serial.STOPBITS_ONE, bytesize = serial.EIGHTBITS, xonxoff = 0, rtscts = 0, dsrdtr = 0)
ser.setRTS(0)
ser.close()

radbruch
15.01.2012, 22:28
Entschuldigung, aber ich habe das Terminal-Zeugs wieder rauseditiert, weil es mit dem Robotloader ja funktioniert, denn sonst könntest du nicht flashen. Es muss mit irgendetwas in deinem Setup für die Schnittstelle in Python zusammenhängen. Blöderweise kenne ich Pythen aber gar nicht.

CyberUli
16.01.2012, 13:20
probiers mal so, bzw welches Betriebssystem benutzt du eigentlich, weil du die Portnamen je nach System anderst angeben musst...

import serial

ser = serial.Serial(COM7, 38400)
ser.setRTS(True)
ser.write("G")
ser.close()

Grüße, Uli

johannes_b
16.01.2012, 14:07
Danke für die Antworten.

Ne so wie du schreibst, gehts nicht. Ich habs auf Windows und auf Linux probiert und es wird auch der richtige Port geöffnet. Das Kann man mit

print ser.portstr

überprüfen.

EDIT: Man bin ich dumm :D ich weiß wie es geht xD. Beim Connecten Resetet der RP6 schon. Ist ja auch im Terminal so. Also muss ich das Programm aufm RP6 erst starten, wenn es connectet ist. Werd ich gleich ausprobieren, wenn ich daheim bin. Danke für eure Hilfe

Nurnoch eine kleine Frage: Man kann den Roboter ja auch mit dem Terminal starten. Kennt ihr da den Befehl dafür, den man senden muss?

radbruch
16.01.2012, 14:54
Starten: STRG-s
Reset: STRG-r
Flashen: STRG-d

johannes_b
16.01.2012, 15:15
Dankeschön