Реле (Relay Module)
Научитесь управлять мощными нагрузками — лампами, моторами, нагревателями — через слаботочный сигнал ESP32.
ВНИМАНИЕ: Работа с сетевым напряжением 220В опасна!
В практических примерах этого урока используется напряжение 220V AC. Работу с сетевым напряжением следует проводить только при наличии соответствующего опыта. В учебных целях рекомендуется использовать низковольтную нагрузку — например, 12V LED ленту или маломощный двигатель постоянного тока.
Подготовка оборудования
ESP32 DevKit
Любая версия (30/38 пинов)
Модуль реле
1-канальный, 5V coil, 250V/10A
Нагрузка
LED 12V или лампочка для тестов
Провода
Dupont «папа-папа» и «мама-папа»
Как работает реле
Принцип работы
Реле — это электромагнитный переключатель. Слабый ток от ESP32 (3.3V / ~20мА) намагничивает катушку, которая механически замыкает или размыкает контакты силовой цепи.
LOW (0V) Реле ЗАМКНУТО (ток течёт) HIGH (3.3V) Реле РАЗОМКНУТО (ток не течёт) Большинство модулей реле работают по инвертированной логике: LOW на входе = реле включено. Проверьте маркировку вашего модуля.
Клеммы силовой части
К этой клемме подключается один провод от источника питания нагрузки
Нормально разомкнут. При срабатывании реле замыкается с COM. Используйте для управления включением
Нормально замкнут. При срабатывании реле размыкается с COM. Используется для аварийного отключения
Схема подключения
Сторона управления (низкое напряжение)
VCC Питание модуля → 5V (или VIN) на ESP32
GND Земля → GND ESP32
IN Сигнальный вход → GPIO 26 ESP32
Силовая часть (нагрузка)
COM Подключить к одному проводу питания нагрузки
NO Ко второму проводу нагрузки (нормально разомкнут)
Код: Базовое управление
Простейший пример — реле включается на 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
Код: Кнопка управляет реле
Объединяем урок про кнопку (Урок 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 при нажатии
Код: Таймер включения
Реле включает устройство на заданное время — полезно для полива растений, освещения, вентиляции:
#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 одновременно выполнять другие задачи (читать датчики, обрабатывать кнопки).
Применения реле
Умный полив
Автоматический полив по расписанию или показаниям датчика влажности почвы
Умное освещение
Включение света по датчику освещённости, движения или по расписанию
Термостат
Управление обогревателем или кондиционером на основе данных датчика температуры
Охранная сигнализация
Управление сиреной, замком или уведомлением при срабатывании датчиков
Гаражные ворота
Дистанционное управление воротами через Wi-Fi или по расписанию
Управление моторами
Включение насосов, вентиляторов, компрессоров через приложение на смартфоне
Частые проблемы
❌ Реле не срабатывает
✅ Проверьте питание: большинство модулей реле требуют 5V (VIN), а не 3.3V. Убедитесь что GND модуля и ESP32 объединены.
❌ Реле щёлкает постоянно или нестабильно
✅ Вероятно, недостаточно тока на пине GPIO. Используйте транзисторный усилитель или модуль с оптроном. Добавьте диод обратной полярности параллельно катушке.
❌ ESP32 перезагружается при срабатывании реле
✅ Коммутация мощной нагрузки создаёт помехи. Добавьте конденсатор 100мкФ на линию питания ESP32 и используйте отдельные источники питания для ESP32 и нагрузки.
❌ Нагрузка включена при старте ESP32
✅ В коде setup() явно задайте начальное состояние: digitalWrite(RELAY_PIN, HIGH) — это важно, так как во время загрузки GPIO может быть в неопределённом состоянии.
Цех Испытаний
Отточите мастерство на реальных кейсах. Каждая карта — это шаг к полному пониманию управления реле.
Мигалка
Самое простое управление реле. Включаем и выключаем с паузой в 2 секунды.
Подключите реле к GPIO 26 (pinMode OUTPUT). Реализуйте бесконечное мигание: реле включено 2 секунды (digitalWrite LOW), затем выключено 2 секунды (digitalWrite HIGH). В Serial Monitor выводите 'ВКЛ' и 'ВЫКЛ' при каждом переключении.
Кнопка-переключатель
Toggle-логика с антидребезгом. Каждое нажатие меняет состояние реле на противоположное.
Подключите кнопку к GPIO 14 (INPUT_PULLUP) и реле к GPIO 26. При каждом нажатии кнопки переключайте состояние реле (toggle). Антидребезг: игнорируйте повторные срабатывания в течение 50мс после первого. Текущее состояние выводите в Serial.
Таймер
Реле как одноразовый таймер. Включается по команде и само выключается через 10 секунд.
При старте (в setup()) реле включается (LOW на GPIO 26). Через ровно 10 секунд реле выключается (HIGH) и больше не включается. В Serial каждую секунду выводите обратный отсчёт: '10...', '9...', ..., '0 — ВЫКЛ'. После выключения ESP32 уходит в бесконечный цикл ожидания.
Ночной свет
Реле реагирует на аналоговый порог. Потенциометр задаёт уровень включения.
Подключите потенциометр к GPIO 34 (аналоговый вход). Считывайте значение analogRead(34) (диапазон 0–4095). Если значение ниже 2000 — реле включить (LOW на GPIO 26, 'темно'), если выше 2000 — выключить (HIGH, 'светло'). Обновление каждые 500мс. Порог, значение и состояние выводите в Serial.
Расписание полива
Неблокирующий таймер на millis(). Реле по расписанию без использования delay().
Используя millis() (без единого delay()): реле включается каждые 30 секунд на 5 секунд (имитация насоса полива). В Serial каждую секунду выводите обратный отсчёт до следующего полива и статус ('Полив идёт' или 'До полива: Xs'). ESP32 должен оставаться полностью отзывчивым.
Свой Проект
Создайте свою уникальную модель в онлайн-симуляторе. Ограничений нет!
🎉 Урок завершён!
Теперь ESP32 может управлять реальным миром — лампами, моторами и другими мощными устройствами
Что вы изучили:
- ✓ Принцип работы электромагнитного реле
- ✓ Клеммы COM, NO, NC и их назначение
- ✓ Инвертированная логика модулей реле
- ✓ Управление реле через GPIO
- ✓ Переключение по кнопке с антидребезгом
- ✓ Таймер включения без блокирующего delay()
Назад к урокам:
📚Все уроки
Вернуться к списку уроков