,,Python实现串口通信(pyserial)过程解析

,,Python实现串口通信(pyserial)过程解析

这篇文章主要介绍了计算机编程语言实现串口通信(pyserial)过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

pyserial模块封装了对串口的访问,兼容各种平台。

安装

pip insatll pyserial

初始化

简单初始化示例

导入序列

ser=串行。串行(' com1 ',9600,超时=1)

所有参数

ser=串行。串行(

端口=无,#设备数量,编号从开始

#零。如果一切都失败了,用户

#可以指定一个设备字符串,注意

#这不再是便携的了

#如果没有指定端口,则表示未配置

#创建一个关闭的串行端口对象

波特率=9600,#波特率

字节大小=8位,数据位数

奇偶校验=奇偶校验_无,#启用奇偶校验

停止位=停止位_ 1,#停止位数

超时=无,按井号键设置超时值,无表示永远等待

xonxoff=0,#启用软件流量控制

rtscts=0,#启用RTS/CTS流量控制

interCharTimeout=无#字符间超时,无可禁用

)

不同平台下初始化

ser=串行。串行('/dev/ttyUSB0 ',9600,超时=0.5) #使用通用串行总线连接串行口

ser=串行。串行('/dev/ttyAMA0 ',9600,超时=0.5) #使用树莓派的GPIO口连接串行口

ser=串行100 . 00系列(1,9600,超时=0.5)#赢AWS系统使用com1口连接串行口

ser=串行。串行(' com1 ',9600,超时=0.5)#赢AWS系统使用com1口连接串行口

ser=串行。串行('/dev/ttyS1 ',9600,timeout=0.5)#Linux系统使用com1口连接串行口

serial.Serial类(另外初始化的方法)

班级序列。串行()

{

def __init__(port=None,baudrate=9600,bytesize=EIGHTBITS,parity=PARITY_NONE,stopbits=STOPBITS_ONE,timeout=None,xonxoff=False,rtscts=False,writeTimeout=None,dsrdtr=False,interCharTimeout=None)

}

ser对象属性

名称:设备名字

端口:读或者写端口

波德拉特:波特率

字节大小:字节大小

奇偶校验:校验位

停止位:停止位

超时:读超时设置

写入超时:写超时

xonxoff:软件流控

rtscts:硬件流控

dsrdtr:硬件流控

interCharTimeout:字符间隔超时

重量的单位对象常用方法

系列isOpen():查看端口是否被打开。

ser.open():打开端口。

ser.close():关闭端口。

ser.read():从端口读字节数据。默认一个字节。

ser.read_all():从端口接收全部数据。

ser.write('hello '):向端口写数据。

ser.readline():读一行数据。

ser.readlines():读多行数据。

等待中():返回接收缓存中的字节数。

刷新():等待所有数据写出。

flushInput()。丢弃接收缓存中的所有数据。

flushOutput()。终止当前写操作,并丢弃发送缓存中的数据。

封装参考

导入序列

导入串行.工具.列表_端口

课堂交流():

#初始化

def __init__(self,com,bps,timeout):

self.port=com

self.bps=bps

self.timeout=超时

全球浸水使柔软

尝试:

# 打开串口,并得到串口对象

self.main_engine=serial .串行(self.port,self.bps,timeout=self.timeout)

# 判断是否打开成功

if (self.main_engine.is_open):

Ret=True

例外情况为e:

打印('-异常-:',e)

# 打印设备基本信息

定义打印名称(自身):

print(self.main_engine.name) #设备名字

print(self.main_engine.port)#读或者写端口

打印(自我。主引擎。波特率)#波特率

打印(自我。主引擎。字节数)#字节大小

打印(自我。主引擎。奇偶校验)#校验位

打印(自我。主引擎。停止位)#停止位

打印(自我。主引擎。超时)#读超时设置

打印(自我。主引擎。写入超时)#写超时

打印(自我。主引擎。xonxoff)#软件流控

打印(自我。主引擎。RTS cts)#软件流控

打印(自我。主引擎。dsrdtr)#硬件流控

打印(自我。主引擎。interchartimeout)#字符间隔超时

#打开串口

def打开_引擎(自身):

self.main_engine.open()

#关闭串口

定义关闭_引擎(自身):

self.main_engine.close()

print(self . main _ engine . is _ open)#检查串口是否打开。

#打印可用串行端口列表

@静态方法

def Print_Used_Com():

port _ list=list(serial . tools . list _ ports . comports())

打印(端口列表)

#接收指定大小的数据

#从串行端口读取大小字节。如果指定了超时,超时后返回的字节可能会更少;如果没有指定超时,它将等待,直到收到指定的字节数。

def Read_Size(self,Size):

返回self . main _ engine . read(size=size)

#接收一行数据

#使用readline()的时候要注意:打开串口的时候要指定一个超时,否则如果串口没有接收到新的一行,就会一直等待。

#如果没有超时,readline将报告一个异常。

定义Read_Line(自身):

return self . main _ engine . readline()

#发送数据

def Send_data(self,data):

self.main_engine.write(数据)

#更多示例

# self . main _ engine . write(chr(0x 06))。encode(' UTF-8 ')#以十六进制发送数据

#打印(自我。主引擎。阅读()。hex ()) # #十六进制read读取一个字节。

# print(self . main _ engine . Read())#读取一个字节

# print(self . main _ engine . read(10))。decode(' gbk ')#读取十个字节

# print(self . main _ engine . readline()。decode(' gbk ')#读取一行

#打印(自我。main _ engine.readlines ()) #读取多行并返回一个列表,该列表必须与超时相匹配。

# print(self . main _ engine . in _ waiting)#获取输入缓冲区中剩余的字节数。

# print(self . main _ engine . out _ waiting)#获取输出缓冲区中的字节数

# print(self . main _ engine . Read all())#读取所有字符。

#接收数据

#一个整数数据占用两个字节

#一个字符占用一个字节

def Recive_data(自身,方式):

# Loop接收数据,这是一个无限循环,可以用线程实现。

打印('开始接收数据:')

虽然正确:

尝试:

#逐字节接收

if self.main_engine.in_waiting:

if(way==0):

对于范围内的I(self . main _ engine . in _ waiting):

Print ('ascii数据已接收:' str(self。Read_Size(1)))

1=自我。read _ size (1)。十六进制()#到十六进制

2=int (data1,16) #到decimal

If (data2=='exit'): # exit标志

破裂

否则:

Print('接收的数据十六进制:' data1 '接收的数据十进制:' str(data2))

if(way==1):

#整体接待

# data=self . main _ engine . read(self . main _ engine . in _ waiting)。解码(“UTF-8”)#方法一

data=self . main _ engine . read _ all()# Mode 2

If (data=='exit'): #退出标志

破裂

否则:

打印('接收的ascii数据:',数据)

例外情况为e:

打印('异常:',e)

交流。Print_Used_Com()

Ret=False #创建成功标志?

发动机1=通信(' com12 ',115200,0.5)

if (Ret):

发动机1。Recive_data(0)

while(1)

{

//发送测试

uint8 _ t a=61

戴莱姆斯(300);

printf('%c ',a);

}

开始接收数据:

接收到的Ascii数据:b'='

接收数据十六进制:3d接收数据十进制:61

这就是本文的全部内容。希望对大家的学习有帮助,支持我们。

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: