python 动态数据 展示 ,数据是由51单片机发送过来的,温度传感器。

import tkinter as tk
import randomimport seriallis=[]
for i in range(50):lis.append(i+1)
# 打开串行端口
ser = serial.Serial('COM3', 9600)  # 9600为波特率,根据实际情况进行调整# 初始化数据
lis = [random.randint(15, 35) for _ in range(50)]def update_data():global lis# 模拟数据更新# lis = [random.randint(15, 35) for _ in range(50)]try:   if ser.in_waiting > 0:  # 如果串口有数据可读           data = ser.read()  # 读取一行数据并解码为字符串ser.reset_input_buffer()tmp=(ord(data)+100)/10print("\r测到的温度是:", tmp,'°C',end=' ')lis.append(tmp)while len(lis)>50:lis.pop(0)print(lis,end=' ')except Exception as error:print(error)ser.close()  # 捕获Ctrl+C中断信号后关闭串口    print("程序已停止")passdef draw_chart(canvas, data):canvas.delete("all")  # 清除画布上的所有内容# 以下是绘图代码,与之前相同,只是增加了canvas参数margin = 40width = 600 - 2 * marginheight = 400 - 2 * marginx_scale = width / (len(data) - 1)y_scale = height / (35 - 10)canvas.create_line(margin, 400 - margin, 600 - margin, 400 - margin)  # X轴canvas.create_line(margin, 400 - margin, margin, margin)  # Y轴for i in range(len(data)):x = margin + i * x_scaleif i % 5 == 0:  # 每5个数据点标记一次canvas.create_text(x, 400 - margin + 20, text=str(i))for value in range(int(10), int(35) + 1, 5):y = 400 - margin - (value -10) * y_scalecanvas.create_line(margin - 5, y, margin, y)canvas.create_text(margin - 20, y, text=str(value))points=[]for i in range(len(data)):x = margin + i * x_scaley = 400 - margin - (data[i] - 10) * y_scalecanvas.create_oval(x - 2, y - 2, x + 2, y + 2, fill='red')points.append((x,y))# 绘制连接线for i in range(len(points) - 1):canvas.create_line(points[i], points[i+1])def update_data_and_redraw(canvas):update_data()  # 更新数据draw_chart(canvas, lis)  # 重绘图表root.after(1000, update_data_and_redraw, canvas)  # 每隔1000毫秒(1秒)调用一次该函数# 创建窗体和画布
root = tk.Tk()
root.title("动态数据展示")
canvas = tk.Canvas(root, width=600, height=400)
canvas.pack()update_data_and_redraw(canvas)  # 开始数据更新和图形重绘的循环root.mainloop()
ser.close()  # 捕获Ctrl+C中断信号后关闭串口   

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/672196.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

时序预测 | Matlab实现基于LSTM长短期记忆神经网络的电力负荷预测模型

文章目录 效果一览文章概述源码设计参考资料效果一览 文章概述 时序预测 | Matlab实现基于LSTM长短期记忆神经网络的电力负荷预测模型 LSTM(长短期记忆)是一种递归神经网络(RNN)的变体,它在序列数据建模方面表现出色。电力负荷预测是一项重要的任务,可以利用LSTM神经网络…

Damn Small Linux 停更16年后,2024 回归更新

Damn Small Linux(DSL) 发行版释出了最新的 2024 版本,并重新定义了什么叫“Damn Small”。 DSL 诞生于 2005 年,原本是尝试提供一个 50MB 大小的 LiveCD,2008 年开发停滞。 2024 年原作者 John Andrews 宣布 DSL 复活,在几乎所…

再这么烂下去,离糊就不远了。别让才华被埋没。

♥ 为方便您进行讨论和分享,同时也为能带给您不一样的参与感。请您在阅读本文之前,点击一下“关注”,非常感谢您的支持! 文 |猴哥聊娱乐 编 辑|徐 婷 校 对|侯欢庭 近日,胡歌凭借电视剧《繁花》荣登《环球银幕》二月…

【Django】Django日志管理

Django日志管理 Django使用Python内置的logging模块处理系统日志。 1.日志框架的组成元素 Python logging 配置由下面四部分组成: Loggers Handlers 过滤器 Formatters 1.1 Loggers logger是日志系统的入口,每个 logger都是命名了的 bucket&…

一文了解C#面向对象编程:封装

在软件开发过程中,面向对象编程是一种非常流行的编程范式。它主要强调将现实世界中的问题抽象成对象,通过对象之间的交互来解决问题。C#作为.NET框架的主要编程语言,自然也支持面向对象编程。在C#中,封装是面向对象编程的三大特性…

Redis面试题43

人工智能在未来会有哪些可能的发展趋势? 答:人工智能在未来将继续迎来许多可能的发展趋势,以下是一些可能的方向: 更强大的算法和模型:人工智能算法和模型将不断改进和优化,为更复杂的数据和问题提供更强大…

rust给py写拓展如此简单

