Прошивальщик MeshCore и PosadMesh
Страница для прошивки плат прямо из браузера: два набора прошивок, запись через Web Serial (esptool-js), опция полного стирания чипа.
Состав
| Файл | Назначение |
|---|---|
index.html |
разметка страницы: два раздела, пояснения по форматам, панель прошивки |
style.css |
оформление |
app.js |
список прошивок, выбор файла, подключение и запись через esptool-js |
index.json |
список релизов и файлов, собирается скриптом из API Gitea |
vendor/esptool-js/bundle.js |
esptool-js 0.5.4 (ESM), работает без интернета |
Список прошивок берётся из релизов Gitea:
shade/MeshCore— форк обычного MeshCore для устройств с дисплеем (раздел «MeshCore — наш форк»);shade/MeshCore-Posadmesh— MQTT-прошивки PosadMesh (раздел «PosadMesh — MQTT-репитеры»).
Обновление списка прошивок
uv run python posadmesh-tools/build-flasher-index.py
Скрипт читает релизы обоих репозиториев через API Gitea и перезаписывает index.json в этой папке.
Для приватных репозиториев нужен GITEA_TOKEN; текущие репозитории публичные.
После публикации релиза MeshCore манифест обновляется автоматически: скрипт
ci/update-flasher.ps1 в репозитории MeshCore пересобирает index.json, делает на сервере
бэкап прежнего, выкладывает новый в /var/www/flasher/index.json и проверяет, что страница
и файлы отдаются (/flasher/index.json, /flasher/fw/... — оба должны отвечать 200).
Он же вызывается из ci/build-local.ps1 -Publish, то есть сразу после публикации релиза.
Локальный запуск
python -m http.server 8899 --directory posadmesh-tools/flasher
Открыть http://127.0.0.1:8899/. localhost считается защищённым контекстом, поэтому Web Serial
работает и локально.
Размещение на сервере
Статика лежит в /var/www/flasher, страница открывается как https://meshinfo.ru/flasher/.
Файлы прошивок не копируются: nginx проксирует их из релизов Gitea, поэтому для браузера всё
выглядит как один origin и fetch бинарников не упирается в CORS.
# в server-блоке meshinfo.ru, ВЫШЕ правил Wiki.js
location /flasher/fw/ {
rewrite ^/flasher/fw/([^/]+)/([^/]+)/(.+)$ /shade/$1/releases/download/$2/$3 break;
proxy_pass https://git.meshinfo.ru;
proxy_set_header Host git.meshinfo.ru;
proxy_ssl_server_name on;
proxy_set_header Accept-Encoding "";
proxy_buffering off;
proxy_read_timeout 300s;
add_header Cache-Control "public, max-age=86400";
}
location /flasher/ {
alias /var/www/flasher/;
index index.html;
try_files $uri $uri/ /flasher/index.html;
}
Проверка и перезагрузка:
nginx -t && systemctl reload nginx
Диагностика: curl -sI https://meshinfo.ru/flasher/ и
curl -sI 'https://meshinfo.ru/flasher/fw/MeshCore-Posadmesh/repeater-mqtt-v2026.10.0/<файл>.bin'.
Что умеет страница
- выбор платы поиском, список файлов с размером и форматом;
- запись ESP32-прошивок:
-merged.binпо адресу0x0, обычный.binпо адресу0x10000; - галочка «Стереть флеш полностью перед прошивкой» и отдельная кнопка «Только стереть»;
- определение чипа при подключении, журнал операций, прогресс, кнопка перезагрузки;
- для nRF52 (
.uf2,.zip) — скачивание и инструкция: копирование на UF2-диск или DFU через nRF Connect.
Ограничения
- прошивка из браузера возможна только для ESP32: nRF52 требует UF2-диска или DFU;
- нужен Chrome или Edge 89+ и HTTPS (или
localhost); - адрес
0x10000для обычного.binсоответствует стандартной таблице разделов MeshCore.