Приветствую, Хабр!



Хоть название и громкое, но тут почти нет преувеличения. Моя разработка не предполагает ежедневного использования и сделана больше просто ради забавы, но тем не менее она довольно интересная. Владимир Анискин из Новосибирска, например, создал книгу на лавсановой пленке размерами 70х90 мкм, а почему бы и нет? На занесение в книгу рекордов Гиннеса я не претендую, но, если Вы остались заинтересованы, заходите под кат. Не хотел делить статью на части, так что наберитесь терпения.

Идея создания маленькой книги на электронных чернилах родилась уже довольно давно. Для этого даже был приобретен прямоугольный e-ink дисплей 2,13”, но по незнанию заказал версию, которая не поддерживала частичного обновления экрана. Смена страниц происходит только через полное стирание, а это занимает много времени и выглядит некрасиво. Поделка была заброшена на долгое время, но как-то на глаза попался мне дисплей 1,54” (200х200 pix), и я вновь загорелся этой идеей. После недолгих раздумий был заказан уже нужный дисплей. Пока посылка шла положенные три недели я решил сделать макетную плату и запустить старый дисплей, сил терпеть больше не было.


Рис.1. e-ink дисплей 2,13” на макетной плате

На плате не обошлось без ошибок. Я неверно выбрал ножки SPI для дисплея и чуть-чуть ошибся со схемой подключения CP2102 в режиме автоматического программирования. Несколько перерезанных дорожек и три проводка решили почти все мои проблемы.

Почему именно ESP32.
Во-первых, есть возможность закидывать файлы через Wi-Fi. Во-вторых, для этого модуля есть множество примеров скетчей, в том числе и для работы с e-ink. Также у меня есть одна не реализованная идея, которая потребует наличия беспроводной связи, но об этом не в этой статье (интрига). На самом деле я долго метался между микроконтроллером и модулем, но последний все-таки победил.

Немного по схемотехнике. Так как на момент написания статьи у меня уже была готова схема и pcb новой платы, я буду ориентироваться на нее. Схему включения/выключения книги я реализовал на CD4013.


Рис.2. Схема включения/выключения на CD4013

Ток потребления микросхемы в состоянии покоя порядка микроампера, что меня вполне устраивает. IO4 от ESP32 позволит программно выключать устройство, например, при долгом бездействии. U/D – кнопки для перелистывания страниц. Сигнал OUT_KEY включает общее питание, что видно на следующем куске схемы.


Рис.3. Схема зарядки и питания

Тут все просто. Питанием управляет CD4013 через полевик, до этого устройство выключено. Сигнал ADC_EN от ESP32 подает напряжение для измерения заряда аккумулятора. Сам зарядник LTC4054. Может стоило поставить что-то более навороченное с измерением заряда и шиной I2C, типа BQ25895, но как уж есть. Вместо LDO (как было на прототипе) для питания и использовал DC/DC. Нога CHARGE нужна для отслеживания окончания зарядки.

Так как используемые мной дисплеи pin-to-pin, схемотехника одна и та же. Все внутренние питания формируются из основного источника 3,3В.


Рис.4. Схема включения e-ink дисплея

Из таблицы на схеме видно, что можно подключить различные дисплеи. DIP переключатель я убрал и оставил резисторы. Сделано это ради экономии места, так как в данном проекте габариты решают. По этой же причине я не стал ставить SD карту. Памяти для хранения одной книги в txt должно хватить на внутренней SPIFlash.

Аккумулятор буду использовать LiPo 582728 3.7В 400 мАч. Этого достаточно и для недолгой работы в режиме Wi-Fi (проверено), но в крайнем случае, есть разъем microUSB. Из интересного по схемотехнике, пожалуй, все.

После того, как я латиницей вывел свой ник на дисплее, решил попробовать кириллицу. Библиотеки для работы с e-ink использовались «E-Paper_code» — так их можно найти на github. И да, там нет русских букв. Мои руки уже практически опустились. Отдельная благодарность Алексею a3x за помощь в подсчете offset букв (и не только в этом) в таблице ASCII, для правильной интерпретации.

if (char_offset > 1140) char_offset -= 780; // функция DrawCharAt в epdpaint.h

Для отрисовки русских букв нужно две вещи. Первое – это конвертер utf8rus (как пример). И тут все понятно, идем снова на github и находим скетч. Второе – нарисовать буквы в библиотеке. Здесь немного сложнее. В примере есть несколько размеров шрифтов: 8, 12, 16, 20, 24. Шрифт 8 имеет размеры 8х5 pix. Есть один существенный плюс – это 25 строк на странице. Смотрится шикарно, но читать почти невозможно. Шрифт 12 думаю будет самое то. Максимальная высота 10 pix. На дисплее можно отобразить 15 строк по 28 символов.

