Python实现Arduino串口数据实时采集并保存至Excel
本文介绍如何使用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文件。
程序运行界面效果如下:


关键配置与注意事项
注意事项:
- 串口端口号及波特率需根据电脑设备管理器中显示的COM口名称以及Arduino代码中设置的波特率进行匹配配置。
- Arduino通过串口发送的是字节串,因此在Python中接收后需先解码为UTF-8格式,再对字符串进行后续处理。
- 每次接收完数据后,必须调用函数清除串口数据缓存,以避免脏数据干扰后续读取。
总结
总结
上述内容介绍了利用Python实现Arduino串口数据传输至电脑并保存为Excel表格的方法,希望能为相关项目提供参考。如有任何疑问,欢迎留言,小编将及时回复。感谢大家对本站的支持! 若本文对您有帮助,欢迎转载,请注明出处,谢谢!
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









