# 匯入所需的函式庫
from machine import Pin, ADC # 從machine模組引入Pin和ADC類別
import network # 引入network模組,用於連接Wi-Fi
import dht # 引入dht模組,用於操作DHT22溫濕度傳感器
import time # 引入time模組,用於時間延遲
import urequests # 引入urequests模組,用於發送HTTP請求
# 連接到 Wi-Fi 網絡
sta = network.WLAN(network.STA_IF) # 建立Wi-Fi station(STA)物件
sta.active(True) # 啟用Wi-Fi介面
sta.connect('Wokwi-GUEST','') # 連接到指定的Wi-Fi網絡,請替換成你的Wi-Fi SSID和密碼
print("Linking...")
while not sta.isconnected(): # 等待直到連接成功
pass
print("Link OK")
# 初始化 DHT22 溫濕度傳感器和連接的引腳
p0 = Pin(14, Pin.IN) # 創建Pin物件,將GPIO14設為資料腳,給定別名為p0,用於連接DHT22溫濕度傳感器
d = dht.DHT22(p0) # 創建DHT22物件,並指定並指定使用p0物件來連接DHT22溫溼度傳感器
# 定義 ThingSpeak API 的主機和 API 金鑰
host = 'http://api.thingspeak.com' # ThingSpeak API 的主機位址
api_key = '2GMEOUTAK9DIUHHJ' # 你的 ThingSpeak API 金鑰,請替換成自己的金鑰
# 初始化 LED 和 SW 引腳
LED_red = Pin(19, Pin.OUT) # 創建 Pin 物件,指定引腳 19 為輸出引腳,並給定別名為LED_Hum
LED_blue = Pin(20, Pin.OUT) # 創建 Pin 物件,指定引腳 20 為輸出引腳,並給定別名為LED_Temp
LED_red.value(0)
LED_blue.value(0)
sw = Pin(4, Pin.IN, Pin.PULL_UP)
# 定義計數終止次數、延遲步長、溫度和濕度閾值
countEnd = 5 # 設置測量的次數
DelayStep = 0.1 # 設置每次測量之間的延遲時間(秒)
Temp_Thres = 40 # 溫度閾值,超過此值時 LED_Temp 亮
Hum_Thres = 60 # 濕度閾值,超過此值時 LED_Hum 亮
while True:
Temp = 0 # 初始化溫度變數
Hum = 0 # 初始化濕度變數
try:
for i in range(countEnd):
d.measure()
dht22_Temp = d.temperature()
dht22_Hum = d.humidity()
Temp += dht22_Temp
Hum += dht22_Hum
if (sw.value() == 0):
print("Warning! SW Touched!")
for i in range(3):
LED_red.value(1)
time.sleep(1)
LED_red.value(0)
LED_blue.value(1)
time.sleep(1)
LED_blue.value(0)
while (sw.value() == 0):
pass
time.sleep(1)
except ValueError:
print('test')
# if (sw.value() == 0):
# print("Warning! SW Touched!")
# for i in range(3):
# LED_red.value(1)
# time.sleep(1)
# LED_red.value(0)
# LED_blue.value(1)
# time.sleep(1)
# LED_blue.value(0)
# while (sw.value() == 0):
# pass
# # 進行多次測量
# for CountTimes in range(countEnd): # 迴圈進行多次測量
# d.measure() # 讀取 DHT22 溫濕度傳感器數據
# dht22_Temp += d.temperature() # 累加溫度值
# dht22_Hum += d.humidity() # 累加濕度值
# time.sleep(DelayStep) # 延遲一段時間,等待下一次測量
# 計算平均電壓、溫度和濕度
t = Temp / countEnd # 計算平均溫度
h = Hum / countEnd # 計算平均濕度
# 將數據上傳到 ThingSpeak
url = '%s/update?api_key=%s&field1=%s&field2=%s&'%(host, api_key, t, h) # 製作上傳 URL
r = urequests.get(url) # 發送 GET 請求將數據上傳到 ThingSpeak
# 輸出數據和上傳結果
print('Avg_Temperature=', t, 'C', 'Avg_Humidity=', h, '%')
print('url=', url)
print('response=', r.text)