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字符串替换示例
Apr 24 Python
Python实现统计单词出现的个数
May 28 Python
python实现逻辑回归的方法示例
May 02 Python
python 生成器协程运算实例
Sep 04 Python
Python3爬虫学习之应对网站反爬虫机制的方法分析
Dec 12 Python
python Django里CSRF 对应策略详解
Aug 05 Python
django之自定义软删除Model的方法
Aug 14 Python
Python学习笔记之字符串和字符串方法实例详解
Aug 22 Python
django自定义模板标签过程解析
Dec 14 Python
python处理RSTP视频流过程解析
Jan 11 Python
python实现学生通讯录管理系统
Feb 25 Python
python四种出行路线规划的实现
Jun 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编程中八种常见的文件操作方式
2006/11/19 PHP
PHP操作mysql函数详解,mysql和php交互函数
2011/05/19 PHP
PHP循环遍历数组的3种方法list()、each()和while总结
2014/11/19 PHP
Javascript和Ajax中文乱码吐血版解决方案
2009/12/21 Javascript
Jquery乱码的一次解决过程 图解教程
2010/02/20 Javascript
js 程序执行与顺序实现详解
2013/05/13 Javascript
jquery自定义属性(类型/属性值)
2013/05/21 Javascript
深入学习Bootstrap表单
2016/12/13 Javascript
JQuery Ajax 异步操作之动态添加节点功能
2017/05/24 jQuery
backbone简介_动力节点Java学院整理
2017/07/14 Javascript
JavaScript监听手机物理返回键的两种解决方法
2017/08/14 Javascript
利用JavaScript缓存远程窃取Wi-Fi密码的思路详解
2018/11/05 Javascript
Vue.js 中的 v-cloak 指令及使用详解
2018/11/19 Javascript
详解react-refetch的使用小例子
2019/02/15 Javascript
jQuery中each和js中forEach的区别分析
2019/02/27 jQuery
详解微信小程序开发用户授权登陆
2019/04/24 Javascript
详解js location.href和window.open的几种用法和区别
2019/12/02 Javascript
详细分析Node.js 多进程
2020/06/22 Javascript
[04:03]DOTA2肉山黑名单梦之声 风暴之灵中文配音鉴赏
2013/07/03 DOTA
[41:52]2018DOTA2亚洲邀请赛3月29日小组赛B组Effect VS Secret
2018/03/30 DOTA
python基于urllib实现按照百度音乐分类下载mp3的方法
2015/05/25 Python
Python中字符串的修改及传参详解
2016/11/30 Python
利用django-suit模板添加自定义的菜单、页面及设置访问权限
2018/07/13 Python
Python分布式进程中你会遇到的问题解析
2019/05/28 Python
python如何获取列表中每个元素的下标位置
2019/07/01 Python
Python第三方包PrettyTable安装及用法解析
2020/07/08 Python
比利时香水网上商店:NOTINO
2018/03/28 全球购物
Woods官网:加拿大最古老、最受尊敬的户外品牌之一
2020/09/12 全球购物
简述进程的启动、终止的方式以及如何进行进程的查看
2013/07/12 面试题
文明村镇申报材料
2014/05/06 职场文书
2014班子“三严三实”对照检查材料思想汇报
2014/09/18 职场文书
党员承诺书范文2015
2015/04/27 职场文书
教师考核鉴定意见
2015/06/05 职场文书
农村婚礼司仪主持词
2015/06/29 职场文书
关于幸福的感言
2015/08/03 职场文书
利用Python实现模拟登录知乎
2022/05/25 Python