Created
May 15, 2018 12:54
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/python3 | |
## | |
## Interfacing with the MCP2200 GPIO via USB HID. Plays with the first four GPIO ports. | |
## | |
## Used for controlling 4 port USB relay board from Denkovi. | |
## | |
import usb.core | |
import usb.util | |
import time | |
## find it | |
dev = usb.core.find(idVendor = 0x04d8, idProduct = 0x00df) | |
if dev is None: | |
print('Not found') | |
else: | |
print('Found') | |
## set the endpoint (output) | |
endpoint = dev[0][(2,0)][1] | |
## claim the device from the kernel | |
try: | |
if dev.is_kernel_driver_active(2): | |
dev.detach_kernel_driver(2) | |
usb.util.claim_interface(dev, 2) | |
print('Claimed device') | |
## if it fails, give it back | |
except: | |
usb.util.release_interface(dev, 2) | |
if not dev.is_kernel_driver_active(2): | |
dev.attach_kernel_driver(2) | |
print('Returned device') | |
## set device parameters (GPIOs are outputs, default off, etc) | |
## see http://ww1.microchip.com/downloads/en/DeviceDoc/93066A.pdf | |
print('Configuring device') | |
data = [0]*16 | |
data[0] = 0x10 | |
dev.write(endpoint.bEndpointAddress, data) | |
data = [0]*16 | |
data[0] = 0x08 ## command | |
while True: | |
## everything off | |
data[11] = 0x00 | |
data[12] = 0xFF | |
dev.write(endpoint.bEndpointAddress, data) | |
print('All off') | |
time.sleep(1) | |
## cycle through the outputs, turning them on one by one | |
data[12] = 0x00 | |
data[11] = 0x01 | |
dev.write(endpoint.bEndpointAddress, data) | |
print('Output one') | |
time.sleep(0.25) | |
data[11] = 0x02 | |
dev.write(endpoint.bEndpointAddress, data) | |
print('Output two') | |
time.sleep(0.25) | |
data[11] = 0x04 | |
dev.write(endpoint.bEndpointAddress, data) | |
print('Output three') | |
time.sleep(0.25) | |
data[11] = 0x08 | |
dev.write(endpoint.bEndpointAddress, data) | |
print('Output four') | |
time.sleep(1) | |
## then turn two and four off | |
data[11] = 0x00 | |
data[12] = 0x0A | |
print('Two+four off') | |
dev.write(endpoint.bEndpointAddress, data) | |
time.sleep(1) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment