使用 Python 管理串口通信:实现一个串口管理器


程序员老茶

🙈作者简介:练习时长两年半的Java up主
🙉个人主页:程序员老茶
🙊 P   S : 点赞是免费的,却可以让写博客的作者开心好久好久😎
📚系列专栏:Java全栈,计算机系列(火速更新中)
💭格   言:种一棵树最好的时间是十年前,其次是现在
🏡动动小手: 点个关注不迷路,感谢宝子们一键三连

目录

  • 课程名:Python
    • 内容/作用:知识点/设计/实验/作业/练习
    • 学习:使用 Python 管理串口通信:实现一个串口管理器
    • 使用 Python 管理串口通信:实现一个串口管理器
    • 代码实现
      • 主要功能介绍
      • 菜单操作
      • 运行示例
    • 总结

课程名:Python

内容/作用:知识点/设计/实验/作业/练习

学习:使用 Python 管理串口通信:实现一个串口管理器

使用 Python 管理串口通信:实现一个串口管理器

在嵌入式系统开发和调试中,串口通信是一项基本技能。本文将介绍如何使用 Python 和 pySerial 库来实现一个简易的串口管理工具。我们将展示一个完整的类来管理串口的打开、关闭和数据传输操作。

代码实现

以下是我们实现的一个名为 SerialPortManager 的类,它提供了打开、关闭串口以及发送 AT 命令的功能。

import serial
import timeclass SerialPortManager:def __init__(self):self.com_port = Noneself.at_commands_sent = []def open_port(self, port_name):try:self.com_port = serial.Serial(port_name, baudrate=9600, bytesize=serial.EIGHTBITS,stopbits=serial.STOPBITS_ONE, parity=serial.PARITY_NONE,timeout=1)if self.com_port.is_open:return "Port opened successfully"else:return "Error: Port could not be opened"except Exception as e:return f"Error: {str(e)}"def write_to_port(self, at_command):try:if self.com_port is not None and self.com_port.is_open:# 发送ASCII值print(f"写入={at_command.encode('ascii').decode('ascii')}")self.com_port.write(at_command.encode('ascii'))self.com_port.flush()# 稍等待响应time.sleep(1)# 读取返回的数据read_buffer = self.com_port.read(1024)# 过滤掉非ASCII字符data = ''.join(char for char in read_buffer.decode('latin-1') if char.isascii())print(f"Received data: {data}")self.record_at_command_sent(at_command)return dataelse:return "Error: Port is not open"except Exception as e:return f"Error: {str(e)}"def close_port(self):if self.com_port is not None:self.com_port.close()self.com_port = None@staticmethoddef convert_hex_array_to_byte_array(hex_array):return bytes(int(hex_str, 16) for hex_str in hex_array)def record_at_command_sent(self, at_command):self.at_commands_sent.append(at_command)def get_at_commands_sent(self):return self.at_commands_sent

主要功能介绍

  1. 初始化: __init__ 方法初始化类的实例变量。
  2. 打开串口: open_port 方法尝试打开指定的串口,如果成功则返回成功信息,否则返回错误信息。
  3. 写入数据到串口: write_to_port 方法发送 AT 命令并读取响应。
  4. 关闭串口: close_port 方法关闭已打开的串口。
  5. 记录发送的 AT 命令: record_at_command_sent 方法记录已经发送的 AT 命令。
  6. 获取已发送的 AT 命令: get_at_commands_sent 方法返回所有已发送的 AT 命令列表。

菜单操作

我们还实现了一个简单的菜单程序,允许用户通过命令行打开串口、发送命令和关闭串口。

def menu():spm = SerialPortManager()port_opened = Falsewhile True:print("\n--- Serial Port Menu ---")print("1. Open Port")print("2. Send Command")print("3. Close Port")print("4. Exit")choice = input("Enter your choice: ")if choice == '1':if port_opened:print("Port is already opened.")else:port_name = input("Enter port name (e.g., COM3): ")result = spm.open_port(port_name)print(result)if "successfully" in result:port_opened = Trueelif choice == '2':if not port_opened:print("Please open the port first.")else:command = input("Enter command to send: ")response = spm.write_to_port(command)print("Response: ", response)elif choice == '3':if not port_opened:print("Port is not open.")else:spm.close_port()print("Port closed successfully.")port_opened = Falseelif choice == '4':if port_opened:spm.close_port()print("Port closed successfully.")print("Exiting...")breakelse:print("Invalid choice. Please try again.")# 用法示例
if __name__ == "__main__":menu()

运行示例

  1. 打开串口: 提示用户输入串口名称(例如 COM3),并尝试打开。
  2. 发送命令: 用户可以输入 AT 命令,程序将发送命令并打印响应。
  3. 关闭串口: 关闭当前打开的串口。
  4. 退出程序: 关闭串口并退出程序。

通过以上代码,我们实现了一个基本的串口管理工具,能够帮助开发者进行串口通信的测试和调试。希望这篇博客能为你的开发工作带来帮助!

总结

   感谢小伙伴们一键三连,咱们下期文章再见~


往期精选

第1集:SpringCloud:认识微服务
第2集:SpringCloud:服务拆分和远程调用
第3集:SpringCloud:Eureka注册中心


往 期 专 栏
Java全栈开发
数据结构与算法
计算机组成原理
操作系统
数据库系统
物联网控制原理与技术

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/18110.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

干货分享 —— 如何开展web项目自动化测试!

前言 自动化(Automation)是指机器设备、系统或过程(生产、管理过程)在没有人或较少人直接参与的情况下,根据人的要求,通过自动检测、信息处理、分析判断、操纵和控制,达到预期目标的过程。自动化测试是指测试过程是在没有人为或较少人为干预…

milvus 中的集合与 database

在Milvus中,集合(Collection)和数据库(Database)是两个不同的概念,它们之间存在一定的关系。 1. 数据库(Database) 数据库是Milvus中的最顶层的组织单位,可以理解为一个…

从零构建vue3+ts+vite项目打包及项目依赖配置

❗️❗️❗️❗️ 写在最前: 本文是根据B站作者 月光分层 视频vuets 工程化配置以及作者笔记稍作整理 💖💖作者B站地址https://space.bilibili.com/14110850 💖💖视频教程地址vuets 工程化配置 💖💖作者微信…

【计算机毕业设计】安卓054基于Android校园助手

🙊作者简介:拥有多年开发工作经验,分享技术代码帮助学生学习,独立完成自己的项目或者毕业设计。 代码可以私聊博主获取。🌹赠送计算机毕业设计600个选题excel文件,帮助大学选题。赠送开题报告模板&#xff…

LAMP源码编译安装——CentOS7

文章目录 LAMP是什么LAMP软件组件LinuxApacheMySQLPHP 源码安装Apache一、准备工作二、安装环境依赖包三、配置软件模块四、编译及安装五、优化配置文件路径六、添加httpd系统服务(有两种方法)方法一:方法二: 七、修改httpd 服务配…

2024HBCPC:C Goose Goose Duck

题目描述 Iris 有 n n n 个喜欢玩鹅鸭杀的朋友,编号为 1 ∼ n 1∼n 1∼n。 假期的时候,大家经常会在群里问有没有人玩鹅鸭杀,并且报出现在已经参与的人数。 但是每个人对于当前是否加入游戏都有自己的想法。 具体的来说,对于第…

【Python音视频技术】用moviepy实现图文成片功能

今天上班的时候看到有人群里问 图文成片怎么实现。 临时给我提供一点写作的灵感,趁着下班写一篇。这里用到 python的moviepy库, 之前文章介绍过。 大体思路:假定有4张图片,每张图片将在视频中展示2秒钟,并且图片会按照…

公告:关于博主的重要通知

大家好,我是博主夏目。 本期不分享知识,博主想说明一下博主的一些重要提示。 分享的内容,从不收费,也未向任何人进行收费。 意在分享知识,传播文化,结交更多志同道合的朋友。 截至目前,从未…

如何选择一个AI大模型的私家炼丹炉

