Перейти к содержанию

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

img

INKER - создавайте интерфейс без единой строчки кода

Особенности:

  • Создано для умного дома: Выводите данные на экран и переключайте страницы с помощью автоматизаций Home Assistant
  • Настраиваемая частота обновления: Гибко изменяйте интервал обновления экрана прямо из Home Assistant, адаптируя его под текущие задачи, сценарии или время суток.
  • Телеметрия: Получайте актуальные данные о состоянии дисплея в Home Assistant.
  • Энергоэффективность: Экран приостанавливает обновления, когда вас нет дома или в комнате.
  • Расширяемость: Благодаря ESPHome, устройство поддерживает подключение огромного количества дополнительных датчиков.

Корпус:

  • Компактность: Минималистичный корпус (175.6 x 116.6 x 11.25 мм) с узкими рамками, где всё внимание сосредоточено на экране.
  • Эргономика: Удобные кнопки расположены на виду — вам больше не придется нащупывать их на задней панели.
  • Три варианта размещения: ножка(настольное), подвес (настенное), магниты (настенное)
  • Простая сборка: Корпус собирается на надежных защелках — никаких лишних винтов и сложного монтажа.

Boosty & Multi-Payment Progress Widget
0 $ из 100 $ собрано
Разработка 13.3-дюймовой версии
0 $ из 100 $ собрано
Разработка 7.5-дюймовой версии с современной начинкой.

Компоненты

Изображение Компонент Ссылка Кол-во Примечание
ePaper дисплей 7.5 ePaper дисплей 7.5 bp ePaper дисплей 7.5" Aliexpress 1 Это 3-цветный B/W/R дисплей но использовать получится только B/W из за нехватки оперативной памяти.
поддерживаемые дисплеи
Предельные размеры экрана 171.20 x 112.20x 1.50, mm
USB C штекер USB C штекер Aliexpress 1
USB C разъем USB C разъем Aliexpress 1
Ползунковые переключатели Ползунковый переключатель TLZWLA SS12F15VG4 Aliexpress 1
img Тактовая кнопка 6X6X10 Aliexpress 1
img Контроллер Waveshare E-Paper ESP32 Driver Board (V3) Aliexpress 1
Батарея li-ion 1 Максимальная толщина 7.4 мм. При обновлении раз в час, аккумулятора на 1400 mAh (5.18 Wh) хватает примерно на месяц работы
img Модуль зарядки TP4056 Aliexpress 1
Резистор 100 кОм 2
img Неодимовый магнит 8x3mm 5 5 магнитов надежно удерживают 150 г дисплей на металлической двери
Клей T-7000/B-7000 1

Примерная стоимость 1 экрана c 20% НДС и доставкой 50$


Сборка

  1. Удалите красный светодиод PWR с "Waveshare E-Paper ESP32 Driver Board" для экономии энергии

  2. Чтобы сделать плату драйвера ESP32 тоньше, отпаяйте контакты на её нижней стороне. (Совет: сначала поднимите и снимите пластик между контактами с помощью отвёртки).

  3. Установите переключатель №1 на ESP32 в положение A.

    img

  4. Установите переключатель №2 на ESP32 в положение «ON». Этот переключатель управляет питанием модуля UART через USB. Когда модуль не используется, вы можете вручную выключить его для экономии энергии (если переключатель 2 находится в положении «OFF», загрузить программу невозможно).

  5. Соберите все части корпуса в указанной последовательности.

    img

  6. Спаяйте компоненты по схеме.

    img
    ссылка на проект

  7. Нанесите клей T-7000/B-7000 в райне магнитов что бы корпус не скользил по гладкой металлической поверхности

    img


Установка прошивки