Какие мог буквы я перенес из английского алфавита (я понимаю, что похожие разноязычные буквы отличаются, как например «К» и «K»). Дальше просто пытался рисовать, но буквы оказывались кривыми и нечитаемыми. Решил воспользоваться программой «GLCD Font Creator». Дело пошло быстрее.


Рис.5. «GLCD Font Creator» шрифт «Comic Sans MS»

Программа позволяет сконвертировать шрифт в нужное количество точек. Так как для соседних строк нужен отступ библиотека работает с 12 пикселями высоты (12 шрифт). Многие буквы подрезались, некоторые стали нечитаемы, но исправить это куда проще, чем рисовать с нуля. В какой-то момент я еще вспомнил что букв в два раза больше, чем ожидалось (заглавные и строчные). Программа позволяет выгрузить шрифт в массив, но мне он не подошел по структуре. Писать преобразование одного массива в другой я был не готов морально. Пришлось преобразовать все в калькуляторе – то еще занятие. При корректировке нужно не забывать оставлять не менее 1 пикселя справа/слева, чтобы буквы не слипались в тексте. В коде буква выглядит примерно так:

// @ 'ф' (7 pixels wide)
  0x00, //        
  0x00, //        
  0x38, //    ###      
  0x10, //     #      
  0x7C, //  ##### 
  0x92, // #  #  # 
  0x92, // #  #  # 
  0x7C, // ##### 
  0x10, //   # 
  0x38, //  ###      
  0x00, //        
  0x00, //   

Не скажу, что все буквы идеальны, но вполне читаемы. Если кому-то понадобится библиотека, могу поделиться. После того, как все буквы готовы пробуем вывести на новый дисплей.


Рис.6. Кириллица на 1,54” дюйма 200х200 pix

Это самый первый вариант, и я его дорабатывал. Для чего вообще я рисовал заглавные твердый и мягкий знаки? Хотя … оказывается есть, например, слово «Ьмх» — это название советского локомотива. Ну и, конечно, можно будет почитать книги на болгарском языке, там есть слова, начинающиеся на «Ъ».

Используя скетч «ESP32_SPIFFS_test» я научился на SPIFlash класть текстовый файл книги. Когда я в первый раз вывел текст, я был огорчен. Как и следовало ожидать, все слова «рвались» на границе экрана. Пока я не сделал нормального форматирования текста пришлось воспользоваться online сервисом.


Рис.7. Форматирование текста по 28 символов в строке

Помимо переносов по словам, тут есть выравнивание текста по ширине. Результат превосходен! Но и тут появилась новая проблема. Для переноса текста используется символы «CR»«LF». Мой недокод умеет искать только «\n» = «LF». Пришлось находу вычислять offset «CR» и заменять его на пробел, в противном случае на каждой строке справа появлялся символ в виде мусора. Это костыль, но рабочий.


Рис.8. Первый вывод текста книги 16 строк

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

Ниже функция вывода страницы текста из файла на экран. Строго не судите – пишу код как могу.

