import machine
import time
import network
from umqtt.simple import MQTTClient
import sys # Add this import
# Wi-Fi credentials
SSID = "Wokwi-GUEST"
PASSWORD = ""
# MQTT broker settings
mqtt_server = 'broker.hivemq.com'
mqtt_port = 1883 # Default MQTT port
TOPIC_PUBLISH = b"vehicle/security/status"
TOPIC_SUBSCRIBE = b"vehicle/security/command"
# GPIO pin definitions
pir_sensor = machine.Pin(14, machine.Pin.IN) # PIR sensor on GPIO14
buzzer = machine.Pin(12, machine.Pin.OUT) # Buzzer on GPIO12
alarm_led = machine.Pin(13, machine.Pin.OUT) # Alarm LED on GPIO13
no_motion_led = machine.Pin(2, machine.Pin.OUT) # No motion LED on GPIO2
relay = machine.Pin(27, machine.Pin.OUT) # Relay pin
# Wi-Fi connection function
def connect_to_wifi():
wlan = network.WLAN(network.STA_IF)
wlan.active(True)
wlan.connect(SSID, PASSWORD)
print("Connecting to Wi-Fi...", end="")
while not wlan.isconnected():
print(".", end="")
time.sleep(1)
print("\nConnected to Wi-Fi:", wlan.ifconfig())
# Callback for incoming MQTT messages
def mqtt_callback(topic, msg):
print(f"Received message: {msg} on topic: {topic}")
if msg == b"alarm_on":
buzzer.on()
alarm_led.on()
relay.on()
elif msg == b"alarm_off":
buzzer.off()
alarm_led.off()
relay.off()
# Main setup
try:
connect_to_wifi()
client = MQTTClient("client_id", mqtt_server, mqtt_port) # Ensure CLIENT_ID is a string
client.set_callback(mqtt_callback)
client.connect()
client.subscribe(TOPIC_SUBSCRIBE)
print("Connected to MQTT broker and subscribed to topic.")
except Exception as e:
print("Error connecting to MQTT:", e)
sys.exit()
# Main loop
try:
while True:
# Handle MQTT messages
client.check_msg()
# Motion detection logic
if pir_sensor.value() == 1: # Motion detected
buzzer.on()
alarm_led.on()
no_motion_led.off()
relay.on()
print("Motion detected! Alarm triggered!")
client.publish(TOPIC_PUBLISH, b"Motion detected! Alarm triggered!")
else:
buzzer.off()
alarm_led.off()
no_motion_led.on()
relay.off()
print("No motion detected.")
client.publish(TOPIC_PUBLISH, b"No motion detected.")
time.sleep(1)
except KeyboardInterrupt:
print("Program interrupted.")
finally:
client.disconnect()
print("Disconnected from MQTT broker.")