Désactiver le signal DTR dans pyserial de code

Je suis en train d'utiliser pyserial pour envoyer des données à un arduino. Mais quand j'ai ouvert le port COM, il définit DTR faible et réinitialise le conseil d'administration. Cependant, j'ai mon code arduino configuration que j'ai pour le mettre en série le mode de réception en maintenant les deux boutons pendant 1 seconde. Je préfère ne pas avoir à faire la série d'entrée au démarrage de l'arduino, si possible.

Apparemment, vous pouvez modifier serialWin32.py fichier, changer la ligne suivante:

self._dtrState = win32.DTR_CONTROL_ENABLE

à:

self._dtrState = win32.DTR_CONTROL_DISABLE

Mais, est-il un moyen de le désactiver directement dans mon script python? J'ai également besoin de faire cela pour tous les systèmes. Je préfère ne pas forcer les gens à changer leur base de série config juste pour utiliser ce script.

Le port série est ouvert comme suit:

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

Mise à jour: À la fin, j'ai trouvé une solution qui fonctionne très bien pour mon installation. Depuis je n'ai pas besoin de faire de Série de données tout le temps, seulement quand je mets l'appareil en série de la mode, j'ai trouvé un moyen pour désactiver la réinitialisation de série se connecter à partir de l'arduino lui-même.

De nombreux postes ont dit que vous pouvez désactiver le signal DTR réinitialiser en plaçant un ~résistance de 100 Ohm entre le 5V et la réinitialisation. Mais je ne veux pas que ce soit une chose permanente. Donc, au lieu de cela, j'ai placé une résistance entre PD5 et de réinitialisation. Ensuite, dans le logiciel:

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
}

Alors maintenant, quand je veux être en mode série, j'appelle setResetDisable(vrai) qui met en 5V sur la résistance de 100 ohm et de la broche reset, la prévention des RIS de en le tirant faible et la réinitialisation de la puce 🙂
J'ai ensuite appeler setResetDisable(faux) quand je le laisse en mode série, de sorte que la puce peut être programmé comme d'habitude.

InformationsquelleAutor Adam Haile | 2013-03-17