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将多个excel文件合并为一个文件
Jan 03 Python
Python基于更相减损术实现求解最大公约数的方法
Apr 04 Python
基于pip install django失败时的解决方法
Jun 12 Python
Python网页正文转换语音文件的操作方法
Dec 09 Python
Python 实现文件打包、上传与校验的方法
Feb 13 Python
Python中单线程、多线程和多进程的效率对比实验实例
May 14 Python
Python3.7安装keras和TensorFlow的教程图解
Jun 18 Python
Tensorflow轻松实现XOR运算的方式
Feb 03 Python
Python中操作各种多媒体,视频、音频到图片的代码详解
Jun 04 Python
PyCharm 2020.2.2 x64 下载并安装的详细教程
Oct 15 Python
python 写一个文件分发小程序
Dec 05 Python
python实现定时发送邮件
Dec 23 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 连接mssql数据库 初学php笔记
2010/03/01 PHP
PHP扩展mcrypt实现的AES加密功能示例
2019/01/29 PHP
JavaScript高级程序设计 阅读笔记(七) ECMAScript中的语句
2012/02/27 Javascript
jQuery Ajax提交表单查询获得数据实例代码
2012/09/19 Javascript
jquery实现表格本地排序的方法
2015/03/11 Javascript
JavaScript原生对象之Number对象的属性和方法详解
2015/03/13 Javascript
JS实现具备延时功能的滑动门菜单效果
2015/09/17 Javascript
javascript冒泡排序小结
2016/04/10 Javascript
如何判断Javascript对象是否存在的简单实例
2016/05/18 Javascript
很棒的js Tab选项卡切换效果
2016/08/30 Javascript
基于jQuery实现顶部导航栏功能
2016/12/27 Javascript
Angular下H5上传图片的方法(可多张上传)
2017/01/09 Javascript
JavaScript定义函数_动力节点Java学院整理
2017/06/27 Javascript
vue中的非父子间的通讯问题简单的实例代码
2017/07/19 Javascript
python爬取安居客二手房网站数据(实例讲解)
2017/10/19 Javascript
Vue.js组件通信的几种姿势
2017/10/23 Javascript
js断点调试经验分享
2017/12/08 Javascript
解决vue打包之后静态资源图片失效的问题
2018/02/21 Javascript
vue地区选择组件教程详解
2018/05/04 Javascript
JS获取并处理php数组的方法实例分析
2018/09/04 Javascript
angular多语言配置详解
2019/05/16 Javascript
微信小程序 swiper 组件遇到的问题及解决方法
2019/05/26 Javascript
浅谈Layui的eleTree树式选择器使用方法
2019/09/25 Javascript
[48:38]DOTA2亚洲邀请赛 3.31 小组赛 B组 Mineski vs Secret
2018/03/31 DOTA
python每隔N秒运行指定函数的方法
2015/03/16 Python
python实现rsa加密实例详解
2017/07/19 Python
Python Unittest自动化单元测试框架详解
2018/04/04 Python
python 字典中文key处理,读取,比较方法
2018/07/06 Python
pytorch中获取模型input/output shape实例
2019/12/30 Python
python三引号如何输入
2020/07/06 Python
小结Python的反射机制
2020/09/28 Python
照片礼物和装饰:MyPhoto
2019/11/02 全球购物
学生实习介绍信
2014/01/15 职场文书
自动化专业大学生职业生涯规划范文:爱拚才会赢
2014/09/12 职场文书
群众路线自查自纠工作情况报告
2014/10/28 职场文书
物业工程部主管岗位职责
2015/04/16 职场文书