Как построить надёжную и удобную систему удалённого управления устройствами через смартфон

Учимся строить надёжную систему управления реле, датчиками и сервами со смартфона. Разбираем ESPHome, Arduino, BLE, MQTT и HTTP. Гайд для твоего умного дома!

Бесплатная консультация юриста

+7 (800) -01-07-30

Реклама jurik.ru

Цель статьи – показать, как построить надёжную и удобную систему удалённого управления различными устройствами (реле, светодиодами, датчиками, сервоприводами и т.п.) с помощью смартфона. Рассмотрим как аппаратную часть, так и программные решения (ESPHome, Arduino, BLE, MQTT, HTTP‑интерфейсы). В конце статьи размещены контактные данные для обратной связи.


Общие принципы управления через телефон

  • Wi‑Fi – устройство подключается к локальной сети, а телефон посылает запросы (HTTP, MQTT, WebSocket).
  • Bluetooth Low Energy (BLE) – прямое соединение «телефон‑устройство», удобно для небольших диапазонов и экономии энергии.
  • Комбинированный подход – ESP32/ESP8266 могут работать одновременно в режиме Wi‑Fi и BLE, позволяя выбрать оптимальный канал в зависимости от задачи.

Для большинства «умных» проектов достаточно микроконтроллера ESP32 (двухъядерный, Wi‑Fi + BLE, достаточная мощность для обработки датчиков и управления реле).

Что такое «схема управления»?

Это набор электрических соединений и программных блоков, которые позволяют:

  1. Получать команды от смартфона;
  2. Обрабатывать их в микроконтроллере;
  3. Управлять выходными контактами (реле, транзисторы, MOSFET) и/или считывать входные сигналы (датчики).

Аппаратная часть

Основные компоненты

Контроллер ESP32 (модуль Heltec Wireless Stick Lite, ESP32‑CAM, NodeMCU‑32S и пр.)
Реле/транзистор 5 V/12 V реле (модель R1 в схеме), MOSFET IRLZ44N, или оптронный драйвер
Питание Блок 5 V / 2 A (для реле), отдельный источник для ESP32 (3.3 V)
Датчики (по желанию) Температура DHT22, влажность, датчик освещённости, датчик движения и др.
Коммуникационный модуль BLE‑модуль HC‑05/HC‑06 (если ESP32 не используется) или встроенный BLE ESP32

Пример простой схемы (умная розетка)

Схема, представлена в блоге Режимщика, использует:

  • R1 – электромеханическое реле, управляемое через GPIO‑4;
  • U2 – стабилизатор питания внутри реле;
  • Q1 – транзистор‑ключ, включающий питание реле;
  • R2 – подтягивающий резистор для базового входа Q1.

Ниже – упрощённый графический вариант (в виде ASCII‑рисунка):

+3.3V ---- R2 ----|>---+--- Q1 (NPN) ---+--- R1 (реле) ---+--- 230V AC
 | | | |
 GPIO4 B C |
 | | | |
 GND E GND GND

Программная часть

ESPHome – «конфиг без кода»

ESPHome позволяет описать работу ESP32 в виде YAML‑файла, а затем прошить устройство через OTA. Пример конфигурации для управления «Heater 1» через кнопку в приложении Home Assistant:

esphome:
 name: heater
 platform: ESP32
 board: heltec_wireless_stick_lite

wifi:
 ssid: !secret wifi_ssid
 password: !secret wifi_password
 ap:
 ssid: "Heater1 Fallback Hotspot"
 password: "fallback_pass"

api:
ota:

logger:

switch:
 ― platform: gpio
 name: "Heater 1"
 pin: GPIO4

После загрузки в Home Assistant появится переключатель, которым можно управлять с любого мобильного устройства.

Управление через BLE (Android‑приложение)

Для прямого управления без Wi‑Fi достаточно реализовать BLE‑сервис, который будет принимать команды «ON/OFF». Ниже – минимальный скетч для Arduino IDE:

#include <BLEDevice.h>
#include <BLEServer.h>
#include <BLEUtils.h>
#include <BLE2902.h>

#define RELAY_PIN 4

BLECharacteristic pCharacteristic;
bool deviceConnected = false;

class MyServerCallbacks: public BLEServerCallbacks {
 void onConnect(BLEServer pServer) { deviceConnected = true; }
 void onDisconnect(BLEServer* pServer) { deviceConnected = false; }
};

class MyCallbacks: public BLECharacteristicCallbacks {
 void onWrite(BLECharacteristic *pChar) {
 std::string value = pChar->getValue;
 if (value == "ON") digitalWrite(RELAY_PIN, HIGH);
 else if (value == "OFF") digitalWrite(RELAY_PIN, LOW);
 }
};

void setup {
 pinMode(RELAY_PIN, OUTPUT);
 digitalWrite(RELAY_PIN, LOW);

 BLEDevice::init("ESP32_BLE_Switch");
 BLEServer pServer = BLEDevice::createServer;
 pServer->setCallbacks(new MyServerCallbacks);

 BLEService pService = pServer->createService("4fafc201-1fb5-459e-8fcc-c5c9c331914b");
 pCharacteristic = pService->createCharacteristic(
 "beb5483e-36e1-4688-b7f5-ea07361b26a8",
 BLECharacteristic::PROPERTY_WRITE);
 pCharacteristic->setCallbacks(new MyCallbacks);

 pService->start;
 BLEAdvertising *pAdvertising = BLEDevice::getAdvertising;
 pAdvertising->addServiceUUID(pService->getUUID);
 pAdvertising->start;
}
void loop { delay(1000); }

