如何在python中使用Sainsmart 8通道USB中继

2024-03-28 08:42:27 发布

您现在位置:Python中文网/ 问答频道 /正文

我已经找了几个小时了,我想让我的Sainsmart 8通道usb中继使用python工作。如果有人能帮我解决这个问题那就太好了。谢谢。在


Tags: usb小时sainsmart
2条回答

由于本模块采用FT245RL USB FIFO集成电路,所以可以使用此repo https://github.com/vpatron/relay_ft245r来自文斯的赞助人。在

在测试.py来源很容易理解:

import relay_ft245r
import sys
import time

rb = relay_ft245r.FT245R()
dev_list = rb.list_dev()

# list of FT245R devices are returned
if len(dev_list) == 0:
    print('No FT245R devices found')
    sys.exit()

# Show their serial numbers
for dev in dev_list:
    print(dev.serial_number)

# Pick the first one for simplicity
dev = dev_list[0]
print('Using device with serial number ' + str(dev.serial_number))

# Connect and turn on relay 2 and 4, and turn off
rb.connect(dev)
rb.switchon(2)    
rb.switchon(4)
time.sleep(1.0)
rb.switchoff(2)    
time.sleep(1.0)
rb.switchoff(4)

这里有两种方法,这取决于你想去哪里。A) 您可以获得一个类似usbrelay的命令行版本,然后从python发出命令,B)您可以从python内部打开一个串行连接并使用usb核心或者usb.util向电路板发送串行命令。在

A)Darrylb在github上的工作是一个很好的概述,在这里可以得到一个用于HID兼容继电器的命令行工具。https://github.com/darrylb123/usbrelay

如果您使用debian:

sudo apt-get install usbrelay

然后更新rules.d文件,这样就不必一直使用sudo,并且可以在python中调用命令行。当然,这有一定的安全隐患,如果你打算长期使用,你应该搜索一下。在

不管怎样,一旦你安装了它,你只需从命令行调用它,它就会以某种格式列出你的中继设备的ID,后缀看起来像是从1到8。在

^{pr2}$

输出将显示您所连接的板上的信息,并给您中继ID和状态。“1”打开,“0”关闭。在

然后从python内部:

^{3}$

要关闭这些,只需将赋值中的1改为0,就可以同时完成所有8个中继号码。因此,您可以从那里继续编写各种函数,以独特的组合、延迟等方式触发中继。您还可以使用python中的子进程:

import subprocess
subprocess.run(['usbrelay', '5291D_1=1', '5291D_3=1'], stdout=subprocess.PIPE).stdout.decode('utf-8')

B)要采用串行连接方法,您必须首先了解板的正确串行命令是什么。例如,我有一个sainsmart 16通道继电器,它要求我发送串行命令,因为它与HID不兼容。在

在Sainsmart Wiki上找到您的型号: http://wiki.sainsmart.com/index.php/SKU

然后下载zip文件并查看中继指令。对我来说,我使用了RJ工作的修改来发送一个串行命令。
https://gist.github.com/RJ/7acba5b06a03c9b521601e08d0327d56

这是我的SKU编号说明(可能与你的不同!) 3A 46 45 30 35 30 30 35 30 30 35 46 30 30 46 30 46 39 0D 0A上的CH-6

您需要为串行消息添加一个0x前缀:

c6_on=[0x3A, 0x46, 0x45, 0x30, 0x35, 0x30, 0x30, 0x30, 0x35, 0x46, 0x46, 0x30, 0x30, 0x46, 0x39, 0x0D, 0x0A]

然后您可以将这些命令发送到usb.core.Endpoint在上面的git-gist链接中使用RJ如何处理它,这里的“ep”是usb.core.Endpoint公司名称:

ep.write(c6_on)

不管怎样,只要你能A)从命令行控制电路板,或者B)知道要发送的正确串行命令,那么你就可以想出如何用python来实现它。唯一需要注意的是确保您有适当的依赖关系,并监视权限。在

相关问题 更多 >