Las propiedades de un convertidor serie USB no tienen nada que ver con el hardware del sistema de alojamiento, sino solo con el chip serie USB en sí y la pila de software del sistema de alojamiento.
El pi debe usar controladores serie USB USB de Linux.
Por lo tanto, puede habilitar / deshabilitar el enlace de DTR al puerto abrir / cerrar a través del método habitual de Linux para borrar la hupcl
configuración como se documenta en el sitio Arduino y en otros lugares:
stty -F /dev/ttyUSB0 -hupcl
O reemplazando / dev / ttyUSB0 con cualquier archivo de dispositivo que realmente corresponda a su puerto serie USB (por ejemplo, el primer Uno conectado probablemente sería / dev / ttyACM0)
Incluso con respecto al puerto serie nativo del PI, este comportamiento de DTR está en última instancia bajo el control del software: cualquier persona que argumenta lo contrario ignora el hecho de que es solo el controlador de Linux, y no el hardware, el que tiene conocimiento del puerto. abierto o cerrado El hardware del puerto real solo puede decir que se está leyendo, escribiendo o reconfigurando, ninguno de los cuales es sinónimo de abrir el dispositivo en serie.
La publicación @ChrisStrattons describe cómo usar
stty -F /dev/ttyUSB0
para evitar el bloqueo que resulta en un reinicio. Aquí hay un fragmento para hacerlo en Python:Tenga en cuenta que el número exacto puede al volver a enchufar el cable USB, por lo que detecto la ruta al presionar:
fuente
termios
más, por ejemploos.system("stty -F /dev/ttyUSB0 -hupcl")
? Además, por cierto, noté que esto no impide que Arduino se reinicie la primera vez que se conecta a él después de encender el sistema host; evita que se reinicie en conexiones posteriores. Que es mejor que nada. Pero desearía poder encontrar la manera de evitar que cambie DTR.termios
guarda un fork / exec (llamada) en un programa externo (stty
). No estoy seguro de qué hacer con el DTR, creo que acabo de aceptar esta "característica" y agregué algo de lógica (apretón de manos personalizado al escribir / leer) para detectar si el Arduino y la aplicación en el Pi se sincronizaron.Puede agregar una resistencia de 120 ohmios (o una combinación para producir 120 ohmios) entre
RESET
y5V
esto evitará que se restablezca por completo. Esto es lo menos invasivo ya que otras soluciones requieren quitar una resistencia o un condensador de la placa, complica las cargas. No guarde la resistencia si está programando. QuitarloLas placas Leonardo no se reinician aunque
DTR
se activen, pero el problema comienza cuando necesita reiniciarlo de forma remota, ya que a veces pierde la conexión a Raspberry y tiene que reiniciarlo físicamente.fuente
Si usa la biblioteca Seria y pySerial, puede usar:
ser = serial.Serial ('/ dev / ttyACM0', 9600, dsrdtr = True)
fuente
Puedes usar PySerial. Aquí hay un ejemplo de código Python:
para más opciones comprobar PySerial.
fuente
stty -F /dev/ttyUSB0 -cdtrdsr
informainvalid argument: -cdtrdsr
.