本文以读取USB无线测量设备数据举例说明。需要用到pyusb模块和libusb-1.0.dll,详细说明如下。

一、配置libusb-1.0.dll

下载libusb-1.0.22.7z,根据操作系统来选择对应的动态库,如下:

  • 32位操作系统:复制MS32\dll\libusb-1.0.dll到C:\Windows\SysWOW64

  • 64位操作系统:复制 MS64\dll\libusb-1.0.dll到C:\Windows\System32

二、安装USB驱动

  1. 打开zadig-2.5.exe
  2. 选择菜单:Options->List All Devices,列出当前电脑所有USB设备,键盘和鼠标USB设备不用考虑
  3. 在设备列表中选择USB设备,点击“Replace Driver”按钮安装USB驱动

三、查询USB设备的idVendor和idProduct

  1. 打开zadig-2.5.exe
  2. 选择菜单:Options->List All Devices,列出当前电脑所有USB设备,键盘和鼠标USB设备不用考虑
  3. USB ID后面的两个值,分别对应:idVendor和idProduct

四、代码

  • 查询所有USB设备信息
    def get_usb_devlists():all_devs = usb.core.find(find_all=True)dev_list = []for d in all_devs:key = '{0}{1}'.format(hex(d.idVendor), hex(d.idProduct))try:dev_u = usb.core.find(idVendor=d.idVendor, idProduct=d.idProduct)dev_u.reset()if dev_u:dev_u.set_configuration()  # added this linecfg = dev_u.get_active_configuration()  # exception: access violation writing 0x0000000000000000intf = cfg[(0, 0)]ep = intf[0]dev_list.append(key)if key in CUsb.dev_dict:  # 避免重复加入continueCUsb.dev_dict[key] = {'idVendor': d.idVendor, 'idProduct': d.idProduct, 'thread': False}except Exception as e:err_str = str(e)print("error!", err_str)
  • 读取USB设备数据
     def __init__(self, VID: int=None, PID: int=None, dev=None, ep=None):self.VID = VIDself.PID = PIDself.dev_u = Noneself.ep = Noneif VID and PID:try:self.dev_u = usb.core.find(idVendor=VID, idProduct=PID)if self.dev_u:# get the configurationself.dev_u.set_configuration()  # added this linecfg = self.dev_u.get_active_configuration()# get interface 0intf = cfg[(0, 0)]# print(self.dev_u)# get endpoints 1self.ep = intf[0]else:print("Can't find device!")except Exception as e:print('__init__: ', e)def read_data(self):if not self.ep:return []key_dict = {30: '1', 31: '2', 32: '3', 33: '4', 34: '5', 35: '6', 36: '7', 37: '8', 38: '9',39: '0', 40: '\n', 55: '.'}result_list = []data = []n = 0inter = 16while (40 not in data) or n < 1:  # 40表示'\n',是数据截止符n += 1try:if self.ep:data += self.ep.read(8, 1000)  # timeout:1000毫秒except Exception as e:err_str = str(e)# print('-----------------------', err_str)count = len(data)# print(count, len(data), data)tmp_data = [data[i:i + inter] for i in range(0, count, inter)]# print(self.ep.bEndpointAddress, len(tmp_data), tmp_data)result_list.append('')  # 创建初始值for idx, tmp in enumerate(tmp_data):data_str = self.get_value_form_8_byte(tmp)if data_str == '\n':  # 截止符result_list[-1] += data_strif idx < len(tmp_data)-1:  # 处理下一个,创建初始值result_list.append('')continueif (data_str == '' or data_str == '0') and result_list[-1] == '':  # 过滤数字前面的0continueresult_list[-1] += data_strresult_list[-1] = ('0' + result_list[-1]) if (result_list[-1][0] == '.') else result_list[-1]  # 处理小数点前面没有0的情况return [i for i in result_list if ('\n' in i) and ('.' in i)]  # 丢掉异常数据

