玩转USB HID系列:Linux下使用Python开发USB HID

玩转USB系列:Linux下使用Python开发USB HID

实验环境

  1. ubuntu 16.04 LTS 64-bit
  2. python 3
  3. STM32做下位机

开发步骤

安装pyusb 库

pip install pyusb

我们来与HID设备通讯!

我的STM32信息:
interface 0
END POINT 0x01: OUT
END POINT 0x82: IN
包大小:64 byte

完成功能:PC机向STM32写入2个字节(查询命令)
STM32返回5个字节:[0]:数据长度(这里应该为4)[0]-[4]:一个double的电压值的内存形式

import usb.util
import usb.core
import sys
from ctypes import *
import types  
import struct
import time
write_buffer=[0x02,0x64]

class Point(Union):
    _fields_ = [ ('charx',  c_char*8),('double',  c_double)]


def Init_usb_hid_device(vid,pid):
	dev=usb.core.find(idVendor= vid, idProduct= pid)
	if(dev==None):
	    	return None
	else:
		# Attach and detach the usb,must use this code ahead 
		if dev.is_kernel_driver_active(0):
		    dev.detach_kernel_driver(0)
		dev.set_configuration()
		return dev

def hid_get_adc_volt():
	global volt
	hid_dev.write(0x01,write_buffer,1000)
	receive_buffer=hid_dev.read(0x82,64,1000)
	test_2 = (c_char*4)()
	test_2[0]=receive_buffer[1]
	test_2[1]=receive_buffer[2]
	test_2[2]=receive_buffer[3]
	test_2[3]=receive_buffer[4]
	print(struct.unpack('f',bytes(test_2)))
	time.sleep(0.5)




hid_dev=Init_usb_hid_device(0x0483,0xa010)
if(hid_dev!=None):
	while(1):	
		hid_get_adc_volt()
	
else:
	print("HID device not found!")

注意

Windows中这样做好像不好用(至少我实验是不行的)

发布了23 篇原创文章 · 获赞 28 · 访问量 7695

猜你喜欢

转载自blog.csdn.net/whstudio123/article/details/104350751