import network
import time
from machine import Pin, PWM
from umqtt.simple import MQTTClient
# ---------------- MQTT Settings ----------------
MQTT_CLIENT_ID = "smart-dustbin"
MQTT_BROKER = "broker.mqttdashboard.com"
MQTT_USER = ""
MQTT_PASSWORD = ""
MQTT_TOPIC = "smartdustbin/status"
# ---------------- WiFi ----------------
print("Connecting to WiFi", end="")
wifi = network.WLAN(network.STA_IF)
wifi.active(True)
wifi.connect("Wokwi-GUEST", "")
while not wifi.isconnected():
print(".", end="")
time.sleep(0.1)
print(" Connected!")
# ---------------- MQTT ----------------
print("Connecting to MQTT...", end="")
client = MQTTClient(MQTT_CLIENT_ID,
MQTT_BROKER,
user=MQTT_USER,
password=MQTT_PASSWORD)
client.connect()
print(" Connected!")
# ---------------- Ultrasonic Sensor ----------------
trigger = Pin(5, Pin.OUT)
echo = Pin(18, Pin.IN)
# ---------------- Servo ----------------
servo = PWM(Pin(15), freq=50)
# Function to rotate servo
def set_angle(angle):
duty = int((angle / 180) * 102 + 26)
servo.duty(duty)
# Measure distance
def distance():
trigger.off()
time.sleep_us(2)
trigger.on()
time.sleep_us(10)
trigger.off()
while echo.value() == 0:
start = time.ticks_us()
while echo.value() == 1:
end = time.ticks_us()
duration = time.ticks_diff(end, start)
dist = (duration * 0.0343) / 2
return dist
# Initially close lid
set_angle(0)
while True:
dist = distance()
print("Distance:", dist, "cm")
if dist < 20:
print("Object Detected - Opening Lid")
set_angle(90)
client.publish(MQTT_TOPIC, "Dustbin Open")
time.sleep(3)
print("Closing Lid")
set_angle(0)
client.publish(MQTT_TOPIC, "Dustbin Closed")
time.sleep(0.5)