python读取USB串口数据(精简Demo)(以USB-FT232举例)

  • 步骤一:pip pyserial
  • 步骤二:连接硬件设备,打开USB设备(我用的是FT232的USB设备)
  • 安装usb驱动(以USB-FT232为例)
  • 步骤三:写Python代码
  • 如果你decode()运行出来的结果是下面这几个图的,请认真看注释的代码,调高比特率,然后再decode()试试看。
  • 除注释提到的其他错误的解决方案
  • 遇到报错:“usb.core.NoBackendError No backend available”
  • 步骤四:代码解析


网上查了一堆垃圾人写的代码,真的费时又费力,垃圾文章就不要拿出来显摆

最终总结了最精简的Demo

步骤一:pip pyserial

pip install pyserial	# 这个是主要的pip包, 用的时候import serial就好了


pip install usb     #这个包,我感觉只能看看usb端口一些基本的驱动信息,没什么卵用,可下可不下

步骤二:连接硬件设备,打开USB设备(我用的是FT232的USB设备)

如果windows电脑能直接打开USB设备的,那么请跳过安装usb驱动部分。
安装usb驱动(以USB-FT232为例)

ft232驱动安装官网

python 查找usb设备 python获取usb数据_python 查找usb设备


解压,默认next安装

python 查找usb设备 python获取usb数据_比特率_02


计算机—右键----属性----设备管理器-----端口

python 查找usb设备 python获取usb数据_数据_03

右键 USB Serial Port(COM3)端口------属性-----详细信息------下拉框选择(匹配设备ID)可以看到你的vid 和 pid值,如果是查看USB硬件信息的话,敲代码时会用到。

python 查找usb设备 python获取usb数据_比特率_04

步骤三:写Python代码

import serial           #pip install pyserial
import chardet			#如果你decode()不知道什么编码格式,可以用这个包
						# chardet.detect(bytes_data)  # 查看串口返回来的数据到底是什么编码!


'''
COM3为端口

962100为比特率(Baudrate),填的数字要求大于等于硬件设备的比特率,不然decode()会报错,
或者不是自己想要的数据

timeout 设置超时
'''
ser = serial.Serial('COM3', 962100,timeout=0.5)

a=ser.read_until(expected=b'\n') 	#读取一帧数据 ,读到\n为止。 
#你也可以read_line啥的,因为发送过来的一帧数据可能太长,会读取不完整,所以一条数据读到\n这里正好。

a.decode()	#很多人会在这里报错,或者得到的解析数据不是自己想要的结果,
			#是因为比特率设置的频率小于硬件设备的比特率,你可以随便设置一个很大的数字即可成功
			
print(a)

ser.close()		#关闭端口

运行成功的结果大致如下:(具体意义,需要硬件那边的解析规则,编写相应的解析代码)

python 查找usb设备 python获取usb数据_数据_05

如果你decode()运行出来的结果是下面这几个图的,请认真看注释的代码,调高比特率,然后再decode()试试看。

python 查找usb设备 python获取usb数据_数据_06

python 查找usb设备 python获取usb数据_数据_07

除注释提到的其他错误的解决方案

遇到报错:“usb.core.NoBackendError No backend available”
1,首先,打开链接,网页会自动下载libusb-1.0.20的压缩包

 2,打开压缩包,选择MS64\dll\libusb-1.0.dll,复制到C:\Windows\System32

 3,然后选择同目录下的libusb-1.0.lib到Python环境,我用的环境是conda的Python,
所以就复制到D:\Anaconda3\Lib下

 4,然后执行程序即可打印usb信息。

步骤四:代码解析

根据相应的硬件解析规则,编写解析代码,这里不多做说明。因为各种设备的解析规则不一样,有些涉及到位运算。