python 中Arduino串口传输数据到电脑并保存至excel表格


Posted in Python onOctober 14, 2019

起因:学校运河杯报了个项目,制作一个天气预测的装置。我用arduino跑了BME280模块,用蓝牙模块实现两块arduino主从机透传。但是为了分析,还需要提取出数据。因此我用python写了个上位机程序,用pyserial模块实现arduiho和电脑的串口通讯,再用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文件。

代码的运行效果:

python 中Arduino串口传输数据到电脑并保存至excel表格

python 中Arduino串口传输数据到电脑并保存至excel表格

 需要注意的是:

  1. 串口和波特率根据电脑上显示的COM口和设置的arduino波特率决定
  2. arduino是通过串口发送字节串到电脑,需要编码成utf-8再对字符串进行处理
  3. 每一次接受完数据要清楚数据缓存

总结

以上所述是小编给大家介绍的python Arduino串口传输数据到电脑并保存至excel表格,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

Python 相关文章推荐
python使用xlrd模块读写Excel文件的方法
May 06 Python
利用django如何解析用户上传的excel文件
Jul 24 Python
Python实现的生成格雷码功能示例
Jan 24 Python
Python中反射和描述器总结
Sep 23 Python
在Qt5和PyQt5中设置支持高分辨率屏幕自适应的方法
Jun 18 Python
Python 读取串口数据,动态绘图的示例
Jul 02 Python
Python IDE Pycharm中的快捷键列表用法
Aug 08 Python
pytorch 自定义数据集加载方法
Aug 18 Python
基于keras输出中间层结果的2种实现方式
Jan 24 Python
python实现图书馆抢座(自动预约)功能的示例代码
Sep 29 Python
python 实现朴素贝叶斯算法的示例
Sep 30 Python
selenium如何定位span元素的实现
Jan 13 Python
python实现文件批量编码转换及注意事项
Oct 14 #Python
python 正则表达式贪婪模式与非贪婪模式原理、用法实例分析
Oct 14 #Python
Python协程操作之gevent(yield阻塞,greenlet),协程实现多任务(有规律的交替协作执行)用法详解
Oct 14 #Python
Python 闭包,函数分隔作用域,nonlocal声明非局部变量操作示例
Oct 14 #Python
win10子系统python开发环境准备及kenlm和nltk的使用教程
Oct 14 #Python
python web框架Flask实现图形验证码及验证码的动态刷新实例
Oct 14 #Python
执行Django数据迁移时报 1091错误及解决方法
Oct 14 #Python
You might like
PHP中使用Session配合Javascript实现文件上传进度条功能
2014/10/15 PHP
Laravel框架模板加载,分配变量及简单路由功能示例
2018/06/11 PHP
ThinkPHP框架整合微信支付之刷卡模式图文详解
2019/04/10 PHP
php 的多进程操作实践案例分析
2020/02/28 PHP
javascript JSON操作入门实例
2010/04/16 Javascript
jQuery实战之仿淘宝商城左侧导航效果
2011/04/12 Javascript
动态创建样式表在各浏览器中的差异测试代码
2011/09/13 Javascript
九种js弹出对话框的方法总结
2013/03/12 Javascript
ie中js创建checkbox默认选中问题探讨
2013/10/21 Javascript
jquery实现checkbox 全选/全不选的通用写法
2014/02/22 Javascript
网页下载文件期间如何防止用户对网页进行其他操作
2014/06/27 Javascript
关于js原型的面试题讲解
2016/09/25 Javascript
详解node nvm进行node多版本管理
2017/10/21 Javascript
使用npm安装最新版本nodejs
2018/01/18 NodeJs
使用vue开发移动端管理后台的注意事项
2019/03/07 Javascript
微信小程序开发之左右分栏效果的实例代码
2019/05/20 Javascript
Vue指令实现OutClick的示例
2020/11/16 Javascript
Python中函数的多种格式和使用实例及小技巧
2015/04/13 Python
python创建一个最简单http webserver服务器的方法
2015/05/08 Python
使用Python的Flask框架表单插件Flask-WTF实现Web登录验证
2016/07/12 Python
对Python使用mfcc的两种方式详解
2019/01/09 Python
如何在Cloud Studio上执行Python代码?
2019/08/09 Python
python实现程序重启和系统重启方式
2020/04/16 Python
python查找特定名称文件并按序号、文件名分行打印输出的方法
2020/04/24 Python
突袭HTML5之Javascript API扩展5—其他扩展(应用缓存/服务端消息/桌面通知)
2013/01/31 HTML / CSS
LVMH旗下最大的奢侈品网站平台:24S
2020/05/24 全球购物
介绍下java.util.Arrays类
2012/10/16 面试题
领导视察欢迎词
2014/01/15 职场文书
初三开学计划书
2014/04/27 职场文书
教师遵守党的政治纪律情况对照检查材料
2014/09/26 职场文书
党员组织生活会发言材料
2014/10/17 职场文书
2014年度个人总结范文
2015/03/09 职场文书
毕业生登记表班级意见
2015/06/05 职场文书
教师节获奖感言
2015/07/31 职场文书
2019新员工心得体会
2019/06/25 职场文书
Java实现给Word文件添加文字水印
2022/02/15 Java/Android