MicroPython: Модуль реле с ESP32/ESP8266 (Руководство + Веб-сервер)
Использование реле с ESP32 или ESP8266 — отличный способ удалённого управления бытовыми электроприборами переменного тока. В этом руководстве описано, как управлять модулем реле с ESP32 или ESP8266 с использованием прошивки MicroPython.
Мы рассмотрим, как работает модуль реле, как подключить реле к платам ESP32 или ESP8266 и создадим веб-сервер для удалённого управления реле.
У нас есть похожие руководства с использованием Arduino IDE:
Руководство по модулю реле для ESP32 с Arduino IDE — управление электроприборами переменного тока + пример веб-сервера
Руководство по модулю реле для ESP8266 с Arduino IDE — управление электроприборами переменного тока + пример веб-сервера
Необходимые условия
Для прохождения этого руководства вам необходима прошивка MicroPython, установленная на платах ESP32 или ESP8266. Также вам нужна IDE для написания и загрузки кода на плату. Мы рекомендуем использовать Thonny IDE или uPyCraft IDE:
Thonny IDE:
uPyCraft IDE:
Введение в реле
Реле — это электрически управляемый переключатель, который, как и любой другой переключатель, может быть включён или выключен, пропуская или не пропуская ток. Он может управляться низкими напряжениями, такими как 3.3В от GPIO ESP32/ESP8266, и позволяет нам управлять высокими напряжениями, такими как 12В, 24В или сетевым напряжением (230В в Европе и 120В в США).
Модули реле на 1, 2, 4, 8, 16 каналов
Существуют различные модули реле с разным количеством каналов. Вы можете найти модули реле с одним, двумя, четырьмя, восемью и даже шестнадцатью каналами. Количество каналов определяет количество выходов, которыми мы сможем управлять.
Существуют модули реле, электромагнит которых может питаться от 5В и от 3.3В. Оба варианта могут использоваться с ESP32 или ESP8266 — вы можете использовать вывод VIN (который обеспечивает 5В) или вывод 3.3В.
Кроме того, некоторые модули поставляются со встроенным оптроном, который добавляет дополнительный «слой» защиты, оптически изолируя платы ESP от цепи реле.
Приобрести модуль реле:
Модуль реле 5В на 2 канала (с оптроном)
Модуль реле 5В на 1 канал (с оптроном)
Модуль реле 5В на 8 каналов (с оптроном)
Модуль реле 5В на 16 каналов (с оптроном)
Модуль реле 3.3В на 1 канал (с оптроном)
Распиновка реле
В демонстрационных целях рассмотрим распиновку 2-канального модуля реле. Использование модуля реле с другим количеством каналов аналогично.
Слева расположены два набора из трёх разъёмов для подключения высокого напряжения, а выводы справа (низковольтная сторона) подключаются к GPIO ESP.
Подключения сетевого напряжения
Модуль реле, показанный на предыдущем фото, имеет два разъёма, каждый с тремя гнёздами: общий (COM), нормально замкнутый (NC) и нормально разомкнутый (NO).
COM: подключите ток, которым хотите управлять (сетевое напряжение).
NC (Нормально замкнутый — Normally Closed): нормально замкнутая конфигурация используется, когда вы хотите, чтобы реле было замкнуто по умолчанию. Контакты NC и COM соединены, что означает, что ток протекает до тех пор, пока вы не отправите сигнал от ESP к модулю реле для размыкания цепи и прекращения тока.
NO (Нормально разомкнутый — Normally Open): нормально разомкнутая конфигурация работает наоборот: между контактами NO и COM нет соединения, поэтому цепь разомкнута до тех пор, пока вы не отправите сигнал от ESP для замыкания цепи.
Управляющие контакты
Низковольтная сторона имеет набор из четырёх контактов и набор из трёх контактов. Первый набор состоит из VCC и GND для питания модуля, а также вход 1 (IN1) и вход 2 (IN2) для управления нижним и верхним реле соответственно.
Если ваш модуль реле имеет только один канал, у вас будет только один контакт IN. Если у вас четыре канала, у вас будет четыре контакта IN и так далее.
Сигнал, который вы отправляете на контакты IN, определяет, активно реле или нет. Реле срабатывает, когда входное напряжение падает ниже приблизительно 2В. Это означает, что у вас будут следующие сценарии:
Нормально замкнутая конфигурация (NC):
Сигнал HIGH — ток протекает
Сигнал LOW — ток не протекает
Нормально разомкнутая конфигурация (NO):
Сигнал HIGH — ток не протекает
Сигнал LOW — ток протекает
Используйте нормально замкнутую конфигурацию, когда ток должен протекать большую часть времени, и вы хотите останавливать его лишь иногда.
Используйте нормально разомкнутую конфигурацию, когда хотите, чтобы ток протекал иногда (например, включать лампу время от времени).
Выбор источника питания
Второй набор контактов состоит из GND, VCC и JD-VCC. Контакт JD-VCC питает электромагнит реле. Обратите внимание, что модуль имеет перемычку (jumper cap), соединяющую контакты VCC и JD-VCC; показанная здесь перемычка жёлтая, но у вас она может быть другого цвета.
С установленной перемычкой контакты VCC и JD-VCC соединены. Это означает, что электромагнит реле питается непосредственно от контакта питания ESP, поэтому модуль реле и цепи ESP физически не изолированы друг от друга.
Без перемычки вам необходимо предоставить независимый источник питания для питания электромагнита реле через контакт JD-VCC. Такая конфигурация физически изолирует реле от ESP с помощью встроенного в модуль оптрона, что предотвращает повреждение ESP в случае электрических всплесков.
Подключение модуля реле к ESP32/ESP8266
Предупреждение
В этом примере мы работаем с сетевым напряжением. Неправильное использование может привести к серьёзным травмам. Если вы не знакомы с сетевым напряжением, попросите помощи у того, кто разбирается. Во время программирования ESP или подключения схемы убедитесь, что всё отключено от сетевого напряжения.
В качестве альтернативы вы можете использовать источник питания 12В для управления устройствами на 12В.
Схема подключения ESP32
Подключите модуль реле к ESP32, как показано на следующей схеме. На схеме показано подключение 2-канального модуля реле, подключение модуля с другим количеством каналов аналогично.
В этом примере мы управляем лампой. Мы хотим включать лампу лишь время от времени, поэтому лучше использовать нормально разомкнутую конфигурацию.
Мы подключаем контакт IN1 к GPIO 26, вы можете использовать любой другой подходящий GPIO. Смотрите руководство по GPIO ESP32.
Схема подключения ESP8266
Следуйте следующей схеме, если вы используете ESP8266.
Мы подключаем контакт IN1 к GPIO 5, вы можете использовать любой другой подходящий GPIO. Смотрите руководство по GPIO ESP8266.
Лучшие GPIO ESP8266 для использования с реле: GPIO 5, GPIO 4, GPIO 14, GPIO 12 и GPIO 13.
Управление модулем реле — код MicroPython (скрипт)
Код для управления реле с ESP32 или ESP8266 так же прост, как управление светодиодом или любым другим выходом. В этом примере, поскольку мы используем нормально разомкнутую конфигурацию, нам нужно отправить сигнал LOW, чтобы пропустить ток, и сигнал HIGH, чтобы остановить ток.
Скопируйте следующий код в файл main.py и загрузите его на вашу плату. Он включает лампу на 10 секунд и выключает на следующие 10 секунд.
# Complete project details at https://RandomNerdTutorials.com
from machine import Pin
from time import sleep
# ESP32 GPIO 26
relay = Pin(26, Pin.OUT)
# ESP8266 GPIO 5
#relay = Pin(5, Pin.OUT)
while True:
# RELAY ON
relay.value(0)
sleep(10)
# RELAY OFF
relay.value(1)
sleep(10)
Как работает код
Импортируем класс Pin из модуля machine для взаимодействия с GPIO. Также импортируем метод sleep() из модуля time для добавления задержек.
from machine import Pin
from time import sleep
Затем определяем объект Pin с именем relay на GPIO 26 (если вы используете ESP32) и определяем его как выход.
# ESP32 GPIO 26
relay = Pin(26, Pin.OUT)
Если вы используете ESP8266, используйте GPIO 5 вместо этого. Закомментируйте предыдущую строку и раскомментируйте следующую.
# ESP8266 GPIO 5
#relay = Pin(5, Pin.OUT)
В цикле while отправляем сигнал LOW для включения лампы на 10 секунд.
# RELAY ON
relay.value(0)
sleep(10)
Если вы используете нормально замкнутую конфигурацию, отправьте сигнал HIGH для включения лампы.
Остановите ток, отправив сигнал HIGH на контакт реле. Если вы используете нормально замкнутую конфигурацию, отправьте сигнал LOW для остановки тока.
# RELAY OFF
relay.value(1)
sleep(10)
Управление модулем реле через веб-сервер MicroPython
В этом разделе мы создали пример веб-сервера, который позволяет управлять реле удалённо через веб-сервер.
boot.py
Скопируйте следующий код в файл boot.py.
# Complete project details at https://RandomNerdTutorials.com
try:
import usocket as socket
except:
import socket
from machine import Pin
import network
import esp
esp.osdebug(None)
import gc
gc.collect()
ssid = 'REPLACE_WITH_YOUR_SSID'
password = 'REPLACE_WITH_YOUR_PASSWORD'
station = network.WLAN(network.STA_IF)
station.active(True)
station.connect(ssid, password)
while station.isconnected() == False:
pass
print('Connection successful')
print(station.ifconfig())
# ESP32 GPIO 26
relay = Pin(26, Pin.OUT)
# ESP8266 GPIO 5
#relay = Pin(5, Pin.OUT)
Вставьте ваши сетевые учётные данные в следующие переменные:
ssid = 'REPLACE_WITH_YOUR_SSID'
password = 'REPLACE_WITH_YOUR_PASSWORD'
Раскомментируйте одну из следующих строк в соответствии с платой, которую вы используете. По умолчанию используется GPIO ESP32.
# ESP32 GPIO 26
relay = Pin(26, Pin.OUT)
# ESP8266 GPIO 5
#relay = Pin(5, Pin.OUT)
main.py
Скопируйте следующий код в файл main.py.
# Complete project details at https://RandomNerdTutorials.com
def web_page():
if relay.value() == 1:
relay_state = ''
else:
relay_state = 'checked'
html = """<html><head><meta name="viewport" content="width=device-width, initial-scale=1"><style>
body{font-family:Arial; text-align: center; margin: 0px auto; padding-top:30px;}
.switch{position:relative;display:inline-block;width:120px;height:68px}.switch input{display:none}
.slider{position:absolute;top:0;left:0;right:0;bottom:0;background-color:#ccc;border-radius:34px}
.slider:before{position:absolute;content:"";height:52px;width:52px;left:8px;bottom:8px;background-color:#fff;-webkit-transition:.4s;transition:.4s;border-radius:68px}
input:checked+.slider{background-color:#2196F3}
input:checked+.slider:before{-webkit-transform:translateX(52px);-ms-transform:translateX(52px);transform:translateX(52px)}
</style><script>function toggleCheckbox(element) { var xhr = new XMLHttpRequest(); if(element.checked){ xhr.open("GET", "/?relay=on", true); }
else { xhr.open("GET", "/?relay=off", true); } xhr.send(); }</script></head><body>
<h1>ESP Relay Web Server</h1><label class="switch"><input type="checkbox" onchange="toggleCheckbox(this)" %s><span class="slider">
</span></label></body></html>""" % (relay_state)
return html
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind(('', 80))
s.listen(5)
while True:
try:
if gc.mem_free() < 102000:
gc.collect()
conn, addr = s.accept()
conn.settimeout(3.0)
print('Got a connection from %s' % str(addr))
request = conn.recv(1024)
conn.settimeout(None)
request = str(request)
print('Content = %s' % request)
relay_on = request.find('/?relay=on')
relay_off = request.find('/?relay=off')
if relay_on == 6:
print('RELAY ON')
relay.value(0)
if relay_off == 6:
print('RELAY OFF')
relay.value(1)
response = web_page()
conn.send('HTTP/1.1 200 OK\n')
conn.send('Content-Type: text/html\n')
conn.send('Connection: close\n\n')
conn.sendall(response)
conn.close()
except OSError as e:
conn.close()
print('Connection closed')
Мы не будем объяснять, как работает этот код, потому что у нас уже есть очень похожее руководство с подробным объяснением каждой строки кода. Прочитайте следующий проект:
Демонстрация
После внесения необходимых изменений загрузите файлы boot.py и main.py на вашу плату. Нажмите кнопку EN/RST, и в Shell вы должны увидеть IP-адрес ESP.
Затем откройте браузер в вашей локальной сети и введите IP-адрес ESP, чтобы получить доступ к веб-серверу.
Вы должны увидеть веб-страницу с переключателем (toggle button), который позволяет удалённо управлять реле с помощью смартфона или компьютера.
Корпус для безопасности
Для финального проекта обязательно поместите модуль реле и ESP внутрь корпуса, чтобы избежать открытых контактов переменного тока.
Заключение
В этом руководстве вы узнали, как управлять реле с ESP32 или ESP8266 с помощью MicroPython. У нас есть похожие руководства с использованием Arduino IDE:
[Arduino IDE] Руководство по управлению модулем реле с ESP32
[Arduino IDE] Руководство по управлению модулем реле с ESP8266
Управление реле с ESP32 или ESP8266 так же просто, как управление любым другим выходом — вам нужно лишь отправлять сигналы HIGH и LOW, как вы бы делали для управления светодиодом.
Вы можете использовать наши примеры веб-серверов, управляющих выходами, для управления реле. Вам нужно лишь обратить внимание на используемую конфигурацию. В случае нормально разомкнутой конфигурации реле работает с инвертированной логикой. Вы можете использовать следующие примеры веб-серверов для управления реле: