diff --git a/pump_controller_8_2_OLED_DONE/README.md b/pump_controller_8_2_OLED_DONE/README.md index cd3ea0e..71de6c0 100644 --- a/pump_controller_8_2_OLED_DONE/README.md +++ b/pump_controller_8_2_OLED_DONE/README.md @@ -12,7 +12,8 @@ | Файл | Назначение | |---|---| -| `pump_controller_8_2_OLED_DONE.ino` | Весь прошивочный код (single-file Arduino sketch) | +| `pump_controller_8_2_OLED_DONE.ino` | Логика прошивки | +| `web_page.h` | HTML веб-панели в PROGMEM (см. 7.7 — вынесен не для красоты) | | `README.md` | Техническая документация (этот файл) | | `MANUAL.md` | Руководство пользователя / монтажника | | `docs/specs/` | Согласованные проектные решения по крупным изменениям | @@ -465,6 +466,21 @@ Wi-Fi настройки из `/settings.json` не затрагивает, и Nasosnaya_1` с красным кружком. Вкладка, забытая в фоне на телефоне, продолжает сигналить, не требуя переключения на неё. +### 7.7 Почему разметка лежит в отдельном файле + +`web_page.h` вынесен не ради опрятности, а вынужденно. Генератор прототипов +Arduino не понимает сырые строковые литералы (`R"=====( ... )====="`): он находит +внутри JavaScript строку `function draw(d){`, принимает её за определение функции +C++ и вставляет в начало файла прототип `function draw(d);`. Сборка падает с +`error: 'function' does not name a type`, причём директивы `#line` показывают +ошибку на строке внутри HTML. + +Заголовочные файлы препроцессор не сканирует, поэтому страница живёт там. + +Важное следствие для проверки: обычный `g++ -fsyntax-only` по `.ino` эту ошибку +**не покажет** — он компилирует файл как обычный `.cpp`, минуя препроцессор +Arduino. Проверять сборку нужно через `arduino-cli` (раздел 11.1). + ### 7.6 Доступ Аутентификации нет: любой в той же сети может сбросить Wi-Fi, подменить адрес @@ -556,14 +572,29 @@ ALARM:ON BACKUP:ON <- состояние выходов --- -## 11. Сборка +## 11. Сборка и прошивка + +Плата в IDE: **LOLIN(WEMOS) D1 ESP-WROOM-02**, а не `D1 R2 & mini`. У WROOM-02 +модуль на 2 МБ, и только у этой платы в списке есть нужные варианты `2MB (...)`. +`Flash Size` по умолчанию для неё — `2MB (FS:64KB OTA:~992KB)`, он и используется. + +`arduino-cli` отдельно ставить не нужно, он идёт внутри Arduino IDE: ```bash -arduino-cli compile --fqbn esp8266:esp8266:d1_mini pump_controller_8_2_OLED_DONE.ino +"C:/Program Files/Arduino IDE/resources/app/lib/backend/resources/arduino-cli.exe" compile --fqbn esp8266:esp8266:d1_wroom_02:eesz=2M64 --warnings all . ``` ```bash -arduino-cli upload -p COM3 --fqbn esp8266:esp8266:d1_mini pump_controller_8_2_OLED_DONE.ino +"C:/Program Files/Arduino IDE/resources/app/lib/backend/resources/arduino-cli.exe" upload -p COM7 --fqbn esp8266:esp8266:d1_wroom_02:eesz=2M64 . ``` -Монитор порта: 115200 бод. +Монитор порта: **115200 бод**. Если заливка падает с +`could not open port 'COM7': PermissionError`, порт держит открытый монитор +Arduino IDE — закройте его. + +### 11.1 Проверять сборку только через arduino-cli + +Скетч нельзя надёжно проверить, скормив `.ino` напрямую в `g++`: так +пропускается препроцессор Arduino, а именно он ломается на некоторых +конструкциях (раздел 7.7). Ошибка, которую `g++ -fsyntax-only` не показывает, +на реальной сборке останавливает всё. diff --git a/pump_controller_8_2_OLED_DONE/pump_controller_8_2_OLED_DONE.ino b/pump_controller_8_2_OLED_DONE/pump_controller_8_2_OLED_DONE.ino index 7417c93..ba581bc 100644 --- a/pump_controller_8_2_OLED_DONE/pump_controller_8_2_OLED_DONE.ino +++ b/pump_controller_8_2_OLED_DONE/pump_controller_8_2_OLED_DONE.ino @@ -534,155 +534,14 @@ void updatePumpState(Pump &p) { // ============================================================ // ВЕБ-ПАНЕЛЬ // ============================================================ -// Страница статическая и лежит целиком во флеше (PROGMEM). Состояние в неё -// подставляет JS, забирая /status и /config. Раньше HTML собирался строкой -// в куче на каждый запрос (~14 КБ при ~40 КБ свободной кучи) — теперь куча -// не тратится вообще, а ввод в форме не сбрасывается при обновлении данных. -// -// Дизайн — световое табло аварийной сигнализации, а не дашборд: главный ответ -// («есть подача или нет») занимает верх страницы и читается с расстояния, -// остальное подчинено ему. Цвета по конвенции сигнальных ламп: зелёная -// «работа», ЖЁЛТАЯ «внимание» для резерва (резерв в работе — предупреждение, -// система ещё справляется), красная «авария» только при остановке основных. -// -// Веб-шрифты намеренно не подключаются: сеть на объекте не разрешает внешние -// имена, и @import с Google Fonts там не грузится никогда. Характер задан -// контрастом кеглей, а не гарнитурой. - -static const char PAGE_HTML[] PROGMEM = R"=====(
- -