Вы можете использовать кнопку ниже, чтобы установить предварительно собранную прошивку на "Waveshare E-Paper ESP32 Driver Board (V3)" через USB из браузера или скачать конфигурационный файл и установить прошивку через ESPHome Device Builder

  1. Подключите ESP к USB-порту. Возможно, вам потребуется нажать и удерживать кнопку "boot", одновременно нажимая кнопку "reset".
  2. Нажмите "Connect" и выберите правильный COM-порт.
  3. Подождите около 2 минут, пока прошивка установится.
  4. После установки вы можете настроить 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

  1. Установите "ESPHome Device Builder" Откройте свой экземпляр  Home Assistant и отобразите панель управления дополнения.

  2. Скачайте конфигурационный файл esphome-trmnl.yaml и измените значения "substitutions" на свои

  3. Добавьте в "secrets.yaml" "ESPHome"

    wifi_ssid: "Имя_вашей_wifi_сети"
    wifi_password: "Пароль_вашей_wifi_сети"
    trmnl_wifi_ap_password: "Пароль_для_точки_доступа_дисплея"
    trmnl_web_username: "Имя_пользователя_для_доступа_к_веб-интерфейсу_дисплея"
    trmnl_web_password: "Пароль_для_доступа_к_веб-интерфейсу_дисплея"
    trmnl_ota_password: "Пароль_для_OTA_обновлений"
    

  4. Загрузите отредактированный yaml в "ESPHome" и установите прошивку на ESP32

Установка Inker

Вы можете установить официальный "Inker" в Docker и поменять URL сервера "Inker" в web-интерфейсе ESP32 или установить мой форк прямо в HA и ничего не менять

Важное примечание

Данное руководство предполагает, что у вас уже установлен Home Assistant. Также для работы потребуется Docker с установленным плагином Docker Compose. Все действия в инструкции описываются из расчета, что установка производится на ОС Debian.

  1. Создайте директорию

    Создайте директорию (например, ./inker) для хранения файла `docker-compose.yml` и перейдите в неё.
    mkdir ./inker
    cd ./inker
    

  2. Создайте "docker-compose.yml" выполните следующие команды:

    Создайте файл docker-compose.yml
    cat <<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
    
  3. Запустите контейнер

Из созданной вами на шаге 1.1 директории (которая теперь должна содержать ваши пользовательский "docker-compose.yml" файл) выполните следующую команду, чтобы запустить "Inker" в качестве фоновой службы:

Запустите контейнер
docker compose up -d

Обновление Inker

При выпуске новой версии следует ознакомиться с примечаниями к выпуску и учесть все отмеченные в них изменения, нарушающие обратную совместимость. После этого приложение можно обновить и перезапустить с помощью следующих команд, запущенных в каталоге, где находится файл docker-compose.yml:

Обновление и перезапуск Inker.
docker compose pull && docker compose up -d
Для освобождения дискового пространства устаревшие образы контейнеров старой версии можно удалить с помощью следующей команды:
Удалите неиспользуемые образы Docker.
docker image prune

  • Установите приложение в "HA" Open your  Home Assistant instance and show the dashboard of an app.

Безопасность

Настоятельно рекомендуется оставить "Inker" доступным исключительно внутри вашей локальной сети и не пробрасывать порты наружу. Если вам критически необходим удаленный доступ, используйте только доверенные и защищенные каналы.

