如何通过 python 与 ftdi f232rl 模块正确通信?
Posted
技术标签:
【中文标题】如何通过 python 与 ftdi f232rl 模块正确通信?【英文标题】:How do i correctly communicate with a ftdi f232rl module via python? 【发布时间】:2021-10-21 12:40:24 【问题描述】:我目前正在尝试通过 pyserial 与 FTDI R232RL 芯片通信,该芯片本身连接到一个小型步进电机。我使用的驱动程序是 FTDI VCP 驱动程序。通过 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 文档页面中使用的代码。 提前谢谢你!
【问题讨论】:
通过 PuTTY 使用设备时,是否必须按 Enter 键才能执行命令?如果是这样,您需要在 Python 代码中使用\r
和/或 \n
字符来终止命令。
哪些设置适用于 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(<your bytes>)
response = ser.readline()
# maybe decode to human readable format? response.decode('ascii')
ser.close()
ser.port = None
附加提示:在这里您可以通过其他方式知道您的芯片已连接到COM3
。如果没有怎么办?您可能想要实现一个例程,通过try
ing (try/except
) 在所有可用端口上进行一些虚拟通信并选择它断言的端口,来确定芯片在某个端口的连接位置和位置。
【讨论】:
以上是关于如何通过 python 与 ftdi f232rl 模块正确通信?的主要内容,如果未能解决你的问题,请参考以下文章
OpenAI Gym 入门与提高 Gym环境构建与最简单的RL agent