Ich versuche, Pyserial zu verwenden, um Daten an ein Arduino zu senden. Aber wenn ich den COM-Port öffne, setzt er DTR niedrig und setzt die Karte zurück. Allerdings habe ich meine Arduino-Code-Setup so, dass ich es in den seriellen Empfangsmodus durch Halten von zwei Tasten für 1 Sekunde setzen muss. Ich würde lieber nicht die serielle Eingabe beim Booten des Arduino machen, wenn möglich.Disable DTR in Pyserial von Code
self._dtrState = win32.DTR_CONTROL_ENABLE
zu:
self._dtrState = win32.DTR_CONTROL_DISABLE
Aber gibt es eine Möglichkeit, nur diese deaktivieren direkt in meinem Python-Skript
Anscheinend kann man serialWin32.py Datei, Ändern Sie die Zeile, liest ändern ? Ich muss das auch für alle Systeme tun. Ich möchte die Leute nicht dazu zwingen, ihre serielle Basiskonfiguration zu ändern, nur um dieses Skript zu verwenden.
Die serielle Schnittstelle wird wie folgt geöffnet:
com = serial.Serial(port, baud, timeout=1);
Update: Am Ende fand ich eine Lösung, die für mein Setup funktioniert gut. Da ich die seriellen Daten nicht ständig machen musste, fand ich nur dann eine Möglichkeit, das Zurücksetzen der seriellen Verbindung vom Arduino selbst zu deaktivieren, wenn ich das Gerät in den seriellen Empfangsmodus setzte.
Viele Beiträge haben gesagt, dass Sie DTR Reset deaktivieren können, indem Sie einen ~ 100 Ohm Widerstand zwischen 5V und Reset setzen. Aber ich wollte nicht, dass dies eine dauerhafte Sache ist. Also habe ich stattdessen einen Widerstand zwischen PD5 und Reset gesetzt. Dann in der Software:
void setup() {
//.......
DDRD &= ~(_BV(PD5)); //Set PD5 as input initially
PORTD |= (_BV(PD5)); //Set high
//.......
}
inline void setResetDisable(bool state)
{
if(state)
DDRD |= (_BV(PD5)); //Set PD5 as output to put 5V on reset line
else
DDRD &= ~(_BV(PD5)); //set back to input mode
}
So, jetzt, wenn ich im seriellen Modus sein will, rufe ich setResetDisable (true), die 5 V führt auf, dass 100-Ohm-Widerstand und den Reset-Pin, verhindert DTR aus ziehen sie niedrig und Zurücksetzen des Chips :) Ich rufe dann nur setResetDisable (false), wenn ich den seriellen Modus verlassen, so kann der Chip als normal programmiert werden.
Dies funktioniert nicht für mich. Selbst wenn DTR = False ist, wird das Arduino während der seriellen Wiederverbindung zurückgesetzt. Ich benutze die neueste Version von Pyserial 3.0.1 unter Ubuntu. – Cerin
@Cerin Hatte das gleiche Problem, aber die Einstellung DTR vor dem Öffnen des Ports funktioniert jetzt für mich (Python 3.5.1 unter Windows 8.1 64 Bit und die aktuelle pySerial 3.1). Siehe auch das Problem im "neuen" Repository bei GitHub: https://github.com/pyserial/pyserial/issues/124 – handle
Ich bemerkte auch, dass 'sty-hup' auf dem Port auch das Problem stoppt. Warum ist das? Wie ist das mit DTR verbunden? –