Сергиев Посад · LoRa 868 МГц · без интернета и сотовой связи

Сообщество MeshCore
в Сергиевом Посаде

Мы дорабатываем прошивки MeshCore, собираем репитеры и узлы на ESP32 и nRF52 с модулями SX1262 и Ebyte E22 — и строим локальную mesh-сеть, которая работает там, где не работает вообще ничего.

868 МГц
рабочий диапазон LoRa
4
трека релизов прошивок
109
целей сборки MQTT-прошивок
0
серверов и абонплаты в эфире

Что такое MeshCore

Сеть из радиостанций, которая сама находит дорогу

MeshCore — лёгкий стек многошаговой маршрутизации для LoRa-радио. Сообщение ищет путь один раз, а дальше идёт по нему адресно. Эфир «кричат» только специальные устройства — репитеры, клиентские узлы молчат и не забивают канал.

Companion

Личный узел

«Телефон» в сети: подключается к смартфону по Bluetooth или USB и работает как мессенджер. Чужие пакеты не повторяет — экономит батарею.

Repeater

Скелет сети

Ретранслятор на крыше, вышке или балконе. Только пересылает пакеты и даёт покрытие на районы и трассы. Настраивается по USB или удалённо по радио.

Room Server

Общая «доска»

Хранит историю групповых каналов и отдаёт пропущенное тем, кто вернулся в зону связи. Полезно для дежурств, походов и аварийных сценариев.

Advert вместо «привета вслепую». Узел периодически объявляет о себе — имя, позиция и публичный ключ с подписью. Есть объявления zero hop (слышат только соседи) и flood (подхватывают и повторяют репитеры всей сети).

Чем занимается сообщество

Три направления работы

🛠️

Дорабатываем MeshCore

Свой форк оригинальной прошивки: драйверы дисплеев, русский язык на экранах, темы, меню уведомлений, настройка радио прямо с устройства, свои варианты плат.

Что именно изменено →
📡

Развиваем PosadMesh

MQTT-репитеры: аплинк телеметрии, локальная веб-панель, Wi-Fi, ESP-NOW и MQTT-мосты, история метрик в PSRAM и на SD-карте, свой CLI.

Что именно изменено →
🔌

Делаем инструменты

Браузерный прошивальщик, локальные и серверные сборки релизов, документация и вики, помощь новичкам с железом и первым узлом.

Открыть прошивальщик →

Форк MESHINFO · base 1.17.1 · версия форка 0.1.0

Основные изменения в MeshCore

За основу взята оригинальная прошивка meshcore-dev/MeshCore: архитектура, протокол, роли узлов и большинство вариантов плат остаются как в оригинале. Форк добавляет доработки под свои устройства — Heltec T096, ProMicro (SSD1306/SH1106), Heltec v3 и v4, LilyGo T-Deck и T-Echo Card, Heltec T114/T190, ThinkNode M9, Meshadventurer на E22.

Дисплеи и драйверы

Драйвер выбирается значением DISPLAY_CLASS в platformio.ini варианта, а не правкой target.h. Добавлен собственный драйвер SH1106Display и сборка ProMicro_SH1106_companion_radio_ble — та же плата, но с SH1106 вместо SSD1306.

Русский язык на экранах

Флаг -D OLED_RU=1. Строка UTF-8 проходит через DisplayDriver::translateUTF8ToBlocks() (UTF-8 → CP1251) и рисуется шрифтом glcdfont6x8.h с картой CP1251. Поддержаны SSD1306, SH1106, ST7735 и ST7789LCD; для ST7789 (Heltec T114/T190, ThinkNode M9) сгенерированы кириллические ArialMT_Plain_16_RU и ArialMT_Plain_24_RU.

Темы цветных TFT в рантайме

Пять палитр — amber, teal, signal, neon, classic — лежат в общей таблице src/helpers/ui/ColorThemes.h и работают и на ST7735, и на ST7789LCD. В ui-new есть страница THEME с живым предпросмотром; выбор сохраняется в prefs, пересборка не нужна.

Стартовый экран

