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

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中断信号后关闭串口   

相关推荐

  1. 51单片机 温度传感器数据,传到上位机

    2024-02-07 08:14:02       32 阅读
  2. 51单片机温湿数据管理系统

    2024-02-07 08:14:02       35 阅读
  3. 51单片机温湿数据管理系统

    2024-02-07 08:14:02       32 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-02-07 08:14:02       17 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-02-07 08:14:02       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-02-07 08:14:02       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-02-07 08:14:02       18 阅读

热门阅读

  1. dynamic_cast运行阶段类型识别

    2024-02-07 08:14:02       33 阅读
  2. 详细了解Node.js的配置与使用!

    2024-02-07 08:14:02       27 阅读
  3. Python程序设计 深浅拷贝

    2024-02-07 08:14:02       30 阅读
  4. 腾讯云主机部署spring boot程序

    2024-02-07 08:14:02       30 阅读
  5. 时序数据库m3db集群二进制部署

    2024-02-07 08:14:02       31 阅读
  6. PoEAA笔记-7.分布策略

    2024-02-07 08:14:02       29 阅读
  7. docker-compose部署gitlab和jenkins

    2024-02-07 08:14:02       31 阅读
  8. Cesiumjs 添加自定义文案

    2024-02-07 08:14:02       37 阅读
  9. MIT-Missing Semester_Topic 6:Version Control (Git) 练习题

    2024-02-07 08:14:02       32 阅读
  10. ES鉴权设计以及相关探讨

    2024-02-07 08:14:02       34 阅读
  11. MogaNet:高效的多阶门控聚合网络

    2024-02-07 08:14:02       25 阅读