MicroPython клиент

Установка

  1. Скачайте последнюю версию библиотеки для MicroPython из репозитория: microcomm-micropython на GitHub
  2. В файле main.py передайте uuid созданного устройства в класс MicrocommClient
  3. Загрузите на ваше устройство файлы microcomm_client.py и main.py
  4. Запустите файл main.py

После подключения, перейдите на страницу устройства на сайте и попробуйте отправлять команды через форму.


Пример использования

# main.py
import _thread
import esp32
import network
import time

# Импорт клиентской библиотеки MicroComm для ESP32
from microcomm import MicrocommClient

# --- Настройки Wi-Fi ---
WIFI_SSID = ""  # Имя вашей Wi-Fi точки
WIFI_PASSWORD = ""  # Пароль точки доступа


# Функция подключения к Wi-Fi
def connect_wifi():
    sta_if = network.WLAN(network.STA_IF)  # Режим клиента (не точка доступа)
    if not sta_if.isconnected():
        print("Connecting to Wi-Fi...")
        sta_if.active(True)  # Включаем Wi-Fi
        sta_if.connect(WIFI_SSID, WIFI_PASSWORD)  # Подключаемся
        while not sta_if.isconnected():
            pass  # Ждём подключения
        print("Connected to Wi-Fi")
        print("Network config:", sta_if.ifconfig())  # Показываем IP-адрес


# --- Инициализация MicroComm Client ---
mc = MicrocommClient(
    uuid="",  # UUID вашего устройства (узнайте в личном кабинете)
    debug=True  # Выводит подробные логи (удобно при настройке)
)


# --- Регистрация команды: WRITE_MESSAGE ---
@mc.register_command(
    name="WRITE_MESSAGE",  # Имя команды
    description="Написать сообщение",  # Описание команды
    param_specs={  # Описание ожидаемых параметров
        "message": {
            "type": "str",
            "required": True,
            "description": "Текст сообщения для вывода",
            "default": "Hello, World!",
        }
    },
)
def write_message(execution):
    message = execution.params.get("message")
    if not message:
        execution.error("Не указан параметр 'message'")  # Отправляем ошибку
        return

    print(f"Your message: {message}")
    execution.success({
        "your_data": [1, 2, 3]  # Можно вернуть свои данные
    })


# --- Регистрация команды: TEST_ERROR ---
@mc.register_command("TEST_ERROR", "Тест ошибки")
def test_error(execution):
    x += 1  # Ошибка: переменная x не определена
    execution.success()  # Этот код не выполнится


# --- Регистрация команды: GET_TEMP ---
@mc.register_command("GET_TEMP", "Возвращает температуру процессора")
def get_temp(execution):
    # Чтение температуры с встроенного сенсора ESP32 (в градусах Цельсия)
    temp = esp32.mcu_temperature()
    execution.success({
        "temp": temp,  # Отправляем значение
    })


# --- Запуск программы ---
connect_wifi()  # Подключаемся к Wi-Fi

# Запускаем цикл обмена данными с сервером в отдельном потоке
# Это позволяет устройству одновременно слушать команды и выполнять свою логику
_thread.start_new_thread(mc.exchange_data_loop, ())

# Основной цикл устройства (может выполнять свои задачи)
# Например, опрос датчиков, управление реле и т.д.
counter = 1
while True:
    print(f"Main loop #{counter}")
    mc.log_info(f"Сообщение #{counter} из основного цикла", payload={
        "your_data": {
            "counter": counter
        }
    })

    counter += 1
    time.sleep(30)

Отправка логов

Для отправки логов используйте соответствующий метод в зависимости от уровня важности:

mc.log_info("Текст лога", payload={"your_data": "hello world!"})

Доступные уровни логирования

  • mc.log_debug — отладочная информация
  • mc.log_info — общие сведения о работе
  • mc.log_warning — предупреждения
  • mc.log_error — ошибки
  • mc.log_critical — критические сбои

Каждый метод принимает:
- обязательный аргумент message (строка),
- необязательные аргументы payload (словарь с дополнительными данными) и label (метка для фильтрации).


Описание параметров команды

При регистрации команды с помощью декоратора передаётся аргумент param_specs.
Он предназначен для описания ожидаемых параметров команды.

Основная цель — напомнить самому себе, какие параметры принимает команда.

param_specs — это документация «встроенной помощи», которая делает работу с командами прозрачной и удобной.

Поддерживаемые поля спецификации

type
* Тип: str
* Описание: Тип параметра. Поддерживаемые значения: 'str', 'int', 'float', 'bool', 'list', 'dict'.

required
* Тип: bool
* Описание: Определяет, является ли параметр обязательным. По умолчанию: False.

description
* Тип: str
* Описание: Человекочитаемое пояснение назначения параметра. По умолчанию: 'Без описания'.

default
* Тип: любой
* Описание: Значение по умолчанию. Используется для автозаполнения в интерфейсе.

min_value / max_value
* Тип: number
* Описание: Ограничения для числовых значений (int, float).

min_length / max_length
* Тип: int
* Описание: Ограничения длины для строк или списков.

choices
* Тип: list
* Описание: Список допустимых значений (например: ["on", "off"]).

pattern
* Тип: str
* Описание: Регулярное выражение (в виде строки) для валидации строк.

example
* Тип: любой
* Описание: Пример значения (отображается в подсказке).

💡 Все поля необязательные, но чем подробнее вы опишете параметр — тем удобнее будет работать с командой.

Пример описания параметров команды

"param_specs": {
    "mode": {
      "type": "str",
      "required": True,
      "description": "Режим энергопотребления",
      "choices": ["eco", "normal", "turbo"],
      "example": "turbo"
    },
    "timeout": {
      "type": "int",
      "required": False,
      "description": "Таймаут отключения в секундах",
      "min_value": 10,
      "max_value": 600,
      "default": 60,
      "example": 120
    },
    "name": {
      "type": "str",
      "required": False,
      "description": "Пользовательское имя устройства",
      "min_length": 1,
      "max_length": 32,
      "pattern": "^[a-zA-Z0-9_]+$",
      "default": "device_01"
    }
  }