from machine import Pin,ADC
import dht,time, network, urequests,ujson
from umqtt.robust import MQTTClient
import urequests
Count_Times = 5 # 執行指定次數之後才上傳一次資料
Count_SW = 2
sta=network.WLAN(network.STA_IF)
sta.active(True)
#sta.connect('自己的AP','自己的AP密碼')
sta.connect('Wokwi-GUEST','')
while not sta.isconnected() :
pass
print('Wifi connected!')
p0=Pin(15, Pin.IN)
dht22=dht.DHT22(p0)
mqtt_client_id = 'D1 mini-DHT11'
CHT_URL = 'iot.cht.com.tw'
CHT_USERNAME = 'DKHRWCG5FZMWKATEA3'
CHT_IO_KEY = 'DKHRWCG5FZMWKATEA3'
client = MQTTClient(client_id=mqtt_client_id,server=CHT_URL,user=CHT_USERNAME,password=CHT_IO_KEY)
SW2 = Pin(27,Pin.IN,Pin.PULL_UP)
LED2 = Pin(25,Pin.OUT)
LED2.value(0)
client.connect() #連線至MQTT伺服器
#f=open('LampOnOff.txt','w')
j=0
def subCallback(topic,msg):
obj = ujson.loads(msg)
Lamp_status=obj['value']
content='%s'*len(Lamp_status) % tuple(Lamp_status)
if(content == '0'):
LED2.value(0)
print('Lamp is Off!')
else:
LED2.value(1)
print('Lamp is On!')
while True:
client.set_callback(subCallback)
client.connect()
client.subscribe(b'/v1/device/34270032155/sensor/Lamp_OnOff/rawdata/')
while True:
client.check_msg()
Temperature=0
Humidity=0
# 執行5次之後才上傳一次資料
for i in range(Count_Times):
dht22.measure()
t=dht22.temperature()
h=dht22.humidity()
Temperature=Temperature+t
Humidity=Humidity+h
if (SW2.value()==0):
time.sleep_ms(20)
LED2.value(not LED2.value())
payload=[{"id":"Lamp_OnOff","value":[LED2.value()]}]
client.publish(b'/v1/device/34270032155/rawdata',str(payload).encode())
time.sleep(2)
Temperature=int(Temperature/Count_Times)
Humidity=int(Humidity/Count_Times)
if(Temperature>=35):
print("溫度過高,目前為"+str(Temperature)+"度")
if(Humidity>=80):
print("濕度過高,目前為"+str(Humidity)+"%")
payload=[{"id":"DHT_Temp","value":[Temperature]}]
client.publish(b'/v1/device/34270032155/rawdata',str(payload).encode())
payload=[{"id":"DHT_Hum","value":[Humidity]}]
client.publish(b'/v1/device/34270032155/rawdata',str(payload).encode())
j=j+1
print('第'+str(j)+'筆'+'publish finish')
# f.write(str(Temperature)+' '+str(Humidity)+' '+str(DS_Temp)+'\n')
time.sleep(1)
break
# f.close()
client.disconnect()