from machine import Pin
from time import sleep
from umqtt.simple import MQTTClient
import network
import time
import json
import dht
import config
class RGBLed:
def __init__(self, pin_red, pin_green, pin_blue):
self.pin_red = Pin(pin_red, Pin.OUT)
self.pin_green = Pin(pin_green, Pin.OUT)
self.pin_blue = Pin(pin_blue, Pin.OUT)
def set_red(self):
self.pin_red.value(0)
self.pin_green.value(1)
self.pin_blue.value(1)
def set_green(self):
self.pin_red.value(1)
self.pin_green.value(0)
self.pin_blue.value(1)
def connect_wifi(ssid, password):
print("Connecting to WiFi", end="")
sta_if = network.WLAN(network.STA_IF)
sta_if.active(True)
sta_if.connect(ssid, password)
while not sta_if.isconnected():
print(".", end="")
time.sleep(0.1)
print(" Connected!")
return sta_if
def connect_mqtt(broker, client_id, user, password, port=8883):
print("Connecting to MQTT server... ", end="")
client = MQTTClient(client_id, broker, port=port, user=user, password=password, ssl=True, ssl_params={'server_hostname': broker})
client.connect()
print("Connected!")
return client
# Define WiFi credentials
ssid = config.wifi_ssid
password = config.wifi_password
# Define MQTT parameters
mqtt_broker = config.mqtt_broker
mqtt_client_id = config.mqtt_client_id
mqtt_user = config.mqtt_user
mqtt_password = config.mqtt_password
mqtt_topic = "data/parking"
# Initialize the RGB LEDs
led1 = RGBLed(19, 5, 2) # First LED
led2 = RGBLed(13, 26, 32) # Second LED
# Connect to WiFi
wifi_interface = connect_wifi(ssid, password)
# Connect to MQTT broker
mqtt_client = connect_mqtt(mqtt_broker, mqtt_client_id, mqtt_user, mqtt_password)
# Callback function for MQTT messages
def mqtt_callback(topic, msg):
print("Message received on topic: %s, Message: %s" % (topic, msg))
try:
data = json.loads(msg)
sensor_number = data.get("sensor_number")
spot = data.get("spot")
status = data.get("status")
if sensor_number == "1":
if spot == "1":
if status == "taken":
led1.set_red()
elif status == "free":
led1.set_green()
elif spot == "2":
if status == "taken":
led2.set_red()
elif status == "free":
led2.set_green()
else:
print("Unknown sensor number:", sensor_number)
except Exception as e:
print("Error processing MQTT message:", e)
# Subscribe to MQTT topic
mqtt_client.set_callback(mqtt_callback)
mqtt_client.subscribe(mqtt_topic)
# Main loop
while True:
mqtt_client.wait_msg()