Самодельная автоматически обновляющаяся газета на E-Ink с использованием Rust и ChatGPT — как вам такой DIY?

В этом посте я опишу, как я сделал встроенный интерфейс и серверную часть для моей автоматической газеты на E-Ink. В проекте участвуют микроконтроллеры, RaspPi в качестве сервера, Rust в качестве варианта реализации и ChatGPT в качестве приглашённого гостя.

В основе этой сборки лежит плата микроконтроллера ESP32 с добавлением PSRAM объёмом 4 МБ для облегчения задач обработки изображений.

При оптимизации сборки для обеспечения низкого энергопотребления и максимального срока службы батареи я отказался от преобразователя напряжения и BMS на плате коммутации MCU и использовал разные детали (например, MT3608) между LiPo-элементом емкостью 1100 мАч и платой MCU.

ESP32 ежедневно включается с помощью часов реального времени RV-3028-C7, установленных на бесплатной плате разработчика от производителя Micro Crystal. Этот RTC имеет гораздо меньшее энергопотребление, чем модули DS*, распространённые в проектах DIY, и чрезвычайно точен благодаря встроенному осциллятору, позволяющему проводить заводскую калибровку.

Дополнительно к MCU подключена управляющая плата E-Ink с контроллером ITE IT8951 EPD. Поскольку дисплеи E-ink (подробнее о панели, выбранной ниже) являются бистабильными и не нуждаются в питании между обновлениями, плата управления подключена к реле 5В, чтобы избежать потребления энергии в режиме ожидания (например, от входящего в комплект светодиодного индикатора питания).

В целом, интерфейс проводит большую часть своего времени в глубоком сне. Ранним утром он просыпается и обновляется.

Дисплей, который вы видите ниже, это 13,3-дюймовая панель ED133UT2 от E Ink, которая имеет разрешение 1600x1200. Это дисплей из линейки продуктов Carta 1200, знакомый многим владельцам Kindle.

Заметили маленький DIP-переключатель на одной из фотографии? Он включает журналы последовательной отладки и сокращает интервал обновления с ежедневного примерно до одного раза в две минуты.

На выходе вы можете увидеть линейный поток программы. После пробуждения MCU подключается к Wi-Fi, извлекает новое газетное изображение из RasPi в моей домашней сети, затем снова засыпает. Очень глубоко засыпает — даже внутренняя RTC-память отключена для максимального срока автономной работы.

Поведение встроенного программного обеспечения оптимизировано для обеспечения надёжности и низкого уровня активного обслуживания — несколько повторных попыток с экспоненциальной выдержкой и т. д.

Особенно важно то, что я написал всё это, включая пользовательский драйвер для контроллера IT8951 EPD, на языке Rust. Попробовать Rust на микроконтроллере было одной из моих мотиваций для этого проекта (страница проекта)!

Пробный шар
Пробный шар

На фото выше — пробная версия макета. Кто-то наверняка заметит, что я вдохновлялся вёрсткой в стиле "The New York Times". Позже я ещё больше оптимизировал макет, внедрив знаменитые заголовки, расположенные в шахматном порядке. В этом мне помог ChatGPT.

Добавил даже прогноз погоды в стиле NYTimes, из API OpenWeatherMap.

"А что с бэкендом?", — спросите вы.

Серверная часть работает на RasPi в моей домашней сети. Бэкенд написан на Python и ежедневно запускается с помощью systemd. Он включает в себя сборщики статей на основе lxml для некоторых сайтов, которые нравятся мне и моей жене, а затем используется API ChatGPT, чтобы обрезать их по размеру, передать суть и сократить заголовки. Он также получает прогноз погоды из API OpenWeatherMap, который находится в правом верхнем углу страниц.

Удивительно, что всего несколькими неделями ранее этот проект было бы сложно реализовать. Эта система также выполняет несколько повторных попыток с экспоненциальной выдержкой на каждом шагу, чтобы мне не приходилось заниматься добавлением новостей вручную.

Собранный контент заносится в шаблон LaTeX (генерируется на базе Jinja2). Luatex создает PDF-файл из этого входного файла, который затем растрируется в PNG с помощью Ghostscript. ImageMagick используется для добавления характеристик бумаги и кофейного пятна в случайном месте, а также для создания необработанного растрового изображения для контроллера EPD, которое может идти непосредственно в память кадрового буфера IT8951.

