Проект: умная лампа и управление реле

Собираем первое настоящее устройство умного дома — управляемую лампу.

Реле — электромеханический ключ, которым слаботочный сигнал ESP32 (3.3 В) включает мощную нагрузку: лампу, обогреватель, насос на 220 В.

Почему реле, а не прямое подключение

Вывод ESP32 выдаёт 3.3 В и десятки миллиампер — лампочку не зажжёшь. Реле решает: на управляющий вход подаём логический сигнал, а его контакты замыкают отдельную цепь 220 В. ESP32 и опасное напряжение при этом гальванически разделены.

Схема

  ESP32 GPIO26 ---> [ модуль реле ] ---> цепь 220 В --- ЛАМПА
       (3.3 В сигнал)   (оптопара)        (раздельно!)

Хорошие модули реле содержат оптопару — она световым каналом разделяет логику и силовую часть, защищая плату.

Логика управления с сохранением состояния

Удобно помнить, включена ли лампа, и не дёргать реле зря. Логику переключения можно проверить на обычном Python:

class Lamp:
    def __init__(self):
        self.on = False
    def handle(self, cmd):
        if cmd == "TOGGLE":
            self.on = not self.on
        elif cmd == "ON":
            self.on = True
        elif cmd == "OFF":
            self.on = False
        return "горит" if self.on else "погашена"

lamp = Lamp()
for cmd in ["ON", "TOGGLE", "TOGGLE", "OFF"]:
    print(f"{cmd:6s} -> лампа {lamp.handle(cmd)}")

Вывод:

ON     -> лампа горит
TOGGLE -> лампа погашена
TOGGLE -> лампа горит
OFF    -> лампа погашена

Код на плате (реле + MQTT)

from umqtt.simple import MQTTClient
from machine import Pin

relay = Pin(26, Pin.OUT)
state = False

def on_message(topic, msg):
    global state
    if msg == b"ON":
        state = True
    elif msg == b"OFF":
        state = False
    elif msg == b"TOGGLE":
        state = not state
    relay.value(1 if state else 0)

client = MQTTClient("esp32-lamp", "192.168.1.50")
client.set_callback(on_message)
client.connect()
client.subscribe(b"home/livingroom/lamp")

while True:
    client.check_msg()

Как работает под капотом

На управляющем входе модуля стоит транзистор и светодиод оптопары. Сигнал ESP32 зажигает этот светодиод, фотоприёмник по другую сторону открывает силовой ключ, и катушка реле притягивает контакт — цепь 220 В замыкается. Свет между двумя частями — единственная «связь», поэтому даже при пробое 220 В не попадёт на ESP32. Слышимый щелчок — это движение механического контакта.

Частые ошибки

  • Работа с 220 В без знаний. Это опасно для жизни — силовую часть собирайте, только если уверены; иначе ограничьтесь низковольтной нагрузкой.
  • Инверсная логика модуля. Многие реле включаются по уровню 0 (active-low) — проверьте.
  • Питать реле от вывода. Катушке нужен ток с отдельной линии 5 В, не с GPIO.

Итог

  • Реле даёт слабому сигналу ESP32 управлять мощной нагрузкой.
  • Оптопара разделяет логику и силовую часть, защищая плату.
  • Состояние удобно хранить и менять командами ON/OFF/TOGGLE.
  • 220 В опасно — собирайте только при должных знаниях; многие модули active-low.
Проверьте себя
1. Зачем для управления лампой 220 В нужно реле?
AДля красоты
BСлабый сигнал ESP32 не может питать мощную нагрузку напрямую, реле коммутирует силовую цепь
CЧтобы ускорить Wi-Fi
DРеле не нужно вообще
2. Чем полезна оптопара в модуле реле?
AУскоряет переключение
BСветовым каналом разделяет логику и силовую часть, защищая ESP32
CУвеличивает напряжение
DХранит состояние лампы
3. Что значит, что модуль реле active-low?
AОн сломан
BРеле включается логическим уровнем 0, а не 1
CОн работает только ночью
DОн не требует питания