python 使用pyserial串口库开发串口工具
之前发过用tkinter库设计的串口工具UI代码,以下为python串口的逻辑代码,已整理成模块,可以随时保存下来使用。部分函数采用中文命名,只是测试中文函数是否可运行,事实证明可以正常运行。也可另外修改函数名称
1. 示例代码(MyPySerial.py)
# !/usr/bin/python 3.6.5
# coding=utf-8
import serial
import serial.tools.list_ports
import threading
'''
1、扫描串口列表
2、打开串口
3、向串口写数据
4、从串口读数据
5、关闭串口
init 初始化串口
--> 创建线程:
1. 如果串口未打开,则用于实时扫描串口,检测是否有新设备插入
有新设备插入:添加到设备列表,并刷新UI的设备列表提供选择
没有新设备:继续扫描
2. 如果串口已打开,则用于监测串口是否有接收到数据
如果有则读取数据,并发送给UI
如果没有则继续扫描
参数:主窗口,端口列表,接收窗口
返回:线程实例(用于关闭窗口前,先关闭线程)
open 打开串口
--> 参数:端口号,波特率,超时时间
返回:串口实例(打开成功)/ None(打开失败)
close 关闭串口
--> 参数:串口实例
返回:0(关闭成功)/ -1(关闭失败)
write 写数据
read 读数据
'''
SERIAL_IS_OPEN = False # 默认串口关闭
port_name_list = [] # 端口名称列表
port_com_list = [] # 端口号列表
MySerial = None # 打开的串口
def 扫描串口():
port_list = list(serial.tools.list_ports.comports())
if len(port_list) > 0:
return port_list
else:
return None
def 打开串口(port="COM4", bps=115200, timex=5):
try:
# 打开串口
ser = serial.Serial(port, bps, timeout=timex)
if ser.is_open:
global SERIAL_IS_OPEN
SERIAL_IS_OPEN = True
print("--- 串口打开 ---")
return ser
except Exception as e:
print("--- 打开异常 ---: ", e)
return None
def 发送数据(ser, text, code="utf-8"):
try:
result = ser.write(text.encode(code))
if result