Les propriétés d'un convertisseur série USB n'ont rien à voir avec le matériel du système d'hébergement, mais uniquement avec la puce série USB elle-même et la pile logicielle du système d'hébergement.
Le pi doit utiliser des pilotes série USB Linux en stock.
Par conséquent, vous pouvez activer / désactiver la liaison de DTR pour ouvrir / fermer le port via la méthode Linux habituelle d'effacement du hupcl
paramètre comme documenté sur le site Arduino et ailleurs:
stty -F /dev/ttyUSB0 -hupcl
Ou remplacer / dev / ttyUSB0 par le fichier de périphérique correspondant à votre port série USB (par exemple, le premier Uno connecté serait probablement / dev / ttyACM0)
Même en ce qui concerne le port série natif du PI, ce comportement de DTR est finalement sous le contrôle du logiciel - quiconque soutient le contraire ignore le fait que ce n'est que le pilote Linux, et non le matériel, qui a la moindre connaissance du port étant ouvert ou fermé. Le matériel du port réel peut seulement dire qu'il est en cours de lecture, d'écriture ou de reconfiguration, dont aucun n'est réellement synonyme d'ouverture du périphérique série.
@ChrisStrattons post décrit comment utiliser
stty -F /dev/ttyUSB0
pour éviter le blocage qui se traduit par une réinitialisation. Voici un extrait pour le faire en Python:Notez que le nombre exact peut lors du rebranchement du câble USB, donc je détecte le chemin en globbant:
la source
termios
par exempleos.system("stty -F /dev/ttyUSB0 -hupcl")
? De plus, btw, j'ai remarqué que cela n'empêche pas l'Arduino de se réinitialiser la première fois que vous vous y connectez après la mise sous tension du système hôte; il l'empêche de se réinitialiser lors des connexions suivantes. C'est mieux que rien. Mais j'aimerais pouvoir comprendre comment l'empêcher de basculer DTR.termios
enregistre un fork / exec (appel) dans un programme externe (stty
). Je ne sais pas quoi faire à propos de la chose DTR, je pense que j'ai juste accepté cette "fonctionnalité" et ajouté une logique (poignée de main personnalisée par écriture / lecture) pour détecter si l'Arduino et l'application sur le Pi se sont synchronisés.Vous pouvez ajouter une résistance de 120 ohms (ou une combinaison pour créer une résistance de 120 ohms) entre
RESET
et5V
cela empêchera la réinitialisation complète. C'est le moins invasif car d'autres solutions nécessitent de retirer une résistance ou un condensateur de la carte, cela complique les téléchargements. Ne conservez pas la résistance si vous programmez. Retirez-le.Les cartes Leonardo ne sont pas réinitialisées même si elles
DTR
sont déclenchées, mais le problème commence lorsque vous devez le réinitialiser à distance, car parfois il perd la connexion à Raspberry et vous devez le réinitialiser physiquement.la source
Si vous utilisez la bibliothèque Seria et pySerial, vous pouvez utiliser:
ser = serial.Serial ('/ dev / ttyACM0', 9600, dsrdtr = True)
la source
Vous pouvez utiliser PySerial. Voici un exemple sur le code Python:
pour plus d'options, consultez Pyserial.
la source
stty -F /dev/ttyUSB0 -cdtrdsr
rapportsinvalid argument: -cdtrdsr
.