Я отправляю AT-команду на модемный интерфейс ( /dev/ttyUSB3
), и команда выполняется успешно.
Например, следующая команда работает и дает следующий вывод OK
:
echo -e "ATZ\r" > /dev/ttyUSB3
Я могу это увидеть, имея другой терминал с cat /dev/ttyUSB3
активным.
Как мне вместо использования cat
(например, использования одной команды для отправки команды и получения обратно вывода) перенаправить вывод OK
в переменную или файл, чтобы я мог обработать данные, возвращаемые модемом?
решение1
Вы должны использовать последовательное устройство так же, как и обычный файл. Единственное отличие в том, что ему нужны некоторые ioctl() для настройки скорости и линии управления.
Поэтому не используйте os.system("echo
... но f = open('/dev/ttyUSB3', 'rw')
и затем f.write()
и f.read()
.
Теоретически вы можете использовать его ioctl()
для установки скорости и т. д., но на этом этапе проще использовать pySerial, чем выполнять всю обработку параметров самостоятельно. ser = serial.Serial(port='/dev/ttyUSB3', baudrate=9600, timeout=1, parity=serial.PARITY_NONE, stopbits=serial.STOPBITS_ONE, bytesize=serial.EIGHTBITS)
с помощью ser.write()
и ser.read()
.
Обратите внимание, что вам следует использовать udev для установки уникального имени последовательного порта, а не жестко кодировать /dev/ttyUSB3. Вот как это сделать дляодин адаптер USB/RS-232и вот как это сделать длямногопортовый адаптер USB/RS-232.
решение2
read modem_output < /dev/ttyUSB3