- Версия Python: 2.6.6
- PySerial версия: 2.5
- Плата Arduino: Duemilanove 328
Я написал некоторый код для имитации некоторого оборудования, с которым я работаю, и загрузил его на плату Arduino. Этот код работает. Я знаю это, потому что получаю ожидаемый ответ от HyperTerminal.
Однако, когда я пытаюсь подключиться с помощью PySerial, соединение не завершается ошибкой, но я не получаю ответа на отправляемые команды.
Почему это может быть?
Код Python
import serial
def main():
sp = serial.Serial()
sp.port = 'COM4'
sp.baudrate = 19200
sp.parity = serial.PARITY_NONE
sp.bytesize = serial.EIGHTBITS
sp.stopbits = serial.STOPBITS_ONE
sp.timeout = 0.5
sp.xonxoff = False
sp.rtscts = False
sp.dsrdtr = False
sp.open()
sp.write("GV\r\n".encode('ascii'))
value = sp.readline()
print value
sp.write("GI\r\n".encode('ascii'))
value = sp.readline()
print value
sp.close()
if __name__ == "__main__":
main()
NB: код на Arduino отправляет обратно \r\n
в конце ответа на команду.
Конфигурация гипертерминала:
Редактировать
Я обнаружил, что если увеличить время ожидания до 10 секунд и добавить sp.readline()
перед отправкой чего-либо, то я получаю ответы на обе команды.
Как долго обычно длится аппаратное рукопожатие между PySerial и портами Arduino или USB RS-232?
\r\n
. Хотя обычные текстовые строки обычно заканчиваются\r\n
, команды Sent обычно заканчиваются только одним символом\r
, так как их вводил бы пользователь-человек. Если отправляется\n
, это может быть интерпретировано как начало следующей команды и потенциально может привести к зависанию или вызвать другие ложные нежелательные результаты. - person RufusVS   schedule 22.10.2018