【Python 常用脚本及命令系列 1.3 -- 使用Python实现串口读写】

请阅读【嵌入式开发学习必备专栏】


文章目录

Python实现串口读写

背景

需要实现个Python脚本打开串口19并设置波特率为115200然后实现write(addr, val)read(addr)函数,其中write函数是通过在串口输入命令 devmem addr val来向地址0x80000000写入值val,比如devmem 0x80000000 0x5a5a5a, read 函数是通过在串口输入命令 devmem addr,比如 devmem 0x80000000 来读取地址0x80000000地址处的值。

下面的Python代码示例展示了如何实现writeread函数,用于通过串口发送devmem命令。这个脚本使用了pyserial库来操作串口。

确保首先安装pyserial库:

Python 复制代码
pip install pyserial

接着,可以使用以下脚本:

python 复制代码
import serial
import time

class SerialDevice:
    def __init__(self, port, baudrate=115200, timeout=1):
        self.ser = serial.Serial(port, baudrate, timeout=timeout)
        time.sleep(2)  # 等待串口初始化
    def write(self, addr, val):
        cmd = f"devmem {addr} w {val}\n"
        self.ser.write(cmd.encode())
        # 等待命令执行
        time.sleep(0.5)
        # 读取并丢弃可能的回应,确保下次读取时缓冲区是空的
        self.ser.read_all()
    def read(self, addr):
        cmd = f"devmem {addr}\n"
        self.ser.write(cmd.encode())
        # 等待命令执行并有返回值
        time.sleep(0.5)
        response = self.ser.read_all().decode().strip()
        print(f"Response: {response}")
        return response
    def close(self):
        self.ser.close()

# 示例使用
if __name__ == "__main__":
    port = '/dev/tty19'  # Linux的端口
    # port = 'COM19'  # Windows的端口
    device = SerialDevice(port)
    # 写值
    device.write("0x80000000", "0x5a5a5a")
    # 读值
    device.read("0x80000000")
    # 完成后关闭串口
    device.close()

注意事项

  • 这段代码在类SerialDevice中定义了writeread方法。write方法用于向指定地址写入值,read方法用于读取指定地址的值。
  • 请根据你的实际设备和操作系统调整串口端口(/dev/tty19COM19等)。
  • 该示例假设devmem命令的输出可以直接通过串口读取。在实际应用中,可能需要根据设备的实际反馈调整读取逻辑和等待时间。
  • time.sleep(2)在打开串口后用于等待串口初始化完成。有时在打开串口后立即发送数据,设备可能还未准备好接收,因此这里加入短暂延迟。
  • 在写操作后执行self.ser.read_all()是为了清空串口的输入缓冲区,以避免写操作的结果影响后续的读操作。这个步骤可能需要根据你的设备行为进行调整。

这个脚本提供了一个基本框架,你可能需要根据实际需求和设备特性进行调整和完善。

相关推荐
databook6 分钟前
当条形图遇上极坐标:径向与圆形条形图的视觉革命
python·数据分析·数据可视化
行者9631 分钟前
Flutter跨平台开发在OpenHarmony上的评分组件实现与优化
开发语言·flutter·harmonyos·鸿蒙
阿部多瑞 ABU35 分钟前
`chenmo` —— 可编程元叙事引擎 V2.3+
linux·人工智能·python·ai写作
acanab39 分钟前
VScode python插件
ide·vscode·python
阿蒙Amon41 分钟前
C#每日面试题-Array和ArrayList的区别
java·开发语言·c#
SmartRadio1 小时前
ESP32添加修改蓝牙名称和获取蓝牙连接状态的AT命令-完整UART BLE服务功能后的完整`main.c`代码
c语言·开发语言·c++·esp32·ble
且去填词1 小时前
Go 语言的“反叛”——为什么少即是多?
开发语言·后端·面试·go
知乎的哥廷根数学学派1 小时前
基于生成对抗U-Net混合架构的隧道衬砌缺陷地质雷达数据智能反演与成像方法(以模拟信号为例,Pytorch)
开发语言·人工智能·pytorch·python·深度学习·机器学习
WangYaolove13142 小时前
Python基于大数据的电影市场预测分析(源码+文档)
python·django·毕业设计·源码
知乎的哥廷根数学学派2 小时前
基于自适应多尺度小波核编码与注意力增强的脉冲神经网络机械故障诊断(Pytorch)
人工智能·pytorch·python·深度学习·神经网络·机器学习