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

news2025/1/17 10:20:57

import tkinter as tk
import random

import serial




lis=[]
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)/10
            print("\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("程序已停止")
        pass

def draw_chart(canvas, data):
    canvas.delete("all")  # 清除画布上的所有内容

    # 以下是绘图代码,与之前相同,只是增加了canvas参数
    margin = 40
    width = 600 - 2 * margin
    height = 400 - 2 * margin
    x_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_scale
        if 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_scale
        canvas.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_scale
        y = 400 - margin - (data[i] - 10) * y_scale
        canvas.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.coloradmin.cn/o/1442103.html

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

相关文章

【深度学习:Bard】我们 AI 之旅的重要下一步

【深度学习:AI 之旅】我们 AI 之旅的重要下一步 Bard简介将 AI 的优势带入我们的日常产品中帮助开发人员利用 AI 进行创新大胆负责 人工智能是我们今天正在研究的最深刻的技术。无论是帮助医生更早地发现疾病,还是使人们能够用自己的语言获取信息&#x…

2024年10 个好用的AI简历工具盘点推荐

在职场竞争激烈的今天,一份出色的简历就像是你的秘密武器,能帮你在众多候选人中脱颖而出,赢得面试宝座。随着 ChatGPT 引领的 AI 浪潮席卷而来,各式各样的 AI 简历工具如雨后春笋般涌现。面对这样的背景,神器集今天为大…

立面效果图为何要用云渲染100?渲染100邀请码1a12

建筑设计是一门艺术,而立面效果图是艺术的展现,它在设计中非常重要。 1、立面效果图的重要性 立面效果图能用来展示建筑物的风格、材质、色彩以及环境等因素,通过它,设计师可以检验项目质量,评估效果是否达到预期&…

【开源】基于JAVA+Vue+SpringBoot的课程案例资源库系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 管理员需求分析2.2 用户需求分析 三、系统设计3.1 业务流程设计3.1.1 管理员业务流程设计3.1.2 用户业务流程设计3.1.3 首页功能模块及业务流程分析3.1.4 案例资源中心功能模块及业务流程分析3.1.5 用户信息中心功能模块…

C语言笔试题之求出二叉树的最大深度(递归解决)

实例要求: 1、给定一个二叉树 root ,返回其最大深度;2、二叉树的 最大深度 是指从根节点到最远叶子节点的最长路径上的节点数; 案例展示: 实例分析: 1、判断根节点是否为空;2、分别递归处理左…

Python环境下基于指数退化模型和LSTM自编码器的轴承剩余寿命预测

滚动轴承是机械设备中关键的零部件之一,其可靠性直接影响了设备的性能,所以对滚动轴承的剩余使用寿命(RUL)进行预测是十分必要的。目前,如何准确地对滚动轴承剩余使用寿命进行预测,仍是一个具有挑战的课题。对滚动轴承剩余寿命评估…

C语言中的数据类型-强转

强制类型转换 概念:将某种类型的数据转化我们需要的数据类型,注意强制类型转化是临时强转,不会改变本身的数据类型。 强转又分为显式强转和隐式转化 显示强转是按照我们的要求进行转化 格式:(需要转化数据类型)变量名 #inclu…

VUE学习——事件处理

事件分为内联事件和方法事件。 我们可以使用【v-on】&#xff08;简写&#xff1a;&#xff09;来处理。 内联 <button v-on:click"count">按钮</button><button click"count">按钮</button><p>{{ count }}</p>方法

YouTrack 用户登录提示 JIRA 错误

就算输入正确的用户名和密码&#xff0c;我们也得到了下面的错误信息&#xff1a; youtrack Cannot retrieve JIRA user profile details. 解决办法 出现这个问题是因为 YouTrack 在当前的系统重有 JIRA 的导入关联。 需要把这个导入关联取消掉。 找到后台配置的导入关联&a…

图灵日记之java奇妙历险记--抽象类和接口

目录 抽象类概念抽象类语法 接口概念规则使用特性实现多个接口接口的继承接口使用实例Clonable接口和深拷贝抽象类和接口的区别 Object类 抽象类 概念 在面向对象的概念中,所有对象都是通过类来描述的,但是反过来,并不是所有的类都是用来描绘对象的,如果一个类中没有包含足够…

java SpringBoot2.7整合Elasticsearch(ES)7 带条件分页查询与不带条件分页查询演示讲解

上文 java SpringBoot2.7整合Elasticsearch(ES)7 进行文档增删查改 我们带着大家 整合了 Elasticsearch 对索引中的文档做了 各方面操作 然后 我们来说说 分页查询 这里 为了方便大家看 我加了五条数据进去 这里 我们仍然需要带个条件 这里 我们用name Mapper 接口 加一个这…

【开源】SpringBoot框架开发桃花峪滑雪场租赁系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 游客服务2.2 雪场管理 三、数据库设计3.1 教练表3.2 教练聘请表3.3 押金规则表3.4 器材表3.5 滑雪场表3.7 售票表3.8 器材损坏表 四、系统展示五、核心代码5.1 查询教练5.2 教练聘请5.3 查询滑雪场5.4 滑雪场预定5.5 新…

高职单招怎么搜答案? #经验分享#微信#笔记

当今社会&#xff0c;随着信息技术的迅猛发展&#xff0c;大学生们在学习过程中面临着各种各样的困难和挑战。而在这些挑战中&#xff0c;面对繁重的作业和复杂的题目&#xff0c;大学生搜题软件应运而生 1.题老大 这是一个公众号 亿级数量题库&#xff0c;可截图搜题&#…

戴上HUAWEI WATCH GT 4,解锁龙年新玩法

春节将至&#xff0c;华为WATCH GT 4作为一款颜值和实力并存的手表&#xff0c;能为节日增添了不少趣味和便利。无论你是钟情于龙年表盘或定制属于自己的表盘&#xff0c;还是过年用来抢红包或远程操控手机拍全家福等等&#xff0c;它都能成为你的“玩伴”。接下来&#xff0c;…

ArcGIS学习(四)坐标系-1

ArcGIS学习(四)坐标系 大家平时在处理数据的时候肯定经常遇到坐标系相关的问题。最常见的就是同一个地区的两个数据,导入ArcGIS内却对不上;也肯定听到过坐标系相关的一些词语,比如地理坐标系投影坐标系、投影、WGS1984坐标、CGCS2000坐标系、火星坐标系、百度坐标系等。 …

C#在设备数据采集中的应用

设备数据采集在现代工业生产中扮演着至关重要的角色。随着工业互联网的发展&#xff0c;设备数据采集技术已经成为了智能制造的基础之一。在这篇文章中&#xff0c;我们将探讨C#语言在设备数据采集中的应用。 首先&#xff0c;让我们来了解一下设备数据采集的概念。设备数据采集…

linux 07 存储管理

02. ext4是一种索引文件系统 上面是索引节点inode&#xff0c;存放数据的元数据 下面是存储块block&#xff0c;主要存放有关的信息 03.linux上的inode 查看文件中的inode ll -i 文件名 磁盘中的inode与文件数量 向sdb2中写文件&#xff1a; 结果&#xff1a; df -i 磁…

倒计时59天

(来源&#xff1a;b站左程云up 099&#xff09; 一&#xff1a;求逆元&#xff1a; 1&#xff09;要保证a可以整除b 2)要保证mod的是一个质数 3&#xff09;b和mod互质 题目2&#xff09;3&#xff09;一般都满足&#xff0c;主要是1) 方法&#xff1a;如求1.…

DC-9靶机渗透详细流程

信息收集&#xff1a; 1.存活扫描&#xff1a; arp-scan -I eth0 -l 发现靶机ip&#xff1a;192.168.10.132 └─# arp-scan -I eth0 -l 192.168.10.1 00:50:56:c0:00:08 (Unknown) 192.168.10.2 00:50:56:e5:b1:08 (Unknown) 192.168.10.132 //靶机 00:0c…

华清作业day56

SQLite特性&#xff1a; 零配置一无需安装和管理配置&#xff1b;储存在单一磁盘文件中的一个完整的数据库&#xff1b;数据库文件可以在不同字节顺序的机器间自由共享&#xff1b;支持数据库大小至2TB&#xff1b;足够小&#xff0c;全部源码大致3万行c代码&#xff0c;250KB…