所用库
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
运行结果
随着时间变化,横坐标纵坐标变化,温度也发生变化。