Zurücksetzen eines open serial port

Ich bin beim Lesen von Daten aus einer seriellen Schnittstelle gesendet von einem arduino.

Ich habe zwei Dateien, die ich getrennt code zu schreiben und versuchen verschiedene Dinge. In einem von Ihnen Las ich die Daten und ziehe ich es mit einem matplotlib Abbildung. Nachdem ich fertig mit ihm, es bleibt verbunden mit meinem computer und das senden von Daten. Also, was ich tun müssen, um die "reset" - port. Dies ist, schließen Sie den offenen port und öffnen Sie es erneut, und stoppen Sie ihn aus Daten senden, so kann ich mit dem arduino zu versuchen, einige änderungen in den code dieser Datei.

So, um dies zu erreichen, meine ich, um den Anschluss zurückzusetzen, habe ich eine andere Datei und diesen code schrieb:

import serial

print "Opening port"

try:
  serial_port = serial.Serial("com4", 9600)
  print "Port is open"

except serial.SerialException:
  serial.Serial("com4", 9600).close()
  print "Port is closed"
  serial_port = serial.Serial("com4",9600)
  print "Port is open again"

print "Ready to use"

Aber dieser code scheint nicht zu funktionieren.Der Hafen ist immer noch angeschlossen ist und Daten sendet. Also, es bedeutet, dass ich nicht in der Nähe des Hafens mit meinem code,und klicken Sie dann öffnen Sie es wieder.

Was mache ich falsch? Wie kann ich verhindern, dass der arduino aus senden von Daten? Oder wie kann ich den reset thw arduino vielleicht?

Hoffe Ihr könnt mir helfen.

- - - - - - EDIT - - - - - -

Ich bewerkstelligen zu identifizieren, die das eigentliche problem, dass ich habe, und es ist nicht das, was ich dachte. Das problem war nicht, dass der port offen war, trotz, dass ich den closeFunktion, die Pyserial haben. Die Reale Sache ist, dass der port schließen, wie ich will, aber das Gerät (der arduino) noch Daten zu senden. So, ich änderte den code zu reproduzieren, die situation.

Dies ist der code:

print "Abriendo puerto"

ser = serial

try:
  ser = serial.Serial("com4", 9600, timeout = 1)
  serial_port = "Open"
  print "The port %s is available" %ser

except serial.serialutil.SerialException:
  print "The port is at use"

  ser.close()
  ser.open()

while ser.read():
  print "Sending data"

ser.setBreak(True)
time.sleep(0.2)

ser.sendBreak(duration = 0.02)
time.sleep(0.2)

ser.close()
time.sleep(0.2)
print "The port is closed"

exit()

Mit diesem code, was ich Tue, ist:

1) ich öffne den seriellen port

2) Wenn das Gerät Daten sendet, I print "Senden von Daten"

3) Nach 1 Sekunde, ich versuche, den port schließen, und beenden Sie das Gerät aus senden von Daten

Ich habe versucht, diese letzten zwei Sache mit der close Funktion in der Nähe des Hafens, und das Lesen der Dokumentation habe ich versucht mit setBreak und sendBreak wie Sie sehen können in dem obigen code (habe ich Sie absichtlich). Aber das Gerät ist immer noch das senden der Daten, was bedeutet, dass der code nicht funktioniert.

So, ist es ein Weg, zu sagen, der arduino "stop senden von Daten", oder kann ich das Gerät zurücksetzen?

  • "Was mache ich falsch?" - Sie sind sich nicht erklären, was meinen Sie mit "funktioniert nicht" und was Sie erwarten. Was ist es, dass Sie erwarten, dass ein "reset" zu tun? Warum glauben Sie, dass Sie es brauchen? Sie sind wahrscheinlich Fragen, eine XY-Frage. IOW, die Sie versuchen zu lösen das problem falsch und die falsche Frage gestellt.
  • Vielen Dank für Ihren Kommentar. Ich bearbeitet die Frage, um deutlicher zu sein.
  • Ich habe folgende Probleme Ihrer Beschreibung (z.B. übermäßiger Gebrauch von "es"). Sie übernehmen zu viel und lassen zu viel. Was macht Sie denken, dass ein "reset" der serielle port wird auf "halt die arduino aus senden von Daten"? (Der Ziel-port hat wenig/keine Kontrolle über den Versand-port.) "Oder wie kann ich den reset thw arduino vielleicht? "-- Was möchten Sie tun? Sie könnte anhalten der übertragung von Daten mit HW-Flusskontrolle. Sie könnte die Umsetzung eines transfer-Protokoll. Man könnte hinzufügen, eine Steuerleitung zu zwingen, einen hard-reset des Arduino.
  • Vielen Dank für Ihre Antwort wieder. Sie denen Recht, meine Frage war nicht klar. So bearbeitete ich wieder mit dem eigentlichen problem, dass ich habe, die ich identifiziert, Dank Ihnen und anderen Benutzern beantwortet zu. Danke Euch nochmal und hoffe Ihr könnt mir helfen.
  • Ich benutze nicht die Arduino-Zeug, so dass ich don ' T haben eine Antwort. Serielle verbindungen (und Kommunikation im Allgemeinen) können klassifiziert werden in zwei Konfigurationen. (1) Master-slave. Das master-Gerät die Erlaubnis erteilt, um den slave zu senden. Oft ist dies eine einfache Anfrage (vom master) und Antwort (vom slave) - dialog. (2) die Peer-to-peer. Jeder kann senden, jeder; Sie entschied sich, Anforderungen zu akzeptieren oder nicht, und reagieren oder nicht. So, die Topologie möchten Sie verwenden? Scheint, wie Sie benötigen, um zu implementieren ein Protokoll-handler in den Arduino, so dass er akzeptiert den Befehl, zu schweigen. Oder mit dem modem-Steuerleitungen.
  • Es gibt auch die client-server-Modell, aber es passt nicht in Ihr einfaches setup.
  • Ich habe ein ähnliches problem. Ich bekomme ein reset-signal durch das öffnen von /dev/ttyUSB0 (Nano), nicht aber für /dev/ttyACM0 (Uno) auf einem Raspbian Jessie-system. Frage hier gepostet: raspberrypi.stackexchange.com/questions/74252/...

InformationsquelleAutor Pablo Flores | 2016-04-26
Schreibe einen Kommentar