from machine import Pin, time_pulse_us
import time
import network
from umqtt.simple import MQTTClient
# WiFi Credentials
SSID = "Wokwi-GUEST"
PASSWORD = ""
# MQTT Config
BROKER = "broker.emqx.io"
PORT = 1883
TOPIC = b"sensor/distance"
CLIENT_ID = b"ultrasonic-publisher"
# Ultrasonic Pins
TRIG = Pin(5, Pin.OUT)
ECHO = Pin(18, Pin.IN)
# WiFi Connection
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())
# Measure distance
def get_distance():
TRIG.value(0)
time.sleep_us(2)
TRIG.value(1)
time.sleep_us(10)
TRIG.value(0)
duration = time_pulse_us(ECHO, 1, 30000) # wait max 30ms
distance = (duration / 2) * 0.0343 # speed of sound = 343 m/s
return round(distance, 2)
# Publish loop
def publish_loop():
client = MQTTClient(CLIENT_ID, BROKER, PORT)
client.connect()
print("ā
Connected to MQTT Broker")
try:
while True:
dist = get_distance()
msg = str(dist).encode() # convert to bytes
client.publish(TOPIC, msg)
print(f"š” Published distance: {dist} cm")
time.sleep(2)
finally:
client.disconnect()
# Run program
connect_wifi()
publish_loop()