void DrawPage(int page) {
  if (!SPIFFS.begin(true)) {
    Serial.println("An Error has occurred while mounting SPIFFS");
    return;
  }
  if(EEPROM.read(3) == 0) {
    file = SPIFFS.open("/book.txt", "r");
  if (!file) {
    Serial.println("Failed to open file for reading");
    return;
  }
  char temp_qs[56];
  while (file.available()) { 
    file.readBytesUntil('\n', temp_qs, sizeof(temp_qs));
    Quantity_string++; 
  }
  Quantity_page = (Quantity_string / 15);
  if(Quantity_page > 255) {
    EEPROM.write(2, Quantity_page/100);
    EEPROM.write(3, Quantity_page%100);      
    } else {
      EEPROM.write(2, 0);
      EEPROM.write(3, Quantity_page);  
    }  
  EEPROM.commit();    
  file.close();
  Serial.println(Quantity_page);  
  } else {
    Quantity_page = (EEPROM.read(2)*100)+EEPROM.read(3);  
    Serial.println(Quantity_page);     
  } 
  file = SPIFFS.open("/book.txt", "r");
  if (!file) {
    Serial.println("Failed to open file for reading");
    return;
  }
  if (Quantity_page == 0) {
    paint.SetWidth(200);
    paint.SetHeight(24);
    paint.Clear(UNCOLORED);
    paint.DrawStringAt(2, 2, utf8rus("Файл пустой...").c_str(), &Font12, COLORED);
    epd.SetFrameMemoryPartial(paint.GetImage(), 50, 20, paint.GetWidth(), paint.GetHeight());
    epd.DisplayPartFrame();
  } else {
    Serial.print("Page number:");
    Serial.println(page);
    Serial.println("File Content:");
    for (int i = 0; i < page * 15; i++) {
      int l = file.readBytesUntil('\n', one_string, sizeof(one_string));
    }
    paint.SetWidth(200);
    paint.SetHeight(36);
    //PAGE NUMBER
    paint.Clear(UNCOLORED);
    paint.DrawStringAt(2, 2, utf8rus(String(page_count + 1)).c_str(), &Font12, COLORED);
    paint.DrawStringAt(30, 2, utf8rus("из").c_str(), &Font12, COLORED);
    paint.DrawStringAt(52, 2, utf8rus(String(Quantity_page + 1)).c_str(), &Font12, COLORED);
    paint.DrawRectangle(167, 5, 194, 15, COLORED);
    paint.DrawStringAt(168, 5, "'''''", &Font8, COLORED);
    epd.SetFrameMemoryPartial(paint.GetImage(), 2, 183, paint.GetWidth(), paint.GetHeight());
    //PAGE
    int k_line = 2;
    for (int i = 0; i < 5; i++) {
      paint.Clear(UNCOLORED);
      for (int s = 0; s < 3; s++) {
        int l = file.readBytesUntil('\n', one_string, sizeof(one_string));
        one_string[l] = 0;
        //Serial.println(one_string);
        paint.DrawStringAt(0, s * 12, utf8rus(one_string).c_str(), &Font12, COLORED);
      }
      epd.SetFrameMemoryPartial(paint.GetImage(), 2, k_line, paint.GetWidth(), paint.GetHeight());
      k_line += 36;
    }
    file.close();
    page_count++;
  }
}

Тут идет чтение текстового файла из памяти ESP32. В переменную «page» я передаю номер страницы из (псевдо) EEPROM – это типа закладки. Для сдвига указателя в файле, сделан первый цикл for. Над этим еще нужно поработать.

Далее я решил формировать нижнюю строку для вывода количества прочитанных страниц из общего количества. Для отображения заряда аккумулятора у меня пока заглушка, нарисованная в 8 шрифте (чтобы не было пересечения при выводе) в рамке. То есть для вывода текста остается 15 строк. Следом формируется сама страница. Тут нужно отдельное пояснение.

    int k_line = 2;
    for (int i = 0; i < 5; i++) {
      paint.Clear(UNCOLORED);
      for (int s = 0; s < 3; s++) {
        int l = file.readBytesUntil('\n', one_string, sizeof(one_string));
        one_string[l] = 0;
        //Serial.println(one_string);
        paint.DrawStringAt(0, s * 12, utf8rus(one_string).c_str(), &Font12, COLORED);
      }
      epd.SetFrameMemoryPartial(paint.GetImage(), 2, k_line, paint.GetWidth(), paint.GetHeight());
      k_line += 36;
    }
    file.close();
    page_count++;

Как я писал ранее – этот дисплей поддерживает частичное обновление фреймами. Максимальный размер фрейма в памяти 8192 pix. Заполнение одного фрейма занимает порядка 0,8 с. Сначала я сделал построчно и это занимало около 15 с. После некоторых расчетов стало понятно, что формировать можно по 3 строки за раз: 200х36=7200 (каждая строка 200х12). Тогда это займет порядка 5 с – это намного лучше (4 на текст и 1 на строку состояния). Поэтому внутренним циклом формируются три строки, а внешним вся страница. Здесь нет функции «epd.DisplayPartFrame()» (вывод на дисплей) не случайно. После включения книги пользователь видит последнюю читаемую страницу (ее я стартую в «void setup()»), а я тем временем готовлю следующую (над процессом чтения предыдущей страницы еще нужно подумать).

void loop()
{
  if (((digitalRead(KEY_UP) == LOW) && (page_count <= Quantity_page + 2))) {
    Quantity_page = (EEPROM.read(2)*100)+EEPROM.read(3);  
    //SAVE PAGE
    Serial.println(page_count);
    if(page_count > 255) {
      EEPROM.write(0, page_count/100);
      EEPROM.write(1, page_count%100);      
      } else {
        EEPROM.write(0, 0);
        EEPROM.write(1, page_count);  
      }
    EEPROM.commit();
    //LOAD PAGE
    epd.DisplayPartFrame();
    //PRELOAD NEXT PAGE
    DrawPage(page_count);
    delay(50);
    //LIGHT SLEEP
    esp_light_sleep_start();
  }
}

