from machine import Pin, I2C, PWM
import dht
import ssd1306
import time
import calc_wbgt as cw
# note: 温湿度センサー(DHT22)に関する初期化
d = dht.DHT22(Pin(26))
# note: タクトスイッチに関する初期化
tact_sw = Pin(16, Pin.IN, Pin.PULL_UP)
# note: LEDに関する初期化
LED_GREEN = Pin(10, Pin.OUT)
LED_YELLOW = Pin(11, Pin.OUT)
LED_RED = Pin(12, Pin.OUT)
# note: ブザーに関する初期化
buzzer = PWM(Pin(17))
buzzer.freq(880)
# note: OLEDディスプレイ(SSD1306)に関する初期化
ssd1306_i2c = I2C(1, scl=Pin(3), sda=Pin(2))
display = ssd1306.SSD1306_I2C(128, 64, ssd1306_i2c)
temp = 0
humi = 0
is_buzzer_on = False
is_valid_tact_sw = True
while True:
# note: 温湿度センサのセンサー値を取得
d.measure()
temp = d.temperature()
humi = d.humidity()
wbgt = cw.calc_wbgt(temp,humi)
# note: コンソールのログ出力
print(f'temp:{temp}, humi:{humi}')
print(f'wbgt:{wbgt}')
# note: 温度が40度を超えた場合は赤色LED点灯&ブザー鳴らす
if temp > 40:
LED_RED.value(1)
LED_YELLOW.value(0)
LED_GREEN.value(0)
is_buzzer_on = True
# note: WBGTが31度以上であれば赤色LED点灯&ブザーを鳴らす
elif wbgt >=31:
LED_RED.value(1)
LED_YELLOW.value(0)
LED_GREEN.value(0)
is_buzzer_on = True
# note: WBGTが25度以上で31度未満であれば黄色LED点灯&ブザー消音
elif wbgt >= 25:
LED_RED.value(0)
LED_YELLOW.value(1)
LED_GREEN.value(0)
is_buzzer_on = False
is_valid_tact_sw = True
# note: WBGTが25度未満であれば緑LED点灯&ブザー消音
else:
LED_RED.value(0)
LED_YELLOW.value(0)
LED_GREEN.value(1)
is_buzzer_on = False
is_valid_tact_sw = True
# note: ブザー操作
if is_buzzer_on and is_valid_tact_sw:
buzzer.duty_u16(256*16)
else:
buzzer.duty_u16(0)
# note: タクトスイッチが押された場合はブザーを消音
if not tact_sw.value():
buzzer.duty_u16(0)
is_buzzer_on = False
is_valid_tact_sw = False
# note: OLEDディスプレイに現在の温度を表示
display.fill(0)
display.text(f'{temp=}', 0, 0, 1)
display.text(f'{humi=}', 0, 10, 1)
display.show()
time.sleep(1)