Индикатор TM1637 и Arduino: подключение по двум проводам, библиотека, часы и счётчик
TM1637 — четыре семисегментных разряда с двоеточием на плате, которая просит от Arduino всего два сигнальных провода. Драйвер держит развёртку сам, умеет восемь ступеней яркости и показывает цифры, минус и несколько букв. Часы, счётчик, температура, обратный отсчёт — его типичная работа.
Интерфейс похож на I2C, но им не является: адресов нет, на шину I2C модуль не вешают, а CLK и DIO — любые два цифровых вывода.
Схема подключения
Распиновка
| Провод | Куда и зачем |
|---|---|
| CLK | Такт, любой цифровой вывод. |
| DIO | Данные, любой цифровой вывод. |
| VCC | 3,3–5 В. |
| GND | Земля. |
Характеристики
- Разрядов
- 4, с двоеточием посередине
- Яркость
- 8 ступеней
- Интерфейс
- двухпроводный, свой протокол
- Питание
- 3,3–5,5 В
- Ток
- до 80 мА
- Высота цифр
- 0,36 или 0,56 дюйма, по модулю
Что умеет показать
Цифры 0–9 в любом разряде, минус, буквы A–F шестнадцатеричного набора и всё, что можно составить из семи сегментов: буквы C, E, F, H, L, P, U и подобные. Каждый сегмент задаётся битом, поэтому в библиотеке есть setSegments для произвольного рисунка.
Двоеточие — отдельный бит в вызове showNumberDecEx: с ним модуль показывает время «12:34», мигать двоеточием раз в секунду — одна строка в loop.
Библиотека
TM1637 (Avishay Orpaz)— В менеджере — «TM1637» от avishorp, заголовок TM1637Display.h. Не путать с TM1637 от других авторов: интерфейсы разные.
Готовый скетч
#include <TM1637Display.h>
const int CLK = 2;
const int DIO = 3;
TM1637Display display(CLK, DIO);
void setup() {
display.setBrightness(4); // 0..7
display.clear();
}
void loop() {
// Обратный отсчёт секунд с двоеточием, как на часах: 01:00 → 00:00
for (int s = 60; s >= 0; s--) {
int minutes = s / 60;
int seconds = s % 60;
// 0b01000000 — включить двоеточие; true — показывать ведущие нули
display.showNumberDecEx(minutes * 100 + seconds, 0b01000000, true);
delay(1000);
}
delay(2000);
}Скетч собирается arduino-cli под Arduino UNO
showNumberDec без Ex выводит число без двоеточия и без ведущих нулей — для счётчика и температуры.
Частые ошибки
Ничего не показывает
Яркость не задана: после включения драйвер в выключенном состоянии, setBrightness обязателен. Или перепутаны CLK и DIO.
Показывает мусор или не те цифры
Стоит другая библиотека с таким же названием. Нужна от avishorp с заголовком TM1637Display.h.
Двоеточие не загорается
У части модулей на месте двоеточия — точка после каждого разряда, и бит 0b01000000 включает точку у второго. Это другая версия платы, а не ошибка.
Мерцает при работе с другими устройствами
Библиотека блокирует прерывания на время передачи. Если в проекте серво или Serial на высокой скорости — обновляйте дисплей реже, раз в секунду.
Что понадобится
- Модуль индикатора TM1637 (0,36 или 0,56 дюйма)
- Arduino UNO
- Провода «папа-мама»