from machine import Pin, PWM , UART , ADC, time_pulse_us
import network
import dht
import time
import blynk
BLYNK_TEMPLATE_ID = "TMPL22S4-6tpz"
BLYNK_TEMPLATE_NAME = "semester 1 project"
BLYNK_AUTH_TOKEN = "qz7txLLv1-EEXHB5or14BNjgxF-PpcpK"
# DHT22
dht_sensor = dht.DHT22(Pin(14))
# Gas Sensor
gas_sensor = Pin(25, Pin.IN)
# Ultrasonic
trig = Pin(5, Pin.OUT)
echo = Pin(18, Pin.IN)
#Servo
pwm = PWM(Pin(26), freq=50)
servo2 = PWM(Pin(27), freq=50)
def angle_to_duty(angle):
return int(((angle / 180) * 2 + 0.5) / 20 * 1023)
def set_pwm(angle):
pwm.duty(angle_to_duty(angle))
def set_servo2(angle):
servo2.duty(angle_to_duty(angle))
#LED
led = Pin(2, Pin.OUT)
#UART
uart = UART(1, baudrate=9600, tx=Pin(17), rx=Pin(16))
#blynk connection
wifi = network.WLAN(network.STA_IF)
wifi.active(True)
wifi.connect("Wokwi-GUEST", "")
print("Connecting WiFi...")
while not wifi.isconnected():
time.sleep(0.1)
print("WiFi Connected!")
blynk = blynk.Blynk(
BLYNK_AUTH_TOKEN,
tmpl_id=BLYNK_TEMPLATE_ID,
insecure=True
)
@blynk.on("connected")
def blynk_connected():
print("Blynk Connected!")
blynk.sync_virtual(0)
# Ultrasonic distance function
def measure_distance():
trig.off()
time.sleep_us(2)
trig.on()
time.sleep_us(10)
trig.off()
duration = time_pulse_us(echo, 1)
distance = (duration * 0.034) / 2
return distance
# Main Loop
while True:
distance = measure_distance()
if distance <= 30:
near_flag = 1
else:
near_flag = 0
gas_value = gas_sensor.value()
print("Gas:", gas_value)
if gas_value == 0:
gas_leak = 1
else:
gas_leak = 0
dht_sensor.measure()
temp = dht_sensor.temperature()
humidity = dht_sensor.humidity()
if gas_leak == 1:
set_pwm(180)
set_servo2(180)
led.on()
door_status = "OPEN_GAS"
elif distance > 0 and distance <= 30:
set_pwm(180)
set_servo2(180)
led.off()
door_status = "OPEN_PERSON"
else:
set_pwm(0)
set_servo2(0)
led.off()
door_status = "CLOSED"
#Blynk
blynk.virtual_write(1, gas_leak)
blynk.virtual_write(2, gas_leak)
blynk.virtual_write(3, temp)
blynk.virtual_write(4, humidity)
blynk.virtual_write(0, door_status)
data_str = f"{temp:.1f},{humidity:.1f},{near_flag},{door_status},{gas_value}\n"
uart.write(data_str)
print("sent:", data_str.strip())
blynk.run()
time.sleep(0.25)