E-Ink дисплей | ESPHome-TRMNL 7.5"
Файлы
Printables Thingiverse Creality Cloud MakerWorld github
Критические изменения
В релизе 2.0.0 внесены критические изменения. Обновлена прошивка, blueprint и интеграция.
Описание
Это E-Ink дисплей на прошивке ESPHome созданный для отображения информации с вашего сервера Inker и управляемый Home Assistant. Проект не создан командой ESPHome или ТRMNL и не аффилирован с ними.
flowchart LR
HA["Home <br> Assistant"] -- JSON API --> Inker["Inker"]
Inker <-- HTTP-запросы --> ESPH["ESPHome <br> E-Ink дисплей"]
HA <--> Int["Кастомная интеграция"]
HA --> BP["blueprint"]
BP --> Int
Int <-- HTTP-запросы --> ESPH
Особенности:
- Создано для умного дома: Выводите данные на экран и переключайте страницы с помощью автоматизаций Home Assistant
- Настраиваемая частота обновления: Гибко изменяйте интервал обновления экрана прямо из Home Assistant, адаптируя его под текущие задачи, сценарии или время суток.
- Телеметрия: Получайте актуальные данные о состоянии дисплея в Home Assistant.
- Энергоэффективность: Экран приостанавливает обновления, когда вас нет дома или в комнате.
- Расширяемость: Благодаря ESPHome, устройство поддерживает подключение огромного количества дополнительных датчиков.
Корпус:
- Компактность: Минималистичный корпус (175.6 x 116.6 x 11.25 мм) с узкими рамками, где всё внимание сосредоточено на экране.
- Эргономика: Удобные кнопки расположены на виду — вам больше не придется нащупывать их на задней панели.
- Три варианта размещения: ножка(настольное), подвес (настенное), магниты (настенное)
- Простая сборка: Корпус собирается на надежных защелках — никаких лишних винтов и сложного монтажа.
Компоненты
| Изображение | Компонент | Ссылка | Кол-во | Примечание |
|---|---|---|---|---|
![]() |
ePaper дисплей 7.5" | Aliexpress | 1 | Это 3-цветный B/W/R дисплей но использовать получится только B/W из за нехватки оперативной памяти. поддерживаемые дисплеи Предельные размеры экрана 171.20 x 112.20x 1.50, mm |
![]() |
USB C штекер | Aliexpress | 1 | |
![]() |
USB C разъем | Aliexpress | 1 | |
![]() |
Ползунковый переключатель TLZWLA SS12F15VG4 | Aliexpress | 1 | |
![]() |
Тактовая кнопка 6X6X10 | Aliexpress | 1 | |
![]() |
Контроллер Waveshare E-Paper ESP32 Driver Board (V3) | Aliexpress | 1 | |
| — | Батарея li-ion | — | 1 | Максимальная толщина 7.4 мм. При обновлении раз в час, аккумулятора на 1400 mAh (5.18 Wh) хватает примерно на месяц работы |
![]() |
Модуль зарядки TP4056 | Aliexpress | 1 | |
| — | Резистор 100 кОм | — | 2 | |
![]() |
Неодимовый магнит 8x3mm | — | 5 | 5 магнитов надежно удерживают 150 г дисплей на металлической двери |
| — | Клей T-7000/B-7000 | — | 1 |
Примерная стоимость 1 экрана c 20% НДС и доставкой 50$
Сборка
-
Удалите красный светодиод PWR с "Waveshare E-Paper ESP32 Driver Board" для экономии энергии
-
Чтобы сделать плату драйвера ESP32 тоньше, отпаяйте контакты на её нижней стороне. (Совет: сначала поднимите и снимите пластик между контактами с помощью отвёртки).
-
Установите переключатель №1 на ESP32 в положение A.
-
Установите переключатель №2 на ESP32 в положение «ON». Этот переключатель управляет питанием модуля UART через USB. Когда модуль не используется, вы можете вручную выключить его для экономии энергии (если переключатель 2 находится в положении «OFF», загрузить программу невозможно).
-
Соберите все части корпуса в указанной последовательности.
-
Спаяйте компоненты по схеме.
ссылка на проект -
Нанесите клей T-7000/B-7000 в райне магнитов что бы корпус не скользил по гладкой металлической поверхности
Установка прошивки
Вы можете использовать кнопку ниже, чтобы установить предварительно собранную прошивку на "Waveshare E-Paper ESP32 Driver Board (V3)" через USB из браузера или скачать конфигурационный файл и установить прошивку через ESPHome Device Builder
- Подключите ESP к USB-порту. Возможно, вам потребуется нажать и удерживать кнопку "boot", одновременно нажимая кнопку "reset".
- Нажмите "Connect" и выберите правильный COM-порт.
- Подождите около 2 минут, пока прошивка установится.
- После установки вы можете настроить Wi-Fi.
Изменение URL адреса "HA" и "Inker"
Стандартные URL адреса "HA" ( http://homeassistant.local:8123 ) и "Inker" ( http://homeassistant.local:8124 ) можно изменить в web-интерфейсе ESP32 (стандартный логин и пароль от web-интерфейса "esphome-trmnl"). Нажмите кнопку чтобы разбудить плату, через секунду зажмите кнопку на 5 секунд чтобы прейти в режим настроек. Если плата подключена к wifi то отобразится qr-код со ссылкой на web-интерфейс, а если не подключена то qr-код со ссылкой на captive portal
-
Скачайте конфигурационный файл esphome-trmnl.yaml и измените значения "substitutions" на свои
-
Добавьте в "secrets.yaml" "ESPHome"
wifi_ssid: "Имя_вашей_wifi_сети" wifi_password: "Пароль_вашей_wifi_сети" trmnl_wifi_ap_password: "Пароль_для_точки_доступа_дисплея" trmnl_web_username: "Имя_пользователя_для_доступа_к_веб-интерфейсу_дисплея" trmnl_web_password: "Пароль_для_доступа_к_веб-интерфейсу_дисплея" trmnl_ota_password: "Пароль_для_OTA_обновлений" - Загрузите отредактированный yaml в "ESPHome" и установите прошивку на ESP32
Установка Inker
Вы можете установить официальный "Inker" в Docker и поменять URL сервера "Inker" в web-интерфейсе ESP32 или установить мой форк прямо в HA и ничего не менять
Важное примечание
Данное руководство предполагает, что у вас уже установлен Home Assistant. Также для работы потребуется Docker с установленным плагином Docker Compose. Все действия в инструкции описываются из расчета, что установка производится на ОС Debian.
-
Создайте директорию
Создайте директорию (например, ./inker) для хранения файла `docker-compose.yml` и перейдите в неё.mkdir ./inker cd ./inker -
Создайте "docker-compose.yml" выполните следующие команды:
Создайте файл docker-compose.ymlcat <<EOF > docker-compose.yml services: inker: image: wojooo/inker:latest container_name: inker restart: unless-stopped ports: - "80:80" volumes: - postgres_data:/var/lib/postgresql/17/main - redis_data:/data - uploads_data:/app/uploads environment: TZ: UTC ADMIN_PIN: "1111" volumes: postgres_data: redis_data: uploads_data: EOF -
Запустите контейнер
Из созданной вами на шаге 1.1 директории (которая теперь должна содержать ваши пользовательский "docker-compose.yml" файл) выполните следующую команду, чтобы запустить "Inker" в качестве фоновой службы:
docker compose up -d
Обновление Inker
При выпуске новой версии следует ознакомиться с примечаниями к выпуску и учесть все отмеченные в них изменения, нарушающие обратную совместимость. После этого приложение можно обновить и перезапустить с помощью следующих команд, запущенных в каталоге, где находится файл docker-compose.yml:
docker compose pull && docker compose up -d
docker image prune
Безопасность
Настоятельно рекомендуется оставить "Inker" доступным исключительно внутри вашей локальной сети и не пробрасывать порты наружу. Если вам критически необходим удаленный доступ, используйте только доверенные и защищенные каналы.
Настройка Home Assistant
-
Установите интеграцию "ESPHome-TRMNL"
Этот метод позволяет получать обновления непосредственно на главной странице "HACS". Если "HACS" еще не установлен, загрузите его, следуя инструкциям на странице hacs.xyz/docs/setup/download/
- В HACS перейдите в меню в правом верхнем углу, затем выберите «Пользовательские репозитории»
- Затем добавьте репозиторий https://github.com/kfattum/esphome-trmnl и выберите «Интеграция». После этого нажмите «Добавить».
- После добавления нажмите кнопку «Отмена» рядом с кнопкой «Добавить».
- Скачайте интеграцию нажав на кнопку
или найдите ESPHome-TRMNL в поиске
- Перезапустите "Home Assistant", чтобы система распознала новые файлы.
- Добавьте интеграцию в HA нажав на кнопку
или перейдите в Настройки -> Устройства и службы -> Добавить интеграцию, найдите "ESPHome-TRMNL" -> Добавить
- Когда вы включите экран, он должен автоматически появиться в интеграции "ESPHome-TRMNL"
Этот метод требует ручного копирования файлов и самостоятельного отслеживания обновлений.
- Скачайте архив esphome_trmnl_custom_integration.zip
- Распакуйте загруженный архив на вашем компьютере.
- Найдите внутри папку "custom_components/esphome_trmnl" и скопируйте папку "esphome_trmnl" в директорию "custom_components" вашей конфигурации "Home Assistant".
- Перезапустите "Home Assistant", чтобы система распознала новые файлы.
- Перейдите в Настройки -> Устройства и службы -> Добавить интеграцию, найдите "ESPHome-TRMNL" -> Добавить
- Когда вы включите экран, он должен автоматически появиться в интеграции "ESPHome-TRMNL"
-
Установите "blueprint"
и настройте автоматизацию следуя встроенным подсказкам
Управление с помощью кнопки
- Удержание кнопки в режиме глубокого сна сбрасывает принудительно установленный экран, интервал обновления и блокировку обновления дисплея в интеграции "Home Assistant"
- Длинное нажатие (более 5 секунд) в активном режиме включает режим настройки в котором если плата подключена к wifi то отобразится qr-код со ссылкой на web-интерфейс (стандартный логин и пароль от web-интерфейса "esphome-trmnl"), а если не подключена то qr-код со ссылкой на captive portal. В этом режиме устройство не засыпает 30 минут, а затем переходит в глубокий сон.
- Короткое нажатие пробуждает/перезагружает устройство
Калибровка сенсора напряжения батареи (Калибровка АЦП)
-
Запишите показания при напряжение акб 4.20, 4.19, 3.75 и 3.60 V.
-
Впишите данные в фильтр. Слева от (->) значения от датчика, а справа истинное значение
sensor: - platform: adc ... id: battery_voltage ... - calibrate_linear: - 3.22 -> 3.75 - 3.64 -> 4.19 - 3.89 -> 4.20 ...
Создание пользовательских виджетов
Пример 1. Home Assistant "Время и дата"
Этап 1. Настройка источника данных (Data Source). Здесь мы указываем inker, откуда и как забирать информацию из "Home Assistant".
- Создайте новый источник данных в интерфейсе "inker".
- В блоке "Basic Information" (Основная информация):
- "Name": Введите понятное имя, например, "НА Время".
- "Type": Выберите "JSON API".
-
В блоке "Connection" (Подключение):
- "URL": Укажите адрес к API вашего "Home Assistant" для конкретного сенсора.
- Формат:
http://<IP-адрес-HA>:<порт>/api/states/<название_сенсора>
- Формат:
- "HTTP Method": Выберите "GET".
-
"Custom Headers" (Пользовательские заголовки): Обязательно добавьте заголовок для авторизации в "Home Assistant" (для этого вам понадобится долгосрочный токен доступа, созданный в профиле непривилегированного пользователя HA).
- "Header name": введите "Authorization"
- "Header value": введите "Bearer ВАШ_ТОКЕН" (замените "ВАШ_ТОКЕН" на реальный токен из HA, обратите внимание на пробел после слова Bearer).
Безопасность
Категорически не рекомендуется создавать долгосрочный токен от имени учетной записи администратора "Home Assistant".
- Нажмите кнопку "Add".
- "URL": Укажите адрес к API вашего "Home Assistant" для конкретного сенсора.
-
Нажмите зеленую кнопку "Test URL". Если все настроено верно, inker подключится к Home Assistant и в правой панели появятся доступные поля (например, "entity_id", "state", "last_changed" и т.д.).
- В блоке "Settings" (Настройки):
- "Refresh Interval" (seconds): Укажите интервал обновления данных в секундах.
- Нажмите "Save Changes" (Сохранить изменения).
Этап 2. Настройка виджета. Здесь мы настраиваем, как именно полученные данные будут отображаться на экране.
- Создайте новый пользовательский виджет в интерфейсе inker.
- Выберите "Data Source" (источника данных) который мы создали на первом этапе (например, "НА Время").
- Выберите тип отображения (Choose Display Type) JavaScript
- В поле "Widget Name" укажите название для виджета, например, "HA time".
-
В блоке "JavaScript Transform" мы настроим форматирование полученных данных:
- "Output Mode": Выберите Single Value.
- В поле "JavaScript Code" вставьте следующий код для преобразования даты и времени:
const state = $.state; const dateObj = new Date(state); const formatter = new Intl.DateTimeFormat('ru-RU', { weekday: 'short', // пн, вт, ср... day: 'numeric', // 15 month: 'short', // марта hour: '2-digit', // 22 minute: '2-digit' // 13 }); const result = formatter.format(dateObj); return result; -
В блоке "Live Output" ниже вы сразу увидите результат работы вашего кода. Если данные из HA поступают корректно, там отобразится отформатированное время (например: "вт, 5 мая, 11:45"). Вы также увидите предпросмотр готового виджета в панели "Live Preview" справа вверху.
- Нажмите "Save Changes" (Сохранить изменения), чтобы завершить настройку виджета.
Пример 2. Home Assistant "Календарь"
Этот виджет соберет события из нескольких календарей HA и выведет их одной строкой.
Настраивается аналогично Примеру 1 , но с другим URL, который отдаёт состояние всех сущностей:
http://<IP_АДРЕС_HA>:<ПОРТ>/api/states
const entities = ["calendar.test1", "calendar.test2"];
const groupedEvents = {}; // Объект для группировки: { "Сегодня (05.05)": ["Событие 1", "Событие 2"] }
entities.forEach(entityId => {
const calendar = $.find(item => item.entity_id === entityId);
if (calendar && calendar.attributes && calendar.attributes.start_time) {
const eventName = calendar.attributes.message;
const startTime = calendar.attributes.start_time;
const eventDate = new Date(startTime.replace(' ', 'T'));
const today = new Date();
eventDate.setHours(0, 0, 0, 0);
today.setHours(0, 0, 0, 0);
const daysUntilEvent = Math.round((eventDate - today) / (1000 * 60 * 60 * 24));
if (daysUntilEvent === 0 || daysUntilEvent === 1) {
const dayStr = daysUntilEvent === 0 ? "Сегодня" : "Завтра";
const day = String(eventDate.getDate()).padStart(2, '0');
const month = String(eventDate.getMonth() + 1).padStart(2, '0');
const label = `${dayStr} (${day}.${month})`;
// Если такой даты еще нет в объекте, создаем пустой массив
if (!groupedEvents[label]) {
groupedEvents[label] = [];
}
// Добавляем название события в массив этой даты
groupedEvents[label].push(eventName);
}
}
});
// Формируем итоговые строки
const result = Object.keys(groupedEvents).map(label => {
const events = groupedEvents[label].join(", "); // Объединяем события через запятую
return `${label} ${events}`;
});
// Возвращаем результат, разделенный переносом строки (или запятой)
return result.join(" | ");
- В блоке "Live Output" ниже вы сразу увидите результат работы вашего кода. Если данные из HA поступают корректно, там отобразится данные календаря за текущий день или завтрашний (например: Сегодня (05.05): [Событие 1, Событие 2]).
P.S.
- Если у вас есть идеи, как эффективно высосать аккумулятор до 3 В без кучи рассыпухи, то пишите в комментариях ("E-Paper ESP32 Driver Board" поддерживает входное напряжение от 3,6 В до 5,5 В).
FAQ
- Как изменить ssid и пароль wifi? Подключитесь по usb откройте web.esphome.io CONNECT () Configure Wi-Fi (ESP32 должна быть в активном режиме)
Помогите! Что-то не работает.
-
Некорректное отображение: если качество изображения низкое или устройство не работает, попробуйте переключить переключатель №1 на ESP32.
-
Ничего не работает -> откройте web.esphome.io и подключите панель через usb и посмотрите логи.
-
"Esphome" не обновлялся но перестал собирать рабочую прошивку: удалите папки "C:\Users\name_user.platformio\" и ".esphome\build"
Комментарии


















