2008-08-06 13 views
14

Tengo un letrero Prolite LED que me gusta configurar para mostrar las consultas de búsqueda de desplazamiento de los registros de Apache y otras estadísticas divertidas. El problema es que mi G5 no tiene un puerto serie, así que tengo que usar un dongle de usb a serial. Se muestra como /dev/cu.usbserial y /dev/tty.usbserial.Hablando mediante programación con un puerto serie en OS X o Linux

cuando hago esto todo parece ser miel sobre hojuelas:

stty -f /dev/cu.usbserial 
speed 9600 baud; 
lflags: -icanon -isig -iexten -echo 
iflags: -icrnl -ixon -ixany -imaxbel -brkint 
oflags: -opost -onlcr -oxtabs 
cflags: cs8 -parenb 

Todo funciona también cuando se utiliza la serial port tool a hablar con él.

Si ejecuto este código mientras que la herramienta de puerto en serie mencionada anteriormente, todo también funciona. Pero tan pronto como desconecto la herramienta, la conexión se pierde.

#!/usr/bin/python 

import serial 

ser = serial.Serial('/dev/cu.usbserial', 9600, timeout=10) 
ser.write("<ID01><PA> \r\n") 
read_chars = ser.read(20) 
print read_chars 

ser.close() 

Entonces la pregunta es, ¿qué magia qué necesito realizar para comenzar a hablar con el puerto serie sin la herramienta de puerto serie? ¿Es eso un problema de permisos? Además, ¿cuál es la diferencia entre /dev/cu.usbserial y /dev/tty.usbserial?


No, no hay números de serie. El problema es que el problema persiste incluso con sudo-ejecutar el script de python, y lo único que lo hace funcionar es abrir la conexión en la herramienta de GUI que mencioné.

+0

La semana pasada escribí una pequeña utilidad de Python para ayudarme a depurar una aplicación C incrustada al leer la información de depuración de un dongle USB-Serial, así que me gustaría pensar que entiendo muy bien PySerial. Alguna información adicional puede ayudar a diagnosticar el problema: * ¿Qué controlador USB-Serial está usando? * ¿Estás seguro de haber configurado todas las opciones en serie (velocidad en baudios, control de flujo, paridad, bits de parada, etc.) correctamente antes de intentar abrir la conexión en serie de Python? * ¿Qué versión de PySerial estás usando? – Matt

+0

No ve ningún número de serie después de ellos, ¿verdad? Tales como: /dev/cu.usbserial-xxxxxxxxA /dev/tty.usbserial-xxxxxxxxA /dev/cu.usbserial-xxxxxxxxB /dev/tty.usbserial-xxxxxxxxB Mi otro problema fue tal vez que haya un problema de permisos de pitón hablando con el Puerto serial. ¿Sabes en qué usuario se está ejecutando tu instancia de python? Y tal vez, ¿qué roles tiene? –

Respuesta

0

¿ha intentado ver el tráfico entre la GUI y el puerto serie para ver si se envía algún tipo de comando especial? También es curioso, Python está enviando ASCII y no UTF-8 u otra cosa, ¿verdad? La razón por la que pregunto es porque noté los cambios en sus presupuestos para las cadenas y en algunos idiomas que realmente es la diferencia entre ASCII y UTF-8.

4

/dev/cu.xxxxx es el dispositivo de "llamada", que es lo que se utiliza cuando se establece una conexión con el dispositivo serie y comienza a hablar con ella. /dev/tty.xxxxx es el dispositivo "dialin", que se usa para monitorear un puerto para llamadas entrantes, por ej. un oyente de fax.

+2

¿Es esto solo una convención, o hay alguna diferencia tangible entre ellos? –

Cuestiones relacionadas