from machine import Pin
import utime
import network
from umqttsimple import MQTTClient
import ujson
# Device Setup
DEVICE_ID = "wokwi001"
# WiFi Setup
WIFI_SSID = "Wokwi-GUEST" # Replace with your WiFi SSID
WIFI_PASSWORD = " " # Replace with your WiFi password
# MQTT Setup
MQTT_BROKER = "mqtt-dashboard.com"
MQTT_CLIENT = DEVICE_ID
MQTT_TELEMETRY_TOPIC = "iot/telemeties"
MQTT_CONTROL_TOPIC = "iot/control"
# Ultrasonic Sensor Pins
trigger1 = Pin(4, Pin.OUT)
echo1 = Pin(5, Pin.IN)
trigger2 = Pin(26, Pin.OUT)
echo2 = Pin(27, Pin.IN)
trigger3 = Pin(20, Pin.OUT)
echo3 = Pin(19, Pin.IN)
# Ultrasonic Sensor Function
def ultra(trigger, echo):
trigger.off()
utime.sleep_us(2)
trigger.on()
utime.sleep_us(5)
trigger.off()
while echo.value() == 0:
signaloff = utime.ticks_us()
while echo.value() == 1:
signalon = utime.ticks_us()
timepassed = signalon - signaloff
distance = (timepassed * 0.0343) / 2
return distance
# Function to determine status based on distance
def display_status(distance):
if distance > 200:
status = "Free"
else:
status = "Parked"
return status
def did_receive_callback(topic, msg):
print("Received MQTT message on topic:", topic)
print("Message:", msg)
def connect_mqtt():
print("Connecting to MQTT broker ...", end="")
mqtt_client = MQTTClient(MQTT_CLIENT, MQTT_BROKER)
mqtt_client.set_callback(did_receive_callback)
mqtt_client.connect()
print("Connected.")
mqtt_client.subscribe(MQTT_CONTROL_TOPIC)
return mqtt_client
def create_json_data(status):
data = ujson.dumps({
"device_id": DEVICE_ID,
"Status": status,
"type": "sensor"
})
return data
def mqtt_client_publish(topic, data):
print("\nUpdating MQTT Broker...")
mqtt_client.publish(topic, data)
print(data)
# Connect to WiFi
wifi_client = network.WLAN(network.STA_IF)
wifi_client.active(True)
print("Connecting device to WiFi")
wifi_client.connect(WIFI_SSID, WIFI_PASSWORD)
# Wait until WiFi is Connected
while not wifi_client.isconnected():
print("Connecting")
utime.sleep(0.1)
print("WiFi Connected!")
print(wifi_client.ifconfig())
# Establish MQTT Connection
mqtt_client = connect_mqtt()
while True:
distance1 = ultra(trigger1, echo1)
status1 = display_status(distance1)
print("Sensor 1:", status1)
mqtt_client_publish("smart_parking/sensor1", status1)
distance2 = ultra(trigger2, echo2)
status2 = display_status(distance2)
print("Sensor 2:", status2)
mqtt_client_publish("smart_parking/sensor2", status2)
distance3 = ultra(trigger3, echo3)
status3 = display_status(distance3)
print("Sensor 3:", status3)
mqtt_client_publish("smart_parking/sensor3", status3)
utime.sleep(1) # Delay between sensor readings