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() 中止当前输出并清除输出缓冲区数据

pyserial库-串口通讯模块的更多相关文章

  1. Pyserial操作串口

    pySerial 介绍 封装了串口通讯模块,支持Linux.Windows.BSD(可能支持所有支持POSIX的操作系统),支持Jython(Java)和IconPython(.NET and Mon ...

  2. Raspberry pi 使用python+pySerial实现串口通信(转)

    Raspberry pi 使用python+pySerial实现串口通信 转:http://blog.csdn.net/homeway999/article/details/8642353   目录( ...

  3. STM32CubeMX HAL库串口+DMA数据发送不定长度数据接收

    参考资料:1.ST HAL库官网资料 2.https://blog.csdn.net/u014470361/article/details/79206352#comments 一.STM32CubeM ...

  4. stm32 hal库串口通信资料汇集

    串口的发送接收函数:HAL_UART_Transmit();串口轮询模式发送,使用超时管理机制.HAL_UART_Receive();串口轮询模式发送,使用超时管理机制.HAL_UART_Transm ...

  5. ucos串口通讯模块设计

    在嵌入式应用中,使用RTOS的主要原因是为了提高系统的可靠性,其次是提高开发效率.缩短开发周期.uCOS-II是一个占先式实时多任务内核,使用对象是嵌入式系统,对源代码适当裁减,很容易移植到8~32位 ...

  6. stm32-HAL库串口收发

    串口发送 重写fputc函数 /* 优点 直接使用printf函数,发送数据长度无限制,不需要额外的数组空间 缺点 只能对应一个串口,暂时没想到解决方案 */ //头文件中要包含 stdio.h 然后 ...

  7. STM32CubeMX HAL库串口: 使用DMA数据发送、使用DMA不定长度数据接收

    转载自 https://blog.csdn.net/euxnijuoh/article/details/81638676

  8. 痞子衡嵌入式:串口调试工具Jays-PyCOM诞生记(3)- 串口功能实现(pySerial)

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是串口调试工具Jays-PyCOM诞生之串口功能实现. 串口调试助手是最核心的当然是串口数据收发与显示的功能,Jays-PyCOM借助的是 ...

  9. python实现串口通讯小程序(GUI界面)

    python实现串口通讯小程序(GUI界面) 使用python实现串口通讯需要使用python的pyserial库来实现,这个库在安装python的时候没有自动进行安装,需要自己进行安装. 1.安装p ...

随机推荐

  1. 如何进行EDM邮件内容的撰写

    近两个月没有来博客园更新一下博客文章了,实在惭愧,最近忙于工作,经常加班.下面来说说EDM邮件内容的撰写技巧吧,本文就跟大家交流一下自己一直以来的心得体会. EDM中很重要的一个步骤,就是邮件内容的撰 ...

  2. 阶段2 JavaWeb+黑马旅游网_15-Maven基础_第3节 maven标准目录结构和常用命令_07maven常用命令

    以给的hellowordl的的代码为例. src/main/java下,这是主业务逻辑代码 里面的内容只有一个jsp的跳转 测试包下: 里面很简单的就输出了一句话 复制项目的目录 先cd进入复制的这个 ...

  3. Python学习之==>文件操作

    1.打开文件的模式 r,只读模式(默认)[不可写:文件不存在,会报错] w,只写模式[不可读:不存在则创建:存在则删除内容] a,追加模式[不可读:不存在则创建:存在则追加内容] r+,读写模式[可读 ...

  4. Debian系列Linux的隐藏WiFi

    Debian系列Linux共用相同的deb安装包,拥有大量的各种软件,是Linux里面最主要的生态系.包括Ubuntu及其衍生版本如Lubuntu/Mate/Kubuntu等,在ARM上也有很好的支持 ...

  5. SQLSERVER 和 ORACLE 查询数据库文件大小

    SQLSERVER: SQLSERVER一个库的文件分为数据文件(行数据)和日志文件两个文件,详情可以在数据库的属性->文件中查看. 在资源管理器中打开文件所在路径可以直接看到这两个文件 但是, ...

  6. Java多线程学习——图片下载

    实现多线程方式1:继承类Thread——重写方法run——调用方法start 从网络下载图片首先要增加包commons-io.jar import org.apache.commons.io.File ...

  7. Python内置函数eval

    英文文档: eval(expression, globals=None, locals=None) The arguments are a string and optional globals an ...

  8. 嗨翻C语言--这里没有蠢问题(一)

    问:card_name[0]是什么意思?答:它是用户输入的第一个字符.如果用户输入了10,那么card_name[0]就将是1.问:总是得用/*和*/写注释吗?答:如果你的编译器支持C99标准,就可以 ...

  9. RabbitMq学习3-工作队列(Work queues)

    工作队列(又称:任务队列——Task Queues)是为了避免等待一些占用大量资源.时间的操作.当我们把任务(Task)当作消息发送到队列中,一个运行在后台的工作者(worker)进程就会取出任务然后 ...

  10. vue项目如何监听窗口变化,达到页面自适应?

    [自适应]向来是前端工程师需要解决的一大问题--即便作为当今非常火热的vue框架,也无法摆脱--虽然elementui.iview等开源UI组件库层出不穷,但官方库毕竟不可能满足全部需求,因此我们可以 ...