Python实现Arduino串口数据实时采集并保存至Excel

Cora
Cora
发布时间:2026-10-13| 6人浏览过
原创

本文介绍如何使用Python编写上位机程序,通过pyserial模块与Arduino进行串口通信,实时读取BME280传感器数据,并利用xlwt模块将温湿度及气压数据自动保存为Excel文件。文章详细说明了波特率配置、UTF-8编码处理及缓存清理等关键步骤,提供了完整的代码实现与注意事项。

项目背景与实现原理

背景:参与学校运河杯项目,需制作天气预测装置。系统采用Arduino驱动BME280模块,并通过蓝牙模块实现两块Arduino主从机的数据透传。为了后续数据分析,需要提取传输数据。为此,使用Python开发上位机程序,利用pyserial模块建立Arduino与电脑之间的串口通信,并通过xlwt模块将数据写入Excel表格,同时使用time模块获取当前时间作为Excel文件的命名依据。

核心代码实现


import xlwt
import time
import serial
#设置表格样式
def set_style(name,height,bold=False):
 style = xlwt.XFStyle()
 font = xlwt.Font()
 font.name = name
 font.bold = bold
 font.color_index = 4
 font.height = height
 style.font = font
 return style
#写Excel
def write_excel():
 if serial.isOpen():
  print ('串口已打开\n')
 f = xlwt.Workbook()
 sheet1 = f.add_sheet('arduino_data',cell_overwrite_ok=True)
 row0 = ["temp","pres","hum"]
 time1=time.localtime(time.time())
 #写第一行
 for i in range(len(row0)):
  sheet1.write(0,i,row0[i],set_style('Times New Roman',220,True))
 i=1
 time.sleep(5)
 serial.flushInput() 
 while True:
  try:
   size = serial.inWaiting()
   if size != 0:
    response = serial.read(size)  # 读取内容并显示
    s=response.decode('utf-8').rstrip('\r\n').split('\t')
    if len(s)!=3:
     serial.flushInput()
     continue
    else:
     try:
      for j in range(len(s)):
       sheet1.write(i,j,int(s[j]),set_style('Times New Roman',220,False))
      print(s)
      serial.flushInput()     # 清空接收缓存区
      i = i+1
      time.sleep(0.5)
     except ValueError:
      serial.flushInput()
      continue
  except KeyboardInterrupt:
   time2=time.localtime(time.time())
   f.save(r'C:\Users\10020\Desktop\arduino_data\{0}.{1}_{2:0>2d}.{3:0>2d}.{4:0>2d}-{5}.{6}_{7:0>2d}.{8:0>2d}.{9:0>2d}.xls'.format\
     (time1[1],time1[2],time1[3],time1[4],time1[5],
     time2[1],time2[2],time2[3],time2[4],time2[5]))
   serial.close()
   print(time1)
   print(time2)
   quit()
if __name__ == '__main__':
 serial = serial.Serial('COM3',9600,timeout=2)
 write_excel()

运行结果与文件生成

程序运行后,将持续从串口读取Arduino发送的数据并写入Excel文件。按下Ctrl+C终止程序时,会在C:\Users\10020\Desktop\arduino_data\目录下生成以“开始运行时间-结束运行时间”为文件名的.xls文件。

程序运行界面效果如下:

关键配置与注意事项

注意事项:

  1. 串口端口号及波特率需根据电脑设备管理器中显示的COM口名称以及Arduino代码中设置的波特率进行匹配配置。
  2. Arduino通过串口发送的是字节串,因此在Python中接收后需先解码为UTF-8格式,再对字符串进行后续处理。
  3. 每次接收完数据后,必须调用函数清除串口数据缓存,以避免脏数据干扰后续读取。

总结

总结

上述内容介绍了利用Python实现Arduino串口数据传输至电脑并保存为Excel表格的方法,希望能为相关项目提供参考。如有任何疑问,欢迎留言,小编将及时回复。感谢大家对本站的支持! 若本文对您有帮助,欢迎转载,请注明出处,谢谢!

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。