from machine import Pin, ADC
import network
import dht
import time
import urequests
DHTPIN = Pin(20, Pin.IN) #溫溼度感應器DHT22輸入接腳(GPIO.20),定義為DHTPIN
DHT = dht.DHT22(DHTPIN) #定義溫溼度感應器型號,以確定資料型態
LED_Temp = Pin(16, Pin.OUT) #led輸出接腳(GPIO.16),定義為LED_Temp
LED_Hum = Pin(15, Pin.OUT) #led輸出接腳(GPIO.15),定義為LED_Hum
ADC1_3 = ADC(3)
##network init
sta=network.WLAN(network.STA_IF)
sta.active(True)
sta.connect('Wokwi-GUEST','')
while not sta.isconnected() :
pass
host='http://api.thingspeak.com'
##private apikey
api_key='NPHISP8YJOMYNGY2'
"""
名稱:read_adc
功能說明:將選定之ADC接口做讀值並於SHELL上做顯示
細項:
ADC_channel將使用此函式時指定之ADC接口做指向,當ADC接口多時可重複使用此功能,
因PWM的Duty Cycle只接受0~1023,但ADC接口最大到4095,但又因運算子:/為無條件捨去,在此可直接除4轉至0~1023,
後將讀出數值顯示在SHELL上並回傳數值。
"""
def ADC_Read(ADC_channel):
value = ADC_channel.read()
Voltage = float(3.3/4095)*value
print("Now read ADC Voltage is,", str(Voltage), "V")
return
#主程式
while True:
DHT_Temp_sum=0
DHT_Hum_sum=0
#溫度、濕度的總和
#每3秒紀錄一次,總紀錄5次(溫度、濕度、ADC電壓)
for count_times in range(5):
DHT.measure() #測量當前溫度、濕度
DHT_Temp_sum+=DHT.temperature() #調取溫度進入溫度加總值中
DHT_Hum_sum+=DHT.humidity() #調取濕度進入濕度加總值中
ADC_Read(ADC1_3)
time.sleep(3) #等待空氣變化再做下次測量,此設定3S
#顯示溫度、濕度的平均值
time.sleep(1)
temp_5=DHT_Temp_sum/5
hum_5=DHT_Hum_sum/5
url='%s/update?api_key=%s&field2=%s&field3=%s' %(host, api_key, hum_5, temp_5)
print('Temperature=', temp_5, 'C', 'Humidity=', hum_5, '%')
#print('url=', url)
r=urequests.get(url)
print('response=', r.text)
#當溫度超過40度時,亮提示燈,反之不亮
if(DHT_Temp_sum/5 > 40):
LED_Temp.value(1)
else:
LED_Temp.value(0)
#當濕度超過60時,亮提示燈,反之不亮
if(DHT_Hum_sum/5 > 60):
LED_Hum.value(1)
else:
LED_Hum.value(0)Loading
esp32-s3-devkitc-1
esp32-s3-devkitc-1