from machine import Pin
import dht
import time
import network
from umqtt.simple import MQTTClient
# import random
# -------- Wi-Fi setup --------
ssid = "Wokwi-GUEST"
password = ""
wifi = network.WLAN(network.STA_IF)
wifi.active(True)
wifi.connect(ssid, password)
print("Connecting to Wi-Fi...")
while not wifi.isconnected():
time.sleep(0.5)
print("Wi-Fi connected:", wifi.ifconfig())
# -------- MQTT setup --------
MQTT_BROKER = "broker.hivemq.com"
CLIENT_ID = "esp32-dht22-demo"
TOPIC_TEMP = b"lnu/iot/fj222wh/temperature"
TOPIC_HUM = b"lnu/iot/fj222wh/humidity"
TOPIC_LED_COMMAND = b"lnu/iot/fj222wh/command/led"
client = MQTTClient(CLIENT_ID, MQTT_BROKER)
client.connect()
print("Connected to MQTT broker")
# -------- Sensor setup --------
sensor = dht.DHT22(Pin(15))
led = Pin(2, Pin.OUT)
print("Starting DHT22 sensor...")
def on_message(topic, msg):
print(f"Received message on {topic}: {msg}")
if topic == TOPIC_LED_COMMAND:
if msg == b"1" or msg == b"on":
led.value(1)
print("LED turned ON")
elif msg == b"0" or msg == b"off":
led.value(0)
print("LED turned OFF")
client.set_callback(on_message)
client.connect()
# Subscribe to topics
client.subscribe(TOPIC_LED_COMMAND)
print("Subscribed to:", TOPIC_LED_COMMAND)
# -------- Loop --------
while True:
try:
client.check_msg()
sensor.measure()
temperature = sensor.temperature()
humidity = sensor.humidity()
# temperature = random.uniform(-40, 80)
# humidity = random.uniform(0, 100)
print("Temperature:", temperature, "°C")
print("Humidity:", humidity, "%")
# Publish to MQTT
client.publish(TOPIC_TEMP, str(temperature))
client.publish(TOPIC_HUM, str(humidity))
except Exception as e:
print("Sensor error:", e)
time.sleep(2)