Files
MeshCore-Posadmesh/posadmesh-tools/flasher

Прошивальщик 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.