Die Eigenschaften eines seriellen USB-Konverters haben nichts mit der Hardware des Hosting-Systems zu tun, sondern nur mit dem seriellen USB-Chip selbst und dem Software-Stack des Hosting-Systems.
Der Pi sollte serienmäßige serielle Linux USB USB-Treiber verwenden.
Daher können Sie die Verknüpfung von DTR zum Öffnen / Schließen von Ports über die übliche Linux-Methode zum Löschen der hupcl
Einstellungen aktivieren / deaktivieren , wie auf der Arduino-Site und anderswo dokumentiert:
stty -F /dev/ttyUSB0 -hupcl
Oder Sie ersetzen / dev / ttyUSB0 durch eine Gerätedatei, die tatsächlich Ihrem seriellen USB-Anschluss entspricht (z. B. wäre die erste Uno-Verbindung wahrscheinlich / dev / ttyACM0).
Selbst in Bezug auf die native serielle Schnittstelle des PI unterliegt dieses Verhalten von DTR letztendlich der Softwarekontrolle - jeder, der etwas anderes argumentiert, ignoriert die Tatsache, dass nur der Linux-Treiber und nicht die Hardware Kenntnis von der Schnittstelle hat geöffnet oder geschlossen. Die eigentliche Port-Hardware kann nur erkennen, dass sie gelesen oder in sie geschrieben oder neu konfiguriert wird. Keines davon ist gleichbedeutend mit dem Öffnen des seriellen Geräts.
In @ ChrisStrattons Beitrag wird beschrieben, wie Sie
stty -F /dev/ttyUSB0
das Auflegen vermeiden können, das zu einem Zurücksetzen führt. Hier ist ein Ausschnitt aus Python:Beachten Sie, dass die genaue Anzahl beim erneuten Anschließen des USB-Kabels angegeben werden kann. Daher erkenne ich den Pfad durch Globbing:
quelle
termios
über, sagen wir,os.system("stty -F /dev/ttyUSB0 -hupcl")
? Übrigens ist mir auch aufgefallen, dass dies das Zurücksetzen des Arduino beim ersten Herstellen einer Verbindung nach dem Einschalten des Hostsystems nicht verhindert. Es verhindert, dass es bei nachfolgenden Verbindungen zurückgesetzt wird. Welches ist besser als nichts. Aber ich wünschte, ich könnte herausfinden, wie ich verhindern kann, dass DTR umgeschaltet wird.termios
speichert einen Fork / Exec (Aufruf) in einem externen Programm (stty
). Ich bin mir nicht sicher, was ich mit der DTR-Sache tun soll. Ich glaube, ich habe diese "Funktion" einfach akzeptiert und eine Logik hinzugefügt (benutzerdefinierter Handshake durch Schreiben / Lesen), um festzustellen, ob das Arduino und die Anwendung auf dem Pi synchronisiert wurden.Sie können einen 120-Ohm-Widerstand (oder eine Kombination aus 120-Ohm) zwischen
RESET
und hinzufügen.5V
Dadurch wird ein vollständiges Zurücksetzen verhindert. Dies ist am wenigsten invasiv, da bei anderen Lösungen entweder ein Widerstand oder ein Kondensator von der Platine entfernt werden muss. Dies erschwert das Hochladen. Behalten Sie den Widerstand nicht bei, wenn Sie programmieren. Entfernen Sie es.Leonardo-Karten werden nicht zurückgesetzt, selbst wenn sie
DTR
ausgelöst werden. Das Problem beginnt jedoch, wenn Sie sie remote zurücksetzen müssen, da manchmal die Verbindung zu Raspberry unterbrochen wird und Sie sie physisch zurücksetzen müssen.quelle
Wenn Sie die Seria- und die pySerial-Bibliothek verwenden, können Sie Folgendes verwenden:
ser = serial.Serial ('/ dev / ttyACM0', 9600, dsrdtr = True)
quelle
Sie können PySerial verwenden. Hier ist ein Beispiel für Python-Code:
Weitere Optionen finden Sie unter Pyserial.
quelle
stty -F /dev/ttyUSB0 -cdtrdsr
Berichteinvalid argument: -cdtrdsr
.