#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
) некоторую фиктивную связь на всех доступных портах, и выберите тот, который он утверждает.