Ubuntu18.04 python 开发usb通信
一、安装环境
1.安装pip
sudo python3 get-pip.py
或
sudo -i
apt update
apt install python3-pip
确定pip是否安装成功:
xxx-desktop:~$ pip3 --versionpip 9.0.1 from /usr/lib/python3/dist-packages (python 3.6)
2.安装pyusb
pip3 install pyusb --user
3.安装libusb
pip3 install libusb --user
二、测试
1.在HOME目录新建一个test.py文件
$ cd ~
$ touch test.py
2.编辑文件
$ vim test.py
# -*- coding: utf-8 -*-import usb.coredev = usb.core.find(find_all=True) #find all usb devices
for i in dev:print(i) #print information of all usb devices
3.执行
$ python3 Usb.py
DEVICE ID 0bda:0411 on Bus 002 Address 002 =================bLength : 0x12 (18 bytes)bDescriptorType : 0x1 DevicebcdUSB : 0x320 USB 3.2bDeviceClass : 0x9 HubbDeviceSubClass : 0x0bDeviceProtocol : 0x3bMaxPacketSize0 : 0x9 (9 bytes)idVendor : 0x0bdaidProduct : 0x0411bcdDevice : 0x101 Device 1.01iManufacturer : 0x1 Error Accessing StringiProduct : 0x2 Error Accessing StringiSerialNumber : 0x0 bNumConfigurations : 0x1CONFIGURATION 1: 0 mA ====================================bLength : 0x9 (9 bytes)bDescriptorType : 0x2 ConfigurationwTotalLength : 0x1f (31 bytes)bNumInterfaces : 0x1bConfigurationValue : 0x1iConfiguration : 0x0 bmAttributes : 0xe0 Self Powered, Remote WakeupbMaxPower : 0x0 (0 mA)INTERFACE 0: Hub =======================================bLength : 0x9 (9 bytes)bDescriptorType : 0x4 InterfacebInterfaceNumber : 0x0bAlternateSetting : 0x0bNumEndpoints : 0x1bInterfaceClass : 0x9 HubbInterfaceSubClass : 0x0bInterfaceProtocol : 0x0iInterface : 0x0 ENDPOINT 0x81: Interrupt IN ==========================bLength : 0x7 (7 bytes)bDescriptorType : 0x5 EndpointbEndpointAddress : 0x81 INbmAttributes : 0x13 InterruptwMaxPacketSize : 0x2 (2 bytes)bInterval : 0x8......
三、数据通信例程
驱动代码:usb_dev.py
import usb.core
import usb.utilEP_IN = 0x81
EP_OUT = 0x01dev_handle = None
kernelDriverDetached = 0#
# usb_dev_open.
#
def usb_dev_open(vendor_id, product_id):global dev_handleglobal kernelDriverDetacheddev_handle = NonekernelDriverDetached = 0 if dev_handle is not None:usb.util.release_interface(dev_handle, 0)if kernelDriverDetached:dev_handle.attach_kernel_driver(0)usb.util.dispose_resources(dev_handle)dev_handle = Nonedev_handle = usb.core.find(idVendor=vendor_id, idProduct=product_id)if dev_handle is None:return Falsedev_handle.set_configuration()try:if dev_handle.is_kernel_driver_active(0):dev_handle.detach_kernel_driver(0)kernelDriverDetached = 1except NotImplementedError:passtry:usb.util.claim_interface(dev_handle, 0)return Trueexcept usb.core.USBError:return False#
# usb_dev_close.
#
def usb_dev_close():global dev_handleglobal kernelDriverDetachedif dev_handle is not None:usb.util.release_interface(dev_handle, 0)usb.util.dispose_resources(dev_handle)dev_handle = NonekernelDriverDetached = 0#
# usb_dev_write_sync.
#
def usb_dev_write_sync(Datas, DataLen, timeout):global dev_handleif dev_handle is None:return Falseret = dev_handle.write(EP_OUT, Datas)if ret > 0:return Trueprint("usb_dev_write_sync error,", ret)return False #
# usb_dev_read_sync.#
def usb_dev_read_sync(Buf, bufsz, timeout):global dev_handleif dev_handle is None:return Falsedata = dev_handle.read(EP_IN, bufsz, timeout=timeout)Buf[:] = datareturn Buf
主文件:main.py
import usb_devif __name__ == "__main__":# Open USB device with VID=0x1234 and PID=0x1001if usb_dev.usb_dev_open(0x1234, 0x1001) == False:print("usb_dev_open fail!")exit(-1)print("usb_dev_open ok")TxBuff = bytearray(512) #端点最大数据为512字节RxBuff = bytearray(512)usb_dev.usb_dev_write_sync(TxBuff, 512, 1000) #超时1000msusb_dev.usb_dev_read_sync(RxBuff, 512, 1000) #超时1000msprint("RxBuff:",RxBuff)usb_dev.usb_dev_close()
四、实际应用
在我的实际应用中下位机是一个高速USB图像模组,接收到上位机发送的获取图像指令后,将640x480像素的灰度图分包(每包最大512byte)发送给上位机。之前是在linux系统下使用libusb能正常运行,后面由于需要使用python开发算法,为了方便python程序直接获取图像,就尝试在python程序中直接调用USB函数进行发送和接收,不过存在不能完全接收下位发送的分包数据,每次只能接收前两个包,可能是由于python执行效率太低的原因。
相关文章:
Ubuntu18.04 python 开发usb通信
一、安装环境 1.安装pip sudo python3 get-pip.py 或 sudo -i apt update apt install python3-pip 确定pip是否安装成功: xxx-desktop:~$ pip3 --versionpip 9.0.1 from /usr/lib/python3/dist-packages (python 3.6)2.安装pyusb pip3 install pyusb --use…...
RabbitMq 消息确认机制详解 SpringCloud
1 消息可靠性 消息从发送,到消费者接收,会经理多个过程,其中的每一步都可能导致消息丢失. #### 2 常见的丢失原因 发送时丢失: 生产者发送的消息未送达exchange 消息到达exchange后未到达queueMQ宕机,queue将消息丢失 consumer…...
后台导航布局
五、后台导航实例 参考链接: 页面后台导航制作 如何实现html后台导航iframe点击换url(代码) 如何消除html页面下边和右边的滚动条 html页面有多个滚动条时的优化 页面出现不必要的滚动条,怎么调试? 一个页面有两…...
设计模式——抽象工厂模式(创建型)
一、介绍抽象工厂模式是一种创建型设计模式, 它能创建一系列相关的对象, 而无需指定其具体类。问题假设你正在开发一款家具商店模拟器。 你的代码中包括一些类, 用于表示:一系列相关产品, 例如 椅子Chair 、 沙发Sofa和…...
Java面试题--SpringMVC的执行流程
概要 SpringMVC是一种基于MVC(Model-View-Controller)框架的Web应用开发框架。下面是SpringMVC的详细执行流程。 客户端向DispatcherServlet发送请求。DispatcherServlet收到请求后,根据HandlerMapping(处理器映射)找…...
c# 32位程序突破2G内存限制
起因 在开发过程中,由于某些COM组件只能在32位程序下运行,程序不得不在X86平台下生成。而X86的32位程序默认内存大小被限制在2G。由于程序中可能存在大数量处理,期间对象若没有及时释放或则回收,内存占用达到了1.2G左右ÿ…...
【C语言】指针详解总结
指针1. 指针是什么2. 指针和指针类型2.1 指针-整数2.2 指针的解引用3. 野指针3.1 野指针成因3.2 如何规避野指针4. 指针运算4.1 指针-整数4.2 指针-指针4.3 指针的关系运算5. 指针和数组6. 二级指针7. 指针数组1. 指针是什么 指针是什么? 指针理解的2个要点…...
Java加解密(八)工具篇
目录Java加解密实用工具1 OpenSSL2 Keytool3 XCA4 KeyStore ExplorerJava加解密实用工具 1 OpenSSL OpenSSL是一个开放源代码的软件库包,应用程序可以使用这个包来进行安全通信,避免窃听,同时确认另一端连接者的身份。 例如Apache 使用它加…...
Go框架三件套(Web/RPC/ORM)
🧡 三件套介绍 Gorm Gorm 是一个已经迭代了10年的功能强大的 ORM 框架,在字节内部被广泛使用并且拥有非常丰富的开源扩展。 Kitex Kitex 是字节内部的 Golang 微服务 RPC 框架,具有高性能、强可扩展的主要特点,支持多协议并且拥有…...
HR问:假如公司给不到你期望的薪资怎么办?这个问题该如何体面地回答?
对大多数人而言,跳槽就是为了涨薪,工作就是为了挣钱。但如果面试时hr问:假如公司给不到你期望的薪资呢?面对这种问题,该怎么回答才体面?来看一波网友的机智回答:有人委婉拒绝,说“愿…...
LearnOpenGL-高级OpenGL-2.模板测试
本人刚学OpenGL不久且自学,文中定有代码、术语等错误,欢迎指正 我写的项目地址:https://github.com/liujianjie/LearnOpenGLProject 文章目录简单理解模板测试模板介绍模板函数物体轮廓介绍代码给加载的模型添加轮廓简单理解 同深度测试一样…...
【Git从入门到精通】Git入门
什么是版本控制 版本控制是一套系统,按时间记录某一个或一系列文件的变更,查看以前的特定版本。 使用版本控制系统,你可以将文件或者整个项目恢复到先前的状态,还可以对以前的文件进行对比。 本地版本控制系统 本地版本控制系…...
软件测试18
在桌面上打开终端窗口, 执行如下操作: 查看当前系统中开放的端口有哪些查看哪个程序正在使用 3306 端口(需要 root 用户权限) 注意: 1.某些端口号具备固定用途: 例如: 远程访问常用端口号:22 默认情况下是mysql使用的端口号&…...
C语言实现快速排序(hoare法、挖坑法、前后指针法与非递归实现)——不看后悔系列
目录 1. hoare法 方法与步骤 代码实现 2. 挖坑法 方法与步骤 代码实现 3. 前后指针法 方法与步骤 代码实现 4. 快速排序的缺点与优化 1.快速排序的缺点 2.快速排序的优化 ① 三数取中法选 key 代码实现 ② 小区间优化 代码实现 5. 快速排序的非递归实现 附录…...
如何为系统可靠性的量化提供依据
SLA 即 Service Level Agreement,也就是服务等级协议,它指的是系统服务提供者(Provider)对客户(Customer)的一个服务承诺。 而 SLO 就是 SLA 的具体目标管理办法,它由一系列相关的指标 SLI &am…...
量化投资中的因子是什么?因子是如何分类的,包括哪些?
因子就是对个股有解释的因素。因子的种类很多,不同类别的因子从不同的维度对个股收益进行解释。比如基本面因子的数据来源方面有很大一部分是财务报表,从估值、成长、盈利能力等多个方面对股票收益进行解释。量价因子是围绕价格、成交量等技术指标构建的…...
力扣-修复表中的名字
大家好,我是空空star,本篇带大家了解一道简单的力扣sql练习题。 文章目录前言一、题目:1667. 修复表中的名字二、解题1.正确示范①提交SQL运行结果2.正确示范②提交SQL运行结果3.正确示范③提交SQL运行结果4.正确示范④提交SQL运行结果5.其他…...
【博客633】linux vxlan设备工作原理
linux vxlan设备工作原理 vxlan处理包的原理:以k8s cni flannel组件创建的vxlan设备为例 1、k8s cni组件创建flannel设备flannel.1,且这个设备为vxlan类型的设备 root10.10.10.12:/home/ubuntu# ethtool -i flannel.1 driver: vxlan version: 0.1 fi…...
3.12学习周报
文章目录前言文献阅读摘要简介方法介绍讨论结论相关性分析总结前言 本周阅读文献《Streamflow and rainfall forecasting by two long short-term memory-based models》,文献主要提出两种基于长短时记忆网络的混合模型用于对水流量和降雨量进行预测。小波-LSTM&am…...
电力电子中逐波限流控制以及dsp实现
逐波限流是指在电力系统运行中,对电力设备进行电流保护的一种措施。它的实现方式是通过对电力系统的电流进行逐波监测和控制,每一波电流都可以独立地进行限制,从而保护电力系统设备不受过载损坏或短路故障的影响。 逐波限流的作用是提高电力…...
调用支付宝接口响应40004 SYSTEM_ERROR问题排查
在对接支付宝API的时候,遇到了一些问题,记录一下排查过程。 Body:{"datadigital_fincloud_generalsaas_face_certify_initialize_response":{"msg":"Business Failed","code":"40004","sub_msg…...
python打卡day49
知识点回顾: 通道注意力模块复习空间注意力模块CBAM的定义 作业:尝试对今天的模型检查参数数目,并用tensorboard查看训练过程 import torch import torch.nn as nn# 定义通道注意力 class ChannelAttention(nn.Module):def __init__(self,…...
SCAU期末笔记 - 数据分析与数据挖掘题库解析
这门怎么题库答案不全啊日 来简单学一下子来 一、选择题(可多选) 将原始数据进行集成、变换、维度规约、数值规约是在以下哪个步骤的任务?(C) A. 频繁模式挖掘 B.分类和预测 C.数据预处理 D.数据流挖掘 A. 频繁模式挖掘:专注于发现数据中…...
React Native在HarmonyOS 5.0阅读类应用开发中的实践
一、技术选型背景 随着HarmonyOS 5.0对Web兼容层的增强,React Native作为跨平台框架可通过重新编译ArkTS组件实现85%以上的代码复用率。阅读类应用具有UI复杂度低、数据流清晰的特点。 二、核心实现方案 1. 环境配置 (1)使用React Native…...
Map相关知识
数据结构 二叉树 二叉树,顾名思义,每个节点最多有两个“叉”,也就是两个子节点,分别是左子 节点和右子节点。不过,二叉树并不要求每个节点都有两个子节点,有的节点只 有左子节点,有的节点只有…...
保姆级教程:在无网络无显卡的Windows电脑的vscode本地部署deepseek
文章目录 1 前言2 部署流程2.1 准备工作2.2 Ollama2.2.1 使用有网络的电脑下载Ollama2.2.2 安装Ollama(有网络的电脑)2.2.3 安装Ollama(无网络的电脑)2.2.4 安装验证2.2.5 修改大模型安装位置2.2.6 下载Deepseek模型 2.3 将deepse…...
纯 Java 项目(非 SpringBoot)集成 Mybatis-Plus 和 Mybatis-Plus-Join
纯 Java 项目(非 SpringBoot)集成 Mybatis-Plus 和 Mybatis-Plus-Join 1、依赖1.1、依赖版本1.2、pom.xml 2、代码2.1、SqlSession 构造器2.2、MybatisPlus代码生成器2.3、获取 config.yml 配置2.3.1、config.yml2.3.2、项目配置类 2.4、ftl 模板2.4.1、…...
tomcat入门
1 tomcat 是什么 apache开发的web服务器可以为java web程序提供运行环境tomcat是一款高效,稳定,易于使用的web服务器tomcathttp服务器Servlet服务器 2 tomcat 目录介绍 -bin #存放tomcat的脚本 -conf #存放tomcat的配置文件 ---catalina.policy #to…...
Elastic 获得 AWS 教育 ISV 合作伙伴资质,进一步增强教育解决方案产品组合
作者:来自 Elastic Udayasimha Theepireddy (Uday), Brian Bergholm, Marianna Jonsdottir 通过搜索 AI 和云创新推动教育领域的数字化转型。 我们非常高兴地宣布,Elastic 已获得 AWS 教育 ISV 合作伙伴资质。这一重要认证表明,Elastic 作为 …...
【若依】框架项目部署笔记
参考【SpringBoot】【Vue】项目部署_no main manifest attribute, in springboot-0.0.1-sn-CSDN博客 多一个redis安装 准备工作: 压缩包下载:http://download.redis.io/releases 1. 上传压缩包,并进入压缩包所在目录,解压到目标…...
