Python串口异步通信

风格不统一 提交于 2020-02-08 17:57:34

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()
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!