import machine
import time
from umqtt.simple import MQTTClient
import network
import dht # Import DHT library
# MQTT Broker configuration
MQTT_BROKER = "broker.hivemq.com" # Replace with your MQTT broker
MQTT_CLIENT_ID = "esp32_fire_and_dht"
MQTT_TOPIC_FIRE = "home/fireStatus"
MQTT_TOPIC_ALERT = "home/fireAlert"
MQTT_TOPIC_TEMP = "home/temperature"
MQTT_TOPIC_HUMID = "home/humidity"
# WiFi configuration
WIFI_SSID = "Wokwi-GUEST" # Change your WiFi SSID
WIFI_PASSWORD = "" # Change your WiFi Password
# GPIO Pins
FIRE_SENSOR_PIN = 23 # Fire sensor digital pin (GPIO23)
DHT_PIN = 4 # DHT22 data pin (GPIO4)
GREEN_LED_PIN = 12 # GPIO12 for green LED
RED_LED_PIN = 14 # GPIO14 for red LED
BUZZER_PIN = 13 # GPIO13 for buzzer
# Initialize components
fire_sensor = machine.Pin(FIRE_SENSOR_PIN, machine.Pin.IN) # Fire sensor
green_led = machine.Pin(GREEN_LED_PIN, machine.Pin.OUT) # Green LED
red_led = machine.Pin(RED_LED_PIN, machine.Pin.OUT) # Red LED
buzzer = machine.Pin(BUZZER_PIN, machine.Pin.OUT) # Buzzer
dht_sensor = dht.DHT22(machine.Pin(DHT_PIN)) # DHT22 sensor
# Connect to WiFi
wifi = network.WLAN(network.STA_IF)
wifi.active(True)
wifi.connect(WIFI_SSID, WIFI_PASSWORD)
while not wifi.isconnected():
print("Connecting to WiFi...")
time.sleep(1)
print("Connected to WiFi:", wifi.ifconfig())
# Connect to MQTT Broker
client = MQTTClient(MQTT_CLIENT_ID, MQTT_BROKER)
client.connect()
print("Connected to MQTT Broker")
# Function to check fire sensor and send alerts
def check_fire_sensor():
fire_val = fire_sensor.value() # Read fire sensor (LOW = fire detected)
print("Fire Sensor Value:", fire_val)
if fire_val == 0: # Fire detected
print("Fire Detected!")
red_led.value(1) # Turn on red LED
green_led.value(0) # Turn off green LED
buzzer.value(1) # Activate buzzer
client.publish(MQTT_TOPIC_ALERT, "Fire Detected")
client.publish(MQTT_TOPIC_FIRE, "1") # 1 = Fire detected
else: # No fire
print("No Fire Detected")
red_led.value(0) # Turn off red LED
green_led.value(1) # Turn on green LED
buzzer.value(0) # Deactivate buzzer
client.publish(MQTT_TOPIC_ALERT, "No Fire")
client.publish(MQTT_TOPIC_FIRE, "0") # 0 = No fire
# Function to read temperature and humidity from DHT22
def read_dht_sensor():
try:
dht_sensor.measure() # Measure temperature and humidity
temperature = dht_sensor.temperature() # Read temperature
humidity = dht_sensor.humidity() # Read humidity
print("Temperature:", temperature, "°C")
print("Humidity:", humidity, "%")
# Publish temperature and humidity to MQTT
client.publish(MQTT_TOPIC_TEMP, str(temperature))
client.publish(MQTT_TOPIC_HUMID, str(humidity))
except OSError as e:
print("Failed to read DHT22 sensor:", e)
# Main loop
while True:
try:
check_fire_sensor() # Check fire sensor
read_dht_sensor() # Read DHT22 sensor
except OSError as e:
print("Error:", e)
time.sleep(2) # Wait 2 seconds before the next iteration