python 之serial、pyusb 使用开发

您所在的位置:网站首页 bios开启com口 python 之serial、pyusb 使用开发

python 之serial、pyusb 使用开发

2023-08-28 01:22| 来源: 网络整理| 查看: 265

 

说明:本次是在windows 系统操作实现的。

 

serial

 

使用场景,获取得力扫码枪的扫码数据,该扫码枪支持三种通讯接口设置,如下图

 

 

即插即用的是 USB-KBW功能,插上去即可获取扫码数据,第二种是通过USB虚拟串口功能实现的,即通过com 口,

使用前可以通过扫码这三种方式中的其中一种进行设置通讯方式。 

首先介绍第二种方式

第二种方式打开后,本机打开记事本,扫码是获取不到扫码数据的,询问客服,客服说该扫码枪不支持该功能。

但是通过程序监控com口是可以实现获取数据的。具体是通过serial模块进行操作的,具体介绍如下:

 

安装 pyserial模块

pip install pyserial # 介绍一下serial的相关方法 open() #打开端口 close() #立即关闭端口 setBaudrate(波特率) #在打开的端口上更改波特率 inWaiting() #返回接收缓冲区中的字符数 read(size = 1) #读取“size”字符 write(s) #将字符串s写入端口 flushInput() #刷新输入缓冲区,丢弃所有的内容 flushOutput() #刷新输出缓冲区,中止输出 sendBreak() #发送中断条件 setRTS(level = 1) #设置RTS线路为指定的逻辑电平 setDTR(level = 1) #设置DTR行为指定的逻辑级别 getCTS() #返回CTS行的状态 getDSR() #返回DSR行的状态 getRI() #返回RI行的状态 getCD() #返回CD行的状态

 

实例介绍

 

检查是否有使用端口欧

# FileName : demo.py # Author : Adil # DateTime : 2019/9/1 7:03 # SoftWare : PyCharm import serial # 这里使用的是windwos from serial.tools.list_ports_windows import * plist = list(comports()) if len(plist) 0: print(serial.inWaiting()) print('3') # data += str(serial.read(15)) # ok 要配合timeout 使用, 否则要传入已知 的 size # data += str(serial.readline()) # ok 要配合timeout 使用 # data += str(serial.readlines()) # ok 要配合timeout 使用 # data += str(serial.readall()) # ok 要配合timeout 使用 data += str(serial.read_all()) # ok 要配合timeout 使用 print("************************************") #print(serial.read(13)) print('准备打印data') # data = str(serial.read(19)) print(data) print('data:%s'%data) print("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~") return data # cursor.execute("DROP TABLE IF EXISTS productinfo") ''' sql="""CREATE TABLE productinfo( code CHAR(18), price double(9,2), info CHAR(25))""" cursor.execute(sql) ''' sum = 0.0 while True: print('1') data = recv(ser) print('4') if data != '': print('5') print(data) break ser.close()

 

print ser.name#打印设备名称 print ser.port#打印设备名 ser.open() #打开端口 s = ser.read(10)#从端口读10个字节 ser.write("hello")#向端口些数据 ser.close()#关闭端口 data = ser.read(20)#是读20个字符 data = ser.readline() #是读一行,以/n结束,要是没有/n就一直读,阻塞。 data = ser.readlines()和ser.xreadlines()#都需要设置超时时间 ser.baudrate = 9600 #设置波特率 ser.isOpen() #看看这个串口是否已经被打开

 

获得串行口状态、属性

串行口的属性:

name:设备名字

portstr:已废弃,用name代替

port:读或者写端口

baudrate:波特率

bytesize:字节大小

parity:校验位

stopbits:停止位

timeout:读超时设置

writeTimeout:写超时

xonxoff:软件流控

rtscts:硬件流控

dsrdtr:硬件流控

interCharTimeout:字符间隔超时

 

属性的使用方法:

ser=serial.Serial("/dev/ttyAMA0",9600,timeout=0.5)

ser.open()

print ser.name

print ser.port

print ser.baudrate#波特率

print ser.bytesize#字节大小

print ser.parity#校验位N-无校验,E-偶校验,O-奇校验

print ser.stopbits#停止位

print ser.timeout#读超时设置

print ser.writeTimeout#写超时

print ser.xonxoff#软件流控

print ser.rtscts#硬件流控

print ser.dsrdtr#硬件流控

print ser.interCharTimeout#字符间隔超时

ser.close()

设置串行口状态

需要用的常量

bytesize:FIVE BITS、SIXBITS、SEVENBITS、EIGHTBITS

parity: PARITY_NONE, PARITY_EVEN, PARITY_ODD, PARITY_MARK, PARITY_SPACE

stopbits: STOPBITS_ONE, STOPBITS_ONE_POINT_FIVE, STOPBITS_TWO

异常:

ValueError:参数错误

SerialException:找不到设备或不能配置

ser.baudrate=9600#设置波特率

ser.bytesize=8#字节大小

ser.bytesize=serial.EiGHTBITS#8位数据位

ser.parity=serial.PARITY_EVEN#偶校验

ser.parity=serial.PARITY_NONE#无校验

ser.parity=serial.PARITY_ODD#奇校验

ser.stopbits=1#停止位

ser.timeout=0.5#读超时设置

ser.writeTimeout=0.5#写超时

ser.xonxoff#软件流控

ser.rtscts#硬件流控

ser.dsrdtr#硬件流控

ser.interCharTimeout#字符间隔超时

Read

是读一行,以/n结束,要是没有/n就一直读,阻塞。

使用readline()时应该注意:打开串口时应该指定超时,否则如果串口没有收到新行,则会一直等待。如果没有超时,readline会报异常。

其中,read(value)方法的参数value为需要读取的字符长度。 如果想要全部读取,提供两个方法:

inWaiting:监测接收字符。

inWaitting返回接收字符串的长度值,然后把这个值赋给read做参数。

data =readall()::读取全部字符。

data = ser.read()可以读一个字符

data = ser.read(20) 是读20个字符

data = ser.readline() 是读一行,以/n结束,要是没有/n就一直读,阻塞。

data = ser.readlines()和ser.xreadlines()都需要设置超时时间

 

import serial import serial.tools.list_ports #测试调试输出开关,正式发布需调整为False mytest = True #mytest = False def getPort(): port_serial=[]#返回串口列表 port_list = list(serial.tools.list_ports.comports()) if len(port_list)


【本文地址】


今日新闻


推荐新闻


    CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3