【PyCharm Community Edition】:串口开发

串口开发

安装模块:pyserial

Pyserial 是 Python 中使用串口通信的一个第三方库,使用它可以方便地与设备进行数据交互。

  • 方法1: CMD指令
c 复制代码
pip install pyserial

端口检查:uartDevice

获取串口相关信息:名称,属性等

c 复制代码
import serial.tools.list_ports

while True:
    print("选择使用的串口通道号")
    port_list = list(serial.tools.list_ports.comports())#获取串口列表
    print("可用的COM端口:")
    portNames = []
    for i, p in enumerate(port_list): #枚举串口列表里面的信息,便于提示打印
        portNames.append(p.name)
        print("%d. %s"%(i + 1, p.name))
        print(p)
    #等待外界选择端口序号:
    uartDevice = input().strip() #strip()作用是输入字符串时删除字符串左右两端的空格' '、换行符'\n'、制表符'\t'等
    print(uartDevice)
    try:
        uartDevice = int(uartDevice) #将uartDevice转换成十进制
        if uartDevice <= len(portNames) and uartDevice > 0:
            uartDevice = portNames[uartDevice - 1] #通过数值找出对应的端口名称比如:COM5
            break
        else:
            print("请选择正确的串口通道号")
    except:
        print("请选择正确的串口通道号")
   #这里最终得到uartDevice 的端口名称,比如:COM5

自定义文件:SerialMonitor.py

便于自己使用,可以聚合开发自己的串口服务函数。

c 复制代码
# cython: language_level=3
from serial import *
import time


class SerialMonitor():
    def __init__(self, port: str):#指定带入参数:port(类型为:字符串)
        self.port = port
        self.pwd = "mcu.v4"#与下位机通信时的密码字符

    def open(self):
        print("打开端口%s" % (self.port))
        self.serial = Serial(self.port, 460800, timeout=5)

    def close(self):
        self.serial.close()

    def setup(self):
        self.write()
        time.sleep(5)
        self.write(self.pwd)#发送解密指令
        time.sleep(0.2)
        self.write(self.pwd)
        time.sleep(0.2)
        # result = str(self.serial.read())
        # # command error
        # while len(result) > 0:
        #     self.write("Noch")
        #     time.sleep(0.2)
        #     result = str(self.read())
        # print(f'接收的反馈内容:{result}')

        print("解密成功")
        self.write("log ALL 0")#发送"log ALL 0"字符串
        result = str(self.serial.read())
        # command error
        while '[ALL] -> [OFF]' not in result:#查询想要的字符串下位机反馈:"[ALL] -> [OFF]"
            print('Resp Data is not expected:%s' % result, ' resend cmd:log ALL 0')
            time.sleep(1)
            self.write(self.pwd)
            time.sleep(0.2)
            self.write("log ALL 0")
            time.sleep(0.05)
            result = str(self.read())#读取串口获取的数据,转换成字符串
        print(f'接收的反馈内容:{result}')
        print("屏蔽所有的log成功")
        self.read()

    def read(self):
        return self.serial.read_all()

    def write(self, content: str = ""):
        content = "%s\r\n" % (content)
        content = bytes(content.encode("ascii"))
        # content = content.encode("ascii")
        self.serial.write(content)

    def flush(self):
        self.serial.flushInput()
        self.serial.flushOutput()

导入自定义文件:SerialMonitor.py

打开串口,并发送相关数据

c 复制代码
from SerialMonitor import *

serial = SerialMonitor(uartDevice)#注意uartDevice必须时端口名称,比如COM5
print("打开串口")
serial.open()#打开串口
serial.setup()#里面有一些列自定义操作

延伸阅读

c 复制代码
serial = serial.Serial('COM1', 115200) 打开COM1并设置波特率为115200,COM1只适用于Windows
print serial .portstr 能看到第一个串口的标识
serial.write("hello") 往串口里面写数据
serial.close() 关闭serial 表示的串口
serial.open() 打开串口
data = serial.read(num) 读num个字符
data = serial.readline() 读一行数据,以/n结束,要是没有/n就一直读,阻塞。
serial.baudrate = 9600 设置波特率
print serial 可查看当前串口的状态信息
serial.isOpen() 当前串口是否已经打开
serial.inWaiting() 判断当前接收的数据
serial.flushInput() 清除输入缓冲区数据
serial.flushOutput() 中止当前输出并清除输出缓冲区数据
相关推荐
像风一样自由20208 小时前
从本地到公网:Windows 下使用 Cloudflare Quick Tunnel 与 Natapp 联调 FastAPI
windows·fastapi
2601_9609067214 小时前
科技“无人区”跋涉,难度高、不确定性大
windows·macos·pycharm·myeclipse
会飞的大鱼人14 小时前
一文搞懂 Java HashSet:把它想成游乐园里只允许一次入场的盖章名单
java·开发语言·windows
ziguo112216 小时前
C/C++ 错误处理全解:从 errno 到 C++ 异常
linux·c语言·c++·windows·visual studio
王维同学17 小时前
IFEO Debugger、VerifierDlls 与 SilentProcessExit 配置
c++·windows·安全·注册表
您^_^19 小时前
使用技巧(十一):Claude Code 最强审问官 —— grill-me 深度指南,装完先别写代码
人工智能·windows·个人开发·claudecode·deepseek v4 pro
酉鬼女又兒20 小时前
[特殊字符]零基础入门AI:归纳演绎、假设空间、归纳偏好、NFL、过拟合与欠拟合、模型评估选择、超参数、性能度量、混淆矩阵、P-R曲线和F1
人工智能·windows·python·深度学习·安全·机器学习·矩阵
山城码农笑松哥21 小时前
C盘空间救星:一键无损迁移软件数据到其他盘
windows·c盘清理迁移
WangWei_CM21 小时前
IFEO Debugger、VerifierDlls 与 SilentProcessExit 配置
windows
spencer_tseng1 天前
Redis + Nacos.bat
java·windows·dos