这次使用Arduino控制板写了一个获取温度呈现实时曲线图,然后将所有数据都存储到excel表中,并且在excel中生成统计图。

代码分为两个大部分,一部分是实时获取温度,并且在matplotlib监视器中显示曲线图。这一部分我设定了x轴是随时间进行移动的,只能显示6秒内的数据;第二部分是将获取到的温度全部记录到excel表中,然后生成一个统计折线图。

在写代码过程中因为数据量不大所以全部使用了列表的形式进行储存,使用过程中可能会出现崩溃的情况。

在测试时,不知道是传感器原因还是数据读取的有问题,总是会出现获取温度的列表元素为空或者没有整数部分,所以在进行了更改通过条件判断去除了异常温度数据,还有一种是因为传感器使用不当,出现了-127的温度数据,干扰了最后统计图的效果所以这里也进行了筛除。

import xlsxwriter
import time
import serial
import datetime
import matplotlib.pyplot as plttem = []
fig, ax = plt.subplots()
def save_temp():datetime_now = []plt.ion()  # 打开交互模式plt.xlabel('DateTime') #设置x轴的标题plt.ylabel('Temperature') #设置y轴标题if serial.isOpen(): print ('串口已打开')try: #绘制实时折线图while 1:size = serial.inWaiting()if size != 0:now = datetime.datetime.now() #获取系统时间time_sh = now.strftime('%H:%M:%S') #修改时间格式response = serial.readline(1000)  # 读取内容并显示s1 = response.decode('utf-8').split() #将获取到的串口数据转化为字符串if len(s1) > 0 and len(s1[0])>3:  #这里是为了去除空数据以及传感器传回的错误数据s = float(s1[0])if s != -127: #由于传感器的问题,偶尔会出现-127的问题,这里直接去除tem.append(s) #将传感器温度加入到列表中datetime_now.append(time_sh) #为了和传感器数量保持一致,在这里添加时间轴temp_line = tem.copy() #因为x轴移动需要删除列表元素,记录数据到excel又要保存所有数据,所以需要复制date_line = datetime_now.copy()while len(temp_line) > 6: #设定在监视器中只保留6组数据,然后x轴随时间进行移动temp_line.pop(0)date_line.pop(0)ax.cla()  # clear plotjax.plot(date_line,temp_line, 'r', lw=1)  # 绘制折线图plt.pause(0.1)serial.flushInput()time.sleep(1)except KeyboardInterrupt: #将传感器数据写入excel,并生成统计图serial.close() date = datetime.datetime.now().strftime('%m-%d%H%M') #获取系统时间,为了保存excel文件时进行命名f = xlsxwriter.Workbook(r'Temp{0}.xlsx'.format(date)) #根据结束温度测试时间创建xlsx文件sheet1 = f.add_worksheet('arduino_data') #添加表bold = f.add_format({'bold': 1}) #设置格式row0 = ["date", "temp"]sheet1.write_row('A1', row0, bold) #创建第一行标题sheet1.write_column('A2', datetime_now) #写入第一列时间数据sheet1.write_column('B2', tem) #写入第二列温度数据# 创建一个柱状图(line chart)chart_col = f.add_chart({'type': 'line'})len_date = len(datetime_now)len_temp = len(tem)#设置折线图数据的范围chart_col.add_series({ 'name': ['arduino_data', 0, 1],'categories': ['arduino_data', 1, 0, len_date, 0],'values': ['arduino_data', 1, 1, len_temp, 1],'line': {'color': 'red'},})# 设置图表的title 和 x,y轴信息chart_col.set_title({'name': '温度变化表'})chart_col.set_x_axis({'name': '时间'})chart_col.set_y_axis({'name': '温度(℃)'})# 设置图表的风格chart_col.set_style(1)# 把图表插入到worksheet并设置偏移sheet1.insert_chart('C10', chart_col, {'x_offset': 50, 'y_offset': 10})f.close()if __name__ == '__main__':serial = serial.Serial('COM4',9600,timeout=2)save_temp()

