import network
from umqtt.robust import MQTTClient
from machine import Pin, I2C
import ssd1306
import time
WIFI_SSID = 'Wokwi-GUEST'
WIFI_PASSWORD = ''
MQTT_CLIENT_ID = "clientId-8q0w09C2al"
MQTT_BROKER = "mqttdashboard.com"
MQTT_TOPIC = "elsys/emil-doychinov/12b/code"
relay_pin = 17
relay = Pin(relay_pin, Pin.OUT)
access_codes = {'123#': 'Wiper', '456#': 'Keeper'}
i2c = I2C(0, scl=Pin(22), sda=Pin(21))
oled_width = 128
oled_height = 64
oled = ssd1306.SSD1306_I2C(oled_width, oled_height, i2c)
def toggle_relay(state, duration):
relay.value(state)
time.sleep(duration)
relay.on()
def mqtt_callback(topic, msg):
access_code = msg.decode('utf-8').strip()
if access_code in access_codes:
role = access_codes[access_code]
display_text(f'Code: {access_code}', f'Role: {role}')
toggle_relay(False, 5)
else:
display_text(f'Code: {access_code}', 'Access denied')
toggle_relay(True, 5)
def display_text(message1, message2=''):
oled.fill(0)
oled.text(message1, 10, 10)
oled.text(message2, 10, 30)
oled.show()
wifi = network.WLAN(network.STA_IF)
wifi.active(True)
wifi.connect(WIFI_SSID, WIFI_PASSWORD)
while not wifi.isconnected():
pass
print('Connected to WiFi:', wifi.config('essid'))
client_id = 'esp32'
mqtt = MQTTClient(MQTT_CLIENT_ID, MQTT_BROKER)
mqtt.set_callback(mqtt_callback)
mqtt.connect()
mqtt.subscribe(MQTT_TOPIC)
try:
while True:
mqtt.check_msg()
time.sleep(1)
finally:
mqtt.disconnect()