pySerial 串口工具简介
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了pySerial 串口工具简介相关的知识,希望对你有一定的参考价值。
参考技术A 参考 pySerial 。pySerial 模块封装了对串行端口(serial port)的访问。它提供了在 Windows,OSX,Linux,BSD(可能是任何 POSIX 兼容系统)和 IronPython 上运行的 Python 的后端。模块名为“ serial ”会自动选择适当的后端。
安装很简单:
前提:首先有一个串口硬件接入电脑,然后,查看其端口号:
可以看到端口有 USB Serial Port(COM3) 。本文就以它为例探索串口通信。
输出:
non blocking HW handshaking(非阻塞的硬件握手):
获取一个 Serial 实例并稍后配置/打开它:
输出:
下面试验打开、关闭:
输出:
也支持上下文管理:
使用 readline() 时要小心。在打开串行端口时,请务必指定一个超时时间,否则,如果没有收到换行符,它将永远阻塞。另请注意, readlines() 仅适用于超时。 readlines() 取决于是否存在超时,并将其解释为EOF(文件末尾)。如果未正确打开端口,则会引发异常。
要为 readline() 指定 EOL 字符或使用通用换行模式,建议使用 io.TextIOWrapper :
python -m serial.tools.list_ports 将打印可用端口列表。也可以添加一个正则表达式作为第一个参数,并且列表将仅包含匹配的条目。
pySerial 包含一个基于小型控制台的终端程序,称为 serial.tools.miniterm 。可以使用 python -m serial.tools.miniterm <port_name> (使用选项 -h 获取所有选项的列表)启动。
Pyserial 实现串口 base on python3
应用Pyserial 包实现串口通信类:
其主要接口如下:
1. Serial_Create 创建和使能串口
2. Serial_WriteAndReadBin 写读二进制数据流
3. Serial_WriteAndReadString 写读字符串
4. Serial_WriteString 写字符串
5. Serial_WriteBin 写二进制数据
6. Serial_Read 读字符串数据
#coding:utf-8 #!/usr/bin/python3 import serial import serial.tools.list_ports import threading import time __all__ = ["CSerial"] class CSerial: def __init__(self, Port, Baud, TimeOut): self.l_serial = None self.alive = False self.waitEnd = None self.port = Port self.baud = Baud self.timeOut = TimeOut self.readString = "" self.readBin = None self.receiveReady = False self.thread_SerialRead = None def Serial_Create(self): try: self.l_serial = serial.Serial(self.port, self.baud, timeout=self.timeOut) except Exception as e: print("serial port error:", e) def Serial_WriteAndReadBin(self,bin): WaitingCnt = 0 self.alive = True self.l_serial.write(bin) while self.alive: time.sleep(0.1) #1 second if self.l_serial.in_waiting: self.readBin = self.l_serial.read(self.l_serial.in_waiting) self.alive = False return self.readBin else: WaitingCnt += 1 if WaitingCnt > 3: return None return None def Serial_WriteAndReadString(self,string): WaitingCnt = 0 self.readString = "" self.alive = True self.l_serial.write(string.encode("gbk")) while self.alive: time.sleep(0.1) #1 second if self.l_serial.in_waiting: self.readString = self.l_serial.read(self.l_serial.in_waiting).decode("gbk") self.alive = False return self.readString else: WaitingCnt += 1 if WaitingCnt > 3: return None return None def Serial_ReadData(self): while self.alive: if self.l_serial.in_waiting and self.receiveReady == False: self.readData = self.l_serial.read(self.l_serial.in_waiting) self.receiveReady = True def Serial_WriteString(self,string): length = self.l_serial.write(string.encode("gbk")) return length def Serial_WriteBin(self,bin): length = self.l_serial.write(bin) return length def Serial_Read(self): if self.l_serial.in_waiting: STRGLO = self.l_serial.read(self.l_serial.in_waiting).decode("gbk") print(STRGLO) def Serial_Close(self): self.alive = False if self.l_serial.isOpen(): self.l_serial.close() #test example if __name__ == ‘__main__‘: test = CSerial("COM41",9600,100) test.Serial_Create() print(test.Serial_WriteAndReadString("hello, I am a serial port!\r\n"))
以上是关于pySerial 串口工具简介的主要内容,如果未能解决你的问题,请参考以下文章