Подключение 74HC595 к ESP32

Сдвиговый регистр

74HC595 к ESP32 — три сигнальных вывода: DS (данные), SHCP (такты) и RCLK (защёлка). Аппаратный SPI ESP32 (MOSI — GPIO23, SCK — GPIO18) делает передачу быстрой.

Схема подключения 74HC595 к ESP32

74HC595ESP32
DSGPIO23
QAСветодиод led1, вывод A
QBСветодиод led2, вывод A
QCСветодиод led3, вывод A
QDСветодиод led4, вывод A
QEСветодиод led5, вывод A
QFСветодиод led6, вывод A
QGСветодиод led7, вывод A
QHСветодиод led8, вывод A
RCLKGPIO5
SHCPGPIO18
VCC3V3
GNDGND

Схема из примера «Сдвиговый регистр: восемь выходов из трёх проводов».

Сдвиговый регистр: восемь выходов из трёх проводов

Открыть пример целиком

Выводы 74HC595

ВыводНазначение
DSвход данных (SER)
QAвыход 0
QBвыход 1
QCвыход 2
QDвыход 3
QEвыход 4
QFвыход 5
QGвыход 6
QHвыход 7
RCLKзащёлка: переносит биты на выходы
SHCPтакт сдвига (SRCLK)
VCCпитание
GNDобщий провод

Код для ESP32

#include <SPI.h>

// Защёлка (RCLK) — обычный вывод: выбором кристалла здесь
// распоряжается скетч, а не контроллер SPI.
const int LATCH = 5;

void writeByte(uint8_t value) {
  digitalWrite(LATCH, LOW);
  SPI.transfer(value);
  digitalWrite(LATCH, HIGH);   // вот здесь байт и попадает на выходы
}

void setup() {
  pinMode(LATCH, OUTPUT);
  digitalWrite(LATCH, HIGH);
  SPI.begin();                 // SCK=18, MISO=19, MOSI=23
  SPI.beginTransaction(SPISettings(1000000, MSBFIRST, SPI_MODE0));
}

void loop() {
  // Бегущий огонь: старший разряд уходит первым и попадает на QH.
  for (int i = 0; i < 8; i++) {
    writeByte(1 << i);
    delay(120);
  }
  // И встречная волна — заполнение слева направо.
  uint8_t mask = 0;
  for (int i = 0; i < 8; i++) {
    mask |= (1 << i);
    writeByte(mask);
    delay(120);
  }
}

Скетч можно править и запускать в симуляторе без платы и установки среды.

Что учесть на ESP32

В железе

У настоящей микросхемы есть ещё OE (разрешение выходов — на GND) и MR (сброс — на VCC). Оставленные в воздухе, они дают случайное поведение. И резистор — на каждый светодиод.

Частые ошибки при подключении к ESP32

Другие детали для ESP32