from machine import Pin,ADC # 從 machine 模組中匯入 Pin 和 ADC
import network # 匯入 network 模組
import dht # 匯入 dht 模組
import time # 匯入 time 模組
import urequests # 匯入 urequests 模組
# 設定Wi-Fi連線
sta=network.WLAN(network.STA_IF)
sta.active(True)
sta.connect('Wokwi-GUEST','')
while not sta.isconnected() : #檢查是否連接成功
pass #當連接失敗時,將重複循環連接,直到連接成功
LED_red=Pin(16,Pin.OUT) # 將 Pin 16 設定為輸出模式,用來控制 LED,並命名為LED_red
LED_blue=Pin(17,Pin.OUT) # 將 Pin 17 設定為輸出模式,用來控制 LED,並命名為LED_blue
LED_red.value(0) #令LED_red熄滅
LED_blue.value(0) #令LED_blue熄滅
p0=Pin(20, Pin.IN) # 將 Pin 20 設定為輸入模式,用來控制 DHT22,並命名為p0
d=dht.DHT22(p0) #用p0接腳讀取 DHT22的值
SW1=Pin(3,Pin.IN,Pin.PULL_UP) # 使用Pin物件,將GPIO3設定為輸入,並使用內建的提升電阻,給定別名為SW1
# Thingspeak設定
host='http://api.thingspeak.com'
api_key='2PLO3K7I6M86J3MX' # 改成自己的Write API
while True: #進入無窮迴圈
dht22_Tempsum=0 #令dht22_Tempsum=0
dht22_Humiditysum=0 #令dht22_Humiditysum=0
for i in range(5):
d.measure() #重新測量溫溼度
t=d.temperature() #讀取攝氏溫度
h=d.humidity() #讀取相對溼度
dht22_Tempsum+=t #將讀取到的溫度加進dht22_Tempsum的變數中
dht22_Humiditysum+=h #將讀取到的溼度加進dht22_Humiditysum的變數中
time.sleep(3) #暫停3秒
if(SW1.value()==0): # 當SW1的按鍵被按下,此時SW1的電壓為0,進入判斷式
print("Warning! SW Touched!") #顯示出Warning! SW Touched!的訊息
while True: #進入無窮迴圈
LED_red.value(1) #令LED_red點亮
LED_blue.value(0) #令LED_blue熄滅
time.sleep(1) #暫停1秒
LED_red.value(0) #令LED_red熄滅
LED_blue.value(1) #令LED_blue熄滅
time.sleep(1) #暫停1秒
if(SW1.value()==0): # 當SW1的按鍵被按下,此時SW1的電壓為0,進入判斷式
LED_red.value(0) #令LED_red熄滅
LED_blue.value(0) #令LED_blue熄滅
break
url='%s/update?api_key=%s&field1=%s&field2=%s' %(host, api_key, dht22_Tempsum/5, dht22_Humiditysum/5) #上傳目前的平均溫度、平均濕度
print('平均溫度=', dht22_Tempsum/5, 'C', '平均濕度=', dht22_Humiditysum/5, '%') #輸出目前的平均溫度、平均濕度
try: #當嘗試以下動作時
r=urequests.get(url) # 嘗試向指定的 URL 發送 GET 請求
print('response=', r.text) # 如果成功,印出回應的文字內容
#time.sleep(16) #暫停16秒
except: #發生異常時
print('Error happened!') # 如果發生異常,印出錯誤訊息