DHT22センサーを使用して温度と湿度を読み取るプロジェクトに取り組んでいます。
これらの値を GUI に表示し、GUI の値を継続的に更新したいと考えています。
また、起動時にこのスクリプトを開始したいと思います。
sudo python /home/pi/GUISENSOR.py を指す sh スクリプトで構成される ~./config/autostart,file に sensorstartup.desktop ファイルを追加することで、スクリプトを起動して GUI を表示することができました。
私が直面している問題は、起動時に GUI が更新されないことです。GUI は表示されますが更新されませんが、手動で sudo python /home/pi/GUISENSOR.py を実行すると、正しく実行および更新されます。
どんな提案でも大歓迎です。
以下はコードのサンプルです
class App(threading.Thread):
def _init_(self):
threading.Thread._init_(self)
self.start()
def callback(self):
self.root.quit()
def run(self):
self.root = Tk() #Makes the window
self.root.wm_title("Temperature Monitor")
self.root.minsize(200,100)
#Left Frame and its contents
leftFrame = Frame(self.root, width=200, height = 600)
leftFrame.grid(row=0, column=0, padx=10, pady=2)
Label(leftFrame, text="Equiptment").grid(row=0, column=0, padx=10, pady=2)
self.equipTemp = DoubleVar()
Label(leftFrame, textvariable=self.equipTemp).grid(row=5, column=0, padx=10, pady=2)
Label(leftFrame, text="deg F").grid(row=5, column=1, padx=10, pady=2)
self.root.mainloop() #start monitoring and updating the GUI
app = App()
app.start()
# Continuously append data
while(True):
# Run the DHT program to get the humidity and temperature readings!
output = subprocess.check_output(["./temp_sensor"]);
matches = re.search("Temp =\s+([0-9.]+)", output)
if (not matches):
time.sleep(3)
continue
tempC = float(matches.group(1))
tempF = tempC * 1.8 + 32
tempF = round(tempF)
tempF = int(tempF)
print "Temperature: %.1f F" % tempF
if tempC > max_temp:
oos += 1
elif tempC < min_temp:
oos += 1
else:
oos = 0
if oos > bad_readings:
oos = 0
emailer(email_addr, room_subject + " " + str(tempF) + " degF " )
app.equipTemp.set(tempF)
# Wait 30 seconds before continuing
time.sleep(30)