В результате этого получается, что пока мы наслаждаемся лого загрузки и чтением первой страницы (5 с + 5 с) у меня готова следующая. По нажатию кнопки я моментально делаю вывод и начинаю формирование следующей, которая готова через ~5 с. Запись закладки в один и тот же адрес EEPROM ни к чему хорошему не приведет, но 10000 страниц я прочитаю. Вопрос в том, сколько страниц я успею прочитать на аккумуляторе 400 мАч. Без режима сна все-таки не обойтись, но это оказалось просто. Добавляем в конец «void setup()» и по нажатию кнопки функцию «esp_light_sleep_start()». Для пробуждения прописываем RTC_GPIO «esp_sleep_enable_ext0_wakeup(GPIO_NUM_14, 0)». Итого: в момент «перелистывания» страницы потребление около 38 мА, дальше 5,0 мА. При выключении кнопкой мой мультиметр (UNI-T UT70A) показывает 0 в режиме измерения мкА (думаю, что врет).


Рис.9. Вывод 15 строк текста + служебная строка

На плате добавился еще один проводок для кнопки. Оказывается, не все пины на ESP32 можно задействовать как GPIO.

Пока я «писал код» в производстве была вторая итерация платы. Габариты получились 40х57мм.


Рис.10. 3D модель платы v0.2

Я особо не старался уменьшить размеры, так как решающую роль тут играет аккумулятор и сам модуль ESP32. Также, чем меньше будут габариты, тем нелепее буде выглядеть толщина устройства (аккумулятор 5,8мм). Я широким жестом удалил индикационные светодиоды (осталась только индикация процесса/окончания зарядки), хотя место для них есть, а для отладки они бы пригодились.


Рис.11. Плата в сборе


Рис.12. Устройство в сборе

Из нереализованного:

  1. Переделать запись в EEPROM.
  2. Реализовать отправку книги по Wi-Fi.
  3. Сделать перелистывание страницы назад.
  4. Отслеживать и выводить заряд аккумулятора.
  5. Поддержка epub.
  6. Научиться писать код.

Не люблю использовать видео в статье, но тут без него не обойтись. Оно наиболее полно отображает работу устройства.


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

P. S.: Первая книга саги «Ведьмак» занимает 1654 страницы (24810 строк).

Чтение – к мудрости движение.
Спасибо за внимание и успехов!



Читайте также:

