import network
import time
from machine import Pin, ADC
from umqtt import MQTTClient
import ubinascii
import machine
# ---------------- WiFi ----------------
SSID = "Wokwi-GUEST"
PASSWORD = ""
# ---------------- MQTT ----------------
BROKER = "broker.hivemq.com"
PORT = 1883
TOPIC = b"factory/gas/mq2/alert"
CLIENT_ID = b"pico-" + ubinascii.hexlify(machine.unique_id())
# ---------------- Hardware ----------------
mq2 = ADC(26)
led = Pin(15, Pin.OUT)
buzzer = Pin(14, Pin.OUT)
GAS_THRESHOLD = 35000
led_state = False # for blinking
# ---------------- WiFi Connect ----------------
print("Connecting to WiFi...")
wifi = network.WLAN(network.STA_IF)
wifi.active(True)
wifi.connect(SSID, PASSWORD)
while not wifi.isconnected():
time.sleep(0.2)
print("WiFi Connected")
time.sleep(2)
# ---------------- MQTT Connect ----------------
print("Connecting to MQTT...")
client = MQTTClient(
client_id=CLIENT_ID,
server=BROKER,
port=PORT,
keepalive=60
)
client.connect()
print("MQTT Connected")
# ---------------- Main Loop ----------------
while True:
gas_value = mq2.read_u16()
print("Gas Level:", gas_value)
if gas_value > GAS_THRESHOLD:
# ---- ALARM ACTIONS ----
buzzer.on()
# LED BLINK
led_state = not led_state
led.value(led_state)
# ---- ALERT + TELEMETRY ----
msg = "ALERT: HARMFUL GAS | Level={}".format(gas_value)
client.publish(TOPIC, msg)
print("🚨 ALERT SENT")
else:
# ---- SAFE STATE ----
led.off()
buzzer.off()
time.sleep(1)
Loading
pi-pico-w
pi-pico-w