Как подключить сдвиговый регистр 74HC595 и управлять 16 реле с телефона

Всего 3 пина Arduino/ESP8266 → 16 реле (а можно 32, 48 и больше) + полноценное управление со смартфона через Wi-Fi! Получаем красивую веб-страницу с 17 кнопками (16 индивидуальных + «ВСЁ ВКЛ/ВЫКЛ»), активные реле подсвечиваются зелёным. Работает быстро, надёжно и без потери скорости.

Сдвиговый регистр 74HC595 16 реле с телефона Arduino ESP8266

Зачем нужен 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 для каждого регистра и расширить веб-интерфейс. Алгоритм управления остаётся одинаковым независимо от количества подключённых регистров.

📁 Скачать примеры