Урок 10 Начинающий 40 минут

Реле (Relay Module)

Научитесь управлять мощными нагрузками — лампами, моторами, нагревателями — через слаботочный сигнал ESP32.

ВНИМАНИЕ: Работа с сетевым напряжением 220В опасна!

В практических примерах этого урока используется напряжение 220V AC. Работу с сетевым напряжением следует проводить только при наличии соответствующего опыта. В учебных целях рекомендуется использовать низковольтную нагрузку — например, 12V LED ленту или маломощный двигатель постоянного тока.

1

Подготовка оборудования

Компоненты для урока по реле: ESP32, модуль реле, нагрузка, провода

ESP32 DevKit

Любая версия (30/38 пинов)

🔌

Модуль реле

1-канальный, 5V coil, 250V/10A

💡

Нагрузка

LED 12V или лампочка для тестов

🔗

Провода

Dupont «папа-папа» и «мама-папа»

2

Как работает реле

Принцип работы

Реле — это электромагнитный переключатель. Слабый ток от ESP32 (3.3V / ~20мА) намагничивает катушку, которая механически замыкает или размыкает контакты силовой цепи.

LOW (0V) Реле ЗАМКНУТО (ток течёт)
HIGH (3.3V) Реле РАЗОМКНУТО (ток не течёт)
⚠️

Большинство модулей реле работают по инвертированной логике: LOW на входе = реле включено. Проверьте маркировку вашего модуля.

Инвертированная логика реле: LOW=включено, HIGH=выключено

Клеммы силовой части

Внутреннее устройство реле: катушка, якорь, контакты COM, NO, NC
COM Common (общий)

К этой клемме подключается один провод от источника питания нагрузки

NO Normally Open

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

NC Normally Closed

Нормально замкнут. При срабатывании реле размыкается с COM. Используется для аварийного отключения

3

Схема подключения

Схема подключения модуля реле к ESP32: сторона управления и силовая часть

Сторона управления (низкое напряжение)

1

VCC Питание модуля → 5V (или VIN) на ESP32

2

GND Земля → GND ESP32

3

IN Сигнальный вход → GPIO 26 ESP32

Силовая часть (нагрузка)

1

COM Подключить к одному проводу питания нагрузки

2

NO Ко второму проводу нагрузки (нормально разомкнут)

4

Код: Базовое управление

Простейший пример — реле включается на 2 секунды, затем выключается на 2 секунды (как мигание светодиода, но для мощной нагрузки):

// Управление реле через GPIO
#define RELAY_PIN 26   // Пин управления реле

void setup() {
  Serial.begin(115200);
  pinMode(RELAY_PIN, OUTPUT);

  // Начальное состояние — выключено
  // Для модулей с инвертированной логикой HIGH = OFF
  digitalWrite(RELAY_PIN, HIGH);
  Serial.println("Реле: ВЫКЛЮЧЕНО");
}

void loop() {
  // Включаем реле (LOW = ON для большинства модулей)
  digitalWrite(RELAY_PIN, LOW);
  Serial.println("Реле: ВКЛЮЧЕНО");
  delay(2000);

  // Выключаем реле (HIGH = OFF)
  digitalWrite(RELAY_PIN, HIGH);
  Serial.println("Реле: ВЫКЛЮЧЕНО");
  delay(2000);
}

Результат в Serial Monitor

Serial Monitor: чередование Реле ВКЛЮЧЕНО / ВЫКЛЮЧЕНО
5

Код: Кнопка управляет реле

Объединяем урок про кнопку (Урок 3) и реле — нажатие кнопки переключает состояние нагрузки:

#define RELAY_PIN  26
#define BUTTON_PIN 14

bool relayState = false;  // Текущее состояние реле

void setup() {
  Serial.begin(115200);
  pinMode(RELAY_PIN, OUTPUT);
  pinMode(BUTTON_PIN, INPUT_PULLUP);
  digitalWrite(RELAY_PIN, HIGH);   // Начальное состояние — OFF
}

void loop() {
  if (digitalRead(BUTTON_PIN) == LOW) {
    delay(50);  // Антидребезг

    if (digitalRead(BUTTON_PIN) == LOW) {
      relayState = !relayState;  // Переключаем состояние

      // Инвертированная логика: false=ON (LOW), true=OFF (HIGH)
      digitalWrite(RELAY_PIN, relayState ? HIGH : LOW);

      Serial.print("Реле: ");
      Serial.println(relayState ? "ВЫКЛЮЧЕНО" : "ВКЛЮЧЕНО");

      while (digitalRead(BUTTON_PIN) == LOW);  // Ждём отпускания
    }
  }
}

✅ Как работает

Каждое нажатие кнопки меняет состояние переменной relayState и соответственно управляет пином реле

💡 INPUT_PULLUP

Встроенный подтягивающий резистор ESP32 — не нужен внешний резистор. Кнопка читается как LOW при нажатии

6

Код: Таймер включения

Реле включает устройство на заданное время — полезно для полива растений, освещения, вентиляции:

Временная диаграмма таймера реле с millis(): ВКЛЮЧЕНО 5 сек, ВЫКЛЮЧЕНО 10 сек
#define RELAY_PIN     26
#define ON_DURATION   5000   // 5 секунд включено
#define OFF_DURATION  10000  // 10 секунд выключено

