Search code examples
pythonc++cusbhardware

Directly send signals to USB using Python


How can I set HIGH or LOW to a usb port connections using Python.

This could be used in come custom usb device.

For Example,

Consider I have a LED connected to the usb port(DATA Line) .

Now through the code I want to blink it or control it.

Now this can be easily achieved by using any micro controller, Arduino, Raspberry Pi

But I want to achieve this with with a normal computer and python.

[EDIT]

Can I achieve this by making a C or C++ API and make a wrapper to use it in Python. Is yes then what will be the best way to achieve it?

NOTE :

My main objective isn't just blinking some LED. I just gave it as an example.

I want to be able to directly control the USB ports.

Quoting : https://www.cmd-ltd.com/advice-centre/usb-chargers-and-power-modules/usb-and-power-module-product-help/usb-data-transfer-guide/#:~:text=How%20is%20data%20sent%20across,amounts%20known%20as%20'packets'.

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.

I want to set the values of the Data pins.

By my saying HIGH LOW please don't misunderstand that I want to set the value to +5V and GND. But I mean to control its value directly via my code without any external driver present in the computer.

I mentioned HIGH LOW to just make the language simple and so that it is easier to understand.


Solution

  • Controlling components like LEDs from devices like Arduino and Raspberry Pi are done using GPIO pins. In contrast, USB is designed for data transfer and not for maintaining more constant high or low signals like GPIO. It also consumes different voltage and current levels than GPIO pins and could potentially damage components meant for GPIO.

    However, you can get USB to GPIO adapters for this purpose (see here for an example discussion on these options).

    In terms of Python, you can use packages such as 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 as an example with its own Python driver. The drivers are just software programs that take in relatively simple commands from the user for what they want a device to do. They then encapsulate the lower-level complexities required for following a protocol to communicate the user's intention to the USB device and controlling the USB port at the lowest possible software level.