import network
import time
from machine import Pin, I2C
import dht
import ssd1306
from umqtt.simple import MQTTClient
# --- НАЛАШТУВАННЯ ---
WIFI_SSID = "Wokwi-GUEST"
WIFI_PASS = ""
MQTT_CLIENT_ID = "esp32_thermostat"
MQTT_BROKER = "io.adafruit.com"
MQTT_USER = "U1TR4"
MQTT_KEY = "aio_aJll50mK1tJcL8Be81jLVeX8t350"
MQTT_FEED = MQTT_USER + "/feeds/heater"
# --- ЗАЛІЗО ---
sensor = dht.DHT22(Pin(15))
relay = Pin(2, Pin.OUT)
i2c = I2C(0, scl=Pin(22), sda=Pin(21))
oled = ssd1306.SSD1306_I2C(128, 64, i2c)
# --- WiFi ---
def connect_wifi():
wlan = network.WLAN(network.STA_IF)
wlan.active(True)
wlan.connect(WIFI_SSID, WIFI_PASS)
while not wlan.isconnected():
print(".", end="")
time.sleep(0.5)
print("\nWiFi Connected! IP:", wlan.ifconfig()[0])
# --- ДИСТАНЦІЙНЕ КЕРУВАННЯ ---
def sub_callback(topic, msg):
command = msg.decode("utf-8")
print(f"Command receive: {command}")
if command == "ON":
relay.value(1)
update_display("REMOTE ON")
elif command == "OFF":
relay.value(0)
update_display("REMOTE OFF")
# --- ДИСПЛЕЙ ---
def update_display(status):
sensor.measure()
t, h = sensor.temperature(), sensor.humidity()
oled.fill(0)
oled.text("IoT Thermostat", 0, 0)
oled.text(f"Temp: {t}C", 0, 20)
oled.text(f"Status: {status}", 0, 40)
oled.show()
connect_wifi()
client = MQTTClient(MQTT_CLIENT_ID, MQTT_BROKER, user=MQTT_USER, password=MQTT_KEY)
client.set_callback(sub_callback)
client.connect()
client.subscribe(MQTT_FEED)
print("Connected to Adafruit IO!")
while True:
try:
client.check_msg()
update_display("Connected")
time.sleep(2)
except:
client.connect()