Python串口异步通信(串口接收中断)
串口是计算机上一种非常通用的设备通信协议。pyserial模块封装了python对串口的访问,为多平台的使用提供了统一的接口。
安装库
Python要使用串口功能需要导入这两个库:
- pyserial (基本串口功能)
pip3 install pyserial
- pyserial-asyncio (实现异步功能需要这个库)
pip3 install pyserial-asyncio
获取串口名称
使用serial.tools.list_ports.comports()函数会返回一个ListPortInfo类型的列表
import serial
import serial.tools.list_ports
class serial_class:
def get_port(self):
self.port_list = serial.tools.list_ports.comports()
return self.port_list
serial_port = serial_class()
port = serial_port.get_port()
for i in range(0,len(port)):
print(tuple([port[i].device]))
普通串口操作
import serial
portx="COM3"
bps=115200
timex=5
# 打开串口,并得到串口对象
ser=serial.Serial(portx,bps,timeout=timex)
# 写数据
result=ser.write("我是东小东".encode("gbk"))
print("写总字节数:",result)
ser.close()#关闭串口
开始异步收发
import asyncio
import serial_asyncio
class Output(asyncio.Protocol):
def connection_made(self, transport):
self.transport = transport
print('port opened', transport)
transport.serial.rts = False
transport.write(b'hello world\n')
def data_received(self, data):
print('data received', repr(data))
#self.transport.close()
def connection_lost(self, exc):
print('port closed')
asyncio.get_event_loop().stop()
loop = asyncio.get_event_loop()
coro = serial_asyncio.create_serial_connection(loop, Output, 'COM1', baudrate=115200)
loop.run_until_complete(coro)
loop.run_forever()
loop.close()
来源:CSDN
作者:小小小白123
链接:https://blog.csdn.net/qq_39552181/article/details/104220379