import dht
import machine
import time
from hcsr04 import HCSR04
from BlynkLib import Blynk
# Wi-Fi connection
def connect_wifi(ssid, password):
import network
wlan = network.WLAN(network.STA_IF)
wlan.active(True)
if not wlan.isconnected():
print("Connecting to Wi-Fi...")
wlan.connect(ssid, password)
while not wlan.isconnected():
time.sleep(1)
print("Connected to Wi-Fi:", wlan.ifconfig())
# Replace with your Wi-Fi credentials
connect_wifi("Wokwi-GUEST", "")
# Blynk setup
BLYNK_AUTH_TOKEN = "EDaJUQt9OEOcdj77Faf8RDaNMIIJkTGC"
blynk = Blynk(BLYNK_AUTH_TOKEN)
# Sensor and buzzer setup
dht_sensor = dht.DHT22(machine.Pin(4)) # DHT22 on GPIO 4
pir_sensor = machine.Pin(18, machine.Pin.IN) # PIR on GPIO 18
mq2_pin = machine.ADC(machine.Pin(34)) # MQ-2 on GPIO 34
mq2_pin.atten(machine.ADC.ATTN_11DB) # Set ADC range to 0-3.3V
ultrasonic = HCSR04(trigger_pin=26, echo_pin=25) # HC-SR04 on GPIO 26, 25
buzzer = machine.Pin(27, machine.Pin.OUT) # Buzzer on GPIO 27
# Buzzer alert function
def alert_buzzer(state):
buzzer.value(1 if state else 0)
# Read DHT22 data
def read_dht():
for _ in range(3): # Retry up to 3 times
try:
dht_sensor.measure()
return dht_sensor.temperature(), dht_sensor.humidity()
except OSError:
print("DHT22 read error, retrying...")
time.sleep(1)
return None, None
# Read Ultrasonic distance
def read_ultrasonic():
try:
return ultrasonic.distance_cm()
except OSError:
return None
# Read MQ-2 gas level
def read_mq2():
return mq2_pin.read()
# Main loop
def main():
while True:
blynk.run()
# Read DHT22
temp, hum = read_dht()
if temp is not None and hum is not None:
print(f"Temp: {temp}°C, Humidity: {hum}%")
blynk.virtual_write(1, temp) # Send temp to V1
blynk.virtual_write(2, hum) # Send humidity to V2
# Read PIR motion
motion_detected = pir_sensor.value()
blynk.virtual_write(3, motion_detected) # Send motion status to V3
alert_buzzer(motion_detected) # Activate buzzer for motion
# Read MQ-2 gas level
gas_level = read_mq2()
print(f"Gas Level: {gas_level}")
blynk.virtual_write(4, gas_level) # Send gas level to V4
if gas_level > 1000: # Example gas alert threshold
alert_buzzer(True)
# Read Ultrasonic distance
distance = read_ultrasonic()
if distance is not None:
print(f"Distance: {distance} cm")
blynk.virtual_write(5, distance) # Send distance to V5
time.sleep(2) # Ensure at least 2 seconds between DHT22 readings
# Start main loop
main()