ESP32 Урок 10/55 - Цифровой счётчик с использованием семисегментного индикатора 74HC595 - Обучающий набор ESP32 IoT
В этом руководстве мы создадим цифровой счетчик с использованием семисегментного индикатора, управляемого микроконтроллером ESP32. Счетчик будет увеличиваться от 0 до 9, а затем уменьшаться обратно до 0, обеспечивая наглядную визуализацию процесса подсчета. Мы также рассмотрим, как включать отдельные сегменты и отображать буквы на семисегментном индикаторе.

Этот проект использует сдвиговый регистр 74HC595 для управления индикатором, что позволяет эффективно управлять сегментами без использования слишком большого количества выводов GPIO на ESP32. Отправляя двоичные значения в сдвиговый регистр, мы можем зажигать соответствующие сегменты для отображения цифр и букв. Для более глубокого понимания процесса вы можете обратиться к видео (на видео на отметке 03:15).
Объяснение аппаратного обеспечения
Основными компонентами этого проекта являются микроконтроллер ESP32, сдвиговый регистр 74HC595 и семисегментный индикатор. ESP32 — это мощный микроконтроллер со встроенными возможностями Wi-Fi и Bluetooth, что делает его подходящим для проектов Интернета вещей. 74HC595 — это сдвиговый регистр, который позволяет управлять несколькими выходами, используя лишь несколько входных выводов. Он работает, принимая последовательные данные и преобразуя их в параллельный выход, что идеально подходит для управления семисегментным индикатором.
Семисегментный индикатор состоит из семи отдельных светодиодов, расположенных в виде восьмерки. Каждый сегмент можно включать или выключать, отправляя соответствующее двоичное значение в сдвиговый регистр. Например, для отображения цифры 0 необходимо зажечь все сегменты, кроме среднего (G).
Данные из технического описания
| Производитель | Texas Instruments |
|---|---|
| Номер детали | 74HC595 |
| Логическое/IO напряжение | от 2 В до 6 В |
| Напряжение питания | от 2 В до 6 В |
| Выходной ток (на канал) | 6 мА |
| Пиковый ток (на канал) | 35 мА |
| Рекомендации по частоте ШИМ | До 1 кГц |
| Пороговые значения входной логики | от 0,3 ВCC до 0,7 ВCC |
| Падение напряжения / RDS(on) / насыщение | макс. 0,2 В |
| Тепловые пределы | 125 °C |
| Корпус | DIP-16 |
| Примечания / варианты | Доступен в различных корпусах |
- Обеспечьте правильное напряжение питания (от 2 В до 6 В).
- Ограничьте выходной ток, чтобы предотвратить перегрев.
- Используйте отдельные резисторы для каждого сегмента для оптимальной яркости.
- Будьте осторожны с подключением проводов, чтобы избежать коротких замыканий и неправильных соединений.
- Внимательно следуйте распиновке, чтобы избежать неправильной настройки.
Инструкции по подключению

Начните с подготовки макетной платы. Подключите шину заземления (синяя линия) и шину питания (красная линия). Земля должна быть подключена к синей линии на одной стороне макетной платы, а питание — к красной линии на противоположной стороне. Используйте черный провод для подключения земли ESP32 к шине заземления и красный провод для подключения вывода 3,3 В ESP32 к шине питания.
Затем вставьте сдвиговый регистр 74HC595 в макетную плату, убедившись, что выемка ориентирована правильно. Подключите вывод 11 (DS) к выводу 25 на ESP32, вывод 12 (SH_CP) к выводу 26 и вывод 14 (ST_CP) к выводу 27. Подключите землю (вывод 8) сдвигового регистра к шине заземления, а вывод 10 (MR) — к шине питания для активации.
Для семисегментного индикатора подключите выводы, соответствующие сегментам (a-g), к выходным выводам сдвигового регистра. Используйте резистор (220 Ом) последовательно для каждого сегмента, чтобы ограничить ток. Убедитесь, что у вас правильные соединения для общего вывода, который может быть либо с общим анодом, либо с общим катодом в зависимости от типа вашего индикатора.
Примеры кода и пояснения
В функции setup мы начинаем с определения выводов, подключенных к сдвиговому регистру, как выходов. Это гарантирует, что наш ESP32 сможет управлять данными, отправляемыми на индикатор.
void setup ()
{
//set pins to output
pinMode(STcp,OUTPUT);
pinMode(SHcp,OUTPUT);
pinMode(DS,OUTPUT);
}
Здесь мы определяем STcp, SHcp и DS как выводы, подключенные к ST_CP, SH_CP и DS сдвигового регистра соответственно. Установка этих выводов как выходов позволяет нам управлять сдвиговым регистром.
Основной цикл программы считает от 0 до 9, отправляя соответствующие значения на индикатор с помощью функции shiftOut.
for(int num = 0; num <10; num++)
{
digitalWrite(STcp,LOW); //прижать ST_CP к земле и удерживать низкий уровень, пока передаёте данные
shiftOut(DS,SHcp,MSBFIRST,datArray[num]);
digitalWrite(STcp,HIGH); //поднять ST_CP, чтобы сохранить данные
delay(1000);
}
Этот цикл увеличивает переменную num, отправляя соответствующее значение из datArray на дисплей каждую секунду. Функция shiftOut передаёт данные в сдвиговый регистр, который затем зажигает нужные сегменты.
Демонстрация / Что ожидать
После завершения подключения и загрузки кода вы должны увидеть, как семисегментный индикатор считает от 0 до 9, делая короткую паузу перед обратным отсчётом до 0. Каждое число будет отображаться в течение одной секунды. Если вы хотите ускорить счёт, можно изменить задержку в цикле (на видео в 15:30).
При управлении сегментами по отдельности не забывайте отправлять правильные двоичные значения для отображения букв или конкретных сегментов. Если индикатор кажется тусклым, рассмотрите возможность добавления отдельных резисторов для каждого сегмента, чтобы обеспечить одинаковую яркость по всему дисплею.
Таймкоды видео
- 00:00 Начало
- 1:53 Введение в семисегментный индикатор
- 4:38 Объяснение подключения
- 13:15 Код Arduino-1
- 17:01 Выбор COM-порта и платы ESP32
- 18:43 Демонстрация-1
- 20:13 Отображение только одной цифры
- 21:38 Счётчик вверх и вниз
- 23:07 Включение/выключение каждого сегмента
- 24:53 Отображение A, B, C, D, E и F
const int STcp = 27; // ST_CP
const int SHcp = 26; // SH_CP
const int DS = 25; // ДС
int datArray[] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
void setup ()
{
// установить контакты в режим вывода
pinMode(STcp,OUTPUT);
pinMode(SHcp,OUTPUT);
pinMode(DS,OUTPUT);
}
void loop()
{
for(int num = 0; num <10; num++)
{
digitalWrite(STcp,LOW); // заземлите ST_CP и удерживайте низким на протяжении всей передачи
shiftOut(DS,SHcp,MSBFIRST,datArray[num]);
digitalWrite(STcp,HIGH); // переместите ST_CPST_CP для сохранения данных
delay(1000);
}
}
Common Course Links
Common Course Files
Ресурсы и ссылки
-
ДокументацияУрок ESP32 10/55 - Страница SunFounder для семисегментного индикатораdocs.sunfounder.com
Файлы📁
Нет доступных файлов.