Конечный файл передаётся по HTTP во встроенный интерфейс, используя встроенную в Python библиотеку HTTP-сервера, и когда утром моя электронная стенгазета проснётся, она получит его. Ошибки, а также вид газеты отправляются мне в Telegram для проверки.

Вышло хорошо, как мне кажется! Теперь буду смотреть, как долго он работает от 1100 мАч, прежде чем потребуется подзарядка.


Что ещё интересного есть в блоге Cloud4Y

→ Информационная безопасность и глупость: необычные примеры

→ NAS за шапку сухарей

→ Взлом Hyundai Tucson, часть 1часть 2

→ Столетний язык программирования — какой он

→ 50 самых интересных клавиатур из частной коллекции

Комментарии (12)


  1. Barabashkad
    18.04.2023 10:40
    +4

    Классная идея и прикольная реализация !!!!


  1. NeoCode
    18.04.2023 10:40
    +7

    На базе eink и chatgpt можно уже начинать делать "живые портреты" исторических личностей, как в Гарри Поттере.


    1. persii
      18.04.2023 10:40
      +4

      Пока E Ink не достигнет частоты обновлений хоть в 12 кадров в секунду (и отсутствия мерцания в процессе), о воспроизведении эффекта колдографий говорить рано; а с учётом того, что цель технологии — надёжное отображение статичного контента, возможно, стоит предподожить, что для статики E Ink и останется. Кроме того, для движущихся картинок есть другая техника с более широким рядом возможностей.

      Живая фотография, живая иллюстрация в книжке — это, действительно, было бы прикольно, но ведь всё-таки электронные книжки служат для размеренного изучения материала в тонком, лёгком форм-факторе, которому не надо много думать и часто заряжаться.


  1. kalapanga
    18.04.2023 10:40

    Теперь в каждую статью необходимо вставлять упоминание chatgpt?

    Причём по существу в статье об этом инструменте вообще ничего нет. "В этом мне помог chatgpt", "использую api chatgpt чтобы обрезать заголовки" - собственно и всё.

    Ну и осталось совсем непонятно, что же такое не давало реализовать подобный проект несколько недель назад?

    p.s. Проект интересный, использовано много разнообразных технологий. Но chatgpt здесь нужен как корове седло.


    1. maxzh83
      18.04.2023 10:40
      +7

      "В этом мне помог chatgpt", "использую api chatgpt чтобы обрезать заголовки" - собственно и всё.

      Я тоже сначала не понял зачем там chatGpt, но если внимательно прочитать, то не только для того чтобы обрезать заголовки.

      Он включает в себя сборщики статей на основе lxml для некоторых сайтов, которые нравятся мне и моей жене, а затем используется API ChatGPT, чтобы обрезать их по размеру, передать суть и сократить заголовки.

      Обрезать статью, передав ее суть, уже не такая тривиальная задача


  1. VanaEestlane
    18.04.2023 10:40

    Круто! Надо будет повторить, только не статьи, а своё актуальное. Спасибо за идею, особенно про сон всего этого.


  1. maKsimYtkin
    18.04.2023 10:40
    +2

    Стенгазета - слово из прошлого, да и сама газета новостная) Но реализация на высшем уровне современности))


  1. Stas911
    18.04.2023 10:40

    А что за такая лютая панель 13 дюймов? Где такие используются в читалках?


  1. sav13
    18.04.2023 10:40

    Подскажите, а где взять такую платку, чтобы с ESP32 вывести что-то на E-Ink от читалок?
    А то валяется пара 6" экранчиков, давно мечтаю информеры для умного дома на них сделать


    1. demetr_ds
      18.04.2023 10:40

      Waveshare. Есть у них готовое решение, посмотри может устроит Universal e-Paper Raw Panel Driver Board, ESP32 Но вот по поводу сторонних экранов, это уже разбираться надо, что за экраны.


      1. sav13
        18.04.2023 10:40

        Эти давно выпускают экраны с SPI. Сколько видел у них, там только свои экраны применяются.

        Просто копится какое-то количество экранов от Киндлов и К. Хотелось бы их в дело пустить
        Есть такой проект
        https://github.com/vroland/epdiy
        Только вот бы готовую плату )))


        1. demetr_ds
          18.04.2023 10:40

          Где-то попадался открытый проект именно с киндлами. Где продавали готовую плату. Вспомню, обязательно скину. Вроде про него на Хабре даже было (но не уверен).