Оба потока не работают одновременно Python3, Raspberry PI - PullRequest
0 голосов
/ 22 ноября 2018

Вот мой код. Я хочу запустить оба потока вместе, но он не запускается. Первый поток помогает мне разместить данные, взятые с датчика, в файл «.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()

Пожалуйста, скажите мне в простомформат. Я думаю, что у меня может быть небольшая ошибка.Также пробовал простым методом, но не побежал.Помогите!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...