from tkinter import *
import RPi.GPIO as GPIO
import time
import sys
DHTPIN = 14
GPIO.setmode(GPIO.BCM)
GPIO.setup(21, GPIO.OUT)
GPIO.output(21, GPIO.LOW)
MAX_UNCHANGE_COUNT = 100
STATE_INIT_PULL_DOWN = 1
STATE_INIT_PULL_UP = 2
STATE_DATA_FIRST_PULL_DOWN = 3
STATE_DATA_PULL_UP = 4
STATE_DATA_PULL_DOWN = 5
GPIO.setmode(GPIO.BCM)
GPIO.setup(21, GPIO.OUT)
GPIO.output(21, GPIO.LOW)
root = Tkinter.Tk()
root.geometry("700x700")
root.title("House Control")
cur_temp = 70
counter = Tkinter.IntVar()
def toggle29():
if GPIO.input(21):
GPIO.output(21, GPIO.LOW)
toggleButton29["text"] = "Turn BLUE 29 On"
else:
GPIO.output(21, GPIO.HIGH)
toggleButton29["text"] = "Turn BLUE 29 Off"
def system_state():
if on_btn.config('text')[-1] == 'On':
on_btn.config(text='Off')
else:
on_btn.config(text='On')
def system_ac_state():
if ac_btn.config('text')[-1] == 'Cooling':
ac_btn.config(text='Heating')
ac_heating()
main()
else:
ac_btn.config(text='Cooling')
ac_cooling()
def ac_heating():
print("heating")
pass
def ac_cooling():
print("cooling")
pass
def cool_temp():
print ("cooling")
def heat_temp():
print ("heating")
def onClick1(event=None):
counter.set(counter.get() - 1)
def onClick(event=None):
counter.set(counter.get() + 1)
def toggle0():
if GPIO.input(17):
GPIO.output(17, GPIO.LOW)
toggleButton0["text"] = "Turn RED 0 On"
else:
GPIO.output(17, GPIO.HIGH)
toggleButton0["text"] = "Turn RED 0 Off"
def read_dht11_dat():
GPIO.setup(DHTPIN, GPIO.OUT)
GPIO.output(DHTPIN, GPIO.HIGH)
time.sleep(0.05)
GPIO.output(DHTPIN, GPIO.LOW)
time.sleep(0.02)
GPIO.setup(DHTPIN, GPIO.IN, GPIO.PUD_UP)
unchanged_count = 0
last = -1
data = []
while True:
current = GPIO.input(DHTPIN)
data.append(current)
if last != current:
unchanged_count = 0
last = current
else:
unchanged_count += 1
if unchanged_count > MAX_UNCHANGE_COUNT:
break
state = STATE_INIT_PULL_DOWN
lengths = []
current_length = 0
for current in data:
current_length += 1
if state == STATE_INIT_PULL_DOWN:
if current == GPIO.LOW:
state = STATE_INIT_PULL_UP
else:
continue
if state == STATE_INIT_PULL_UP:
if current == GPIO.HIGH:
state = STATE_DATA_FIRST_PULL_DOWN
else:
continue
if state == STATE_DATA_FIRST_PULL_DOWN:
if current == GPIO.LOW:
state = STATE_DATA_PULL_UP
else:
continue
if state == STATE_DATA_PULL_UP:
if current == GPIO.HIGH:
current_length = 0
state = STATE_DATA_PULL_DOWN
else:
continue
if state == STATE_DATA_PULL_DOWN:
if current == GPIO.LOW:
lengths.append(current_length)
state = STATE_DATA_PULL_UP
else:
continue
if len(lengths) != 40:
print ("Data not good, skip")
return False
shortest_pull_up = min(lengths)
longest_pull_up = max(lengths)
halfway = (longest_pull_up + shortest_pull_up) / 2
bits = []
the_bytes = []
byte = 0
for length in lengths:
bit = 0
if length > halfway:
bit = 1
bits.append(bit)
print ("bits: %s, length: %d") % (bits, len(bits))
for i in range(0, len(bits)):
byte = byte << 1
if (bits[i]):
byte = byte | 1
else:
byte = byte | 0
if ((i + 1) % 8 == 0):
the_bytes.append(byte)
byte = 0
print (the_bytes)
checksum = (the_bytes[0] + the_bytes[1] + the_bytes[2] + the_bytes[3]) &
0xFF
if the_bytes[4] != checksum:
print ("Data not good, skip")
return False
return the_bytes[0], the_bytes[2]
Когда запускается этот def main, он блокирует всю мою программу.Я должен быть в состоянии получить информацию от этого, таким образом я могу использовать информацию для заявления, если и когда.Итак, как мне запустить этот скрипт и не блокировать весь мой скрипт?
def main():
print ("Raspberry Pi wiringPi DHT11 Temperature test program\n")
while True:
result = read_dht11_dat()
if result:
humidity, temperature= result
temp = (temperature * 9/5)+32
test = 73
low = temp >= test
print ("humidity: %s %%, Temperature: %s C (F %s)") %
(humidity, temperature, temp)
if low:
while True:
GPIO.output(21,GPIO.HIGH)
print ("humidity: %s r %s c %s") % (humidity, temperature,
temp)
continue
else:
GPIO.output(21, GPIO.LOW)
print ("1humidity: %s ") % (low)
time.sleep(1)
continue
def destroy():
GPIO.cleanup()
toggleButton0 = Tkinter.Button(root, text="0 Carport Lights",
command=toggle0, foreground="white", background="red")
toggleButton0.grid(row=0,column=0)
Tkinter.Label(root, text="Current Temperature").grid(row=0, column=1)
Tkinter.Label(root, text=cur_temp).grid(row=1, column=1)
Tkinter.Label(root, text="Desired Temperature").grid(row=0, column=2)
Tkinter.Label(root, textvariable=counter).grid(row=1, column=2)
Tkinter.Button(root, text="Increase", command=onClick, fg="dark green", bg =
"white").grid(row=1, column=3)
Tkinter.Button(root, text="Decrease", command=onClick1, fg="dark green", bg
= "white").grid(row=1, column=0)
Tkinter.Label(root, text="You are using :").grid()
ac_btn = Tkinter.Button(root, text="Heating", command=system_ac_state,
fg="dark green", bg = "white")
ac_btn.grid()
Tkinter.Button(root, text="Main", command=main, fg="dark green", bg =
"white").grid(row=2, column=1)
Tkinter.Label(root, text="Turn System:").grid()
при запуске приложение проверит состояние системы и, если оно включено, то проверит system_ac_state и использует переменные изОсновной скрипт для управления gpio.
on_btn = Tkinter.Button(root, text="On", command=system_state, fg="dark
green", bg = "white")
on_btn.grid()
root.mainloop()