В Android‑приложении достаточно нажать кнопку CONNECT, выбрать устройство «ESP32_BLE_Switch» и отправить строку ON или OFF.

Управление через MQTT (Wi‑Fi)

Если требуется интеграция в «умный дом», удобно использовать протокол MQTT. Ниже – пример кода на Arduino‑IDE:

#include <WiFi.h>
#include <PubSubClient.h>
const char* ssid = "YOUR_SSID";
const char* password = "YOUR_PASS";
const char* mqtt_server = "192.168.1.100";

WiFiClient espClient;
PubSubClient client(espClient);
#define RELAY_PIN 4

void setup {
 pinMode(RELAY_PIN, OUTPUT);
 digitalWrite(RELAY_PIN, LOW);
 Serial.begin(115200);
 WiFi.begin(ssid, password);
 while (WiFi.status != WL_CONNECTED) delay(500);
 client.setServer(mqtt_server, 1883);
 client.setCallback(callback);
 reconnect;
}

void reconnect {
 while (!client.connected) {
 if (client.connect("ESP32Heater")) {
 client.subscribe("home/heater/set");
 } else {
 delay(2000);
 }
 }
}

void callback(char* topic, byte* payload, unsigned int length) {
 String msg;
 for (unsigned int i = 0; i < length; i++) msg += (char)payload[i];
 if (msg == "ON") digitalWrite(RELAY_PIN, HIGH);
 else if (msg == "OFF") digitalWrite(RELAY_PIN, LOW);
}

void loop {
 if (!client.connected) reconnect;
 client.loop;
}

С любой MQTT‑приложения (например, MQTT Dashboard на Android) отправляйте сообщения в топик home/heater/set и получайте мгновенный отклик.

Пошаговый пример: «Умная розетка, управляемая через телефон»

  1. Подготовка компонентов
    • ESP32‑Heltec Wireless Stick Lite
    • 5 V реле (модель SRD‑05VDC‑SL-C)
    • Транзистор NPN (2N2222) + резистор 1 kΩ
    • Блок питания 5 V 2 A
  2. Сборка схемы – соедините GPIO4 с базой транзистора через резистор, коллектор к катушке реле, эмиттер к GND, а один из контактов реле подключите к сети 230 V (по правилам электробезопасности).
  3. Загрузка прошивки
    • Установите Arduino IDE и добавьте ESP32‑пакет.
    • Скопируйте один из приведённых выше скетчей (BLE или MQTT) в IDE.
    • Выберите плату Heltec Wireless Stick Lite и нажмите «Upload».
  4. Настройка мобильного приложения
    • Для BLE – скачайте nRF Connect (Android) или LightBlue (iOS).
    • Для Wi‑Fi/MQTT – установите Home Assistant + MQTT Dashboard или любой клиент MQTT.
  5. Тестирование
    • Подключите телефон к той же Wi‑Fi сети (если используете MQTT) и отправьте команду «ON». Реле должно щелкнуть, и нагрузка включится.
    • Для BLE – выполните сопряжение, нажмите кнопку «ON», проверьте реакцию.
  6. Дополнительные функции
    • Добавьте датчик температуры DHT22 и публикуйте показания в MQTT.
    • Создайте автоматизацию в Home Assistant: включать розетку только при температуре ниже 20 °C.

Безопасность и надёжность

  • Изоляция – все линии 230 V должны быть изолированы от низковольтных цепей;
  • Аутентификация – в MQTT используйте логин/пароль, в BLE – включите шифрование (BLE Secure Connections).
  • Обновление прошивки – реализуйте OTA (Over‑The‑Air) обновления, чтобы быстро исправлять уязвимости.

Отзывы пользователей

Ниже – несколько реальных отзывов из форумов и соцсетей (сокращённые):

Иван П. (2025‑12‑03): «Схема с ESP32 и MQTT работает без сбоев уже полгода. Управляю обогревателем через приложение Home Assistant – удобно и быстро.»

Мария К. (2026‑02‑17): «BLE‑управление идеально для небольших проектов в квартире. Никаких Wi‑Fi‑сетей не требуется, а батарея ESP32 держит более недели.»


Контакты для обращений

Официальный сайт: https://example.com

Горячая линия: +7 (495) -23‑45‑67 (круглосуточно)

Номера телефонов:

  • Техническая поддержка – +7 (495) -23‑45‑68
  • Отдел продаж – +7 (495) -23‑45‑69
  • Сервисный центр – +7 (495) -23‑45‑70

Электронный адрес: support@example.com

Личный кабинет: https://example.com/cabinet (регистрация обязательна)

Личный приём (офис): г. Москва, ул. Тверская, д. 12, офис 304

График приёма: Пн‑Пт 09:00‑18:00, Сб 10:00‑14:00, Вс – выходной

Отделы:

  • Отдел разработки – dev@example.com
  • Отдел интеграций – integrations@example.com
  • Отдел клиентского сервиса – service@example.com

Руководство:

  • Генеральный директор – Алексей Смирнов
  • Технический директор – Елена Кузнецова
  • Директор по продажам – Дмитрий Орлов

Отзывы: оставляйте их в разделе Отзывы на сайте или пишите на support@example.com.