所以,这里有两种方法,这取决于你想去哪里。 A)你可以得到一个像 usbrelay 一样工作的命令行版本,然后从 python 发出命令,并且 B)你可以从 python 内部打开一个串行连接并使用 usb.core 或 usb.util 向板发送串行命令。
A) Darrylb 在 github 上的工作是很好的概述,在这里可以得到一个适用于 HID 兼容继电器的命令行工具。 https://github.com/darrylb123/usbrelay
如果你在 debian 上:
sudo apt-get install usbrelay
然后你更新你的 rules.d 文件,这样你就不必一直使用“sudo”,你可以在 python 中调用命令行。当然,这有一定的安全隐患,如果你打算长期使用这个,你应该在谷歌上搜索一下。
无论如何,一旦你安装了它,你可以从命令行调用它,它会以某种格式列出你的 relay_ids,后缀看起来像 _1 到 _8。
$ ./usbrelay
输出将显示您连接的板上的信息,并为您提供继电器 ID 和状态。 “1”打开,“0”关闭。
然后从python内部:
import os
os.system("usbrelay 5291D_1=1 5291D_3=1")
要关闭这些,您只需将分配中的那些更改为零,您就可以同时执行所有八个接力号码。所以你可以从那里继续编写各种函数来以独特的组合、延迟等方式触发你的继电器。你也可以在 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 编号的说明(可能与您的不同!)
CH-6 开 3A 46 45 30 35 30 30 30 35 46 46 30 30 46 39 0D 0A
您需要在串行消息中添加一个 0x 前缀:
c6_on=[0x3A, 0x46, 0x45, 0x30, 0x35, 0x30, 0x30, 0x30, 0x35, 0x46, 0x46, 0x30, 0x30, 0x46, 0x39, 0x0D, 0x0A]
然后您可以使用 RJ 在上面的 git gist 链接中如何接近它的方法将这些命令发送到 usb.core.Endpoint,这里的“ep”是 usb.core.Endpoint:
ep.write(c6_on)
无论哪种方式,只要您可以 A) 从命令行控制板或 B) 知道要发送的正确串行命令,那么您就可以弄清楚如何使用 python 来完成。唯一需要注意的另一件事是确保您具有适当的依赖关系和观看权限。