Вот мой код. Я хочу запустить оба потока вместе, но он не запускается. Первый поток помогает мне разместить данные, взятые с датчика, в файл «.csv», а второй поток берет данные из этого файла и строит графикс помощью matplotlib.SO они должны запускаться одновременно, чтобы обеспечить правильный вывод графического изображения.Пожалуйста, помогите.
Мой код:
import Adafruit_DHT
import time
import csv
import sys
import matplotlib.pyplot as plt
import matplotlib.dates as mdates
import matplotlib.animation as animation
from datetime import datetime
from threading import Thread
csvfile ="temp.csv"
fig = plt.figure()
rect = fig.patch
rect.set_facecolor('#0079E7')
count = "0"
class Graph:
def __init__(self):
self.count = ""
def storeD(self):
while True:
humidity, temperature=Adafruit_DHT.read_retry(Adafruit_DHT.DHT11, 17) # gpio pin 4 or pinnumber 7
if humidity is not None and temperature is not None:
humidity= round(humidity, 17)
temperature = round(temperature, 17)
print('Temperature = {0:0.1f}*C Humidity = {1:0.1f}%'.format(temperature,humidity))
else:
print('can not connect to the sensor!')
timeC =time.strftime("%I")+':' +time.strftime("%M")+':'+time.strftime("%S")
data = [temperature, timeC]
with open(csvfile, "a")as output:
writer =csv.writer(output, delimiter=",", lineterminator = '\n')
writer.writerow(data)
time.sleep(5)
def animates(self,i):
print("test")
ftemp = 'temp.csv'
fh = open(ftemp)
temp = list()
timeC= list()
for line in fh:
pieces = line.split(',')
degree = pieces[0]
timeB= pieces[1]
timeA= timeB[:8] #print timeA
time_string =datetime.strptime(timeA,'%H:%M:%S') #print time_string
try:
temp.append(float(degree))
timeC.append(time_string)
except:
print("dont know")
ax1 = fig.add_subplot(1,1,1,axisbg='white')
ax1.xaxis.set_major_formatter(mdates.DateFormatter('%H:%M:%S'))
ax1.clear()
ax1.plot(timeC,temp, 'c', linewidth = 3.3)
plt.title('Temperature')
plt.xlabel('Time')
ani = animation.FuncAnimation(fig, test_obj.animates(), interval = 6000)
plt.show()
if __name__=="__main__":
test_obj = Graph()
Thread1=Thread(target=test_obj.storeD())
Thread2=Thread(target=test_obj.animates(),arg=(i))
Thread1.start()
Thread2.start()
Новый код
import Adafruit_DHT
import time
import csv
import sys
import matplotlib.pyplot as plt
import matplotlib.dates as mdates
import matplotlib.animation as animation
from datetime import datetime
from threading import Thread
csvfile ="data2.csv"
fig = plt.figure()
rect = fig.patch
rect.set_facecolor('#0079E7')
count = "0"
i = 0
sensor =11
pin= 17
class Graph:
def __init__(self):
self.count = ""
def storeD(self):
print("Testing")
while True:
humidity, temperature =Adafruit_DHT.read_retry(sensor,pin)# gpio pin 4 or pinnumber 7
if humidity is not None and temperature is not None:
humidity= round(humidity, 17)
temperature = round(temperature, 17)
print('Temperature = {0:0.1f}*C Humidity = {1:0.1f}%'.format(temperature,humidity))
else:
print('can not connect to the sensor!')
timeC =time.strftime("%I")+':' +time.strftime("%M")+':'+time.strftime("%S")
data = [temperature, timeC]
with open(csvfile, "a")as output:
writer =csv.writer(output, delimiter=",", lineterminator = '\n')
writer.writerow(data)
time.sleep(5)
def animates(self,i):
print("test")
ftemp = 'data2.csv'
fh = open(ftemp)
temp = list()
timeC= list()
time.sleep(5)
for line in fh:
pieces = line.split(',')
degree = pieces[0]
timeB= pieces[1]
timeA= timeB[:8] #print timeA
time_string =datetime.strptime(timeA,'%H:%M:%S') #print time_string
try:
temp.append(float(degree))
timeC.append(time_string)
except:
print("dont know")
ax1 = fig.add_subplot(1,1,1,axisbg='white')
ax1.xaxis.set_major_formatter(mdates.DateFormatter('%H:%M:%S'))
ax1.clear()
ax1.plot(timeC,temp, 'c', linewidth = 3.3)
plt.title('Temperature')
plt.xlabel('Time')
if __name__=="__main__":
test_obj = Graph()
Thread1=Thread(target=test_obj.storeD())
Thread2=Thread(target=test_obj.animates, args=(i))
ani = animation.FuncAnimation(fig, test_obj.animates, interval = 6000)
plt.show()
for r in range(5):
Thread1.start()
Thread2.start()
Пожалуйста, скажите мне в простомформат. Я думаю, что у меня может быть небольшая ошибка.Также пробовал простым методом, но не побежал.Помогите!