很久没写rust,主要是写业务逻辑实在用不上这高性能.不过惊奇发现rust和py结合的如此之好,记录下: 搞一个python环境,pip install maturin建立一个项目文件,cd进去 maturin init照着生成模版正常写rust,完毕后maturin develop,注意这个命令包括把拓展包安装到虚拟环境site pack…

GEE数据集——美国干旱监测数据集(更新)

美国干旱监测 美国干旱监测》是每周四发布的地图,显示美国部分地区的干旱情况。该地图采用五种分级:异常干旱(D0),显示可能进入或即将摆脱干旱的地区;四级干旱:中度(D1)、…

Java学习笔记2024/2/6

练习三:验证码 需求: 定义方法实现随机产生一个5位的验证码 验证码格式: 长度为5 前四位是大写字母或者小写字母 最后一位是数字 package com.angus.comprehensiveExercise; ​ import java.util.Random; ​ public class test3 {publ…

蓝桥杯嵌入式第8届真题(完成) STM32G431

蓝桥杯嵌入式第8届真题(完成) STM32G431 题目 分析和代码 对比第六届和第七届,这届的题目在逻辑思维上确实要麻烦不少,可以从题目看出,这届题目对时间顺序的要求很严格,所以就可以使用状态机的思想来编程,拿到类似题…

记一次使用gophish开展的钓鱼演练

这周接到客户要求,组织一次钓鱼演练,要求是发送钓鱼邮件钓取用户账号及个人信息。用户提交后,跳转至警告界面,以此来提高客户单位针对钓鱼邮件的防范意识。 与客户沟通后得知他们企业内部是由邮箱网关的,那么就意味着…

正点原子--STM32基本定时器学习笔记(1)

目录 1. 定时器概述 1.1 软件定时原理 1.2 定时器定时原理 1.3 定时器分类 1.4 定时器特性表 1.5 基本、通用、高级定时器的功能整体区别 2. 基本定时器简介 3. 基本定时器框图 时钟树分析 这部分是笔者对基本定时器的理论知识进行学习与总结!主要记录学习…

UsernamePasswordAutheticationFilter源码解读和实践

UsernamePasswordAuthenticationFilter的目录 一、概述(重点)二、标红小步骤解读2.1 步骤1(标红1)2.1.1 AbstractAuthenticationProcessingFilter2.1.2 UsernamePasswordAuthenticationFilter 2.3 步骤2 和 步骤3(标红…

【SpringBoot篇】解决Redis分布式锁的 误删问题 和 原子性问题

文章目录 🍔Redis的分布式锁🛸误删问题🎈解决方法🔎代码实现 🛸原子性问题🌹Lua脚本 ⭐利用Java代码调用Lua脚本改造分布式锁🔎代码实现 🍔Redis的分布式锁 Redis的分布式锁是通过利…

K8S二进制部署详解,你想要的都在这里

文章目录 1.k8s环境规划2.kubeadm和二进制安装k8s适用场景分析3.必备工具安装3.初始化3.1 配置静态IP3.2 配置主机名3.3 配置hosts文件3.4 配置主机之间无密码登录,每台机器都按照如下操作3.5 关闭firewalld防火墙3.6 关闭selinux3.7 关闭交换分区swap3.8 修改内核参…

synchronized 浅读解析 一

引言 在学习synchronized前,我们实际上是需要先了解Java对象在jvm中的储存结构,在了解了它的实际储存方式后,再对后边的锁学习会有一个更好更深入的理解。 一、对象结构 我们为什么要知道什么是对象头 在学习synchronized的时候&#xff0c…

nginx upstream server主动健康检测模块ngx_http_upstream_check_module 使用和源码分析(上)

目录 1. 缘起2. 配置指令2.1 check2.2 check_keepalive_requests2.3 check_http_send2.4 check_http_expect_alive2.5 check_shm_size2.6 check_status3. 加载健康检测模块3.1 模块的编译3.2 模块的配置4. 测试验证5. 思考与问题6. 源码分析1. 缘起 众所周知,nginx原生的upst…

破除Github API接口的访问次数限制

破除Github API接口的访问次数限制 1、Github介绍2、Github API接口2.1 介绍2.2 使用方法 3、Github API访问限制3.1 访问限制原因3.2 访问限制类别 4、Github API访问限制破除4.1 限制破除原理4.2 限制破除示例 1、Github介绍 Github,是一个面向开源及私有软件项目…

提升你的PHP开发效率:探索JetBrains PhpStorm 2022的全新特性

在当今快速发展的软件开发领域,选择一个强大且高效的开发工具对于提升开发效率、保证代码质量至关重要。对于PHP开发者来说,JetBrains PhpStorm一直是市场上最受欢迎的IDE之一。随着JetBrains PhpStorm 2022的发布,这款工具带来了一系列创新功…

【Docker】01 Docker安装与配置

文章目录 一、Docker二、离线安装Docker三、联网安装Docker3.1 下载YUM软件库文件3.2 安装epel-release3.3 安装yum-utils3.4 设置镜像仓库3.5 查看docker-ce所有版本3.6 安装Docker3.7 启动Docker3.8 查看Docker信息3.9 启动第一个容器 四、一些配置4.1 登录DockerHub4.2 镜像…