Карманный ридер на ESP32-C3 Super Mini и OLED 128x64 (SSD1306, I2C). Три кнопки, аккумулятор, файлы хранятся во флеше (LittleFS), загружаются и правятся через веб-страницу по Wi-Fi.
Основан на проекте microReader (AlexGyver), портирован на ESP32-C3.
- Чтение файлов
.txt(большие тексты, потоково, UTF-8, кириллица). - Единый формат шпаргалки
.md: текст, формулы (TeX), таблицы, графики функций и таблиц в одном файле, по одной странице на объект. - Файлы
.tex(только формулы) — оставлены для совместимости. - Рендер TeX-формул со своим шрифтом: дроби, корни, степени и индексы, суммы, интегралы, пределы, греческие буквы, ~90 символов. Переносы по математическим правилам, мелкий шрифт и прокрутка, если формула не влезает.
- Таблицы Markdown с выравниванием и скроллом, графики по формуле
y = f(x)и по таблице значений. - Веб-интерфейс на Settings (GyverLibs): настройки, файловый менеджер со встроенным текстовым редактором, загрузка и скачивание файлов, обновление прошивки по воздуху (OTA).
- Игры: динозавр, тетрис, змейка (доступны без PIN).
- PIN-код при запуске (необязательно).
- Режим левши, регулировка яркости, индикатор заряда, глубокий сон.
- Картинки
.itxt/.h— опционально, отключены по умолчанию (см. «Опции сборки»).
| Назначение | GPIO (по умолчанию) |
|---|---|
| Кнопка ВВЕРХ | 3 |
| Кнопка ОК | 2 |
| Кнопка ВНИЗ | 0 |
| SDA дисплея | 8 |
| SCL дисплея | 9 |
| Измерение батареи (ADC) | 1 |
Кнопки подключаются к земле (внутренняя подтяжка). Напряжение аккумулятора измеряется через делитель 100к/100к (VBAT_DIVIDER). Все пины и пороги заряда — в блоке #define в начале скетча.
Версия ядра ESP32 для Arduino: 2.0.17. Можно использовать и 3.x.x, но программа займет больше места на устройстве
Настройки Arduino IDE:
| Параметр | Значение |
|---|---|
| Board | ESP32C3 Dev Module |
| USB CDC On Boot | Enabled |
| Flash Size | 4MB |
| Partition Scheme | с OTA и приложением 1.9 МБ, либо свой partitions.csv (см. ниже) |
| Core Debug Level | None (экономит флеш) |
| Erase All Flash Before Sketch Upload | Enabled при первой прошивке и при смене разделов |
Библиотеки: Settings (зависимости: GTL, GyverDB, StringUtils, GyverHTTP, BSON, Stamp, Table, StreamIO ставятся автоматически), Saver, GTimer, GyverOLED (_fix), EncButton. Settings распространяется под лицензией GPL-3.0 — учитывайте это при распространении прошивки.
Если прошивка не влезает в раздел приложения, положите рядом со скетчем файл partitions.csv:
# Name, Type, SubType, Offset, Size
nvs, data, nvs, 0x9000, 0x5000,
otadata, data, ota, 0xe000, 0x2000,
app0, app, ota_0, 0x10000, 0x1A0000,
app1, app, ota_1, 0x1B0000, 0x1A0000,
spiffs, data, spiffs, 0x350000, 0xB0000,
Это даёт два слота OTA по 1,7 МБ и 704 КБ под файлы. Таблицу разделов меняют только прошивкой по USB, после этого файлы нужно загрузить заново.
| Где | ВВЕРХ / ВНИЗ | ОК |
|---|---|---|
| Главное меню | выбор файла | клик — открыть, удержание — меню Wi-Fi |
| Главное меню | удержание ВВЕРХ — игры | |
.txt |
листать назад / вперёд | удержание — выход |
.md, .tex |
листать страницы или прокручивать | клик — режим: страницы → верт. скролл → гор. скролл; удержание — выход |
| Экран PIN | менять цифру | клик — следующая цифра; удержание ВВЕРХ — игры |
Если страница не помещается на экране, у края появляются стрелки ▶ ▼ (есть ещё содержимое справа/снизу) и ◀ ▲ (после прокрутки). В углу экрана номер страницы; V / H перед ним показывает режим прокрутки.
Файл делится на секции заголовками ## Название (до 20 букв, кириллица поддерживается). Внутри секции страницы идут в таком порядке:
- Текст — обычные строки, переносятся по словам (21 символ в строке), пустая строка — абзац.
- Формулы — строки
tex: ...(до 5 строк на страницу), синтаксис TeX. - Таблица — строки
| a | b |. Вторая строка|:--|--:|задаёт заголовок и выравнивание::--влево,:-:по центру,--:вправо. - Графики — строки
plot: ..., каждая даёт отдельную страницу.
Строки, начинающиеся с % или //, — комментарии. Курсив, жирный, ссылки и прочая разметка Markdown не поддерживаются сознательно.
plot: y = sin(x); y = cos(x); x = -2*pi..2*pi; y = -1.5..1.5
plot: y = x^2/4 - 2; x = -5..5
plot: table x=1 y=2,3
- До трёх функций на график; линии различаются стилем (сплошная, пунктир, точки).
x = a..bиy = c..d— диапазоны (понимаютpi). Безxберётся-10..10, безy— автомасштаб.plot: tableстроит график по таблице секции:x=N— номер столбца для оси X,y=N[,N,N]— до трёх столбцов для Y (по умолчаниюx=1 y=2). Нечисловые строки (заголовок) пропускаются.- В выражениях:
+ - * / ^, скобки,|x|, функцииsin cos tan asin acos atan sinh cosh tanh exp ln log sqrt abs floor ceil sign, константыpiиe, неявное умножение (2x,3(x+1)).
Готовые примеры лежат в папке с примерами: demo.md (все типы страниц) и fizika.md (практическая шпаргалка).
Поддерживаются: степени и индексы (x_1^2), \frac, \binom, \sqrt[n]{}, \int \iint \iiint \oint, \sum \prod \bigcup \bigcap с пределами, \lim, \underbrace/\overbrace, акценты \vec \hat \bar \dot \ddot \tilde, \text{}, греческие буквы, операторы, отношения, стрелки и логические символы, функции (\sin, \log, …). Неизвестные команды печатаются как текст.
Формула переносится только на верхнем уровне: после отношений (=, <, \leq, \to, …), а при их отсутствии после бинарных операторов (+, -, \cdot, \times), и никогда внутри скобок, дробей, корней и индексов. Если и так не влезло, используется мелкий шрифт, а потом прокрутка.
Удерживайте ОК в главном меню, чтобы открыть меню Wi-Fi, и подключитесь к точке доступа устройства (по умолчанию Reader AP, пароль 00000000; страница открывается автоматически благодаря captive portal, иначе обычно 192.168.4.1) либо включите подключение к вашему роутеру. Адрес страницы показывается на экране устройства. Пока браузер открыт, меню Wi-Fi не закрывается по таймауту.
Настройки применяются сразу при изменении поля, кнопка «Сохранить» не нужна:
- Точка доступа / Подключение к сети — имена и пароли, автоподключение (применяются при следующем запуске Wi-Fi).
- Другое — режим левши, размер сегмента игр, яркость, PIN-код.
- Файлы — кнопка в правом верхнем углу страницы открывает файловый менеджер: загрузка, скачивание, удаление и редактирование текстовых файлов прямо в браузере. Новые файлы
.md,.txt,.texпоявятся в меню устройства после выхода из меню Wi-Fi. - Обновление прошивки (OTA) — в меню страницы.
Кириллица в названиях страниц и текстах — в UTF-8.
Задаётся на веб-странице (4 цифры, пустое поле — выключено), вступает в силу при следующем запуске. Пока PIN не введён, недоступны файлы и меню Wi-Fi; игры доступны без PIN (удержание ВВЕРХ на экране PIN). После неверного ввода растёт пауза (3 с × число ошибок, до 60 с).
PIN — лёгкая защита от случайного просмотра, не шифрование: данные во флеше не зашифрованы, а сервисный режим (запуск с зажатой ВВЕРХ) форматирует файловую систему.
Поворачивает изображение на 180° и меняет кнопки ВВЕРХ/ВНИЗ местами. Применяется сразу при переключении на веб-странице.
В начале скетча:
//#define ENABLE_BITMAPS // раскомментируйте для поддержки картинок .itxt / .hПоддержка картинок вынесена в отдельную вкладку bitmaps.ino и по умолчанию выключена, чтобы экономить флеш. Формат — массив байт {0x.., 0x.., ...} 128x64 (1 КБ). Поддержка .jpg удалена.
.md: секция до 6 КБ, до 40 страниц в файле, до 160 строк в таблице или тексте, до 10 столбцов.- Формула страницы: до 5 строк и до 320 нод разбора.
- Мелкий шрифт (3x5) без кириллицы: таблицы с кириллицей всегда рисуются обычным шрифтом (с прокруткой).