'' '- Привет всем, у меня небольшая проблема, любая помощь действительно ценится, у меня есть оборудование, которое измеряет температуру и влажность. Я использую python для отображения графика в реальном времени
проблема: через 10 секунд xось затопляется со временем, пожалуйста, смотрите фото, чтобы получить четкое представление о проблеме
как мне избавиться от этой проблемы Ось X не очищена, поскольку новые и новые данные приходят вовремя, сжимаются на х-axis.
Кроме того, у меня есть функция, которая добавляет данные в базу данных. Я хочу добавить эти данные через каждые 10 секунд.сон не работает
'' '
import serial
import sqlite3
import datetime
import time
import matplotlib.pyplot as plt
from matplotlib import style
import matplotlib.animation as animation
from matplotlib.backends.backend_tkagg import
FigureCanvasTkAgg ,NavigationToolbar2Tk
import threading
style.use('ggplot')
fig=plt.figure()
ax1=fig.add_subplot(111)
x_axis=[] # time in str
y_axis_t=[] # contains live data from sensor
y_axis_h=[]
def add_db(time,t,h,dt):
conn=sqlite3.connect('Temperature.db')
c=conn.cursor()
c.execute("""
CREATE TABLE IF NOT EXISTS data
(Time TEXT,Temperature TEXT,Humidity TEXT,Date TEXT)""")
c.execute(""" INSERT INTO data
(Time, Temperature, Humidity, Date)
VALUES (?, ?, ?, ?)""", (time, t, h, dt))
conn.commit()
c.close()
conn.close()
def read_data():
arduinodata =serial.Serial('COM8',9600,timeout=0.1)
while arduinodata.inWaiting:
val=arduinodata.readline().decode('ascii')
if len(val) == 13 :
return val
def process():
h,t=read_data().split(',')
mytime = datetime.datetime.now()
tm= '{}:{}:{}'.format(mytime.hour,mytime.minute,mytime.second)
dt= '{}/{}/{}'.format(mytime.month,mytime.day,mytime.year)
print(tm,str(t),str(h),str(dt),end='')
x_axis.append(tm)
y_axis_t.append(t)
y_axis_h.append(h)
return tm,str(t),str(h),str(dt)
def animate(i):
ax1.clear()
tm,t,h,dt=process()
# i want to convert x axis time to timestamp how ?
ax1.plot(y_axis_t,label='Temperature',color='r')
ax1.fill_between(x_axis, y_axis_t, color='r', alpha=0.2)
# i want to convert x axis time to timestamp how ?
ax1.plot(x_axis,y_axis_h, label='Humidity',color='b')
ax1.fill_between(x_axis, y_axis_h, color='b', alpha=0.2)
for label in ax1.xaxis.get_ticklabels():
label.set_rotation(45)
plt.xlabel('Time ')
plt.ylabel('Temperature in C and Humidity in %')
plt.title('DHT-11 Sensor Graph ')
plt.legend()
if __name__ == '__main__':
ani=animation.FuncAnimation(fig, animate, interval=1000)
plt.show()
На рисунке видно, как сжимается ось x, когда поступает больше данных