如何通过 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。如果没有怎么办?您可能想要实现一个例程,通过trying (try/except) 在所有可用端口上进行一些虚拟通信并选择它断言的端口,来确定芯片在某个端口的连接位置和位置。

【讨论】:

以上是关于如何通过 python 与 ftdi f232rl 模块正确通信?的主要内容,如果未能解决你的问题,请参考以下文章

通过 USB 模拟 UART

OpenAI Gym 入门与提高 Gym环境构建与最简单的RL agent

RL系列马尔可夫决策过程——状态价值评价与动作价值评价的统一

FTDI 写入功能 永无止境

为啥 RL 被称为“强化”学习?

grep -rl 'python' /root