import time
import machine
from umqtt.simple import MQTTClient
import dht
DHT_PIN = 2
LED_PIN = 4
WIFI_SSID = "Wokwi-GUEST"
WIFI_PASSWORD = ""
MQTT_SERVER = "196.112.125.31" # this is my wifi router ip
MQTT_PORT = 1883
MQTT_CLIENT_ID = "esp32_client"
MQTT_TOPIC_TEMPERATURE = b"temperature"
MQTT_TOPIC_HUMIDITY = b"humidity"
MQTT_TOPIC_LED = b"lamp"
dht_sensor = dht.DHT22(machine.Pin(DHT_PIN))
led = machine.Pin(LED_PIN, machine.Pin.OUT)
def connect_wifi():
import network
wifi = network.WLAN(network.STA_IF)
wifi.active(True)
wifi.connect(WIFI_SSID, WIFI_PASSWORD)
while not wifi.isconnected():
time.sleep(1)
print("Connected to WiFi:", WIFI_SSID)
print("IP address:", wifi.ifconfig()[0])
def connect_mqtt():
client = MQTTClient(MQTT_CLIENT_ID, MQTT_SERVER, MQTT_PORT)
client.connect()
print("Connected to MQTT broker")
return client
def publish_data(client, topic, data):
client.publish(topic, str(data))
def control_led(message):
if message == b"on":
led.on()
print("LED turned on")
elif message == b"off":
led.off()
print("LED turned off")
def mqtt_callback(topic, message):
print("Received message:", message)
if topic == MQTT_TOPIC_LED:
control_led(message)
def main():
connect_wifi()
client = connect_mqtt()
client.set_callback(mqtt_callback)
client.subscribe(MQTT_TOPIC_LED)
while True:
try:
dht_sensor.measure()
temperature = dht_sensor.temperature()
humidity = dht_sensor.humidity()
print("Temperature:", temperature, "°C")
print("Humidity:", humidity, "%")
publish_data(client, MQTT_TOPIC_TEMPERATURE, temperature)
publish_data(client, MQTT_TOPIC_HUMIDITY, humidity)
client.check_msg()
time.sleep(5)
except OSError as e:
print("Failed to read data from DHT sensor:", e)
if __name__ == "__main__":
main()