Скрыть объявление
На нашем форуме недоступен просмотр изображений для неавторизованных пользователей. Если Вы уже зарегистрированы на нашем форуме, то можете войти. Если у Вас еще нет аккаунта, мы будем рады, если Вы к нам присоединитесь. Зарегистрироваться Вы можете здесь.

esp8266 + u8glib

Тема в разделе "Общие вопросы по esp8266", создана пользователем N5xx, 22 янв 2016.

  1. N5xx

    N5xx Новичок

    Сообщения:
    1
    Симпатии:
    0
    Всем привет. Кто нибудь подключал эту библиотеку для работы в среде ардуино (я шью esp8266 через ардуину, работаю с https://github.com/squix78/esp8266-oled-ssd1306), но там мало шрифтов. Хочется подключить u8glib, А она там не компилируется) Там возможности по шрифтам получше. Ну или как вариант есть ли русские шрифты под https://github.com/squix78/esp8266-oled-ssd1306 ?
     
  2. AndrF

    AndrF Активный участник сообщества

    Сообщения:
    338
    Симпатии:
    33
    Как либо решили вопрос?

    Собственно вопрос все тот же - русские фонты!

    Формат фонтов данной библиотеки мне непонятнен, а то я бы попробовал конвертнуть имеющийся у меня фонт...
     
  3. AndrF

    AndrF Активный участник сообщества

    Сообщения:
    338
    Симпатии:
    33

    Вложения:

    • MyFonts.h
      Размер файла:
      39,5 КБ
      Просмотров:
      30
    Последнее редактирование: 16 июн 2017
  4. AndrF

    AndrF Активный участник сообщества

    Сообщения:
    338
    Симпатии:
    33
    Более завершенный вариант шрифтов. Для корректной работы с ними пришлось немного модифицировать один из файлов библиотеки, зато теперь вывод русских символов делается очень просто:

    Код (Text):
    1.  
    2.   display.setFont(Font5x7);
    3.  
    4.   display.drawString(0, 0, "АБВГДЕЁЖЗИЙКЛМНОПР");
    5.   display.drawString(0, 16, "СТУФХЦЧШЩЪЫЬЭЮЯ111");
    6.   display.drawString(0, 32, "абвгдеёжзийклмнопр");
    7.   display.drawString(0, 48, "стуфхцчшщъыьэюя");
    8.  
    9.   delay(1000);
    10.  
    11.   display.clear();
    12.   // Print to the screen
    13.  
    14.   display.setLogBuffer(5, 30);
    15.   display.println("АБВГДЕЁЖЗИЙКЛМНОПР");
    16.   display.println("СТУФХЦЧШЩЪЫЬЭЮЯ111");
    17.   display.println("абвгдеёжзийклмнопр");
    18.   display.println("стуфхцчшщъыьэюя");
    19.   // Draw it to the internal screen buffer
    20.   display.drawLogBuffer(0, 0);
    21.   // Display it on the screen
    22.   display.display();
    23.  
    А не как обычно везде где я находил:
    Код (Text):
    1. display.println(utf8rus("Тест"));
    То есть вызов utf8rus() стал ненужным.

    К сожалению, русский растровый фонт у меня был только один - 5x7 - его конвертнул и вставил. Нужно бы еще два-три, высотой 10, 12, 14. Фонты большего размера я уже, при необходимости, могу получить с помощью генераторов шрифтов, а вот с фонтами вышеуказанного размера они плоховато справляются... У кого есть указанные растровые фонты и кому не жалко - выложите, а я попробую разобраться и конвертнуть, если пойму их формат. Потом сам выложу.
     

    Вложения:

    • Arduino.7z
      Размер файла:
      189,9 КБ
      Просмотров:
      41
    uri нравится это.
  5. MSapogov

    MSapogov Новичок

    Сообщения:
    6
    Симпатии:
    0
  6. gerkimuyda

    gerkimuyda Авторитетный участник сообщества

    Сообщения:
    309
    Симпатии:
    62
    Как создать свой фонт для библиотеки esp8266-oled-ssd1306

    Когда заинтересовался написанием своего шрифта для экрана, столкнулся с небольшой проблемой, что формат шрифта у библиотеки esp8266-oled-ssd1306 немного другой, чем описывается в статье
    Свой текст для OLED 128x64 и мне пришлось разобраться в различиях.

    И так. Из практики мы знаем, что перед выводом текста в скетче надо вызвать функцию display.setFont();
    которой в параметре передается имя шрифта. Сами шрифты описываются в файле OLEDDisplayFonts.h

    Давайте теперь создадим свой шрифт с одним символом - цифрой ноль. Прописываем в файл следующую конструкцию:
    Код (C):
    1. const char CrystalNumbers_64[] PROGMEM = {
    2.   0x1A, // Width: 26
    3.   0x40, // Height: 64
    4.   0x30, // First Char: 48
    5.   0x01, // Numbers of Chars: 1
    Где первый параметр - это ширина символа в пикселях
    второй параметр - высота в пикселях
    третий параметр - код ASCII первого символа в шрифте (в нашем случае - нуля)
    четвертый - количество символов в описываемом шрифте (у нас только один символ)

    Это описание шрифта используется и в другой библиотеке (например, от Adafruit), но в отличии от нее - далее идут не изображения символов, а таблица параметров по каждому символу
    Код (C):
    1.  //Address  length width
    2.   0x00, 0x00, 0xD0, 0x1E, //0
    Всего 4 байта на каждый символ. Длина данной таблицы = количеству символов из шапки * 4 байт.
    Первых два байта - это адрес смещения начала символа в последующих байтах изображений.
    Третий байт - длина (размер в байтах) изображения символа.
    Четвертый - ширина знакоместа в пикселях (не изображения символа, а места для него до начала
    следующего символа (с учетом интервала) - т.е. это значение должно быть немного больше ширины самого символа)

    Итак, мы описали 1 символ 26*64 начиная с '0' (ord 48).
    Также написали адрес его изображения 0x00:0x00, его длину 13 байт (0xD0) и его ширину 30 пикселей (0x1E) (26 ширина изображения и 4 пикселя отступа).

    Теперь идет рисунок самого символа. Он описывается по вертикальным столбцам с правого верхнего угла.
    Но пиксели собираются по 8 штук в один байт. Т.е. в первый байт попадают пиксели с координатами
    по X=1, Y=8..Y=1, во второй X=1, Y=16..Y=9 и так до крайнего X=1, Y=64..Y=56, после которого
    переходим к следующей колонке X=1, Y=9..Y=16 и т.д.
    Чтобы удобнее было считать, давайте повернем изображение символа на 90 градусов (тут только верхняя половина):

    IMG_2017-12-08_153908.jpg

    Теперь описываем первую колонку (X=1):
    Код (C):
    1.   0xE0,0xFF,0xFF,0x1F,0xFC,0xFF,0xFF,0x0F,
    Также описываем вторую и последующие колонки:
    Код (C):
    1.   0xF0,0xFF,0xFF,0x3F,0xFE,0xFF,0xFF,0x1F,
    2.   0xF0,0xFF,0xFF,0x3F,0xFE,0xFF,0xFF,0x1F,
    3.   0xE6,0xFF,0xFF,0x1F,0xFC,0xFF,0xFF,0x0F,
    4.   0xCF,0xFF,0xFF,0x0F,0xF8,0xFF,0xFF,0x67,
    5.   0x9F,0xFF,0xFF,0x07,0xF0,0xFF,0xFF,0xF3,
    6.   0x3F,0xFF,0xFF,0x03,0xE0,0xFF,0xFF,0xF9,
    7.  
    8.   0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0xFC,
    9.   0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,
    10.   0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,
    11.   0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,
    12.   0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,
    13.   0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,
    14.   0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,
    15.   0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,
    16.   0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,
    17.   0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,
    18.   0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,
    19.   0x3F,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,
    20.  
    21.   0x9F,0xFF,0xFF,0x03,0xE0,0xFF,0xFF,0xFC,
    22.   0xCF,0xFF,0xFF,0x07,0xF0,0xFF,0xFF,0xF9,
    23.   0xE6,0xFF,0xFF,0x0F,0xF8,0xFF,0xFF,0xF3,
    24.   0xF0,0xFF,0xFF,0x1F,0xFC,0xFF,0xFF,0x67,
    25.   0xF8,0xFF,0xFF,0x3F,0xFE,0xFF,0xFF,0x0F,
    26.   0xF8,0xFF,0xFF,0x3F,0xFE,0xFF,0xFF,0x0F,
    27.   0xF0,0xFF,0xFF,0x1F,0xFC,0xFF,0xFF,0x07,
    Теперь давайте сохраним и проверим:

    Код (C):
    1. #include "SSD1306.h" // alias for `#include "SSD1306Wire.h"`
    2. SSD1306 display(0x3c, D3, D4);
    3.  
    4. void setup() {
    5.   display.init();
    6.   display.flipScreenVertically();
    7.   display.setContrast(255);
    8.   display.clear();
    9.   display.setFont(CrystalNumbers_64);
    10.   display.drawString(0, 0, "0" );
    11.   display.display();
    12. }
    13. void loop() { }
    Как видите, все у нас получилось. Подобным образом рисуются остальные символы.
    В прикрепленном файле я подготовил шрифт на все цифры, знаки плюс и минус, точку и двоеточие.
    А также пример с выводом таймера на экран. Скетч написан так, что можно отключать и подключать экран в любое время "на ходу" (программа его переинициализирует).
    IMG_2017-12-13_203221.jpg
    (ps: на фотке вывод температуры. Первый символ получен наложением (вывод символа поверх другого).
     

    Вложения:

    Последнее редактирование: 13 дек 2017
  7. radikovevgen

    radikovevgen Новичок

    Сообщения:
    2
    Симпатии:
    0
    у кого есть русский шрифт на на esp8266 с oled ssd1306 поделитесь пожалуйста !
     
  8. andrik_zp

    andrik_zp Читатель

    Сообщения:
    84
    Симпатии:
    8
    Держи, три шрифта, 14, 16, 24 пикселя в высоту. Только не спрашивай как ими пользоваться, или разберись сам или бросай программирование.
     

    Вложения:

    • font_14.h
      Размер файла:
      23,9 КБ
      Просмотров:
      32
    • font_16.h
      Размер файла:
      64,8 КБ
      Просмотров:
      24
    • font_24.h
      Размер файла:
      93,8 КБ
      Просмотров:
      27
  9. radikovevgen

    radikovevgen Новичок

    Сообщения:
    2
    Симпатии:
    0
    Спасибо в том то и дело что я начинающий , ???
     
  10. Vsevolod61

    Vsevolod61 Новичок

    Сообщения:
    5
    Симпатии:
    1
    Если еще актуально....
    Файлы конвертированы из ttf Windows по алгоритму поста 5 это ветки.
    В библиотеке ArduinoIDE ESP8266_and_ESP32_Oled_Driver_for_SSD1306_display необходимо заменить OLEDDisplay.h на файл из вложения.
    Изменения в заголовочном файле касаются функции fontTableLookupFunction - она разбирает европейскую страницу UTF8.
    В скетче пока использую utf8rus.
    Пока так. Дойдут руки - допилю OLEDDisplay.h.
    Всем успехов...
     

    Вложения:

    • Arial_10.h
      Размер файла:
      23 КБ
      Просмотров:
      19
    • Arial_14.h
      Размер файла:
      34,1 КБ
      Просмотров:
      14
    • Arial_16.h
      Размер файла:
      37 КБ
      Просмотров:
      16
    • OLEDDisplay.h
      Размер файла:
      10,4 КБ
      Просмотров:
      23
    • utf8rus.ino
      Размер файла:
      823 байт
      Просмотров:
      24
    aidar_i нравится это.
  11. Vsevolod61

    Vsevolod61 Новичок

    Сообщения:
    5
    Симпатии:
    1
    Во вложении - допиленная библиотека ESP8266_and_ESP32_Oled_Driver_for_SSD1306_display для работы с русскими шрифтами. Библиотека очень патриотичная - с английской UTF8 не работает!!!
    Это - мои личные санкции ГЕЙРОПЕЙЦАМ...
    Впрочем нет проблем сделать универсальную. Кто хочет - флаг в руки и барабан на шею :)).
    В папке примеров - часть моего проекта RemoteControl, иллюстрирующая применение русских шрифтов. Там-же - шрифты Areal Plant размером 10, 14, 16, 24; Areal Italic размером 10, 16, 24.
    Прошу не обращать внимание на сообщение Arduino IDE:
    "Arial_10_i.h" содержит неизвестные символы. Если этот код был создан в более старой версии Arduino IDE, попробуйте использовать Инструменты -> Исправить кодировку и перезагрузить, чтобы преобразовать скетч в кодировку UTF-8. В случае неудачи потребуется удалить неизвестные символы вручную, чтобы избавиться от этого предупреждения.

    "Arial_14.h" содержит неизвестные символы. Если этот код был создан в более старой версии Arduino IDE, попробуйте использовать Инструменты -> Исправить кодировку и перезагрузить, чтобы преобразовать скетч в кодировку UTF-8. В случае неудачи потребуется удалить неизвестные символы вручную, чтобы избавиться от этого предупреждения.

    "Arial_16.h" содержит неизвестные символы. Если этот код был создан в более старой версии Arduino IDE, попробуйте использовать Инструменты -> Исправить кодировку и перезагрузить, чтобы преобразовать скетч в кодировку UTF-8. В случае неудачи потребуется удалить неизвестные символы вручную, чтобы избавиться от этого предупреждения.

    "Arial_16_i.h" содержит неизвестные символы. Если этот код был создан в более старой версии Arduino IDE, попробуйте использовать Инструменты -> Исправить кодировку и перезагрузить, чтобы преобразовать скетч в кодировку UTF-8. В случае неудачи потребуется удалить неизвестные символы вручную, чтобы избавиться от этого предупреждения.

    "Arial_24.h" содержит неизвестные символы. Если этот код был создан в более старой версии Arduino IDE, попробуйте использовать Инструменты -> Исправить кодировку и перезагрузить, чтобы преобразовать скетч в кодировку UTF-8. В случае неудачи потребуется удалить неизвестные символы вручную, чтобы избавиться от этого предупреждения.

    "Arial_24_i.h" содержит неизвестные символы. Если этот код был создан в более старой версии Arduino IDE, попробуйте использовать Инструменты -> Исправить кодировку и перезагрузить, чтобы преобразовать скетч в кодировку UTF-8. В случае неудачи потребуется удалить неизвестные символы вручную, чтобы избавиться от этого предупреждения.

    Это - результат работы конвертера шрифтов (см. топик 5 этой ветки - шрифтов можно наделать дофига и больше!!!). Использовать "Инструменты -> Исправить кодировку и перезагрузить" не рекомендую - убъете русский текст в файле RemoteControl.ino. Если сильно достает - удалите кракозябры из файлов Arial_10_i.h, Arial_14.h, Arial_16.h и т.п. по образу и подобию Arial_10.h.

    Однако эти предупреждения компилятору совсем не мешают
     

    Вложения:

  12. 7fks

    7fks Новичок

    Сообщения:
    2
    Симпатии:
    0
    Приветствую.
    Никак не могу разобраться с программой fontcreator из 5-ого поста.
    1. Java 8... установлена
    2. Скачал по ссылке:
    3. Распаковал архив и запустил gradlew.bat (он там чо-то наколдовал в командной строке и закрылся)
    4. Файл fontcreator.bat нигде не появился. После чтения товарища arcao (создатель проги) Added download section · arcao/esp8266-oled-ssd1306-font-creator@129b59b , понял что в папке с прогой должна появиться папка build и в ней install\fontcreator. У меня этого не появилось (пробовал на 2-ух ПК windows 7 и 10).
    5. Сам создал путь, скачал архив zip arcao/esp8266-oled-ssd1306-font-creator и распаковал в build/install/fontcreator/
    Собственно вопрос, куда в файле fontcreator.bat прописать команду -o Arial_10.h -c cp1251 -s 10 Arial
     
  13. Vsevolod61

    Vsevolod61 Новичок

    Сообщения:
    5
    Симпатии:
    1
    Дня доброго.
    В файле fontcreator.bat ничего не прописывайте.
    Во вложении - архив с моим каталогом fontcreator.
    Там в ...\fontcreator\bin лежит файл fontcreator_1.bat . Откройте - там все понятно.
    Т.е. ключи -o Arial_10.h -c cp1251 -s 10 Arial являются параметрами файла fontcreator.bat.
    Заголовочные файлы с фонтами получите в том-же каталоге, из которого запускали fontcreator_1.bat
    Естественно и fontcreator.bat и fontcreator_1.bat должны находится в одном каталоге.
    Успехов.
     

    Вложения:

    • fontcreator.rar
      Размер файла:
      100,4 КБ
      Просмотров:
      5
  14. Vsevolod61

    Vsevolod61 Новичок

    Сообщения:
    5
    Симпатии:
    1

    Причесал комменты в пакетном файле - см. вложение, там расписаны варианты параметров строки вызова.
     

    Вложения:

  15. 7fks

    7fks Новичок

    Сообщения:
    2
    Симпатии:
    0
    @Vsevolod61, спасибо, всё получилось.
    До этого пол дня сидел - не разобрался.
    Сейчас немного забуксовал: в образовавшемся файле нового шрифта потребовалось заменить char на uint8_t

    2018-12-13 23-38-50.JPG
     
  16. Vsevolod61

    Vsevolod61 Новичок

    Сообщения:
    5
    Симпатии:
    1
    Не за что.
    А вот, что в описании шрифта char обязательно меняется на uint8_t это я забыл написать. Вам спасибо за дополнение.
    Успехов.
     
  17. VLT

    VLT Новичок

    Сообщения:
    10
    Симпатии:
    0
    Всем доброго вечера/ночера.
    Нашел несколько очень мелких шрифтов (TinyText + MiniText + 3Text by RhythmLynx) - но в виде спрайтов. Есть ли человеческий способ сделать из них шрифт для SSD1306. Спасибо.
     

    Вложения:

    • sprites.zip
      Размер файла:
      4,4 КБ
      Просмотров:
      2
  18. aidar_i

    aidar_i Новичок

    Сообщения:
    2
    Симпатии:
    0
    Vsevolod61, спасибо, за Ваши наработки! На первом варианте с utf8rus (на второй у Вас большой комментарий, не стал разбираться, я в кодах не программирую) собрал библиотеку для печатания кириллицы.
    Собрал все шрифты кириллицы (с обоих вариантов) в одну папку OLEDDisplayFonts_rus (родные выкинул), вставил Ваш измененный https://esp8266.ru/forum/attachments/oleddisplay-h.6780/, еще подправил то, что просил ардуино иде. И все прекрасно работает, с первого раза. Вставил в свой проект ESP8266 RADIO.
    Сделал пользовательский блок для программы Работа ESP8266 c дисплеями OLED. -
    Выложу для начинающих библиотеку.
    Добавил пример SSD1306Cyrillic_text в библиотеку.
     

    Вложения:

  19. aidar_i

    aidar_i Новичок

    Сообщения:
    2
    Симпатии:
    0
    7fks, не смог запустить fontcreator, пытаюсь ,как в сообщениях выше, не получается. Не сможете описать последовательность установки и запуска программы.
     

Поделиться этой страницей