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
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() 中止当前输出并清除输出缓冲区数据
最新文章
- HTML5获取地理位置
- C++中定义比较函数的三种方法
- hdu 5029 Relief grain(树链剖分+线段树)
- hdu 4447 Yuanfang, What Do You Think?
- android图片的压缩和水印
- Intrusion Detection of Specific Area Based on Video
- First Record
- Razor引擎的转换数据类型
- 用Iconv应对NodeJs对称加密技术在汉字编码与NoSQL的一些坑洞
- leetcode202(Floyd判圈算法(龟兔赛跑算法))
- 【巨杉答疑】巨杉数据库和mongodb有什么关系吗?
- 网络1711班 C语言第一次作业批改总结
- spark-shell报错:Exception in thread ";main"; java.lang.NoClassDefFoundError: org/apache/hadoop/fs/FSDataInputStream
- 复习IIC协议---以AT24C02为例
- idea没配置Tomcat容器报错及解决方法
- yum安装时rpmdb损坏解决方法
- 2018 Multi-University Training Contest 9 杭电多校第九场 (有坑待补)
- 【题解】Luogu P4363 [九省联考2018]一双木棋chess
- js小练习-移除数组中的元素
- 分布式文件系统 ~MogileFS~
热门文章
- 【Spring】---【IOC入门案例】
- 工作中经常用到 github 上优秀、实用、轻量级、无依赖的插件和库
- cocos2dx基础篇(15) 列表视图CCTableView
- Spring Security Session Time Out
- python面试题--初级(二)
- MySQL-快速入门(13)MySQL日志
- 剑指Offer编程题(Java实现)——从尾到头打印链表
- 类———用类定义对象———error:C++表达式必须包含类类型
- package.json的所有配置项及其用法,你都熟悉么
- 如何遍历div里面的文本内容,用each方法,