# from machine import Pin # 匯入所需的函式庫
# import dht # 引入dht模組,用於操作DHT22溫濕度傳感器
# import time # 引入time模組,用於時間延遲
# import network # 引入network模組,用於連接Wi-Fi
# from umqtt.robust import MQTTClient # 引入MQTTClient模組,用於MQTT通訊
# 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...') # shell顯示Linking...
# while not sta.isconnected(): # 等待直到連接成功
# pass
# print('Link OK') # shell顯示Link OK
# THINGAPEAK_MQTT_CLIENT_ID = b"JSEOKS8fBAknNBM4PA0xKzY"
# THINGAPEAK_MQTT_USERNAME = b"JSEOKS8fBAknNBM4PA0xKzY"
# THINGAPEAK_MQTT_PASSWORD = b"6lYlTrEioZr6lSqCg6tgyMyS"
# THINGAPEAK_CHANNEL_ID = b"2493946"
# client = MQTTClient(server = b"mqtt3.thingspeak.com",
# client_id = THINGAPEAK_MQTT_CLIENT_ID,
# user = THINGAPEAK_MQTT_USERNAME,
# password = THINGAPEAK_MQTT_PASSWORD,
# ssl = False)
# # 初始化 DHT22 溫濕度傳感器和連接的引腳
# p0 = Pin(13, Pin.IN) # 創建Pin物件,將GPIO13設為資料腳,給定別名為p0,用於連接DHT22溫濕度傳感器
# d = dht.DHT22(p0) # 創建DHT22物件,並指定並指定使用p0物件來連接DHT22溫溼度傳感器
# sw = Pin(34, Pin.IN, Pin.PULL_UP)
# # 初始化LED引腳及狀態
# LED_Temp = Pin(18, Pin.OUT) # 創建 Pin 物件,指定引腳 18 為輸出引腳,並給定別名為LED_Temp
# LED_Hum = Pin(19, Pin.OUT) # 創建 Pin 物件,指定引腳 19 為輸出引腳,並給定別名為LED_Hum
# LED_Temp.value(0) # 關閉溫度 LED
# LED_Hum.value(0)
# j = 0 # 初始化計數器
# # 定義 LINE Notify 的 API 網址
# url_line_temp = "https://hook.eu2.make.com/x5of7pptbup4x8koijmkd14ug6diprod"
# url_line_hum = "https://hook.eu2.make.com/fkbk3osn8alkh73r8j6j3vonbwnfbbai"
# while True:
# f = open('DHT_Temp.txt', 'w') # 開啟檔案以寫入數據
# while True:
# Temperature = 0 # 初始化溫度變數
# Humidity = 0 # 初始化濕度變數
# for i in range(10): # 迭代5次以取得平均數值
# d.measure() # 讀取 DHT22 溫濕度傳感器數據
# t = d.temperature() # 讀取溫度值
# h = d.humidity() # 讀取濕度值
# Temperature += t # 累加溫度值
# Humidity += h # 累加濕度值
# time.sleep(1) # 延遲1秒
# Temperature = int(Temperature / 10) # 計算平均溫度
# Humidity = int(Humidity / 10) # 計算平均濕度
# if Temperature > 35: # 如果溫度超過35度
# urequests.get(url_line_temp + "?DHT_Temp=" + str(Temperature)) # 發送HTTP請求到LINE Notify
# print("溫度過高,目前為 " + str(Temperature) + "°C") # shell顯示警告訊息
# LED_Temp.value(1) # 紅燈亮
# else:
# LED_Temp.value(0) # 紅燈滅
# if Humidity > 80: # 如果濕度超過80%
# urequests.get(url_line_hum + "?DHT_Hum=" + str(Humidity)) # 發送HTTP請求到LINE Notify
# print("濕度過高,目前為 " + str(Humidity) + "%") # shell顯示警告訊息
# LED_Hum.value(1) # 黃燈亮
# else:
# LED_Hum.value(0) # 黃燈滅
# j += 1 # 計數器加1
# print('第 ' + str(j) + ' 筆資料已上傳') # shell顯示資料上傳狀況
# f.write(str(Temperature) + ' ' + str(Humidity) + '\n') # 寫入溫濕度數據到檔案
# time.sleep(5) # 延遲5秒
# break # 跳出內層迴圈
# f.close() # 關閉檔案
# client.connect()
# credentials = bytes("channels/{:s}/publish".format(THINGAPEAK_CHANNEL_ID), 'utf-8')
# payload = bytes("field2={:.1f}&field3={:.1f}\n".format(Temperature,Humidity), 'utf-8')
# client.publish(credentials, payload)
# from machine import Pin
# import dht
# import time
# import network
# from umqtt.robust import MQTTClient
# import urequests
# # 連接到 Wi-Fi 網絡
# sta = network.WLAN(network.STA_IF)
# sta.active(True)
# sta.connect('Wokwi-GUEST', '')
# print('Linking...')
# while not sta.isconnected():
# pass
# print('Link OK')
# THINGAPEAK_MQTT_CLIENT_ID = b"JSEOKS8fBAknNBM4PA0xKzY"
# THINGAPEAK_MQTT_USERNAME = b"JSEOKS8fBAknNBM4PA0xKzY"
# THINGAPEAK_MQTT_PASSWORD = b"6lYlTrEioZr6lSqCg6tgyMyS"
# THINGAPEAK_CHANNEL_ID = b"2493946"
# client = MQTTClient(server = b"mqtt3.thingspeak.com",
# client_id = THINGAPEAK_MQTT_CLIENT_ID,
# user = THINGAPEAK_MQTT_USERNAME,
# password = THINGAPEAK_MQTT_PASSWORD,
# ssl = False)
# p0 = Pin(13, Pin.IN)
# d = dht.DHT22(p0)
# LED_Temp = Pin(18, Pin.OUT)
# LED_Hum = Pin(19, Pin.OUT)
# LED_Temp.value(0)
# LED_Hum.value(0)
# url_line_temp = "https://hook.eu2.make.com/x5of7pptbup4x8koijmkd14ug6diprod"
# url_line_hum = "https://hook.eu2.make.com/fkbk3osn8alkh73r8j6j3vonbwnfbbai"
# last_temp_notification = 0
# last_hum_notification = 0
# notification_interval = 300 # 5 minutes
# while True:
# Temperature = 0
# Humidity = 0
# for i in range(10):
# d.measure()
# t = d.temperature()
# h = d.humidity()
# Temperature += t
# Humidity += h
# time.sleep(1)
# Temperature = int(Temperature / 10)
# Humidity = int(Humidity / 10)
# print(f"Measured Temperature: {Temperature}°C, Humidity: {Humidity}%")
# current_time = time.time()
# if Temperature > 35:
# if current_time - last_temp_notification > notification_interval:
# try:
# urequests.get(url_line_temp + "?DHT_Temp=" + str(Temperature))
# last_temp_notification = current_time
# print("溫度過高,目前為 " + str(Temperature) + "°C")
# LED_Temp.value(1)
# except Exception as e:
# print("Failed to send temperature notification:", e)
# else:
# LED_Temp.value(1)
# else:
# LED_Temp.value(0)
# if Humidity > 80:
# if current_time - last_hum_notification > notification_interval:
# try:
# urequests.get(url_line_hum + "?DHT_Hum=" + str(Humidity))
# last_hum_notification = current_time
# print("濕度過高,目前為 " + str(Humidity) + "%")
# LED_Hum.value(1)
# except Exception as e:
# print("Failed to send humidity notification:", e)
# else:
# LED_Hum.value(1)
# else:
# LED_Hum.value(0)
# try:
# client.connect()
# credentials = bytes("channels/{:s}/publish".format(THINGAPEAK_CHANNEL_ID), 'utf-8')
# payload = bytes("field2={:.1f}&field3={:.1f}\n".format(Temperature, Humidity), 'utf-8')
# client.publish(credentials, payload)
# print(f"Uploaded to ThingSpeak: Temperature={Temperature}, Humidity={Humidity}")
# except Exception as e:
# print("Failed to upload data to ThingSpeak:", e)
# time.sleep(5)
from machine import Pin # 匯入所需的函式庫
import dht # 引入dht模組,用於操作DHT22溫濕度傳感器
import time # 引入time模組,用於時間延遲
import network # 引入network模組,用於連接Wi-Fi
from umqtt.robust import MQTTClient # 引入MQTTClient模組,用於MQTT通訊
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...') # shell顯示Linking...
while not sta.isconnected(): # 等待直到連接成功
pass
print('Link OK') # shell顯示Link OK
THINGAPEAK_MQTT_CLIENT_ID = b"JSEOKS8fBAknNBM4PA0xKzY"
THINGAPEAK_MQTT_USERNAME = b"JSEOKS8fBAknNBM4PA0xKzY"
THINGAPEAK_MQTT_PASSWORD = b"6lYlTrEioZr6lSqCg6tgyMyS"
THINGAPEAK_CHANNEL_ID = b"2493946"
client = MQTTClient(server = b"mqtt3.thingspeak.com",
client_id = THINGAPEAK_MQTT_CLIENT_ID,
user = THINGAPEAK_MQTT_USERNAME,
password = THINGAPEAK_MQTT_PASSWORD,
ssl = False)
# 初始化 DHT22 溫濕度傳感器和連接的引腳
p0 = Pin(13, Pin.IN) # 創建Pin物件,將GPIO13設為資料腳,給定別名為p0,用於連接DHT22溫濕度傳感器
d = dht.DHT22(p0) # 創建DHT22物件,並指定並指定使用p0物件來連接DHT22溫溼度傳感器
sw = Pin(34, Pin.IN, Pin.PULL_UP)
# 初始化LED引腳及狀態
LED_Temp = Pin(18, Pin.OUT) # 創建 Pin 物件,指定引腳 18 為輸出引腳,並給定別名為LED_Temp
LED_Hum = Pin(19, Pin.OUT) # 創建 Pin 物件,指定引腳 19 為輸出引腳,並給定別名為LED_Hum
LED_Temp.value(0) # 關閉溫度 LED
LED_Hum.value(0)
j = 0 # 初始化計數器
# 定義 LINE Notify 的 API 網址
url_line_temp = "https://hook.eu2.make.com/x5of7pptbup4x8koijmkd14ug6diprod"
url_line_hum = "https://hook.eu2.make.com/fkbk3osn8alkh73r8j6j3vonbwnfbbai"
while True:
f = open('DHT_Temp.txt', 'w') # 開啟檔案以寫入數據
while True:
Temperature = 0 # 初始化溫度變數
Humidity = 0 # 初始化濕度變數
for i in range(10): # 迭代10次以取得平均數值
d.measure() # 讀取 DHT22 溫濕度傳感器數據
t = d.temperature() # 讀取溫度值
h = d.humidity() # 讀取濕度值
Temperature += t # 累加溫度值
Humidity += h # 累加濕度值
time.sleep(1) # 延遲1秒
Temperature = int(Temperature / 10) # 計算平均溫度
Humidity = int(Humidity / 10) # 計算平均濕度
if Temperature > 35: # 如果溫度超過35度
try:
response = urequests.get(url_line_temp + "?DHT_Temp=" + str(Temperature)) # 發送HTTP請求到LINE Notify
response.close() # 關閉HTTP響應
except Exception as e:
print("Error sending temperature alert:", e)
print("溫度過高,目前為 " + str(Temperature) + "°C") # shell顯示警告訊息
LED_Temp.value(1) # 紅燈亮
else:
LED_Temp.value(0) # 紅燈滅
if Humidity > 80: # 如果濕度超過80%
try:
response = urequests.get(url_line_hum + "?DHT_Hum=" + str(Humidity)) # 發送HTTP請求到LINE Notify
response.close() # 關閉HTTP響應
except Exception as e:
print("Error sending humidity alert:", e)
print("濕度過高,目前為 " + str(Humidity) + "%") # shell顯示警告訊息
LED_Hum.value(1) # 黃燈亮
else:
LED_Hum.value(0) # 黃燈滅
j += 1 # 計數器加1
print('第 ' + str(j) + ' 筆資料已上傳') # shell顯示資料上傳狀況
f.write(str(Temperature) + ' ' + str(Humidity) + '\n') # 寫入溫濕度數據到檔案
time.sleep(5) # 延遲5秒
break # 跳出內層迴圈
f.close() # 關閉檔案
try:
client.connect()
credentials = bytes("channels/{:s}/publish".format(THINGAPEAK_CHANNEL_ID), 'utf-8')
payload = bytes("field2={:.1f}&field3={:.1f}\n".format(Temperature,Humidity), 'utf-8')
client.publish(credentials, payload)
client.disconnect()
except Exception as e:
print("Error sending data to ThingSpeak:", e)