这篇文章主要介绍了计算机编程语言实现串口通信(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的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。