Estou repetindo um comando AT para uma interface de modem ( /dev/ttyUSB3
) e o comando é executado com sucesso.
Por exemplo, o comando abaixo funciona e tem uma saída de OK
:
echo -e "ATZ\r" > /dev/ttyUSB3
Posso ver isso tendo outro terminal cat /dev/ttyUSB3
ativo.
Como posso, em vez de usar cat
(por exemplo, usar um comando para enviar um comando e obter a saída de volta), redirecionar a saída OK
para uma variável ou arquivo para que eu possa processar os dados retornados do modem?
Responder1
Você deve usar o dispositivo serial como um arquivo normal. A única diferença é que são necessários alguns ioctl()s para configurar a velocidade e a linha de controle.
Portanto, não use os.system("echo
... mas f = open('/dev/ttyUSB3', 'rw')
e então f.write()
e f.read()
.
Em teoria, você poderia usar ioctl()
para definir a velocidade e assim por diante, mas nesse estágio é simplesmente mais fácil usar pySerial do que fazer todo o empacotamento de parâmetros sozinho. ser = serial.Serial(port='/dev/ttyUSB3', baudrate=9600, timeout=1, parity=serial.PARITY_NONE, stopbits=serial.STOPBITS_ONE, bytesize=serial.EIGHTBITS)
com ser.write()
e ser.read()
.
Observe que você deve usar o udev para definir um nome exclusivo para a porta serial, em vez de codificar /dev/ttyUSB3. Veja como fazer isso por umadaptador USB/RS-232 únicoe aqui está como fazer isso por umadaptador multiporta USB/RS-232.
Responder2
read modem_output < /dev/ttyUSB3