随着计算机图形处理技术的不断进步,NVIDIA作为图形处理器(GPU)的领先制造商,其推出的RTX系列消费级显卡在性能和技术创新方面均引起了广泛关注。依托这些消费级显卡性能的突飞猛进,AI炼丹师们也有望将大模型训练、推理…

《C++ Primer Plus》第十二章复习题和编程练习

目录 一、复习题二、编程练习 一、复习题 1. 假设String类有如下私有成员: // String 类声明 class String { private: char* str;int len;// ... };a. 下述默认构造函数有什么问题? String::String() { } // 默认构造函数b. 下述构造函数有什么问题…

go语言函数之defer

Go函数里面提供了defer关键字,可以注册多个延迟调用,这些调用以先进后出(FILO)的顺序在函数返回前被执行。这点有点类似java语言中异常处理中的的finaly子句,defer常用于保证一些资源最终一定能够得到回收和释放。 pa…

VirtualBox+Ubuntu22.10+Docker+ROS2

Docker 拉取ros2镜像 docker pull osrf/ros:foxy-desktop 运行 docker run -it --nameros2 -p 50022:22 osrf/ros:foxy-desktop 进入容器安装组件 apt-get update apt-get install vim apt-get install git apt-get install net-tools # 安装ssh apt-get install openssh…

Java面试题分享0519

目录 1、重载和重写区别? 2、构造器(Constructor)是否可被重写(override) 3、break 、continue 、return 作用? 4、JAVA 创建对象有哪些方式? 5、 和 equals 有什么区别? 6、I…

centos下给es7.12.1设置密码

安装可参考: centos7下安装elasticsearch7.8.1并配置远程连接_在一台服务器centos7上安装和配置elasticsearch。-CSDN博客 1、先停掉es进程 2、设置输入密码后访问配置 cd /home/soft/elasticsearch-7.12.1/config vim elasticsearch.yml 3、启动es服务 cd /home/…

香橙派 AIpro开发板初上手

一、香橙派 AIpro开箱 最近拿到了香橙派 AIpro(OrangePi AIpro),下面就是里面的板子和相关的配件。包含主板、散热组件、电源适配器、双C口电源线、32GB SD卡。我手上的这个是8G LPDDR4X运存的版本。 OrangePi AIpro开发板是一款由香橙派与华…

VUE3 学习笔记(4):VUE 事件处理、传参、事件修饰

常见的Web事件 页面事件 Onload --加载 Onunload --取消 Onscroll --滚动 Onresize --大小改变 表单事件 Onsubmit --提交 onchange --变更 Onselect --选择 Onreset --重置 焦点事件 Onfocus --得到焦点 Onblur --失去焦点 鼠标事件 Onclick --点击 Ondbclick --双击 onmouseu…

在Python中实现限定抽奖次数的机制

目录 一、引言 二、需求分析 三、设计思路 四、代码实现 4.1 使用字典存储用户抽奖次数 4.2 使用数据库存储用户抽奖次数 五、扩展与优化 六、总结 一、引言 在当今互联网应用中,抽奖系统作为吸引用户、提高用户参与度和活跃度的重要手段,已经被…

ideavim与vim相关笔记

本文主要用于记录一些使用 vim/ideavim 开发的心得笔记,为了速度也为了折腾 强烈的个人向 笔记 ideavim 与 vim 混杂,无序但使用二级标题做大分类,当字典用,默认 vim 和 ideavim 通用,不通用会标记出来 文件操作 刷新重载当前打开…

为什么配置了安全组还是有攻击进来?

面对DDoS攻击,即使配置了安全组规则来限制入站流量,攻击者仍可能找到绕过这些基本防护措施的方法,尤其是当攻击流量巨大时。这是因为安全组主要工作在网络层和传输层,它们依据IP地址、协议和端口号来过滤流量,对于应用…

AttributeError: module ‘numpy‘ has no attribute ‘bool‘

报错内容: AttributeError: module numpy has no attribute bool. np.bool was a deprecated alias for the builtin bool. To avoid this error in existing code, use bool by itself. Doing this will not modify any behavior and is safe. If you specifically…