unsigned long lastSwitch = 0;
bool relayOn = false;

void setup() {
  pinMode(RELAY_PIN, OUTPUT);
  digitalWrite(RELAY_PIN, HIGH);   // Начально выключено
}

void loop() {
  unsigned long now = millis();

  if (!relayOn && (now - lastSwitch >= OFF_DURATION)) {
    // Включить реле
    digitalWrite(RELAY_PIN, LOW);
    relayOn = true;
    lastSwitch = now;
  }

  if (relayOn && (now - lastSwitch >= ON_DURATION)) {
    // Выключить реле
    digitalWrite(RELAY_PIN, HIGH);
    relayOn = false;
    lastSwitch = now;
  }
}
💡

Используем millis() вместо delay() — это позволяет ESP32 одновременно выполнять другие задачи (читать датчики, обрабатывать кнопки).

7

Применения реле

Применения реле в умном доме: полив, освещение, термостат, сигнализация, ворота, моторы
💧

Умный полив

Автоматический полив по расписанию или показаниям датчика влажности почвы

💡

Умное освещение

Включение света по датчику освещённости, движения или по расписанию

🌡️

Термостат

Управление обогревателем или кондиционером на основе данных датчика температуры

🔔

Охранная сигнализация

Управление сиреной, замком или уведомлением при срабатывании датчиков

🚗

Гаражные ворота

Дистанционное управление воротами через Wi-Fi или по расписанию

⚙️

Управление моторами

Включение насосов, вентиляторов, компрессоров через приложение на смартфоне

8

Частые проблемы

❌ Реле не срабатывает

✅ Проверьте питание: большинство модулей реле требуют 5V (VIN), а не 3.3V. Убедитесь что GND модуля и ESP32 объединены.

❌ Реле щёлкает постоянно или нестабильно

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

❌ ESP32 перезагружается при срабатывании реле

✅ Коммутация мощной нагрузки создаёт помехи. Добавьте конденсатор 100мкФ на линию питания ESP32 и используйте отдельные источники питания для ESP32 и нагрузки.

❌ Нагрузка включена при старте ESP32

✅ В коде setup() явно задайте начальное состояние: digitalWrite(RELAY_PIN, HIGH) — это важно, так как во время загрузки GPIO может быть в неопределённом состоянии.

9

Цех Испытаний

Отточите мастерство на реальных кейсах. Каждая карта — это шаг к полному пониманию управления реле.

Время прохождения
~90 минут суммарно
💡
Уровень: Start 5m

Мигалка

Самое простое управление реле. Включаем и выключаем с паузой в 2 секунды.

Миссия

Подключите реле к GPIO 26 (pinMode OUTPUT). Реализуйте бесконечное мигание: реле включено 2 секунды (digitalWrite LOW), затем выключено 2 секунды (digitalWrite HIGH). В Serial Monitor выводите 'ВКЛ' и 'ВЫКЛ' при каждом переключении.

01
🔘
Уровень: Easy 10m

Кнопка-переключатель

Toggle-логика с антидребезгом. Каждое нажатие меняет состояние реле на противоположное.

Миссия

Подключите кнопку к GPIO 14 (INPUT_PULLUP) и реле к GPIO 26. При каждом нажатии кнопки переключайте состояние реле (toggle). Антидребезг: игнорируйте повторные срабатывания в течение 50мс после первого. Текущее состояние выводите в Serial.

02
⏱️
Уровень: Normal 15m

Таймер

Реле как одноразовый таймер. Включается по команде и само выключается через 10 секунд.

Миссия

При старте (в setup()) реле включается (LOW на GPIO 26). Через ровно 10 секунд реле выключается (HIGH) и больше не включается. В Serial каждую секунду выводите обратный отсчёт: '10...', '9...', ..., '0 — ВЫКЛ'. После выключения ESP32 уходит в бесконечный цикл ожидания.

03
🌙
Уровень: Hard 20m

Ночной свет

Реле реагирует на аналоговый порог. Потенциометр задаёт уровень включения.

Миссия

Подключите потенциометр к GPIO 34 (аналоговый вход). Считывайте значение analogRead(34) (диапазон 0–4095). Если значение ниже 2000 — реле включить (LOW на GPIO 26, 'темно'), если выше 2000 — выключить (HIGH, 'светло'). Обновление каждые 500мс. Порог, значение и состояние выводите в Serial.

04
🌱
Уровень: Expert 30m

Расписание полива

Неблокирующий таймер на millis(). Реле по расписанию без использования delay().

Миссия

Используя millis() (без единого delay()): реле включается каждые 30 секунд на 5 секунд (имитация насоса полива). В Serial каждую секунду выводите обратный отсчёт до следующего полива и статус ('Полив идёт' или 'До полива: Xs'). ESP32 должен оставаться полностью отзывчивым.

05
🚀

Свой Проект

Создайте свою уникальную модель в онлайн-симуляторе. Ограничений нет!

Открыть Симулятор →

🎉 Урок завершён!

Теперь ESP32 может управлять реальным миром — лампами, моторами и другими мощными устройствами

Что вы изучили:

  • Принцип работы электромагнитного реле
  • Клеммы COM, NO, NC и их назначение
  • Инвертированная логика модулей реле
  • Управление реле через GPIO
  • Переключение по кнопке с антидребезгом
  • Таймер включения без блокирующего delay()