Как подключить сдвиговый регистр 74HC595 и управлять 16 реле с телефона
Всего 3 пина Arduino/ESP8266 → 16 реле (а можно 32, 48 и больше) + полноценное управление со смартфона через Wi-Fi! Получаем красивую веб-страницу с 17 кнопками (16 индивидуальных + «ВСЁ ВКЛ/ВЫКЛ»), активные реле подсвечиваются зелёным. Работает быстро, надёжно и без потери скорости.
Зачем нужен 74HC595
- Одна микросхема = +8 выходов
- Две = 16 выходов, три = 24 и т.д.
- Всего 3 пина управления: Data, Clock, Latch
- Частота до 100 МГц — быстрее любого Arduino
Схема подключения (2 × 74HC595 = 16 реле)
- VCC → 5 В (или 3,3 В — работает от 2 В)
- GND → GND
- DS (pin 14) → D2 (ESP8266) / любой цифровой пин Arduino
- SHCP (pin 11) → D1
- STCP (pin 12) → D3
- QE (pin 13) → GND
- MR (pin 10) → VCC
- Q7S (pin 9 первого) → DS (pin 14 второго)
- Выходы Q0–Q7 → входы реле (через ULN2003/2803 если нужно)
Полный скетч (ESP8266 + 16 реле)
#include <ESP8266WiFi.h>
#include <ESP8266WebServer.h>
const char* ssid = "ВАША_СЕТЬ";
const char* password = "ВАШ_ПАРОЛЬ";
ESP8266WebServer server(80);
#define DATA D2 // DS (14)
#define LATCH D3 // STCP (12)
#define CLOCK D1 // SHCP (11)
byte relayState[2] = {0, 0}; // два регистра
void setup() {
pinMode(DATA, OUTPUT);
pinMode(LATCH, OUTPUT);
pinMode(CLOCK, OUTPUT);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) delay(500);
Serial.begin(115200);
Serial.println(WiFi.localIP());
server.on("/", [](){ sendHTML(); });
for (int i = 1; i <= 16; i++) {
server.on("/relay" + String(i), HTTP_GET, [i](){ toggleRelay(i); });
}
server.on("/all", [](){ allRelays(!relayState[0]); sendHTML(); });
server.begin();
}
void loop() { server.handleClient(); }
void shiftOutBytes() {
digitalWrite(LATCH, LOW);
shiftOut(DATA, CLOCK, MSBFIRST, relayState[1]);
shiftOut(DATA, CLOCK, MSBFIRST, relayState[0]);
digitalWrite(LATCH, HIGH);
}
void toggleRelay(int num) {
int reg = (num-1) / 8;
int bit = (num-1) % 8;
bitWrite(relayState[reg], bit, !bitRead(relayState[reg], bit));
shiftOutBytes();
sendHTML();
}
void allRelays(bool state) {
relayState[0] = state ? 255 : 0;
relayState[1] = state ? 255 : 0;
shiftOutBytes();
}
void sendHTML() {
String html = "16 реле через 74HC595
";
for (int i=1; i<=16; i++) {
bool st = bitRead(relayState[(i-1)/8], (i-1)%8);
html += "";
}
bool allOn = (relayState[0]==255 && relayState[1]==255);
html += "
";
server.send(200, "text/html", html);
}
создаёт веб-интерфейс для управления 16 реле через два 74HC595.
каждое реле переключается отдельной кнопкой.
есть кнопка «ВКЛ/ВЫКЛ ВСЁ».
состояние отображается цветом кнопок.
Результат
Открываете IP-адрес в браузере телефона или компьютера → 16 больших кнопок + одна общая. Нажатие мгновенно переключает реле, активные подсвечиваются зелёным. Работает идеально даже с 5–6 регистрами (40–48 реле) на тех же 3 пинах!
Итог
Теперь вы можете управлять десятками реле, светодиодов, шаговиков — всё с телефона и всего тремя проводами. 74HC595 — must-have в арсенале любого ардуинщика!
Ставьте лайк, если собрали 16+ реле на одном сдвиговом регистре, и пишите в комментариях — сколько реле планируете подключить вы?
FAQ — Подключение 74HC595 и управление 16 реле с телефона
Зачем используется сдвиговый регистр 74HC595 в этом проекте?
74HC595 позволяет расширить количество выходов микроконтроллера, добавляя 8 выходов на каждый чип. При этом требуется всего три управляющих пина — Data, Clock и Latch. Это позволяет подключить 16, 24, 32 и больше реле, сохранив минимальное количество проводов.
Можно ли управлять реле со смартфона?
Да. ESP8266 поднимает веб-сервер, на котором отображаются кнопки управления реле. Доступ осуществляется через локальный IP-адрес. При нажатии кнопки состояние реле переключается мгновенно, а активные каналы подсвечиваются зелёным.
Можно ли увеличить число реле более чем до 16?
Да. Достаточно последовательно соединить дополнительные 74HC595. Каждая микросхема добавляет 8 выходов, поэтому можно подключить 24, 32, 40 и больше реле. Скорость работы остаётся высокой, поскольку 74HC595 поддерживает частоты до 100 МГц.
Нужны ли драйверы ULN2003 или ULN2803?
Если реле имеют низкий ток управления, их можно подключать напрямую. Однако в большинстве случаев для безопасной работы и увеличения ресурса рекомендуется использовать драйверы ULN2003 или ULN2803 между 74HC595 и реле.
Можно ли использовать Arduino вместо ESP8266?
Да, схемотехника остаётся такой же. Но если требуется управление со смартфона, Arduino придётся дополнять сетью — например, модулем ESP-01 или Ethernet Shield. ESP8266 удобнее, поскольку Wi-Fi уже встроен.
Как работает кнопка «ВКЛ ВСЁ / ВЫКЛ ВСЁ»?
Кнопка активирует функцию, которая устанавливает значения обоих регистров в 255 или 0. Таким образом, сразу включаются или выключаются все 16 реле. Логика реализована в функции allRelays(), вызываемой по HTTP-запросу «/all».
Можно ли использовать этот код для 32 или 48 реле?
Да. Нужно добавить дополнительные элементы массива состояний, вызвать shiftOut для каждого регистра и расширить веб-интерфейс. Алгоритм управления остаётся одинаковым независимо от количества подключённых регистров.