用Python读取单片机串口实时画图

用Python读取单片机串口实时画图

所用库

import serial
import time
import matplotlib.pyplot as plt

从串口读取数据

需要注意的是:如果不设置循环,只读取一次,可能会因为单片机发送速率和设置时间上的不匹配导致收不到数据,解决办法就是设置一个重复循环。

import serial
serialport = serial.Serial()
serialport.port = 'COM3'
serialport.baudrate = 115200
serialport.bytesize = 8
serialport.parity = serial.PARITY_NONE
serialport.stopbits = 1
serialport.timeout = 0.001
serialport.close()

i=0
while(1):
    if not serialport.is_open:
        serialport.open()
    time.sleep(0.05)  # 时间设置参考串口传输速率
    num = serialport.inWaiting()
    if num > 0:
        data = serialport.read(num).decode('UTF-8')
        print(data)
        print(type(data))
        print(data[4:6])
        print(data[7:9])

读取实时数据画图

# -*- coding: UTF-8 -*-
import serial
import time
import matplotlib.pyplot as plt
serialport = serial.Serial()
serialport.port = 'COM3'
serialport.baudrate = 115200
serialport.bytesize = 8
serialport.parity = serial.PARITY_NONE
serialport.stopbits = 1
serialport.timeout = 0.001
serialport.close()

plt.ion() # 开启一个画图的窗口
ax = []                    # 定义一个 x 轴的空列表用来接收动态的数据
ay = []
i=0
while(1):
    if not serialport.is_open:
        serialport.open()
    time.sleep(0.05)  # 时间设置参考串口传输速率
    num = serialport.inWaiting()
    if num > 0:
        data = serialport.read(num).decode('UTF-8')
        # print(data)
        # print(type(data))
        # print(data[4:6])
        # print(data[7:9])
        tem=int(data[4:6])
        print('温度:',tem)
        dam=int(data[7:9])
        print('湿度:',dam)
        ax.append(i)  # 添加 i 到 x 轴的数据中
        ay.append(tem)
        az.append(dam)
        # plt.figure('Oil well environment monitoring and information management system - temperature detection')
        plt.figure('Temperature Detection')
        plt.clf()  # 清除之前画的图
        plt.title('Temperature line chart')
        plt.ylabel('Temperature /℃')
        plt.xlabel('Time /s')
        plt.axis([0,i+0.05, 20, 40])
        plt.plot(ax, ay)  # 画出当前 ax 列表和 ay 列表中的值的图形
        plt.pause(0.1)  # 暂停一秒
        plt.ioff()  # 关闭画图的窗口
        i=i+0.05

运行结果

chart
随着时间变化,横坐标纵坐标变化,温度也发生变化。

  • 3
    点赞
  • 50
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值