python3操作USB设备相关推荐

  1. 通过libusb操作usb设备扫描二维码

    libusb是开源的操作usb设备的类库,可以在Windows, linux, android使用. 以下代码是参照libusb官方网站提供的api文档和example开发的操作二维码扫描头设备的例子 ...

  2. android usb 开发:如何跳过usb权限询问,解决绕过android下apk使用usb设备权限查询相应问题,自动获取usb权限...

    很多android的应用在使用usb设备时,尤其是usb摄像头,前段时间编写了一个有关usb设备的apk,但是在使用时总是会跳出系统对话框,用户体验很差,如下图所示,所以一直想要解决这个问题,在网上说 ...

  3. android弹出选择usb,android 解决:默认情况下用于该USB设备 自动获取USB操作权限...

    很多android 的应用在使用USB设备时,总会遇到一个很烦人的问题. 即每次都会弹出对话框: 每次插入USB设备,都会弹出.每次选上默认情况下使用该USB设备.但总还是会弹出.用户体验很差. 似乎 ...

  4. C# USB设备的管理(Devcon和注册表的USB操作)

    一.关于 USB 最近对 USB 设备做了一些学习,简单做一下整理,希望感兴趣的同学留言交流,最后会附上源码连接. 简单列一些关键点: VID:Vendor ID(生产厂商 ID),PID:Produ ...

  5. Windows操作系统环境下调查USB设备使用痕迹方法研究

    http://www.xsjs-cifs.com/article/2015/1008-3650-40-2-138.html Windows操作系统环境下调查USB设备使用痕迹方法研究 USB是一种外部 ...

  6. 记:USB设备的初始化、操作、实现——前导

    0x00 前言与吐槽 笔者最近在搞USB(需要使用几乎达到USB枚举上线的操作/(ㄒoㄒ)/~~),因为本身嵌入式的芯片限制,这里主要使用USB2.0搭载USB1.1总线.这里主要使用了如下功能: C ...

  7. Linux下通过CCID协议与USB设备进行交互经验总结

    Linux下通过CCID协议与USB设备进行交互经验总结 1.目标 2. 实现方法 2.1 安装libudev 2.1.1 编译安装 2.1.2 安装提示错误 2.2 编译安装libusb 2.2.1 ...

  8. 怎样删除usb计算机连接网络打印机驱动,惠普激光打印机安装驱动时报“跟这台计算机连接的一个 USB 设备运行不正...

    1. 确保打印机驱动的安装方法是采用软件优先安装的方法.即,先将打印机和计算机断开连接,直接运行驱动光盘,当计算机提示"请确保打印机已连接到计算机,并打开打印机电源"时,再将打印机 ...

  9. Win7系统下Vmware虚拟机无法使用USB设备问题的解决方法

    Windows7发布后,Vmware也推出了新版的Vmware Workstation 7和Player 3,从功能上为Win7进行了优化.近日QQ上有一MM提到她的Vmware中安装的XP虚拟机只能 ...

最新文章

  1. 整合 Google 开源 C++ 代码
  2. 数组中子数组求最大和
  3. 在哪里买铁甲格斗机器人_铁甲雄心Ⅱ火了 优必选“超变铁甲”掀起闯关赢免单热潮...
  4. mysql5.7 查询今天 昨天 一周_mysql查询今天、昨天、7天、近30天、本月、上一月 各个季度的 数据...
  5. 把结构用二进制方式写入文件,并读出来[转]
  6. mysql-server rpm_Mysql rpm包安装
  7. CSS完美兼容IE6/IE7/FF的通用方法 ~!!!
  8. 学习ASP.NET MVC的资料推荐
  9. 结对作业_core组
  10. Catalyst 65xx系列交换机配置(Native IOS)
  11. 美团程序员吐槽公司蹲位:如厕5分钟找坑两小时
  12. 费氏数列(c/python)
  13. 如何安装M26F1 5G路由器
  14. 安装完成postgresql 后,启动大象pgAdmin4 报the application server could not be contect 错误
  15. 西门子plm_盘点西门子、罗克韦尔、PTC、达索等工业巨头们的软硬件布局
  16. JDBC增删改查练习案例
  17. 华为P9黑屏的解决方案-更换屏幕
  18. Linux版本Java卸载
  19. oracle的LAST_DAY()函数
  20. 1. 树莓派的基础配置

热门文章

  1. php免费利用飞信发送验证码,php通过飞信发送短信
  2. 郭炜:CTO、技术VP、技术总监、首席架构师的区别?
  3. api接口 php_PHP关于API接口实例分享
  4. springMVC-后端控制器
  5. 对比分析OSG与Cesium中模型LOD的异同
  6. 概述史:五胡十六国过这么乱的历史怎么可能搞得懂?6000字短文帮您整个清清楚楚...
  7. JavaOOP 面试题
  8. Microsoft office 2016在win10上的安装
  9. Java实现 蓝桥杯VIP 算法提高 促销购物
  10. 高中计算机公式,求高中数学公式大全,高二数学公式总结