Преамбула
Как‑то на просторах интернета мне попалась интересная вещь, а именно — микроконтроллер ESP-32. Ранее я о нем слышал и даже хотел собрать себе простенькую «мыльницу». До этого тыкал ардуино (вспомнил о нем потому, что принцип программирования у них схож). В то время меня это не сильно зацепило, поэтому я бы и в этот раз прошел мимо, если бы не одно but... (Решил добавить немного междунородности в пост 👽).
На данный момент я изучаю JS и было дикое желание практиковаться. Писать код в виртуальной среде круто, но и с железками работать мне нравится. Ехх..вот бы можно было писать софт для микроконтроллера на JS...
Погодите...
Дак такое ведь уже есть! Уже давно все придумано, стоило только ввести правильный вопрос в гугл (Яндекс sore)
В общем — это интерпретатор Espruino https://www.espruino.com/
Амбула.

Поехал — купил.
Подключил — прошил.
Короче, слово за слово, Hello об World, начал думать, что именно за сущность я хочу получить.
Решил начать с простого, с задержкой выводить на дисплей приятные(мотивационные) пожелания на день. (Массив фраз, который просто отображается в рандомном порядке)
Проблема №1
Не получилось найти автоматически библиотеку для подключения моего дисплея, но есть две новости:
Хорошая — мы с нее ведро раков сняли (чуть анекдотов вам 🪗)
после танцев с бубном и ручным подключением библиотеки запустить дисплей получалось.
Плохая — текст разрезан по горизонтали и перепутан верхняя и нижняя части.
Вот так вот было и у меня

Там на видео понятна проблема:
По итогу все решилось перепрошивкой с оф сайта. прям там я просто нажал 3 кнопки и все само перепрошилось. https://www.espruino.com/Espressif+Flash
Проблема №2
Текст начал выводится, ура! Но тут опять 2 стула (как же удивительно...).
Выводится только Английский. Мне то нужен Русский (Русские есть ?)
Пробовал загружать русский шрифт в сам контроллер и использовать его - не работает. https://www.espruino.com/Fonts
Пробовал загружать сторонние библиотеки, например (компактная библиотека для OLED дисплея 128х64 с кириллицей UTF-8) https://arduino.ru/forum/proekty/asoled-kompaktnaya-biblioteka-dlya-oled-displeya-128kh64-s-kirillitsei-utf-8
Вся загвоздка в том, что Espruino не поддерживает кириллические символы в юникоде (например, «А», «Б»), поскольку Espruino работает с 8-битными строками и использует кодировку, совместимую только с латиницей и символами в пределах диапазона от 0 до 255.
Когда ты передаешь кириллические символы в функцию
drawText
, они не соответствуют никакому из символов в наборе Espruino (который поддерживает только ASCII или ISO8859-1 символы), и поэтому проверка в функции не срабатывает. В результате, функция не может найти нужные битмапы для кириллических символов, и текст не выводится.
Пришлось облазить очень много сайтов, форумов, перешерстить весь ютюб - безрезультатно.
А как же ИИ ?
Пробовал и его, но чат gpt сразу сказал: «Старина...иди нафиг».
Но все таки, стоит отдать должное, он предложил вариант из которого в будущем и появится моя библиотека, а именно он предложил создать буквы как изображения, а потом склеить их в слова, а слова в предложения и тд. Эта информация есть и на офсайте
https://www.espruino.com/Image+Converter
Выглядело это вот так (на примере буквы Б):
I2C1.setup({ scl: D22, sda: D21, bitrate: 400000 });
var font = {
width: 12,
height: 16,
characters: "Б",
data: String.fromCharCode(
0b111111111111, // ████████████
0b100000000000, // █
0b100000000000, // █
0b100000000000, // █
0b100000000000, // █
0b100000000000, // █
0b100000000000, // █
0b111111111110, // ███████████
0b100000000010, // █ █
0b100000000010, // █ █
0b100000000010, // █ █
0b100000000010, // █ █
0b100000000010, // █ █
0b100000000010, // █ █
0b111111111110, // ███████████
0b000000000000 //
)
};
function start() {
g.clear();
g.setFontCustom(font.data, font.characters.charCodeAt(0), font.width, font.height);
g.drawString("Б", 10, 10);
g.flip();
}
let g = require("SH1106").connect(I2C1, start, {
height: 64,
width: 128,
address: 0x3C
});
Но и тут по началу буква просто выводилась лежащей на боку. Эхх, если честно, уже не помню как именно я это пофиксил, но букву я перевернул и буква вывелась на дисплей - это была победа! Хоть и маленькая, но Victori.
Суть
Вы могли начать читать этот текст отсюда, так как именно тут я понял что можно отдельно задать каждой букве ее закрашенные пиксели и поместить все это в массив или объект, который потом вывести в отдельную библиотеку.
Грубо говоря мне придется написать библиотеку кириллицы. Если ее нет в интернете - сделай сам!
На следующий день библиотека была написана, но шрифт был мелковат (5 на 5), увеличил его до 7 на 7.
Как же она работает?
Мы пишем нашу фразу на латинице, по специальному словарю.
Изначально некоторые буквы ( Ш-Я-Ю...) писались с помощью 2-ух английских букв (Sh, Ya..), это усложняло и местами ломало работу скрипта и программы.

Поэтому было решено переписать словарь, чтобы каждой Русской букве соответствовала одна Английская буква\символ.
Вот что получилось:
{
"A": "А", "B": "Б", "V": "В", "G": "Г", "D": "Д", "E": "Е", "E": "Ё",
"J": "Ж", "Z": "З", "I": "И", "Y": "Й", "K": "К", "L": "Л", "M": "М",
"N": "Н", "O": "О", "P": "П", "R": "Р", "S": "С", "T": "Т", "U": "У",
"F": "Ф", "H": "Х", "C": "Ц", "^": "Ч", "W": "Ш", "%": "Щ",
"&": "Ы", "'": "Ь", "#": "Э", "Q": "Ю", "@": "Я"
}
Далее, я сделал JS файл который меняет символы в словах согласно библиотеке выше. Теперь, мы можем запросить 100 фраз у чата gpt на русском, а после загрузить их в наш файл, чтобы формировать наш итоговый массив фраз написаный трнаслитом.

Что мы получили по итогу ?


Я потратил на это около 2-3 вечеров и в процессе поиска информации и написания кода, мое настроение менялось с аццко-горящего, на дофомино-эндорфиновое.
У меня все получилось.
Да, пришлось написать все самому и конечно это не эталонное решение (Скорее этиловое😅). Куда важнее сам путь и опыт который я получил, ведь буквально через неделю, я отложил этот проект до лучших времен.
P.S.
Рад поделиться своим творением, надеюсь хоть кому-нибудь я помогу!
Спасибо, что дочитали, долго не мог сесть за написание статьи, но все же, пересилив себя и открыв заметки — она была написана за час. Невозможного не существует, все ограничения только у тебя в голове, видишь цель — не видь препятствий... и.т.д (Это я уже чуть заигрался).

Дос!
Ключевые слова для поиска: библиотека для отображения Русских букв или библиотека русского шрифта/кириллицы для Эспруино Espruino ESP-32.
Саму библиотеку, скрипт для перевода и драйвер можно скачать здесь.