import network
from umqtt.simple import MQTTClient
from time import sleep
import neopixel
import machine
# Настройка NeoPixel
NUM_PIXELS = 16 # Количество светодиодов
PIN = 12 # Пин, к которому подключены NeoPixel
np = neopixel.NeoPixel(machine.Pin(PIN), NUM_PIXELS)
client_id = "wokwi1"
broker = "broker.hivemq.com" # Используем HiveMQ
topic = "wokwi"
# Функция для установки цвета NeoPixel
def set_color(color):
np[0] = color # Установка цвета первого светодиода
np.write() # Обновление состояния NeoPixel
# Подключение к Wi-Fi
def connect_wifi(ssid, password):
wifi = network.WLAN(network.STA_IF)
wifi.active(True)
wifi.connect(ssid, password)
print("Connecting to WiFi...")
while not wifi.isconnected():
sleep(0.5)
print("WiFi connected!")
print("IP Address:", wifi.ifconfig()[0])
# Подключение к MQTT
def connect_mqtt(client_id, broker):
client = MQTTClient(client_id, broker)
try:
client.connect()
print("Connected to MQTT!")
except Exception as e:
print("Failed to connect to MQTT:", e)
return None
return client
"decoded_msg = msg.decode('utf-8') Она декодирует байтовую строку msg,"
"полученную из MQTT-сообщения, в строку формата UTF-8. Стандартный способ декодирования в Python - это использование кодировки UTF-8"
"print(f"Message received on topic {topic.decode('utf-8')}: {decoded_msg}") Она выводит в консоль сообщение о том, что было получено
" новое сообщение на определенной теме (topic) MQTT.
"В строке используется f-строка (форматированная строка), что позволяет вставлять значения "
#переменных непосредственно в строку"
# Обработчик сообщений
def message_callback(topic, msg):
try:
decoded_msg = msg.decode('utf-8')
print(f"Message received on topic {topic.decode('utf-8')}: {decoded_msg}")
if decoded_msg == "red":
set_color((255, 0, 0)) # Красный
elif decoded_msg == "green":
set_color((0, 255, 0)) # Зеленый
elif decoded_msg == "blue":
set_color((0, 0, 255)) # Синий
else:
print("Unknown color command.")
except Exception as e:
print(f"Error decoding message: {e}")
# Функция для установки цвета NeoPixel
def set_color(color):
np[0] = color # Установка цвета первого светодиода
np.write() # Обновление состояния NeoPixel
# Основная функция
def main():
# Подключение к Wi-Fi
connect_wifi("Wokwi-GUEST", "")
# Подключение к MQTT
mqtt_client = connect_mqtt("wokwi1", "broker.hivemq.com")
if mqtt_client is None: #обозначает отсутствие значения или пустоту.
return # Если не удалось подключиться к MQTT, выходим из программы
# Подписка на тему
mqtt_client.set_callback(message_callback)
mqtt_client.subscribe("wokwi") #подписка на определенную тему для получения сообщений
print("Subscribed to topic: wokwi")
# Основной цикл для проверки сообщений
while True:
try:
mqtt_client.check_msg() # Проверка входящих сообщений
sleep(1) # Задержка, чтобы избежать быстрого опроса
except Exception as e: #для перехвата и обработки ошибок, возникающих в блоке кода, который предшествует этой конструкции
print("Error while checking messages:", e)
sleep(1)
# Запуск основной функции. это конструкция, которая используется для определения того, выполняется ли файл как основная программа или импортируется как модуль в другой файл.
if __name__ == "__main__":
main()
#Это специальная переменная,автоматически устанавливается интерпретатором Python. Она содержит имя текущего модуля.