E-Ink дисплей | ESPHome-TRMNL 7.5"
Файлы
Printables Thingiverse Creality Cloud MakerWorld github ☕︎ Угостить автора чашечкой чая 🡥
Описание
Это экран на электронных чернилах на прошивке ESPHome созданный для отображения информации с вашего сервера Inker и управляемый Home Assistant. Проект не создан командой ESPHome или ТRMNL и не аффилирован с ними.
flowchart LR
HA["Home <br> Assistant"] -- JSON API --> Inker["Inker"]
RSS["RSS-каналы"] --> Inker
Inker -- PNG --> ESPH["ESPHome <br> E-Ink дисплей"]
HA <--> MQTT_Int["интеграция <br> MQTT"]
HA --> BP["blueprint"]
BP --> MQTT_Int
MQTT_Int <--> Mosq["Mosquitto <br> broker"]
Mosq <-- MQTT --> ESPH
Особенности:
- Энергоэффективность: Экран приостанавливает обновления, когда вас нет дома или в комнате.
- Расширяемость: Благодаря ESPHome, устройство поддерживает подключение огромного количества дополнительных датчиков.
- Связь по MQTT: Мгновенный обмен данными с вашим сервером.
Корпус:
- Компактность: Минималистичный корпус (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 тоньше, отпаяйте контакты на её нижней стороне. (Совет: сначала поднимите и снимите пластик между контактами с помощью отвёртки).
-
Установите переключатель №2 на ESP32 в положение «ON». Этот переключатель управляет питанием модуля UART через USB. Когда модуль не используется, вы можете вручную выключить его для экономии энергии (если переключатель 2 находится в положении «ВЫКЛ», загрузить программу невозможно).
-
Спаяйте компоненты по схеме.
ссылка на проект -
Нанесите клей T-7000/B-7000 в райне магнитов что бы корпус не скользил по гладкой металлической поверхности
Установка прошивки
-
Скачайте конфигурационный файл esphome-trmnl.yaml и измените значения на свои
Переменная Значение Описание fw_version1.0.1 esphome-trmnlВерсия прошивки server_urlhttp://192.168.1.123:80URL-адрес сервера Inker mqtt_broker_ip192.168.1.100IP-адрес брокера Mosquitto manual_ip_static_ip192.168.1.222Статический IP-адрес дисплея manual_ip_gateway192.168.1.1Шлюз локальной сети manual_ip_subnet255.255.255.0Подсеть локальной сети nametrmnlСистемное имя устройства (строчные буквы, цифры, дефис, до 24 симв.) friendly_nameTRMNLИмя в интерфейсе Home Assistant model7.50in-bV3Модель e-ink дисплея wifi_output_power8.5dBМощность передачи Wi-Fi (от 8.5 до 20.5 dB) img_typeBINARYСпособ внутреннего кодирования изображения img_formatPNGФормат, в котором закодировано изображение. img_url_setup_logohttp://raw.github.../setup-logo.bmpИзображение заглушка deep_sleep_delay1000msЗадержка перед переходом в сон sleep_time3600Время сна по умолчанию (сек.) error_sleep_duration1200Время сна при возникновении ошибки (сек.) reset_duration200 msДлительность операции сброса дисплея wifi_connect_delay15sТаймаут ожидания подключения к Wi-Fi mqtt_connect_delay500msЗадержка после успешного подключения к MQTT buttonGPIO32Пин кнопки управления adc_pinGPIO34Пин АЦП (для мониторинга батареи) deep_sleep_pinGPIO32Пин для пробуждения из глубокого сна clk_pinGPIO13SPI Clock пин mosi_pinGPIO14SPI MOSI пин cs_pinGPIO15SPI Chip Select пин dc_pinGPIO27Data/Command пин busy_pinGPIO25Busy пин (Для предотвращения необратимого повреждения дисплея необходимо инвертировать контакт BUSY на моделях gdew0154m09, Waveshare 7.30in-f и Waveshare 7.50in V2 (и наверно на V3 и других новых моделях). Установите для контакта busy значение inverted: trueв настройках)reset_pinGPIO26Пин аппаратного сброса дисплея -
Добавьте в secrets.yaml ESPHome
mqtt_password: #пароль для подключения к MQTT wifi_ssid: #имя вашей wifi сети wifi_password #пароль вашей wifi сети - Загрузите отредактированный yaml в ESPHome и установите прошивку на ESP32
Установка Inker
Важное примечание
Данное руководство предполагает, что у вас уже установлен 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
Настройка Home Assistant
-
Установите Mosquitto broker
На вкладке "Конфигурация" Mosquitto broker введите "name" и "mqtt_password" которые вы использовали в прошивке -
Установите интеграцию MQTT
Включите экран, он должен появится в интеграции MQTT
Калибровка сенсора напряжения батареи (Калибровка АЦП)
-
Запишите показания при напряжение акб 4.20, 4.19, 3.75, 3.50 и 3.00 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.
- Name: Введите понятное имя, например,
- В блоке 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). - Нажмите кнопку Add.
- Header name: введите
- 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"]).
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'
Комментарии





















