import network
import time
from machine import Pin, time_pulse_us
import ubinascii
from umqtt.simple import MQTTClient
# WiFi credentials
SSID = 'Wokwi-GUEST'
PASSWORD = ''
# MQTT credentials
MQTT_BROKER = "broker.mqttdashboard.com"
MQTT_CLIENT_ID = "dausfirdaus"
MQTT_TOPIC = "distance_sensor"
# Ultrasonic sensor pins
TRIG_PIN = 4
ECHO_PIN = 5
# Connect to WiFi
def connect_wifi():
wlan = network.WLAN(network.STA_IF)
wlan.active(True)
wlan.connect(SSID, PASSWORD)
while not wlan.isconnected():
print('Connecting to WiFi...')
time.sleep(1)
print('Connected to WiFi:', wlan.ifconfig())
# Connect to MQTT broker
def connect_mqtt():
client = MQTTClient(MQTT_CLIENT_ID, MQTT_BROKER)
client.connect()
print('Connected to MQTT Broker')
return client
# Measure distance using ultrasonic sensor
def measure_distance():
trig = Pin(TRIG_PIN, Pin.OUT)
echo = Pin(ECHO_PIN, Pin.IN)
# Ensure trigger is low
trig.value(0)
time.sleep_us(2)
# Trigger the sensor
trig.value(1)
time.sleep_us(10)
trig.value(0)
# Measure the pulse width on the echo pin
pulse_time = time_pulse_us(echo, 1, 1000000)
distance = (pulse_time / 2) / 29.1 # Convert time to distance
return distance
# MQTT message callback
def on_message(topic, msg):
print('Received message:', msg)
# Add your code to handle received messages
# Main function
def main():
connect_wifi()
client = connect_mqtt()
client.set_callback(on_message)
client.subscribe(MQTT_TOPIC)
try:
while True:
client.check_msg() # Check for new messages
distance = measure_distance()
print('Distance:', distance, 'cm')
# Add your code to publish or process the distance
time.sleep(1)
except KeyboardInterrupt:
print('Disconnected')
client.disconnect()
if __name__ == '__main__':
main()