
Как уместить 26 типов виджетов, RTL и веб‑сокет в килобайты флеша ESP32 — и при чём тут ИИ
ZiyaraGo 15 минут назад Как уместить 26 типов виджетов, RTL и веб‑сокет в килобайты флеша ESP32 — и при чём тут ИИ Простой 4 мин 774 DIY или Сделай сам Ненормальное программирование * C++ * Обзор Из песочницы Каждый мой...
Anthropic — What company has the best second artificial intelligence model at the end of June?
Вот важная новость с фронта ИИ: ZiyaraGo 15 минут назад Как уместить 26 типов виджетов, RTL и веб‑сокет в килобайты флеша ESP32 — и при чём тут ИИ Простой 4 мин 774 DIY или Сделай сам Ненормальное программирование * C++ * Обзор Из песочницы Каждый мой проект на ESP32 заканчивался одинаково: микроконтроллер готов, датчики читаются, реле щёлкают — а дальше надо руками писать HTML, CSS, JS и протокол поверх веб‑сокета, чтобы увидеть пару графиков в браузере. На третий раз я решил, что хватит, и сделал библиотеку RisalDash: интерфейс описывается на C++ в несколько строк, а весь фронтенд и протокол генерируются сами и отдаются самим контроллером. gauge ("Voltage", &volts, 0, 14, "V dash.
chart ("Temperature", &temp, "C dash. toggle("Pump", &pump, (bool on){ digitalWrite(PUMP, on); });dash. begin(); // сохранённый Wi-Fi → подключиться; первый запуск → captive-порталПод катом — два сюжета.
Технические детали
Первый инженерный: как линкер помогает уместить 26 типов виджетов в килобайты и почему дашборд работает полностью офлайн. Второй честный: библиотеку я спроектировал сам, а большую часть кода написал в паре с ИИ под жёсткие лимиты памяти — расскажу, где это сработало, а где модель галлюцинировала и её приходилось ловить. Почему не Blynk / ESPUI— Blynk — это облако.
Мне нужен был дашборд, который работает без интернета и без чужого сервера. — ESPUI — ближе по духу (UI на самой плате), но визуально это «админка из 2010-х», и набор виджетов ограничен. Хотелось: дизайн «как в приложении», полностью офлайн, real‑time, и чтобы добавление виджета было одной строкой — а не правкой HTML‑шаблона.
Идея Zero‑Waste: платить только за то, что используешьГлавное ограничение, которое я себе поставил: ничего лишнего не должно попадать во флеш. Если в скетче нет графика — в бинарнике не должно быть ни строчки CSS/JS графика. Реализация опирается на то, как линкер выбрасывает мёртвый код (-ffunction-sections -fdata-sections + --gc-sections, в Arduino‑тулчейне это включено).
Отраслевые последствия
Каждый тип виджета — отдельный класс со своими статическими PROGMEM‑строками CSS и JS. Пока виджет не инстанцирован, на него нет ссылок — и линкер выкидывает и класс, и его строки. Замерил на ESP32 (Arduino), прирост флеша от первого использования каждого типа над голым ESPAsyncWebServer:| Виджет | +флеш | Виджет | +флеш led | ~1.
4 КБ |Второй и последующие экземпляры того же типа — это уже единицы байт (объект + указатель). Неиспользуемый тип — ровно 0 байт. Это и есть весь смысл.
Событие, по словам экспертов, усилит конкуренцию в сфере ИИ.





