Как правильно взаимодействовать с модулем ftdi f232rl через python?

#python #pyserial #ftdi

Вопрос:

В настоящее время я пытаюсь связаться с чипом FTDI R232RL через pyserial, который сам подключен к небольшому шаговому двигателю. Драйвер, который я использую, — это драйвер VCP FTDI. Через PuTTY вы можете подключиться к чипу, только выбрав правильный COM-порт и скорость. Через xterm вы можете затем отправить строку на чип (например, pos 2600, pos 1500, *rst (для сброса)), чтобы переместить шаговый двигатель в новое положение. Это работает, но я хочу использовать скрипт python для отправки этих строк на чип ftdi.

В настоящее время я пытался использовать пакет pyserial для связи с чипом, что в определенной степени работает. Он сообщает мне, какой порт открыт/ к какому порту подключен чип, но ни одна из обычных команд для чипа, похоже, не работает. До сих пор не было отправлено никаких ошибок, которые могли бы дать какой-либо намек на то, что происходит не так.

 import serial import time ser = serial.Serial(  port='COM3',  baudrate=115200,  parity=serial.PARITY_ODD,  stopbits=serial.STOPBITS_ONE,  bytesize=serial.EIGHTBITS ) ser.write(b'*rst')  ser.close() `  

Это код, который я использовал на странице документации по pyserial. Заранее благодарю вас !

Комментарии:

1. При использовании устройства через PuTTY нужно ли нажимать клавишу Enter для выполнения команд? Если это так, вам необходимо завершить команды в коде Python r символом и/или n .

2. каковы настройки, которые работают с xterm/putty? PARITY_ODD довольно СТРАННЫЙ — возможно, вам нужно выбрать PARITY_NONE.

Ответ №1:

Я работал пару лет назад с такой системой и постараюсь помочь с информацией из моей головы.

Я не читал техническое описание чипа и не совсем уверен, поддерживает ли он скорость 115200 байтов, поэтому, просто чтобы «подстраховаться», я использую 9600 в этом примере. (Это то, что вы должны проверить, несоответствие конфигурации, очевидно, приведет к неправильному взаимодействию).

 import serial  ser = serial.Serial(port='COM3', baud=9600, timeout=1) # timeouts are important! ser.open() # THIS STEP IS MISSING IN YOUR QUESTION ser.write(lt;your bytesgt;) response = ser.readline() # maybe decode to human readable format? response.decode('ascii') ser.close() ser.port = None  

Дополнительный совет: здесь вы каким-то другим способом узнаете, что ваш чип подключен COM3 . Что, если этого не произойдет? Возможно, вам захочется внедрить процедуру, чтобы выяснить, где и подключен ли чип к какому-либо порту, используя try ( try/except ) некоторую фиктивную связь на всех доступных портах, и выберите тот, который он утверждает.