zoukankan      html  css  js  c++  java
  • pyserial库-串口通讯模块

    pySerial 封装了串口通讯模块,支持Linux、Windows、BSD(可能支持所有支持POSIX的操作系统),支持Jython(Java)和IconPython(.NET and Mono).pyserial模块封装了对串口的访问

    端口号默认从0开始,程序中不需要知道端口名称

    像文件读写一样的API,read、write(readline等也受支持)

    支持二进制传输,没有null消除,没有cr-lf转换
    所有程序全由Python完成,除了标准库外不依赖其他包,除了pywin32(windows)、JavaComm(Jython). POSIX(Linux, BSD) 只依赖Python标准库

    pyserial库的安装:pip install pyserial   

    #资料  https://blog.csdn.net/u012611644/article/details/79125234
    #https://www.cnblogs.com/dongxiaodong/p/9992083.html
    import serial   #导入串口通讯库
    import serial.tools.list_ports
    
    #ser=serial.Serial(4,9600,timeout=0.5)  #winsows系统使用com4口连接串行口
    ser=serial.Serial("com4",9600,timeout=0.5)  #winsows系统使用com4口连接串行口--同时打开串行口
    #ser=serial.Serial("com4",9600)
    #参数3   连接超时--可选;None:永远等待操作,0为立即返回请求结果,其他值为等待超时时间(单位为秒)--按照设置的时间操作一次
    #参数1   端口-Arduino端口可以用米思齐查看
    #参数2  波特率.#波特率,标准值之一:50,75,110,134,150,200,300,600,1200,1800,2400,4800,9600,19200,38400,57600,115200
    print(ser)
    #Serial<id=0xaf9979d550, open=True>(port='com4', baudrate=9600, bytesize=8, parity='N', stopbits=1, timeout=None, xonxoff=False, rtscts=False, dsrdtr=False)
    print(ser.name)   #打印设备名
    #com4
    print(ser.port)  #打印设备名
    #com4
    print(ser.baudrate)  #获取波特率
    port_list = serial.tools.list_ports.comports() #返回可用的串口信息对象列表
    #[<serial.tools.list_ports_common.ListPortInfo object at 0x000000ACEB8A0390>, <serial.tools.list_ports_common.ListPortInfo object at 0x000000ACEB939470>]
     print(port_list) #[<serial.tools.list_ports_common.ListPortInfo object at 0x0000002847D5BD30>] if len(port_list) == 0: print('无可用串口') else: for i in range(0, len(port_list)): print(port_list[i]) #COM4 - USB-SERIAL CH340 (COM4)
        #
    port_list[i].name 返回串口名称

    while True: data = ser.readline().decode('utf-8') #是读一行,以/n结束,要是没有/n就一直读,阻塞 print(data) # 29.00 print(ser.writeTimeout) #data = ser.readlines()和ser.xreadlines()#都需要设置超时时间 #ser.readlines() #读取多行,返回列表,必须匹配超时(timeout)使用 #ser.close() #关闭端口 #ser.write(b"hello")#向端口写数据,并返回发送字节数[好像只能写字节数据] #s = ser.read(10)#从端口读10个字节 #ser.open() #打开端口 #ser.baudrate = 9600 #设置波特率 #ser.isOpen() #看看这个串口是否已经被打开 #ser.in_waiting #获取输入缓冲区的剩余字节数 #ser.out_waiting #获取输出缓冲区的字节数 #ser.timeout 返回超时设置的时间 #ser.writeTimeout #写超时 #ser.bytesize 字节大小---8
    s = serial.tools.list_ports.comports() #获取可用的串口列表
    len(s)  #返回可用串口数目
    c=s[0]  返回指定串口信息--COM3 - USB-SERIAL CH340 (COM3)

    例子:找出可用串口

    import serial
    import serial.tools.list_ports
    
    port = serial.tools.list_ports.comports()  #返回可用的串口信息对象列表
    #[<serial.tools.list_ports_common.ListPortInfo object at 0x000000ACEB8A0390>, <serial.tools.list_ports_common.ListPortInfo object at 0x000000ACEB939470>]
    
    if len(port) <= 0:
        #len(port)  返回可用串口总数
        print("找不到可用的端口")
    
    
    else:
        print('可用串口总数:',len(port))
        port_0 = list(port[0])  #把可用的第0个串口以字符串列表形式返回
        #['COM3', 'USB-SERIAL CH340 (COM3)', 'USB VID:PID=1A86:7523 SER=5 LOCATION=1-1']
    
        port_serial_0 = port_0[0]  #返回串口名称
        #COM3
    异常:
    ValueError:参数错误
    SerialException:找不到设备或不能配置
     
     

    ser.baudrate=9600#设置波特率

    ser.bytesize=8#字节大小
    ser.bytesize=serial.EiGHTBITS#8位数据位

    ser.parity=serial.PARITY_EVEN#偶校验
    ser.parity=serial.PARITY_NONE#无校验
    ser.parity=serial.PARITY_ODD#奇校验

    ser.stopbits=1#停止位
    ser.timeout=0.5#读超时设置
    ser.writeTimeout=0.5#写超时
    ser.xonxoff#软件流控
    ser.rtscts#硬件流控
    ser.dsrdtr#硬件流控
    ser.interCharTimeout#字符间隔超时

     serial.inWaiting() 判断当前接收的数据

    serial.flushInput() 清除输入缓冲区数据

    serial.flushOutput() 中止当前输出并清除输出缓冲区数据

  • 相关阅读:
    Python字符串学习
    文本压缩版本三
    文件压缩版本二
    文件压缩(2)
    d17包,logging模块,hashlib模块 openpyxl模块,深浅拷贝
    d16 collections模块 时间模块 random模块 os模块 sys模块 序列化模块 subprocess模块
    d15 常用模块之正则模块
    14天 模块 , 导模块 , 循环导入, 相对,绝对导入, 项目目录规范,
    13t天 迭代器,生成器,内置函数
    55 jquery
  • 原文地址:https://www.cnblogs.com/liming19680104/p/10927493.html
Copyright © 2011-2022 走看看