Deaktivieren von DTR in pyserial von code

Ich versuche, pyserial zum senden von Daten an ein arduino. Aber wenn ich öffnen Sie die COM-port-es wird DTR low und setzt das Brett. Allerdings habe ich mein arduino-code-setup, so dass ich steckte es in die Seriell empfangen-Modus durch halten der beiden Tasten für 1 Sekunde. Ich würde lieber nicht haben, um die serial-Eingabe beim Hochfahren des arduino, wenn möglich.

Anscheinend kann man ändern serialWin32.py Datei, ändern Sie die Zeile, die liest:

self._dtrState = win32.DTR_CONTROL_ENABLE

zu:

self._dtrState = win32.DTR_CONTROL_DISABLE

Aber, gibt es eine Möglichkeit, einfach deaktivieren Sie diese direkt in meinem python-Skript? Ich muss auch dazu für alle Systeme. Ich würde eher nicht die Menschen zwingen, zu ändern, Ihre Basis, serial config, nur um dieses Skript verwenden.

Der serielle port geöffnet ist wie folgt:

 com = serial.Serial(port, baud, timeout=1);

Update: am Ende habe ich eine Lösung gefunden, die funktioniert gut für mein setup. Da brauchte ich nicht zu tun Serielle Daten die ganze Zeit, nur wenn ich das Gerät in den seriellen empfangen-Modus fand ich eine Möglichkeit zum deaktivieren der reset über die serielle Verbindung vom arduino selbst.

Viele posts haben gesagt, Sie können deaktivieren DTR zurücksetzen, indem Sie ein ~100 Ohm Widerstand zwischen 5V und reset. Aber ich wollte nicht, dass dies eine dauerhafte Sache. Stattdessen legte ich einen Widerstand zwischen PD5 und reset. 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 wollen in den seriellen Modus, ich nenne setResetDisable(true), die Würfe 5V über 100 ohm-Widerstand und den reset-pin, der Verhinderung von DTR ziehen Sie niedrig und zurücksetzen den chip 🙂
Ich habe dann rufen Sie einfach setResetDisable(false), wenn ich verlassen serieller Modus damit der chip kann so programmiert werden, als normal.

InformationsquelleAutor Adam Haile | 2013-03-17
Schreibe einen Kommentar