Показывает версию MeshCore, строку MESHINFO v0.1.0 (версия форка, макрос MESHINFO_VERSION) и сайт meshinfo.ru. Дата сборки убрана — она только путала рядом с версией. Правка внесена во все стартовые экраны: companion/ui-new, репитер, room server и sensor.

Настройка радио прямо с устройства

Страница RADIO в ui-new (длинное нажатие): частота шагом 25 кГц, ширина полосы, SF, CR и мощность передатчика. Значения применяются к радио сразу, в память пишутся по пункту Save & exit; через 5 минут простоя меню закрывается без сохранения, а входящие сообщения не всплывают поверх него.

Меню уведомлений

Popups, Wake screen (запретить автовключение дисплея по входящему), Alerts (звук + вибрация / только звук / только вибрация / выключено), Channels (для каждого канала режим popup / silent / off), Quiet hours с часовым поясом и Unread для накопленных сообщений. В тихие часы глушатся звук, вибрация и всплытия, но сообщения не теряются.

Свои варианты плат

generic-e22 (E22-900M30S и E22-400M30S), meshadventurer (SX1262 / SX1268 и E22P 433M30S / 868M30S), thinknode_m9, gat562_*, а также сборка ProMicro под SH1106.

Сборка и релизы на своём Gitea

Workflow .gitea/workflows/firmware.yml собирает выбранный набор устройств через build.sh (запуск только вручную). Основной способ выпуска — локальная сборка ci/build-local.ps1 с публикацией файлов в релиз Gitea: на VPS одно ядро, сервер только принимает готовые образы.

Синхронизация с оригиналом. Раздел отличий живой: если правка меняет поведение, которое есть в upstream, это отмечается, чтобы при обновлении из оригинала было видно, что нельзя затирать автоматическим мержем.

PosadMesh · база upstream + транспорт, телеметрия и веб

Основные изменения в PosadMesh

PosadMesh — форк проекта EastMesh, который, в свою очередь, основан на официальной прошивке MeshCore. Ядро — mesh-стек, радио, протокол и работа с платами — остаётся upstream-кодом; PosadMesh добавляет поверх него транспорт, телеметрию и веб-интерфейс. Проект ориентирован на работу с meshcoretel.ru.

Отличия от upstream MeshCore
Областьupstream MeshCorePosadMesh
Транспорт нет MQTT; репитер работает только по радио и через последовательный порт MQTT-аплинк: курируемый брокер meshcoretel и опциональный собственный (TCP или WSS по пути /mqtt); публикация статуса, пакетов и raw-данных
MQTT-мост нет передача raw-пакетов mesh между репитерами через ваш peer-брокер (трек repeater-mqtt-bridge)
Wi-Fi нет Wi-Fi на репитерах: подключение, энергосбережение, watchdog шлюза, автопереподключение, настройка NTP, команды wifi.*
Веб-интерфейс нет локальная HTTPS-панель: вход по паролю администратора, CLI по белому списку, настройки репитера / радио / MQTT, регионы, чёрные списки, OTA, свой TLS-сертификат, светлая и тёмная темы
Телеметрия нет история метрик в PSRAM и архив на SD: батарея, загрузка ядра, память, пакеты, ошибки, уровень сигнала и шума, датчики, GPS; страница /stats с графиками и списком соседей
CLI базовый набор MeshCore дополнительно mqtt.*, wifi.*, web.*, bridge.*, blacklist path|chan, region, stats-*, time и time.force, режим Ghost Node, лимит пересылки flood, отчёт о батарее платы, управление вентилятором T-Beam 1W
Сборки companion (USB/BLE), repeater, room server, sensor только MQTT-таргеты: *_repeater_mqtt, *_repeater_mqtt_espnow, *_repeater_mqtt_bridge, *_repeater_bridge_espnow
Платы базовый список MeshCore добавлены свои варианты: Meshadventurer, самодельные ESP32-S3 + E22, Xiao S3 + LoRa2021F33, RAK3112, Station G2/G3, ThinkNode и другие

Ключевые возможности