Arduino获取温度实时曲线图并记录到excel生成统计图相关推荐

  1. 温度实时监控上报(客户端)

    温度实时监控上报 客户端功能 1.树莓派上运行socket客户端程序,每隔30秒以字符串"ID/时间/温度"形式上报 采样温度,其中ID为树莓派的编号,便于服务器端区别是哪个树莓派 ...

  2. php+mysql+echarts 温度实时演示

    php+mysql+echarts 温度实时演示 记录一次小项目 简介 代码部分 数据库部分 运行成功后 结语 记录一次小项目 第一次使用CSDN编辑器,排版不太合理,请大家见谅. 简介 最近跟着同学 ...

  3. CPU温度实时预警并将信息发送到钉钉

    前言: 玩树莓派难免会时常关心cpu温度,有教程可以做一个仪表盘,可以实时查看硬件相关的信息,但对于对温度控制有需求的人群来说,可能这个时候有个预警处理,会起到十分有用的效果.这里就写一篇有关这个主题 ...

  4. DynamicDataDisplay 实时曲线图的使用和沿轴移动的效果

    原文地址 由于项目需要,最近在找关于绘制实时曲线图的文章,但看了很多自己实现的话太慢,所以使用了第三方控件来实现(由于是项目中使用所以我比较倾向与开源的项目,如果出问题的话可以很好的找到根源).这里记 ...

  5. 用C 绘制实时曲线图

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 在实际项 ...

  6. python 股票实时数据接口_获取股票实时数据的接口

    记录下获取股票实时数据的接口,记录下. 以基金兴和500018为例 ****************************** 新浪的接口: http://hq.sinajs.cn/list=sh5 ...

  7. esp8266 获取 NTP 实时时间

    esp8266 获取 NTP 实时时间 esp8266 获取 NTP 实时时间 开发环境: 背景: NTPClient 库的安装 打开库 Demo 程序 程序设计 [WIFI连接] [NTP连接] [ ...

  8. 通过Temboo实现从Arduino获取雅虎天气信息

    如果问我未来的科技行业发展有哪些亮点的话,我必须说物联网一定是其中之一.物联网技术发展迅速,现在我们已经看到非常多的设备通过互联网互相通信了.物联网技术的发展背后的推动因素之一是Arduino和Ras ...

  9. Arduino-ESP8266传感器获取温度湿度

    开发环境 OS:win10x64 Arduino: 1.8.19 开发板:ESP8266 温湿度传感器:未知,不会看 实物图 蓝色的就是温湿度传感器了. 获取到的结果 摄氏温度:Read temp1 ...

最新文章

  1. 菜鸟学算法一基础知识篇
  2. 面对0基础学IT的一些感想
  3. c++中类的定义与头文件的关系
  4. 使命召唤5该服务器没有响应,使命召唤5突然就建不了服务器了~~~求高人帮忙~~...
  5. Spring+SpringMVC项目搭建
  6. Android应用程序键盘(Keyboard)消息处理机制分析(8)
  7. Beta冲刺 (7/7)
  8. STM32学了很久,我还是不会做项目。
  9. ubuntu服务器ssh登录密码修改,Ubuntu-18.04 下修改root用户密码,安装SSH服务,允许root用户远程登录,安装vsftp服务器...
  10. 如何使用PowerShell将VS Code扩展导出到另一台计算机
  11. P1165 日志分析 洛谷
  12. 机器学习面试知识点总结
  13. 15分钟快速搭建属于自己的网站
  14. set(gca,'fontsize',8);
  15. 户外便携吹尘器方案浅析
  16. 防火墙网络地址转换技术
  17. 互联网巨头们的地摊争夺战
  18. 基于高通芯片组的广和通FM150 5G模组GPS测试演示
  19. 解读区块链技术中的“不可能三角”
  20. 2021年中国互联网广告市场年度分析

热门文章

  1. 浏览器开发者工具的使用
  2. SpringBoot整合Mybatis+人大金仓(kingbase8)
  3. 【分类】在分类中如何处理训练集中不平衡问题
  4. java四大作用域_Java四大作用域
  5. C++实现鼠标控制 封装常见的模拟鼠标、键盘的操作函数
  6. Ceph存储基本使用
  7. 百度Echarts停用怎么看
  8. 【设计模式】(四)抽象工厂模式(Abstract Factory Pattern)
  9. Docker进入容器命令
  10. LiDAR三维激光扫描/无人机倾斜摄影空间实景三维点云信息如何服务于BIM正向设计应用?