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 = b"sensor/distance"
CLIENT_ID = b"ultrasonic-subscriber"
# Alert LED
led = Pin(2, Pin.OUT)
# 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 message received
def message_callback(topic, msg):
distance = float(msg.decode()) # convert to number
print(f"š© Distance received: {distance} cm")
# Alert system
if distance < 30: # Threshold = 30 cm
print("ā ļø ALERT: Object too close!")
led.value(1) # Turn LED ON
else:
led.value(0) # Turn LED OFF
# Subscribe loop
def subscribe_loop():
client = MQTTClient(CLIENT_ID, BROKER, PORT)
client.set_callback(message_callback)
client.connect()
print("ā
Connected to MQTT Broker")
client.subscribe(TOPIC)
print(f"š” Subscribed to {TOPIC.decode()}")
try:
while True:
client.wait_msg() # block until message arrives
finally:
client.disconnect()
# Run
connect_wifi()
subscribe_loop()