from machine import Pin, I2C
from time import sleep
import dht
from ssd1306 import SSD1306_I2C
# Параметры контроля
TEMP_HIGH = 25 # Градусы, выше которых включается вентиляция
TEMP_LOW = 20 # Градусы, ниже которых включается обогрев
HUM_LOW = 40 # Влажность, ниже которой включается увлажнитель
# Инициализация датчика DHT22
dht_sensor = dht.DHT22(Pin(23))
# Инициализация реле
fan_relay = Pin(16, Pin.OUT)
heater_relay = Pin(17, Pin.OUT)
humidifier_relay = Pin(18, Pin.OUT)
# Настройка начального состояния реле
fan_relay.value(0) # Вентилятор выключен
heater_relay.value(0) # Обогрев выключен
humidifier_relay.value(0) # Увлажнитель выключен
# Инициализация дисплея (I2C)
i2c = I2C(0, scl=Pin(22), sda=Pin(21))
oled = SSD1306_I2C(128, 64, i2c)
def display_status(temp, hum, fan, heater, humidifier):
"""Обновление информации на дисплее."""
oled.fill(0) # Очистка дисплея
oled.text("Temp: {:.1f} C".format(temp), 0, 0)
oled.text("Hum: {:.1f} %".format(hum), 0, 10)
oled.text("Fan: {}".format("ON" if fan else "OFF"), 0, 30)
oled.text("Heater: {}".format("ON" if heater else "OFF"), 0, 40)
oled.text("Humidifier: {}".format("ON" if humidifier else "OFF"), 0, 50)
oled.show()
def control_environment():
"""Контроль температуры и влажности, управление реле."""
try:
dht_sensor.measure()
temperature = dht_sensor.temperature()
humidity = dht_sensor.humidity()
print(f"Температура: {temperature}°C, Влажность: {humidity}%")
# Переменные для отображения статуса реле
fan_status = False
heater_status = False
humidifier_status = False
# Контроль температуры
if temperature > TEMP_HIGH:
fan_relay.value(1) # Включить вентилятор
heater_relay.value(0) # Выключить обогрев
fan_status = True
elif temperature < TEMP_LOW:
heater_relay.value(1) # Включить обогрев
fan_relay.value(0) # Выключить вентилятор
heater_status = True
else:
fan_relay.value(0) # Выключить вентилятор
heater_relay.value(0) # Выключить обогрев
# Контроль влажности
if humidity < HUM_LOW:
humidifier_relay.value(1) # Включить увлажнитель
humidifier_status = True
else:
humidifier_relay.value(0) # Выключить увлажнитель
# Обновление дисплея
display_status(temperature, humidity, fan_status, heater_status, humidifier_status)
except Exception as e:
print("Ошибка при считывании данных с датчика:", e)
# Главный цикл
while True:
control_environment()
sleep(5) # Проверяем параметры каждые 5 секунд