当前位置: 首页 > news >正文

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左右&#xff…...

【C语言】指针详解总结

指针1. 指针是什么2. 指针和指针类型2.1 指针-整数2.2 指针的解引用3. 野指针3.1 野指针成因3.2 如何规避野指针4. 指针运算4.1 指针-整数4.2 指针-指针4.3 指针的关系运算5. 指针和数组6. 二级指针7. 指针数组1. 指针是什么 指针是什么? 指针理解的2个要点&#xf…...

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实现

逐波限流是指在电力系统运行中,对电力设备进行电流保护的一种措施。它的实现方式是通过对电力系统的电流进行逐波监测和控制,每一波电流都可以独立地进行限制,从而保护电力系统设备不受过载损坏或短路故障的影响。 逐波限流的作用是提高电力…...

【数据结构】 顺序表

文章目录1 线性表2 顺序表2.1 概念及结构2.2 接口实现2.3 数组相关面试题2.4 顺序表的问题与思考1 线性表 线性表(linear list)是n个具有相同特性的数据元素的有限序列。线性表是一种在实际中广泛使用的数据结构,常见的线性表:顺序…...

Elasticsearch 集群规划- 单台机器核心数计算公式

在做集群规划的时候,到底需要给集群的每个节点多少个核心数?这个问题一直困扰了我很久。最近一段时间做千亿数据,PB存储量集群规划的时候,突然想明白了这件事,大致可以用一个公式来计算!我觉得这是一个非常…...

Tesla都使用什么编程语言?

作者 | 初光 出品 | 车端 备注 | 转载请阅读文中版权声明 知圈 | 进“汽车电子与AutoSAR开发”群,请加微“cloud2sunshine” 总目录链接>> AutoSAR入门和实战系列总目录 带着对更美好未来的愿景,特斯拉不仅成为有史以来最有价值的汽车公司&…...

1143. 最长公共子序列——【Leetcode每日刷题】

1143. 最长公共子序列 给定两个字符串 text1 和 text2,返回这两个字符串的最长 公共子序列 的长度。如果不存在 公共子序列 ,返回 0 。 一个字符串的 子序列 是指这样一个新的字符串:它是由原字符串在不改变字符的相对顺序的情况下删除某些…...

【并发基础】线程的通知与等待:obj.wait()、obj.notify()、obj.notifyAll()详解

目录 〇、先总结一下这三个方法带来的Java线程状态变化 一、obj.wait() 1.1 作用 1.2 使用前需要持有线程共享对象的锁 1.3 使用技巧 二、obj.notify(All)() 1.1 notify() 方法 1.1.1 调用notify()或notifyAll()不会释放线程的锁 1.2 notifyAll() 方法 1.3 使用技巧 三、使用实…...

css黏性定位-实现商城的分类滚动的标题吸附

传统的黏性定位是使用js通过计算高度来实现的,当元素滚动到一定位置时吸附在当前位置。下面我们通过css来实现黏性定位功能。 黏性定位 黏性定位目前主流的浏览器已经全部支持,顾名思义,黏性定位具有吸附的效果,其实它是positio…...

@Component和@bean注解在容器中创建实例区别

Component和Bean的区别 在Spring Boot中,Component注解和Bean注解都可以用于创建bean。它们的主要区别在于它们的作用范围和创建方式。 Component注解是一种通用的注解,可以用于标注任何类。被标注的类将被Spring容器自动扫描并创建为一个bean。这个bea…...

不写注释就是垃圾

最近Linux6.2出来了增加了很多新的东西,有看点的是,Linux确实要可以在Apple M1上面运行了,这应该是一个很大的新闻,如果有这么稳定的硬件支持,那对于Linux来说相当于又打下了一大片的江山。其中关于Linux6.2的特性罗列…...

深信服一面

1.C变量存储在哪里,生命周期是怎样的 2.静态成员变量和成员函数的特性,在哪里用过吗 3.new和delete是什么,和malloc和free对比有啥优势 4.new能不能重载,重载new有什么用 5.多态是怎么实现的,有什么优势和目的 6.…...

【C语言】深度理解指针(中)

前言✈上回说到,我们学习了一些与指针相关的数据类型,如指针数组,数组指针,函数指针等等,我们还学习了转移表的基本概念,学会了如何利用转移表来实现一个简易计算器。详情请点击传送门:【C语言】…...

建设企业网站公积金/免费域名注册查询

正题 这题其实很容易,做法也很多。 可以用单调栈来维护一个点向左走的最小值和向右走的最小值。 我们考虑给这些ai取出来从小到大排一个序,这时候我们从前到后一一将ai插进原来的序列里面,那么以当前ai为最小值的区间,就是ai与其前…...

网站开发流程的认识/百度售后客服电话24小时

来自:程序员书库(ID:CodingBook)毋庸置疑,Python是2019年最流行的编程语言之一,前几日,HackerRank 发布了 2020 年《开发者技能报告》,报告调查了来自全球 162 个国家的 116000 多名软件开发者。根据调查显…...

网站建设营销公司/淘宝代运营公司十大排名

网上分页存储过程的代码很多,这个是我一直在用的经典的三层架构里提取出来的,并做了部分语句的优化... 如有更好的欢迎讨论! set ANSI_NULLS ON set QUOTED_IDENTIFIER ON GO ------------------------------------ --用途:分页存…...

在云服务器上搭建网站/搜索引擎营销的案例

sudo apt-get install python3-sphinx...

做网站什么价格/企业网站注册

前几天网易云音乐、喜马拉雅FM、企鹅FM 等音频/直播产品下架的消息,大家应该有所耳闻。其中一个指向就是算法。来源:网信办So,算法做错了什么?好的算法长什么样子?我们以网易云音乐举例展开。听歌、听 FM 都是非常私密…...

深圳 旅游 网站建设/今日最新新闻重大事件

为了便于项目中对发布的版本进行回滚,所以我们每次发布完成以后自动创建git tag。 1,创建一个Jenkins任务,命名成为push_tag_demo; 2,配置《源码管理》,这里配置比较特殊的地方需要仓库的名字,后面创建tag的时候需要使…...