from machine import Pin
import network
import time
import ujson
from umqtt.simple import MQTTClient
# =====================================================
# MQTT Configuration
# =====================================================
MQTT_BROKER = "broker.mqttdashboard.com"
MQTT_TOPIC = b"smart/curtain/system"
CLIENT_ID = "ESP32_BOARD1"
# =====================================================
# WiFi Connection
# =====================================================
wifi = network.WLAN(network.STA_IF)
wifi.active(True)
print("Connecting to WiFi...")
wifi.connect("Wokwi-GUEST", "")
while not wifi.isconnected():
time.sleep(0.2)
print("WiFi Connected!")
print(wifi.ifconfig())
# =====================================================
# MQTT Connection
# =====================================================
print("MQTT connecting")
client = MQTTClient(CLIENT_ID, MQTT_BROKER)
client.connect()
print("MQTT is connected")
# =====================================================
# Push Buttons
# =====================================================
# OPEN Button
open_button = Pin(14, Pin.IN, Pin.PULL_UP)
# CLOSE Button
close_button = Pin(12, Pin.IN, Pin.PULL_UP)
# STOP Button
stop_button = Pin(13, Pin.IN, Pin.PULL_UP)
# =====================================================
# Variables
# =====================================================
current_state = "NO_PRESS"
last_state = ""
print("Board 1 Ready")
# =====================================================
# Main Loop
# =====================================================
while True:
# Default state
current_state = "NO_PRESS"
# Changing state based on button presses
if open_button.value() == 0:
current_state = "OPEN"
elif close_button.value() == 0:
current_state = "CLOSE"
elif stop_button.value() == 0:
current_state = "STOP"
# This condition prevents multiple presses
if current_state != last_state:
msg = ujson.dumps(
{"state": current_state}
)
client.publish(MQTT_TOPIC, msg)
print("-------------------------")
print("Published: ", msg)
last_state = current_state
time.sleep_ms(20) # Main loop delay