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为例)
解压,默认next安装
计算机—右键----属性----设备管理器-----端口
右键 USB Serial Port(COM3)端口------属性-----详细信息------下拉框选择(匹配设备ID)可以看到你的vid 和 pid值,如果是查看USB硬件信息的话,敲代码时会用到。
步骤三:写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() #关闭端口
运行成功的结果大致如下:(具体意义,需要硬件那边的解析规则,编写相应的解析代码)
如果你decode()运行出来的结果是下面这几个图的,请认真看注释的代码,调高比特率,然后再decode()试试看。
除注释提到的其他错误的解决方案
遇到报错:“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信息。
步骤四:代码解析
根据相应的硬件解析规则,编写解析代码,这里不多做说明。因为各种设备的解析规则不一样,有些涉及到位运算。