Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/286.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Python直接向USB发送信号_Python_C++_C_Usb_Hardware - Fatal编程技术网

使用Python直接向USB发送信号

使用Python直接向USB发送信号,python,c++,c,usb,hardware,Python,C++,C,Usb,Hardware,如何使用Python设置usb端口连接的高或低 这可用于定制usb设备 比如说, 假设我有一个LED连接到usb端口(数据线) 现在通过代码我想闪烁它或控制它 现在,这可以很容易地实现使用任何微控制器,Arduino,覆盆子Pi 但我想用普通计算机和python实现这一点 [编辑] 我可以通过制作一个C或C++API并制作一个包装器在Python中使用它来实现这一点吗。是的,那么实现这一目标的最佳方式是什么 注: 我的主要目标不是让一些LED灯闪烁。我只是举个例子 我希望能够直接控制USB端口

如何使用Python设置usb端口连接的高或低

这可用于定制usb设备

比如说,

假设我有一个LED连接到usb端口(数据线)

现在通过代码我想闪烁它或控制它

现在,这可以很容易地实现使用任何微控制器,Arduino,覆盆子Pi

但我想用普通计算机和python实现这一点

[编辑] 我可以通过制作一个CC++API并制作一个包装器在Python中使用它来实现这一点吗。是的,那么实现这一目标的最佳方式是什么

注: 我的主要目标不是让一些LED灯闪烁。我只是举个例子

我希望能够直接控制USB端口

引用:

在标准USB 2.0接口中,您可以看到四个金属条。外部两条带是电源的正极和接地。两条中央带专用于传输数据

使用较新的USB 3.0接口,通过添加额外的数据传送带,提高了数据传输速度;四条额外的信号线有助于USB 3.0实现超高速

我想设置数据管脚的值

通过我说的高-低,请不要误解我想要将值设置为+5V和GND。但我的意思是通过我的代码直接控制它的值,而不需要计算机中存在任何外部驱动程序


我提到的只是为了使语言简单易懂。

你无法做到这一点,原因如下:

  • USB端口有自己的连接协议。数据以包含起始位和结束位的数据包传输。协商和握手过程在芯片之间的硬件层完成。该过程还选择双向数据线中的通信速度。您必须直接访问pin(如GPIO)才能打开和关闭LED或创建自己的连接协议。这不能在USB中完成
  • 还有电压和电流限制。数据线不是+5和GND。数据线对于D+为2.8v,对于D-为0.3v,对于GND两者都是如此。数据的传输和接收是有差异的(D+相对于D-),并且在1s和0s内不会与GND进行比较

按钮行是您无法直接控制USB。

使用GPIO引脚控制Arduino和Raspberry Pi等设备的LED等组件。相比之下,USB是为数据传输而设计的,而不是为了保持更恒定的高或低信号,如GPIO。它消耗的电压和电流水平也与GPIO引脚不同,可能会损坏GPIO的组件

但是,您可以为此目的使用USB到GPIO适配器(有关这些选项的示例讨论,请参阅)


就Python而言,您可以使用诸如或Python包装器之类的包来控制/传输数据/与USB设备(例如USB到GPIO适配器)通信。提供适配器的公司可能还设计了自己的易于使用的Python包,以封装较低级别的驱动程序(可能是用C编写的)。将此作为一个具有自己的Python驱动程序的示例。驱动程序只是一种软件程序,它从用户那里接收相对简单的命令,以实现设备的功能。然后,它们封装了遵循协议将用户的意图传达给USB设备并在尽可能低的软件级别控制USB端口所需的较低级别的复杂性。

闪烁LED不是我的优先事项,我只是举了一个简单的例子。我希望能够直接控制USB端口。您提到的库(PyUSB)是用于控制基于USB的标准设备,而不是直接控制端口。看起来像USB这样的串行通信端口比您提到的要复杂得多。您无法通过软件直接控制USB引脚上的信号。引脚首先由模拟电路控制,然后由数字硬件控制,最终由低级软件驱动程序接收指令。您将永远无法直接控制管脚上的确切信号,因为硬件控制器确保信号仅限于高频波形,这些波形符合USB通信协议,用于在设备之间串行发送数据包。在这里,直接控制将意味着我们所能用的软件类型是什么设备是否确实要连接到管脚?你能与它建立的唯一有意义的连接是将它连接到另一个有自己USB端口的设备,并重新解释发送的信号,除非你想在示波器上查看信号波形。粗略地说,你能从软件控制它的最远距离是从C代码USB驱动程序获得的任何东西。你可以编写一个定制的C驱动程序,但你可能不会比使用现有的驱动程序做得更好。我并不打算连接一些特定的东西,但我唯一的目的是研究如何控制它。我认为C驱动程序将非常接近我想要的,我在问题中做了一些修改来澄清它。闪烁LED不是我的优先事项,也不是将其设置为+5或GND,而是通过我的代码使用其协议本身直接控制usb端口。