import network
import time
from umqtt.simple import MQTTClient
from machine import Pin
# WiFi Config
SSID = "Wokwi-GUEST"
PASSWORD = ""
# MQTT Config
BROKER = "broker.emqx.io"
PORT = 1883
TOPIC_SUB = b"distance"
TOPIC_PUB = b"door"
CLIENT_ID = b"subscriber-indicator"
# Hardware
led = Pin(2, Pin.OUT) # Indicator LED
button = Pin(32, Pin.IN) # Push button
# Connect WiFi
def connect_wifi():
wlan = network.WLAN(network.STA_IF)
wlan.active(True)
wlan.connect(SSID, PASSWORD)
print("š Connecting WiFi...", end="")
while not wlan.isconnected():
print(".", end="")
time.sleep(0.5)
print("\nā
Connected:", wlan.ifconfig())
# Callback when distance data received
def message_callback(topic, msg):
distance = float(msg.decode())
print(f"š© Distance received: {distance:.2f} cm")
if distance < 50:
print("ā ļø ALERT: Object too close!")
led.value(1)
else:
led.value(0)
# Main loop
def main():
client = MQTTClient(CLIENT_ID, BROKER, PORT)
client.set_callback(message_callback)
client.connect()
print("ā
Connected to MQTT Broker")
client.subscribe(TOPIC_SUB)
try:
while True:
client.check_msg() # check for incoming distance updates
# If button is pressed ā send OPEN command
if button.value() == 0:
print("š Button pressed ā OPEN Door")
client.publish(TOPIC_PUB, b"OPEN")
time.sleep(0.5)
else:
print("š Door closed")
client.publish(TOPIC_PUB, b"CLOSE")
time.sleep(0.5)
time.sleep(0.5)
finally:
client.disconnect()
# Run
connect_wifi()
main()