import machine
import time
import dht
import network
from umqtt.simple import MQTTClient
from machine import Pin
from hd44780 import HD44780
# Настройка пинов
DHTPIN = 22 # Пин подключения DHT22
LED_TEMP_PIN = 21 # Пин для светодиода температуры
LED_HUMIDITY_PIN = 2 # Пин для светодиода влажности
# Настройка LCD дисплея
lcd = HD44780(rs=Pin(12), enable=Pin(13), d4=Pin(14), d5=Pin(27), d6=Pin(26), d7=Pin(25))
# Инициализация DHT22
dht_sensor = dht.DHT22(machine.Pin(DHTPIN))
# Настройка MQTT
MQTT_BROKER = "test.mosquitto.org" # Адрес сервера
CLIENT_ID = "esp32_dht22_client" # Уникальный идентификатор клиента
TOPIC_TEMP = "goydazov/temp"
TOPIC_HUMIDITY = "goydazov/humidity"
# Настройка пинов для светодиодов
led_temp = machine.Pin(LED_TEMP_PIN, machine.Pin.OUT)
led_humidity = machine.Pin(LED_HUMIDITY_PIN, machine.Pin.OUT)
# Настройка Wi-Fi
def connect_to_wifi():
print('connecting to wifi', end='')
sta_if = network.WLAN(network.STA_IF)
sta_if.active(True)
sta_if.connect('Wokwi-GUEST', '')
while not sta_if.isconnected():
print('.', end='')
time.sleep(0.3)
print('connected')
# Функция для отправки данных на MQTT сервер
def send_data(client, temperature, humidity):
client.publish(TOPIC_TEMP, str(temperature))
client.publish(TOPIC_HUMIDITY, str(humidity))
print(f"Данные отправлены на сервер MQTT: Temp={temperature}, Humidity={humidity}")
# Основные параметры
INTERVAL_GET_DATA = 2 # Интервал измерений в секундах
last_measurement_time = time.time()
# Подключение к Wi-Fi
connect_to_wifi()
# Подключение к MQTT
client = MQTTClient(CLIENT_ID, MQTT_BROKER)
client.connect()
# Инициализация LCD
lcd.init()
lcd.clear()
# Основной цикл
while True:
current_time = time.time()
if current_time - last_measurement_time >= INTERVAL_GET_DATA:
try:
# Получение данных с DHT22
dht_sensor.measure()
humidity = dht_sensor.humidity()
temperature = dht_sensor.temperature()
# Вывод данных в консоль
print(f"Humidity: {humidity:.1f} %")
print(f"Temperature: {temperature:.1f} C")
# Вывод данных на LCD-дисплей
lcd.move_to(0, 0) # Перемещение курсора на первую строку
lcd.putstr('Temp: %3.1f C' % temperature) # Печать температуры
lcd.move_to(0, 1) # Перемещение курсора на вторую строку
lcd.putstr('Hum: %3.1f %%' % humidity) # Печать влажности
# Отправка данных на сервер MQTT
send_data(client, temperature, humidity)
# Логика для управления светодиодами
led_temp.value(1 if temperature < 17 or temperature > 25 else 0)
led_humidity.value(1 if humidity < 40 or humidity > 60 else 0)
except OSError as e:
print('Не удалось прочитать данные с DHT22:', e)
last_measurement_time = current_time
time.sleep(0.1)