Estoy haciendo eco de un comando AT a una interfaz de módem ( /dev/ttyUSB3
) y el comando se ejecuta correctamente.
Por ejemplo, el siguiente comando funciona y tiene un resultado de OK
:
echo -e "ATZ\r" > /dev/ttyUSB3
Esto lo puedo ver al tener otro terminal con cat /dev/ttyUSB3
activo.
¿Cómo puedo, en lugar de usar cat
(por ejemplo, usar un comando para enviar un comando y recuperar la salida), redirigir la salida OK
a una variable o archivo para poder procesar los datos devueltos por el módem?
Respuesta1
Debe utilizar el dispositivo serie de forma muy parecida a un archivo normal. La única diferencia es que necesita algunos ioctl()s para realizar la configuración de la línea de control y velocidad.
Así que no uses os.system("echo
... pero f = open('/dev/ttyUSB3', 'rw')
y luego f.write()
y f.read()
.
En teoría, podría usarlo ioctl()
para establecer la velocidad, etc., pero en esa etapa es simplemente más fácil usar pySerial que hacer todos los parámetros usted mismo. ser = serial.Serial(port='/dev/ttyUSB3', baudrate=9600, timeout=1, parity=serial.PARITY_NONE, stopbits=serial.STOPBITS_ONE, bytesize=serial.EIGHTBITS)
con ser.write()
y ser.read()
.
Tenga en cuenta que debe usar udev para establecer un nombre único para el puerto serie, en lugar de codificar /dev/ttyUSB3. Aquí se explica cómo hacerlo por unAdaptador USB/RS-232 únicoy aquí se explica cómo hacerlo por unadaptador multipuerto USB/RS-232.
Respuesta2
read modem_output < /dev/ttyUSB3