Новости, обзоры продуктов и конкурсы от команды Timeweb.Cloud — в нашем Telegram-канале

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


  1. MountainGoat
    17.06.2024 09:28
    +11

    Вспомнилось как, пока все гоняли змейку на Nokia 3310 я ковырял мобильник Сименс, и выяснил, что если выкинуть из прошивки всё, что можно, то в заметках хватит места на одну книгу. Так и читал.


    1. the_bat Автор
      17.06.2024 09:28
      +2

      Помню еще и навигатор ставили на телефоны)


      1. MountainGoat
        17.06.2024 09:28
        +1

        Это было потом. А тогда Java Mobile ещё не было, а значит и сторонних приложений. Разве что под навигатором подразумевается справочник "Улицы Москвы"?


        1. chnav
          17.06.2024 09:28
          +2

          (иправлено) Да действительно, началось с Java Mobile. Я цеплялся к Bluetooth GPS и смотрел своё положение на растровой карте.


        1. the_bat Автор
          17.06.2024 09:28

          Точно уже не вспомню, но GPS там еще не было, но был блютуз и внешний брелок на аккумуляторе.


    1. Neyasbltb_88
      17.06.2024 09:28
      +4

      Помню времена, когда с помощью 3 или 4 программ подготавливал текст книги, и с ним собирал jar приложение для Siemens C60. Вся серия книг о Гарри Поттере была прочитана таким образом на экране с разрешением 101x80


      1. the_bat Автор
        17.06.2024 09:28
        +3

        Да, тоже собирал jar'ы)


    1. Vladekk
      17.06.2024 09:28
      +2

      Я "Войну и мир" прочитал на сименсе c65. Было очень обидно, когда узнал, что мог купить cx65, где заметно больше экран, но неверно понял акцию сотового оператора.

      Я тогда мечтал о смартфонах, чтобы читать книги и прочее, и когда появился айфон, и я смог накопить, купил себе 3g.

      Потом была первая читалка на eInk на западном рынке Сони. С тех пор я увлекаюсь технологией eInk, и у меня было много читалок и даже смартфон Hisense a5 cc на цветном эИнке. Сейчас думаю о новом смартфоне бигме, который должен выйти в этом году.


      1. the_bat Автор
        17.06.2024 09:28

        А я все засматривался на yotafon, но так и не приобрел. Купил тоже отдельную читалку.


      1. the_bat Автор
        17.06.2024 09:28

        Посмотрел обзор на Hisense a5 cc - фантастика. Жаль только перерисовка медленная.


  1. SirMaksimRuban
    17.06.2024 09:28
    +3

    Отличная штука получилась. Я на устройстве подобного размера прочел всю игру престолов, кроме прочего.


    1. the_bat Автор
      17.06.2024 09:28
      +1

      Спасибо!


    1. joffer
      17.06.2024 09:28
      +1

      в своё время прочитал "Преступление и наказание", а также смотрел аниме на Samsung SGH-D830 с экраном 240х320. За время чтения слегонца задолбался и почти сразу купил читалку 5 дюймов 800х600, Qumo Colibri, которой пользуюсь до сих пор. На ней настолько много было прочитано книг, что пластик с обратной стороны корпуса "захватался" и начал стареть)


      1. the_bat Автор
        17.06.2024 09:28

        В студенческие годы на плеере 320*240 (около 3,5", если я не ошибаюсь), были посмотрены все сезоны сериала "Друзья")


    1. FreeNickname
      17.06.2024 09:28
      +1

       всю игру престолов, кроме прочего

      Да ладно Вам, может 7-я книга будет ничего.


    1. perlestius
      17.06.2024 09:28
      +3

      Я в свое время на смартфоне прочитал собрание сочинений Мопассана из 12ти томов по дороге из дома на работу и обратно. Но лучше бы я этого не делал, а купил нормальную электронную книгу и читал с нее. Зрение всё-таки лучше беречь.


      1. the_bat Автор
        17.06.2024 09:28

        Это сильно) Да, зрение нужно беречь. Сам стараюсь читать только бумажные либо e-ink.


  1. iliasam
    17.06.2024 09:28

    Я так понял, шрифт моноширинный?
    Возможно, если использовать пропорциональный шрифт, текста на экран будет влезать больше?


    1. the_bat Автор
      17.06.2024 09:28

      Да, но там небольшое расстояние между символами. Будет лучше применять переносы слов, нужно найти нормальный редактор.


  1. HardWrMan
    17.06.2024 09:28
    +4

    Такую шпаргалку бы да 30 лет назад...


    1. the_bat Автор
      17.06.2024 09:28
      +2

      Ох, и не говорите!


    1. Vinni37
      17.06.2024 09:28
      +1

      Ну не 30, а стажем так 15–20 лет назад был у меня случай в универе. Когда на кафедре физики, что находилась в подвале, преподаватель сказал, что можете не сдавать мобильные телефоны, всё равно они тут не ловят. А при этом на мой Siemens C55 влезало приличное кол-во лекций.


      1. HardWrMan
        17.06.2024 09:28
        +2

        30лет назад я постоянно ходил с плеером и все преподы привыкли к этому. Когда наступило время экзамена, я на одном канале записал музло а на другом надиктовал ответы. Встроенный динамик на плеере был подключен к одному каналу, как раз с музлом. И так как никто не видел меня без наушников, а оценки у меня были выше среднего, то никто ничего не заподозрил. Один только спросил - что слушаешь? Я наушники отключил и динамик запел медитативную энигму, на этом весь интерес и закончился. Записал только то, что не мог запомнить многократно по кругу, так что мотать не надо было, достаточно было несколько минут просто послушать.


        1. the_bat Автор
          17.06.2024 09:28

          Зачет!)


          1. SargeT
            17.06.2024 09:28
            +1

            Экзамен!)


  1. Kopcheniy
    17.06.2024 09:28
    +1

    Симпатично получилось. Спасибо за статью.)

    оказывается есть, например, слово «Ьмх»

    А можно транскрипцию?)
    А то получается что-то вроде [жмых] [??№:"!(")Зчвпффф мых... да как это читать вообще?)]


    1. the_bat Автор
      17.06.2024 09:28

      Рад что понравилось! Думаю что-то типа "Мягкий знак эм ха")


    1. MaFrance351
      17.06.2024 09:28
      +1

      А ещё ведь были паровозы серий Ъ (еръ) и Ы (еры)...

      А название тепловоза читалось как "ерь-эм-ха".


  1. xoid555
    17.06.2024 09:28
    +1

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


    1. the_bat Автор
      17.06.2024 09:28
      +1

      Согласен, но из-за медленной записи данных в экран мне приходится делать предзагрузку страницы в память дисплея. Нужно подумать, возможно как-то это и можно решить. Для книги, по идее, нужен другой интерфейс дисплея, как это сделано в полноразмерных книгах.


      1. NickDoom
        17.06.2024 09:28
        +1

        Сырая работа с матрицей? Круто, но очень геморно :) Я так и облизываюсь пока впустую :)

        Но вообще девайс получился занятный, особенно для близоруких типа меня :) Очки снял и экранчик сразу не такой уж и маленький :)


        1. the_bat Автор
          17.06.2024 09:28
          +1

          Спасибо!) Ну не совсем сырая, там есть драйвер инициализации (очень похож на mipi) и команд управления.


          1. NickDoom
            17.06.2024 09:28

            Пардон, я слишком расплывчато выразился, я имел в виду, что чем сырее (ниже) уровень, тем больше геморрою, но выше скорость обновления :) У меня была мысля взять штучки три ценников с дохлыми «мозгами», запитать от общей питалки (тут был цикл статей про), драйверить непосредственно их «родными» сигналами (ох и головняк же будет!) и построчно их закорпусить в мелочи типа «PB 360+» (отличный был форм-фактор, жаль, прекратили выпуск).

            Вроде давно все их сигналы стирания, рисования (и так далее) известны, но вряд ли я когда-нибудь соберусь :( Так что реалистичнее выглядела вторая моя идея — взять два таких вот двухдюймовых SPI-экранчика, сделать корпус «раскладушечкой» (в виде крошечной книжечки, ага), под левой «страничкой», допустим, аккумулятор поставить, под правой — допустим, АтТиньку и слот под микроСД. На работу с готовым SPI у меня, наверное, вечерок-другой найдётся :) А перелистывание сделать в виде двух подпружиненных движков-переключателей, слева и справа под страничками. То есть реальным таким «листающим» движением. Две пары контактов (одна замкнута, когда движок «в покое» и возвращён пружиной к краю страницы, вторая — когда палец его довёл до «переплёта», в промежуточном положении — ничего не замкнуто). Если задержать на секунду, не доводя до конца — вылезает всякие более интересные опции, меню и прочее. Как «длинный тап», ага.

            Ну, или промежуточный вариант — раскладушка из двух ценников, но только, наверное, вертикальная, потому что лучше строку от строки отделять петлями, чем разрывать строки. И один движок-слайдер со средним положением, в которое возвращает пружина (листать, соответственно, вверх и вниз).


            1. the_bat Автор
              17.06.2024 09:28
              +1

              Ух, сколько там софта нужно будет написать)


              1. NickDoom
                17.06.2024 09:28
                +1

                Ага, прямо облизываюсь :) начиная с ридонли-реализации fat32 и заканчивая грязными трюками для работы со всем этим цирком из крайне малоногого контра :)

                А, да, закрывание книги стопудово надо делать одновременным листанием обоих движков-слайдеров :) Такое прямо закрывающее движение, двумя большими пальцами от краёв страниц к переплёту — вжик :)


                1. the_bat Автор
                  17.06.2024 09:28
                  +1

                  Я подумаю)))


      1. Nick0las
        17.06.2024 09:28

        Может все дело в медленном SPI из-за ногодрыга, побайтной передачи и использования толстых GPIO либ?


        1. the_bat Автор
          17.06.2024 09:28

          Да, самое долгое - это запись области экрана по SPI, а область маленькая.


          1. Nick0las
            17.06.2024 09:28

            Попробуйте оптимизировать эту запись используя максимально тонкие абстракции (т.е. как можно ближе к железу) Подробнее могу описать если скажете где смотреть код.


            1. the_bat Автор
              17.06.2024 09:28

              Хмм... Вот библиотека:

              https://github.com/perseverance51/E-Paper_code/tree/master/Arduino/epd1in54_V2

              Вот самая "долгая" функция:

              epd.SetFrameMemoryPartial


              1. Nick0las
                17.06.2024 09:28
                +1

                Надо немного переписать код.

                1. 99% не имеет смысла дергать CS на каждую транзакцию в функции EpdIf::SpiTransfer(). Вынестие управление CS наверх. Перед передачей включили, и в конце выключили. В крайнем случае если так не сработает, можно вынести только для передачи картинки в двойном цикле E-Paper_code/Arduino/epd1in54_V2/epd1in54_V2.cpp:554

                2. Можно покопаться в SPI либе и разобраться, как слать не один байт за вызов функции, а буффер. И формировать и слать буффер большими кусками.

                Если что-то непонятно, спрашивайте, расскажу подробнее.


                1. the_bat Автор
                  17.06.2024 09:28

                  Спасибо огромное! Попробую разобраться.


  1. ANOSEMI1983
    17.06.2024 09:28
    +2

    Слов нет, замечательная разработка мини- ридера! Так и видятся ждущие электричку , в тесной толпе , любители почитать , уткнувшиеся в зажатые в кулаках брелоки-читалки! Та прорва книг ,перечитанная мною на разного рода устройствах , привела к мысли , что размер наиболее удобного компакт-ридера составляет примерно 6 - 6,5 ". Ближе всего - по размерам - это Mi Max 2 от Xiaomi. Как-то так. Спасибо за Ваш талант!


    1. the_bat Автор
      17.06.2024 09:28

      Спасибо! Рад что понравилась разработка! Да, согласен, чтобы не уставали глаза и было комфортно читать, меньше 6 дюймов книги рассматривать не стоит.


  1. Lev3250
    17.06.2024 09:28
    +4

    Обожаю такие штуки из разряда: вроде и нафиг не надо, но так красиво реализовано, что хочу-хочу-хочу!!


    1. the_bat Автор
      17.06.2024 09:28
      +1

      Спасибо! Очень точное описание))


    1. NickDoom
      17.06.2024 09:28
      +1

      Вот и у меня примерно такие ощущения :-D


  1. DGN
    17.06.2024 09:28

    Очень много книг прочитал на siemens sl45i, лучшей читалки и быть не может, не надо водить глазами, мозг воспринимает блок текста целиком. Только кнопку вниз тапаешь... Сделали бы сейчас брелочек такой, без всего остального телефона, с минимумом полей.


    1. K0styan
      17.06.2024 09:28
      +1

      По сходной причине очень любил читать с Palm m105 - с автоскроллом вообще отлично было.


      1. the_bat Автор
        17.06.2024 09:28

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


  1. Porohovnik
    17.06.2024 09:28

    вообще супер штука, например для...заметок! Заметки писать на телефоне, и портировать на устройство(или подтягивать через блютуз). А его можно хоть к рукаву приделать, хоть в кошельке носить, хоть на брелке. И вся нужная инфа под рукой о себе напоминает.

    Если реализовать режим заметок, то можно отображать почти что угодно!
    Например, парсить данные профиля, и автоматом слать его на устройство (https://habr.com/ru/articles/220893/ прям как здесь). В добавок баланс карты, и прочие. Ведь кнопка пролистывания даёт возможно размещать несколько "экранов". А малый форм-фактор позволяет размещать его где угодно...

    Да, без кнопки назад книги читать не удобно, как и без перехода по страницами. Но если к текущей реализации добавить блютуз, устройство станет гораздо интереснее и может даже будет иметь коммерческий потенциал


    1. ABy
      17.06.2024 09:28

      Думаю для заметок можно eink ценники использовать. Есть даже цветные варианты.


      1. the_bat Автор
        17.06.2024 09:28

        Думаю в ценниках самые простые e-ink которые обновляются через полное стирание дисплея. Пытался найти такой ценник чтобы поковырять, но так и не нашел.


      1. kenomimi
        17.06.2024 09:28
        +1

        У электронных ценников обновление 2-5 секунд, не пойдет. Они оптимизированы под минимальное потребление и минимальную цену.


        1. ABy
          17.06.2024 09:28

          Так речь о заметках. Я себе представил электронный вариант sticky notes


          1. the_bat Автор
            17.06.2024 09:28

            А, формировать на телефоне. Да, так можно, думаю.


    1. Apv__013
      17.06.2024 09:28

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


  1. pbw
    17.06.2024 09:28
    +1

    Вау, какая великолепная штука! Как раз на днях думал о чем-то подобном. Кстати да, недавно была статья о раритетном девайсе (органайзер). Я там оставлял под статьей коммент со своими "мечтами" о функционале, в современной реинкарнации. А действительно, ведь еще немного - и эта микрокнига почти то, о чем я говорил. Тоесть, еще и нужную информацию хранить могла бы. Как думаете? P.S. блютуза было бы достаточно, как заметили в комментах выше.


    1. the_bat Автор
      17.06.2024 09:28

      Ох. Тут еще и тач нужен тогда)


      1. pbw
        17.06.2024 09:28
        +1

        При таком размере дисплея тач явно будет излишним. Достаточно будет пяти мембранных кнопок под дисплеем. Но вам же все равно нужны будут кнопки для навигации, даже просто для эл.книги. Другой вопрос, что если девайс использовать в виде микро-органайзера (только для хранения/чтения текстовых данных), то хватит ли внутренней памяти на все сразу?

        Вобщем, таких излишних наворотов, как в Xircom REX - не нужно. Блютуз, кнопочками полистать странички, простейший поиск. Ну как раньше были электронные записные книжки, типа того. Я бы купил!


        1. the_bat Автор
          17.06.2024 09:28

          У меня есть три кнопки. Две из них для навигации (вверх/вниз), но меню не полистать, если не заморачиваться с длинными нажатиями и двойными кликами)


    1. MaFrance351
      17.06.2024 09:28

      Casio PV были ещё. Столько всего на этих КПК было прочитано...


  1. perfect_genius
    17.06.2024 09:28
    +1

    Очень крутое устройство, но что оно покажет, когда в тексте встретится Ё?


    1. the_bat Автор
      17.06.2024 09:28

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


  1. Zara6502
    17.06.2024 09:28
    +1

    Спасибо за статью.

    1. имхо но шрифт с засечками выбивается из общего стиля и хуже к восприятию.

    2. Интересно кстати, что пока сам не надел очки абсолютно никак не воспринимал разные функции устройств, облегчающие использование их слабовидящими. Сейчас нормально читаю буквы если они около 4 мм по высоте, отчего практически не пользуюсь ничем что имеет небольшой экран (смартфон без вариантов но и там размеры шрифта большие, но например на картах названия улиц не масштабируются и их не прочитать, делаю скриншот, открываю в галерее и делаю зум, гемор тот еще). Но вот так у нас в целом не продумано всё делают даже лидеры рынка.

    3. При 2" в высоту экрана уместится для меня только 12 строк, но нужны еще интервалы между ними, так что влезет только 8-10 (у вас на фото их 16), так что слабовидящему пространства экрана хватит только на 25% от задуманного. Это наверное самое печальное что случается в старости :)


    1. the_bat Автор
      17.06.2024 09:28
      +1

      Рад что понравилась статья!

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

      2. Да, как-то не обращал внимания. Проверил, названия улиц и правда не масштабируются в навигаторе.

      3. Я могу использовать и больший шрифт, но тогда точно нужно использовать переносы текста, иначе будет по одному и меньше слов на странице)


  1. GCX-Monter
    17.06.2024 09:28
    +1

    Вы не хотите начать такие устройства продавать? Я вижу что такое устройство многим людям может понадобится, я бы и сам хотел его приобрести


    1. the_bat Автор
      17.06.2024 09:28

      Если честно, то не вижу сферы применения, если только для "убивания" зрения. Я там писал, что у меня есть одна идея, которую я постараюсь реализовать. Она не требует постоянного чтения с экранчика. Но вот для чего еще применить - не представляю.


  1. Scheogorat
    17.06.2024 09:28
    +1

    Студенты оценили бы такое изобретение в качестве компактной электрошпаргалки.)


    1. the_bat Автор
      17.06.2024 09:28

      Ну, в эпоху телефонов, мне кажется, это перестало быть актуальным) Вот лет 20 назад запихать конспект ...


      1. MaFrance351
        17.06.2024 09:28
        +1

        Телефон неудобен своими размерами. Этот девайс куда компактнее.

        (а пока будешь подготавливать конспекты для записи в него и смотреть, нормально ли отображается, глядишь, и так запомнишь...)


        1. K0styan
          17.06.2024 09:28
          +1

          Компактность - не всегда плюс: слишком часто подглядывать придётся. Был с принимающей стороны, очень заметно)

          Да и смарт-часы есть - они по крайней мере могут невинно присутствовать в поле зрения.


          1. the_bat Автор
            17.06.2024 09:28

            Думал сделать плату под корпус часов, кстати)


  1. kenomimi
    17.06.2024 09:28

    А почему бы не взять готовую либу вывода форматированного текста? Наверняка сообщество уже озадачилось... Насколько понимаю, вывод текста по-уму - это очень большой обьем кода, реально непосильный для одного человека в приличное время.


    1. the_bat Автор
      17.06.2024 09:28

      Я пока не нашел такую либину, может плохо искал. Тоже думаю что должно быть что-то, не хочется писать с нуля с моими познаниями в программировании.


  1. defecator
    17.06.2024 09:28
    +1

    Конструкция интересная, но у меня бы глаза вытекли, если честно, читать такое мелкое.

    Когда тебе 20 лет, ещё нормально, а когда 45-55, то там уже дальнозоркость появляется....


    1. the_bat Автор
      17.06.2024 09:28
      +1

      Согласен, но всегда можно поставить аквариум перед экраном, как это было на первых телевизорах)


  1. SneakyJoe
    17.06.2024 09:28

    В школе я читал книги на мобилке siemens m65. Разрешение, до сих пор помню, 132x176. Одноклассник читал на какой-то nokia на экране 128x128, который к тому же выжигал глаза. Такой бы девайс да мелкому мне...


  1. bt2901
    17.06.2024 09:28

    Возможно, я что-то не понял, но зачем рисовать свой шрифт с нуля? Разве нет возможности заимпортировать какой-то готовый шрифт? Сейчас есть куча моноширинных шрифтов с поддержкой большого количества символов, многие из которых ещё и учитывают потребность показывать свои символы на дисплеях маленького разрешения (например, Fairfax рисует всё черно-белым на сетке 6x12 пикселей)