当前位置: 首页 > article >正文

Python与MCU通信:串口数据采集及CSV/Excel存储方法

文章目录

    • 前言
    • 准备
      • 1、Python
      • 2、PyCharm
      • 3、安装```Pyserial```库
    • 程序设计
    • 实现现象
    • 总结

前言

博主在学习nxp 公司推出的eiq toolkits(机器学习套件)时,使用官方的功能进行处理数据,但是结果不尽人意,所以在深思之后决定使用Python 脚本来实现用户数据的采集,遂有此文。

准备

这里需要用到Python,关于python的简介这里就不做过多的介绍了,相信大家都是使用Python的老手了。运行Python的IDE,虽然Python在按照之后可以进行命令行的方式进行运行代码,但是此种方式不直观,开发的效率低,这里使用Pycharm进行开发。

1、Python

这里大家需要安装python,版本不做要求。如果没有安装可以参考以下的连接进行下载安装,选择默认的安装方式即可。
Python:Python下载连接
验证:打开系统的CMD命令窗,快捷键是Win+R
在这里插入图片描述
输入CMD命令之后进去命令窗口,输入python就可以知道有没有安装好python了
在这里插入图片描述

2、PyCharm

这里选择Pycharm进行开发也是看重了其简洁和直观,安装的步骤就不做过多介绍了,如果没有安装可以参考如下的下载连接进行下载安装。
下载连接:Pycharm

3、安装Pyserial

这个库是Python用来读取串口数据的库,本次需要用到串口数据,所以需要安装这个库来进行和MCU的串口进行数据的采集。在Python中使用pip命令来进行库的安装
参考命令是pip3 install xxxx这里的xxx是pyserial

pip3 install pyserial

同样是打开CMD来进行安装,当然也可以在Pycharm中进行安装,这里是在命令窗进行库的安装。
在这里插入图片描述
安装完成之后验证一下:pip3 list
查看当前安装的所以Python
在这里插入图片描述

程序设计

在准备好上面的步骤之后接下来就可以进行程序的设计了。📍
🔋打开Pycharm然后创建工程。点击文件,然后点击创建工程。
在这里插入图片描述
这里新建名为com_serial.py的文件
com_serail.py

import serial  # 引入串口库
def Com_serial_get_data(Port, Baud, Timeout, Line, Filename, NumLines):
    # 初始化串口对象,但不立即打开串口
    ser = serial.Serial()
    ser.port = Port
    ser.baudrate = Baud
    ser.timeout = Timeout

    # 打开文件准备写入
    print("准备打开串口\r\n")
    with open(Filename, 'w') as file:
        # 打开串口
        ser.open()
        for i in range(NumLines):
            line = []
            while len(line) < Line:
                try:
                    data = ser.readline().decode().strip()
                    if data:
                        numbers = list(map(float, data.split()))
                        line.extend(numbers)
                except serial.SerialException as e:
                    print(f"Serial exception: {e}")
                    break
                except ValueError as e:
                    print(f"Value error: {e}")
                    continue

            # 写入行数据到文件
            file.write(' '.join(map(str, line)) + '\n')

            # 更新进度条
            progress = (i + 1) / NumLines
            print(f"\rProgress: [{'=' * int(20 * progress)}{' ' * (20 - int(20 * progress))}] {int(100 * progress)}%",
                  end="")

        # 结束进度条
        print("\n数据采集----------> OK! \r\n")
        # 关闭串口
        ser.close()
        print("\n关闭串口成功!\r\n")
# 使用示例
Port = 'COM41'
Baud = 115200
Timeout = 1
Line = 384  # 每行需要保存的样本数
Filename = 's_fan_on.csv'  # 保存数据的文件名
NumLines = 40  # 需要收集的行数

Com_serial_get_data(Port, Baud, Timeout, Line, Filename, NumLines)

使用示例

名称用途
Port串口号
Buad波特率
Lin多少个数换行
Filename文件名
NumLines需要收集的样本数量
然后调用函数传入参数即可

Com_serial_get_data(Port, Baud, Timeout, Line, Filename, NumLines)
在示例中可以选择保存的文件格式,可以保存为.txt(文本格式),.CSV(excel格式)。

实现现象

找到串口,然后配置正确的波特率,就可以开始采集数据了,采集的结果会展示在旁边的目录下。
在这里插入图片描述

总结

本章主要介绍了如何使用python的pyserial库来采集的mux的数据,这里采集的数据是muc的数据,采集IMU的三轴陀螺仪数据。


http://www.kler.cn/a/556439.html

相关文章:

  • CloudMounter for Mac v4.11 挂载云盘为本地磁盘 支持M、Intel芯片
  • 教育界的“元宇宙”:虚拟展厅如何重塑学习世界
  • Day8 25/2/21 FRI
  • 破局与重构:水务企业数字化转型路径探索
  • 解决elementUi el-select 响应式不生效的问题
  • 使用 pjsua2 开发呼叫机器人,批量拨打号码并播放固定音频
  • Windows 下免费开源的多格式文件差异对比工具
  • 什么是逻辑分析仪?
  • 【C# 数据结构】队列 FIFO
  • HTML 中的 Canvas 样式设置全解
  • 【deepseek】Ubuntu/centos系统中无法直接git clone下载模型的解决方法(手动下载)
  • js面试八股
  • ESP32 websocket-client
  • DuodooBMS源码解读之 purchase_change 模块
  • ABAP数据库表的增改查
  • 深入理解 SQL 注入漏洞及解决方案
  • QTextEdit达到指定行数自动清理+光标移动到末端(QT/C++)
  • 【CXX】4.1 CXX与Cargo集成配置详解
  • DeepSeek04-导出导入模型文件
  • Bootstrap Blazor UI 中 <Table> 组件 <TableColumn> 使用备忘01:EF Core 外码处理