Чтобы быть более точным, я хотел бы портируйте в python что-то вроде следующего:
sendln 'ATI9'
подождите "ОК" "+CME ERROR"
(Обратите внимание, что ответ от модема содержит несколько строки, оканчивающиеся на «ОК»)
В Python я реализовал следующие два варианта, но результат меня не очень устраивает:
используя time.sleep или ser.timeout и read_until из pyserial:
Отправить AT-команду
def send_at_command(ser, команда, таймаут):
Код: Выделить всё
Код: Выделить всё
Код: Выделить всё
Код: Выделить всё
Код: Выделить всё
Код: Выделить всё
то же, что и раньше, с таймаутом, управляемым pyserial вместо сна
def send_at_command2(ser, команда, таймаут):
Код: Выделить всё
Код: Выделить всё
`` Код: Выделить всё
`` Код: Выделить всё
`` Код: Выделить всё
`` Код: Выделить всё
`` Код: Выделить всё
`` Код: Выделить всё
`` Код: Выделить всё
Код: Выделить всё
`` Код: Выделить всё
`` Код: Выделить всё
`` Код: Выделить всё
`` Код: Выделить всё
`` Код: Выделить всё
`` Код: Выделить всё
`` Код: Выделить всё
Проверка ответа
def validate_response(response, ожидаемые_ключевые слова):
Код: Выделить всё
Код: Выделить всё
`` Код: Выделить всё
`` Код: Выделить всё
Код: Выделить всё
`` Код: Выделить всё
`` Проверить ответ AT-команды
def Wait_At_Command_Response(ser, команда, тайм-аут, ожидаемые_ключевые слова):
Код: Выделить всё
Код: Выделить всё
Код: Выделить всё
Затем я вызываю в своей основной функции следующее:
Wait_At_Command_Response(ser,'ATI9',2,['+CME ОШИБКА', 'ОК'])
Эти два варианта, похоже, требуют очень много времени для обработки ответа от AT-команды. Более того, я часто получаю сообщения типа «Кодек 'utf-8' не может декодировать байт 0xXX в позиции 0: неверный начальный байт».
Спасибо
Подробности см. в описании
Подробнее здесь: https://stackoverflow.com/questions/790 ... -in-python