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()