Настройка Home Assistant

  1. Установите интеграцию "ESPHome-TRMNL"

    Этот метод позволяет получать обновления непосредственно на главной странице "HACS". Если "HACS" еще не установлен, загрузите его, следуя инструкциям на странице hacs.xyz/docs/setup/download/

    • В HACS перейдите в меню в правом верхнем углу, затем выберите «Пользовательские репозитории»
    • Затем добавьте репозиторий https://github.com/kfattum/esphome-trmnl и выберите «Интеграция». После этого нажмите «Добавить».
    • После добавления нажмите кнопку «Отмена» рядом с кнопкой «Добавить».
    • Скачайте интеграцию нажав на кнопку Open your  Home Assistant instance and open a repository inside the  Home Assistant Community Store. или найдите ESPHome-TRMNL в поиске
    • Перезапустите "Home Assistant", чтобы система распознала новые файлы.
    • Добавьте интеграцию в HA нажав на кнопку Open your Home Assistant instance and start setting up a new integration. или перейдите в Настройки -> Устройства и службы -> Добавить интеграцию, найдите "ESPHome-TRMNL" -> Добавить
    • Когда вы включите экран, он должен автоматически появиться в интеграции "ESPHome-TRMNL"

    Этот метод требует ручного копирования файлов и самостоятельного отслеживания обновлений.

    1. Скачайте архив esphome_trmnl_custom_integration.zip
    2. Распакуйте загруженный архив на вашем компьютере.
    3. Найдите внутри папку "custom_components/esphome_trmnl" и скопируйте папку "esphome_trmnl" в директорию "custom_components" вашей конфигурации "Home Assistant".
    4. Перезапустите "Home Assistant", чтобы система распознала новые файлы.
    5. Перейдите в Настройки -> Устройства и службы -> Добавить интеграцию, найдите "ESPHome-TRMNL" -> Добавить
    6. Когда вы включите экран, он должен автоматически появиться в интеграции "ESPHome-TRMNL"
  2. Установите "blueprint" Open in  Home Assistant и настройте автоматизацию следуя встроенным подсказкам


Управление с помощью кнопки

  • Удержание кнопки в режиме глубокого сна сбрасывает принудительно установленный экран, интервал обновления и блокировку обновления дисплея в интеграции "Home Assistant"
  • Длинное нажатие (более 5 секунд) в активном режиме включает режим настройки в котором если плата подключена к wifi то отобразится qr-код со ссылкой на web-интерфейс (стандартный логин и пароль от web-интерфейса "esphome-trmnl"), а если не подключена то qr-код со ссылкой на captive portal. В этом режиме устройство не засыпает 30 минут, а затем переходит в глубокий сон.
  • Короткое нажатие пробуждает/перезагружает устройство

Калибровка сенсора напряжения батареи (Калибровка АЦП)

  1. Запишите показания при напряжение акб 4.20, 4.19, 3.75 и 3.60 V.

  2. Впишите данные в фильтр. Слева от (->) значения от датчика, а справа истинное значение

        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".

img

  1. Создайте новый источник данных в интерфейсе "inker".
  2. В блоке "Basic Information" (Основная информация):
    • "Name": Введите понятное имя, например, "НА Время".
    • "Type": Выберите "JSON API".
  3. В блоке "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".
  4. Нажмите зеленую кнопку "Test URL". Если все настроено верно, inker подключится к Home Assistant и в правой панели появятся доступные поля (например, "entity_id", "state", "last_changed" и т.д.).

  5. В блоке "Settings" (Настройки):
    • "Refresh Interval" (seconds): Укажите интервал обновления данных в секундах.
  6. Нажмите "Save Changes" (Сохранить изменения).

Этап 2. Настройка виджета. Здесь мы настраиваем, как именно полученные данные будут отображаться на экране.

img

  1. Создайте новый пользовательский виджет в интерфейсе inker.
  2. Выберите "Data Source" (источника данных) который мы создали на первом этапе (например, "НА Время").
  3. Выберите тип отображения (Choose Display Type) JavaScript
  4. В поле "Widget Name" укажите название для виджета, например, "HA time".
  5. В блоке "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;
    
  6. В блоке "Live Output" ниже вы сразу увидите результат работы вашего кода. Если данные из HA поступают корректно, там отобразится отформатированное время (например: "вт, 5 мая, 11:45"). Вы также увидите предпросмотр готового виджета в панели "Live Preview" справа вверху.

  7. Нажмите "Save Changes" (Сохранить изменения), чтобы завершить настройку виджета.

Пример 2. Home Assistant "Календарь"

Этот виджет соберет события из нескольких календарей HA и выведет их одной строкой.

Настраивается аналогично Примеру 1 , но с другим URL, который отдаёт состояние всех сущностей:

http://<IP_АДРЕС_HA>:<ПОРТ>/api/states

img

JavaScript код
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]).

img


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"

Поделитесь с друзьями
Ссылка скопирована!

Подписывайтесь в Telegram

Комментарии