使用 Python 直接将信号发送到 USB
Directly send signals to USB using Python
如何使用 Python.
将 USB 端口连接设置为 HIGH 或 LOW
这可以用于自定义 USB 设备。
例如,
假设我有一个 LED 连接到 USB 端口(数据线)。
现在通过代码我想闪烁或控制它。
现在这可以通过使用任何微控制器、Arduino、Raspberry Pi
轻松实现
但我想用普通电脑和 python 来实现。
[编辑]
我可以通过制作 C 或 C++ API 并制作一个包装器以在 Python。是,那么实现它的最佳方法是什么?
注意:
我的主要 objective 不只是闪烁一些 LED。我只是举个例子。
我希望能够直接控制 USB 端口。
Within the standard USB 2.0 connector you can see four metal strips. The outer two strips are the positive and ground of the power supply. The two central strips are dedicated to carrying data.
With the newer USB 3.0 connector, the data transfer speed is increased by the addition of extra data-carrying strips; four extra signalling wires help USB 3.0 achieve its super speed.
我想设置数据引脚的值。
我说的是HIGH LOW,请不要误会我要将值设置为+5V和GND。但我的意思是直接通过我的代码控制它的值,而无需计算机中存在任何外部驱动程序。
我提到 HIGH LOW 只是为了使语言简单,以便更容易理解。
由于以下几个原因您无法实现:
- USB 端口有自己的连接协议。数据以带有起始位和结束位的数据包的形式传输。协商和握手过程在微芯片之间的硬件层完成。该过程还选择双向数据线中的通信速度。您必须直接访问引脚(如 GPIO)以打开和关闭 LED 或创建您自己的连接协议。这不能在 USB 中完成。
- 还有电压和电流限制。数据线不是+5和GND。数据线对于 D+ 为 2.8v,对于 D- 为 0.3v,两者都相对于 GND。数据以差分方式传输和接收(D+ 相对于 D-),并且不与 GND 比较 1 和 0。
按钮线是你不能直接控制USB。
Arduino 和 Raspberry Pi 等设备的 LED 等控制组件是使用 GPIO 引脚完成的。相比之下,USB 是为数据传输而设计的,而不是像 GPIO 那样用于保持更恒定的高电平或低电平信号。它还消耗与 GPIO 引脚不同的电压和电流水平,并可能损坏用于 GPIO 的组件。
但是,您可以获得用于此目的的 USB 转 GPIO 适配器(有关这些选项的示例讨论,请参阅 here)。
在Python方面,可以使用PyUSB or the libusb Python wrapper to control/transfer data/communicate with USB devices (such as the USB to GPIO adapters). The companies providing the adapters might also have designed their own easy-to-use Python package to wrap around a lower-level driver (probably written in C). See this USB controlled LED device等包作为示例,自带Python驱动。驱动程序只是软件程序,它们从用户那里接收相对简单的命令,以实现他们希望设备执行的操作。然后,它们封装了遵循协议以将用户意图传达给 USB 设备并在尽可能低的软件级别控制 USB 端口所需的较低级别的复杂性。
如何使用 Python.
将 USB 端口连接设置为 HIGH 或 LOW这可以用于自定义 USB 设备。
例如,
假设我有一个 LED 连接到 USB 端口(数据线)。
现在通过代码我想闪烁或控制它。
现在这可以通过使用任何微控制器、Arduino、Raspberry Pi
轻松实现但我想用普通电脑和 python 来实现。
[编辑]
我可以通过制作 C 或 C++ API 并制作一个包装器以在 Python。是,那么实现它的最佳方法是什么?
注意:
我的主要 objective 不只是闪烁一些 LED。我只是举个例子。
我希望能够直接控制 USB 端口。
Within the standard USB 2.0 connector you can see four metal strips. The outer two strips are the positive and ground of the power supply. The two central strips are dedicated to carrying data.
With the newer USB 3.0 connector, the data transfer speed is increased by the addition of extra data-carrying strips; four extra signalling wires help USB 3.0 achieve its super speed.
我想设置数据引脚的值。
我说的是HIGH LOW,请不要误会我要将值设置为+5V和GND。但我的意思是直接通过我的代码控制它的值,而无需计算机中存在任何外部驱动程序。
我提到 HIGH LOW 只是为了使语言简单,以便更容易理解。
由于以下几个原因您无法实现:
- USB 端口有自己的连接协议。数据以带有起始位和结束位的数据包的形式传输。协商和握手过程在微芯片之间的硬件层完成。该过程还选择双向数据线中的通信速度。您必须直接访问引脚(如 GPIO)以打开和关闭 LED 或创建您自己的连接协议。这不能在 USB 中完成。
- 还有电压和电流限制。数据线不是+5和GND。数据线对于 D+ 为 2.8v,对于 D- 为 0.3v,两者都相对于 GND。数据以差分方式传输和接收(D+ 相对于 D-),并且不与 GND 比较 1 和 0。
按钮线是你不能直接控制USB。
Arduino 和 Raspberry Pi 等设备的 LED 等控制组件是使用 GPIO 引脚完成的。相比之下,USB 是为数据传输而设计的,而不是像 GPIO 那样用于保持更恒定的高电平或低电平信号。它还消耗与 GPIO 引脚不同的电压和电流水平,并可能损坏用于 GPIO 的组件。
但是,您可以获得用于此目的的 USB 转 GPIO 适配器(有关这些选项的示例讨论,请参阅 here)。
在Python方面,可以使用PyUSB or the libusb Python wrapper to control/transfer data/communicate with USB devices (such as the USB to GPIO adapters). The companies providing the adapters might also have designed their own easy-to-use Python package to wrap around a lower-level driver (probably written in C). See this USB controlled LED device等包作为示例,自带Python驱动。驱动程序只是软件程序,它们从用户那里接收相对简单的命令,以实现他们希望设备执行的操作。然后,它们封装了遵循协议以将用户意图传达给 USB 设备并在尽可能低的软件级别控制 USB 端口所需的较低级别的复杂性。