from machine import Pin
import time
import network
from umqtt.simple import MQTTClient
# Настройки MQTT
MQTT_CLIENT_ID = "mqtt-explorer-6d7c6a71"
MQTT_BROKER = "test.mosquitto.org" # Адрес MQTT-брокера
MQTT_TOPIC = "Saider" # Топик для получения значений слайдера
# Пины для светодиодов
led_pins = [5, 18, 19, 21, 22]
leds = [Pin(pin, Pin.OUT) for pin in led_pins]
# === Функция подключения к Wi-Fi ===
def connect_to_wifi():
wlan = network.WLAN(network.STA_IF)
wlan.active(True)
wlan.connect('Wokwi-GUEST', '')
print("Подключение к Wi-Fi...")
while not wlan.isconnected():
time.sleep(1)
print("Подключено к Wi-Fi:", wlan.ifconfig())
def set_leds(level):
"""
Управляет светодиодами на основе уровня слайдера.
"""
num_leds_on = int(level / 100 * len(leds))
for i, led in enumerate(leds):
led.value(1 if i < num_leds_on else 0)
def mqtt_callback(topic, msg):
"""
Обработка сообщений из MQTT.
"""
print(f"Получено сообщение: {topic.decode()} - {msg.decode()}")
try:
slider_value = int(msg) # Преобразуем сообщение в число
slider_value = max(0, min(100, slider_value)) # Ограничиваем диапазон от 0 до 100
set_leds(slider_value)
except ValueError:
print("Ошибка: неверное значение слайдера")
def connect_to_mqtt():
"""
Подключение к MQTT-брокеру и обработка ошибок.
"""
client = MQTTClient(MQTT_CLIENT_ID, MQTT_BROKER)
client.set_callback(mqtt_callback)
try:
client.connect()
print(f"Подключено к MQTT-брокеру {MQTT_BROKER}")
client.subscribe(MQTT_TOPIC)
print(f"Подписка на топик {MQTT_TOPIC}")
return client
except Exception as e:
print(f"Ошибка подключения к MQTT: {e}")
return None
def main():
# Подключение к Wi-Fi
connect_to_wifi()
# Подключение к MQTT
client = connect_to_mqtt()
if client is None:
print("Не удалось подключиться к MQTT. Завершаем работу.")
return
try:
while True:
try:
client.check_msg() # Проверка входящих сообщений
except OSError as e:
print(f"Ошибка при получении сообщения: {e}")
print("Переподключение к MQTT...")
client.disconnect()
time.sleep(5)
client = connect_to_mqtt()
if client is None:
print("Не удалось переподключиться к MQTT.")
break
client.subscribe(MQTT_TOPIC) # Повторная подписка
time.sleep(0.1)
except KeyboardInterrupt:
print("Отключение...")
client.disconnect()
# Запуск программы
if __name__ == "__main__":
main()