MQTT-аплинк

Публикация JSON-телеметрии в курируемый брокер meshcoretel и при желании во второй, собственный брокер. Топики вида meshcore/<iata>/…, настройки mqtt.iata, mqtt.owner, mqtt.email.

MQTT-мост mesh

Пересылка raw-пакетов mesh между репитерами через ваш peer-брокер: топик meshcore/bridge/packets, магическое значение 0xC03E, контрольная сумма Fletcher и XOR-шифрование общим bridge.secret. Обнаружение дубликатов не даёт пакетам зацикливаться.

ESP-NOW мост

Локальный мост между соседними репитерами с разными радиоконфигурациями (разная полоса, SF). Это не WAN-туннель через интернет: узлы должны слышать друг друга по радио.

Мастер настройки на устройстве

Двойное нажатие кнопки из экрана состояния открывает меню — компьютер и телефон не нужны. Координаты в формате xx.xxxx yy.yyyy, частота как 868.731 MHz, полоса как 062.50 kHz, CR, SF, мощность TX, пересылка пакетов, размер хэша пути, интервалы advert, лимит flood, внизу — Save & exit. Значения применяются через тот же CommonCLI, что и последовательный порт.

Треки релизов

ТрекКогда нуженСуффикс файла
repeater-mqttСтационарный репитер с Wi-Fi и MQTT-аплинком — видимость в брокере и на карте*_repeater_mqtt
repeater-mqtt-espnowОдин репитер делает и MQTT-аплинк, и локальный ESP-NOW мост*_repeater_mqtt_espnow
repeater-mqtt-bridgeПересылка raw-пакетов mesh между репитерами через свой MQTT-брокер*_repeater_mqtt_bridge
repeater-bridge-espnowТолько локальный ESP-NOW мост, без MQTT и веб-панели*_repeater_bridge_espnow

Исправлено по ходу разработки

  • set mqtt.meshcoretel on|off не срабатывал: обработчик сравнивался со строкой set mqtt.mqtt.meshcoretel .
  • setEndpointEnabled маскировал сохранённую маску брокеров значением 0x07 и терял бит собственного брокера.
  • На странице логина веб-панели незакрытый тег </div съедал подсказку про пароль администратора.
  • Разбор дерева регионов срезал завершающую букву F в имени региона — region allowf, region denyf и region remove не работали.
  • Сборка ESP-NOW моста на ESP32-C6: в ESP-IDF 5 у колбэка приёма другой первый параметр и тип длины — колбэк адаптирован под обе версии IDF.
  • Групповые команды сборки не собирали ничего: устаревшие суффиксы окружений и символ \r в именах на Windows.
  • Веб-панель: остановлена фрагментация heap на HTTPS, добавлены самовосстановление и счётчики heap.
Что не меняется. Поведение mesh-сети, радиоконфигурации, протокол и совместимость с MeshCore. Upstream-код сохраняется в репозитории и синхронизируется из meshcore-dev/MeshCore.

Наш инструмент

Прошивальщик устройств в браузере

Мы сделали страницу, которая прошивает платы прямо из браузера по USB — без PlatformIO, Python и командной строки. Список прошивок собирается автоматически из релизов Gitea, а запись идёт через Web Serial (esptool-js).

meshinfo.ru/flasher

Выбрал плату → нажал «Прошить»

  • Два набора прошивок отдельными списками: «MeshCore — наш форк» и «PosadMesh — MQTT-репитеры», с пояснением, чем они отличаются.
  • Выбор платы поиском: у каждого файла видны роль, формат и размер.
  • Запись ESP32 через Web Serial: -merged.bin пишется по адресу 0x0, обычный .bin — по 0x10000 с сохранением настроек.
  • Полное стирание: галочка «Стереть флеш полностью перед прошивкой» и отдельная кнопка «Только стереть».
  • Обратная связь: определение чипа при подключении, журнал операций, прогресс, кнопка «Перезагрузить».
  • nRF52: файлы .uf2 и .zip скачиваются с инструкцией — копирование на UF2-диск или DFU через nRF Connect.