fix(build): вынести HTML в web_page.h - сборка через arduino-cli падала
Генератор прототипов Arduino не понимает сырые строковые литералы: внутри
JS он нашёл "function draw(d){" и "function poll(){", принял их за
определения функций C++ и вставил для них прототипы в начало файла.
Сборка падала с "error: 'function' does not name a type", а директивы
#line показывали ошибку на строках внутри HTML.
Заголовочные файлы препроцессор не сканирует, поэтому страница переехала
в web_page.h. Тот же приём используется в соседнем проекте.
Ошибка не всплывала раньше потому, что я проверял скетч через
g++ -fsyntax-only по .ino: так файл компилируется как обычный .cpp и
препроцессор Arduino не участвует. Проверять сборку нужно arduino-cli,
это записано в README 11.1.
Прошито и проверено на железе (COM7, LOLIN D1 ESP-WROOM-02, 2MB FS:64KB):
размеры флеша совпадают, LittleFS монтируется, ранее заданные через панель
настройки пережили перепрошивку, Wi-Fi поднимается, датчики читаются.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
@@ -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` не показывает,
|
||||
на реальной сборке останавливает всё.
|
||||
|
||||
Reference in New Issue
Block a user