В настоящее время я делаю проект, который требует мониторинга в реальном времени различных величин, таких как температура, давление, влажность и т. Д. Я следую за подходом к созданию отдельных массивов всех датчиков и построению графика с использованием matplotlib и drwnow.Графическое отображение температуры в реальном времени с помощью python
HOST = "localhost"
PORT = 4223
UID1 = "tsJ" # S1
from tinkerforge.ip_connection import IPConnection
from tinkerforge.bricklet_ptc import BrickletPTC
import numpy as np
import serial
import matplotlib
from matplotlib.ticker import ScalarFormatter, FormatStrFormatter
import matplotlib.pyplot as plt
from matplotlib import style
style.use('ggplot')
from drawnow import *
# creating arrays to feed the data
tempC1 = []
def makeafig():
# creating subplots
fig1 = plt.figure(1)
a = fig1.add_subplot(111)
#setting up axis label, auto formating of axis and title
a.set_xlabel('Time [s]', fontsize = 10)
a.set_ylabel('Temperature [°C]', fontsize = 10)
y_formatter = matplotlib.ticker.ScalarFormatter(useOffset=False)
a.yaxis.set_major_formatter(y_formatter)
title1 = "Current Room Temperature (Side1): " + str(temperature1/100) + " °C"
a.set_title(title1, fontsize = 10)
#plotting the graph
a.plot(tempC1, "#00A3E0")
#saving the figure
fig1.savefig('RoomTemperature.png', dpi=100)
while True:
ipcon = IPConnection() # Create IP connection
ptc1 = BrickletPTC(UID1, ipcon) # S1
ipcon.connect(HOST, PORT) # Connect to brickd
#setting the temperature from PTC bricklet
temperature1 = ptc1.get_temperature()
#processing data from a temperature sensor to 1st array
dataArray1=str(temperature1/100).split(',')
temp1 = float(dataArray1[0])
tempC1.append(temp1)
#making a live figure
drawnow(makeafig)
plt.draw()
Это подход, который я нашел хорошо в Интернете, и он работает. Единственная проблема, с которой я столкнулся, - она потребляет больше времени, если я делаю больше массивов для других датчиков, а график получается задерживается в реальном времени, когда я сравниваю его с секундомером.
Есть ли хороший и эффективный подход к получению живых графиков, которые будут эффективны с множеством датчиков и отсутствием задержки в реальном времени. Или любая команда для очистки значений уже построенных массивов?
Я был бы обязан, если кто-нибудь может помочь мне с этой проблемой.
Вы показывая их на сайте? Если да, то как насчет генерации json (ваши данные графика) с помощью python и создания интерактивной диаграммы с помощью javascript? – PhilipB
@PhilipB Спасибо, что ответили. Нет. Я не показываю его прямо на веб-сайте. Сохраненный график продолжает обновляться до запуска скрипта, а затем у меня есть другой совершенно другой скрипт, который отправляет эту сохраненную цифру на облачный сервер. – Ajay
Обсуждали ли вы использование потоков для получения данных? Кроме того, может быть, слишком много данных для отправки сразу с другим скриптом? – mpurg