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

文章目录

前言

博主在学习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

python 复制代码
pip3 install pyserial

同样是打开CMD来进行安装,当然也可以在Pycharm中进行安装,这里是在命令窗进行库的安装。

安装完成之后验证一下:pip3 list

查看当前安装的所以Python

程序设计

在准备好上面的步骤之后接下来就可以进行程序的设计了。📍

🔋打开Pycharm然后创建工程。点击文件,然后点击创建工程。

这里新建名为com_serial.py的文件
com_serail.py

java 复制代码
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的三轴陀螺仪数据。

相关推荐
数据智能老司机2 小时前
精通 Python 设计模式——分布式系统模式
python·设计模式·架构
数据智能老司机3 小时前
精通 Python 设计模式——并发与异步模式
python·设计模式·编程语言
数据智能老司机3 小时前
精通 Python 设计模式——测试模式
python·设计模式·架构
数据智能老司机3 小时前
精通 Python 设计模式——性能模式
python·设计模式·架构
c8i3 小时前
drf初步梳理
python·django
每日AI新事件3 小时前
python的异步函数
python
这里有鱼汤5 小时前
miniQMT下载历史行情数据太慢怎么办?一招提速10倍!
前端·python
databook14 小时前
Manim实现脉冲闪烁特效
后端·python·动效
程序设计实验室14 小时前
2025年了,在 Django 之外,Python Web 框架还能怎么选?
python
倔强青铜三16 小时前
苦练Python第46天:文件写入与上下文管理器
人工智能·python·面试