Pregunta

Estoy intentando hablar con un hogar tarjeta hecha a través de un puerto serie, y para ello es el uso de PySerial. En Hiperterminal, todo funciona bien. Puedo escribir:

$ audio on

y el audio está activado, pero si uso

ser = serial.Serial("COM1", 38400)
ser.write("audio on\r\n")

no pasa nada. Soy capaz de leer los datos de entrada, sin embargo, así que no es algo malo en la comunicación. Yo no ayuda si cambio \ r \ n que acaba de \ no \ r tampoco.

EDIT: En algún momento que en realidad obtener la retroalimentación: No existe el comando al enviar el mismo comando exactamente como obras de HyperTerminal. La configuración es también exactamente el mismo que en HyperTerminal.

Resuelto: Para hacerlo funcionar, tuve que enviar a uno y otro carácter, y terminando con la transmisión \ r.

¿Fue útil?

Solución

Obtener un osciloscopio (tienes uno, ¿verdad?) Y ver la línea serie. Enviar un carácter por segundo a través de él y ver lo que viene en el ámbito de aplicación (ajustado para que active el bit de inicio). los bits del puerto serie están en el orden:. inicio, LSB MSB .., paridad, parada

A ver si hay caracteres que no pudo contactar, o si hay un patrón. Otra posibilidad es que todo lo que es en realidad hacer fuera del puerto, y su junta directiva está cayendo caracteres.

Otros consejos

  1. cheque Triple que la velocidad de transmisión del dispositivo es de hecho 38400
  2. Comprobación de paridad triple, bits de parada, etc.
  3. Sea consciente de degradación de la señal para las transmisiones en serie a través de largas distancias (probablemente no es su problema)

Si todo el pago y envío por encima de intentar poner la cadena en una matriz de bytes y el envío de que a través del comando de escritura. Sólo una suposición.

Envío de caracteres con HyperTerminal entregan caracteres a la velocidad que se escriben. El envío de caracteres a través PySerial que se entregan como un flujo continuo. El receptor (especialmente a altas velocidades de transmisión) podría caer ellos, dependiendo de la naturaleza del receptor.

Además, al enviar comandos a un intérprete, sólo se necesita el terminador \ r (sin el \ n), (esto es todo lo que se envía por Hyperterm, normalmente). Sin embargo, si sólo están exhibiendo los valores, es posible que tenga el \ n para generar la nueva línea.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top