MESHINFO.ru
Меш-сети

Форк MeshCore: как прошить и настроить

Руководство по форку MeshCore от MESHINFO: прошивка устройств, первый запуск, экраны и кнопки, настройка радио, repeater и room server, решение проблем.

Коротко. Это руководство по форку MeshCore от MESHINFO — прошивке для плат с дисплеем. Форк добавляет русский интерфейс, настройку радио прямо с кнопок устройства, меню уведомлений, часы, темы экрана, поиск репитеров и страницу питания. База — MeshCore 1.18.0. Готовые прошивки лежат на meshinfo.ru/flasher, исходники — в git.meshinfo.ru/shade/MeshCore. Инструкция описывает версию MESHINFO v0.2.0.

Что добавлено по сравнению с оригиналом

ОбластьЧто даёт форк
ДисплеиSSD1306, SH1106 (свой драйвер), ST7735, ST7789. В оригинале SH1106 нет
ЯзыкРусский интерфейс: меню, страницы, имена узлов, сообщения
Радио с устройстваСтраница RADIO: частота, полоса, SF, CR и мощность — без телефона и без пересборки
УведомленияМеню Popups / Wake screen / Alerts / Channels / Timezone / Quiet hours
ЧасыВремя и дата на главном экране; часовой пояс задаётся на устройстве
Поиск репитеровСтраница DISCOVERY: кто из репитеров слышит вас и с каким уровнем
ПитаниеСтраница POWER: батарея, коррекция АЦП, перезагрузка и выключение
ТемыПять палитр для цветных TFT с живым предпросмотром и сохранением
ПлатыСвои варианты: generic-e22, meshadventurer, thinknode_m9, gat562_*, ProMicro под SH1106
Стартовый экранВерсия MeshCore, версия форка MESHINFO v0.2.0 и адрес сайта

Всё остальное — протокол, роли узлов, поведение сети — как в оригинальном MeshCore.

1. Что понадобится

  • Плата из поддерживаемых (см. таблицу ниже).
  • Кабель USB с передачей данных. Кабели «только зарядка» — самая частая причина «плата не видна».
  • Chrome или Edge 89+ — только эти браузеры умеют Web Serial. Firefox и Safari не подойдут.
  • Телефон с приложением MeshCore (Android, iOS) — либо веб-клиент для USB-версий прошивки.

Поддерживаемые платы и роли

Платаcompanion (чат)repeaterroom server / sensor
Heltec T096дадада (room server, sensor)
Heltec V3дада—
Heltec V4, V4 TFTдада—
ProMicro (SSD1306 и SH1106)дадада (room server)
Heltec T114, T190да——
Heltec tracker_v2да——
LilyGo T-Deckда——
LilyGo T-Echo Cardда——
ThinkNode M9да——
Meshadventurer (SX1262, SX1262+E22P 868M30S, E22P 433M30S)дада—

Всего в наборе форка 26 прошивок: 15 companion, 8 repeater, 3 room server / sensor.

2. Прошивка

Как прошить: два пути и четыре формата файлов

2.1. Платы на ESP32 — прошиваются из браузера

Heltec V3, V4, V4 TFT, T096, tracker_v2, T-Deck, T-Echo Card, ThinkNode M9, Meshadventurer.

  1. Откройте meshinfo.ru/flasher в Chrome или Edge.
  2. Найдите раздел «MeshCore — наш форк» и выберите свою плату в списке.
  3. Выберите файл нужной роли: companion_radio_ble (чат через Bluetooth), repeater или room_server.
  4. Если прошиваете плату впервые или меняете роль — поставьте галочку «Стереть флеш полностью перед прошивкой». При обычном обновлении галочка не нужна.
  5. Нажмите «Подключить устройство» и выберите COM-порт платы в системном окне.
  6. Нажмите «Прошить». В журнале пойдут строки про определение чипа и запись, внизу — прогресс.
  7. Дождитесь надписи об успехе и нажмите кнопку перезагрузки — плата стартует уже с новой прошивкой.

Что происходит внутри: полный образ -merged.bin пишется с адреса 0x0 и затирает всё, включая загрузчик; обычный .bin пишется с адреса 0x10000 и обновляет только приложение. Если нужно просто стереть плату, не прошивая, на странице есть отдельная кнопка «Только стереть».

2.2. Платы на nRF52 — через диск UF2 или DFU

ProMicro (в том числе SuperMini), Heltec T114, Seeed T1000-E и другие nRF52. Браузер их не прошивает: файл нужно скачать и записать вручную.

Способ первый, обычный — диск UF2:

  1. Скачайте файл .uf2 со страницы прошивальщика.
  2. Нажмите Reset дважды подряд (двойной сброс). В системе появится диск NICENANO или FTHRSBOOT — это загрузчик.
  3. Скопируйте .uf2 на этот диск. Плата сама перезагрузится и запустит прошивку.

Способ второй — DFU через приложение nRF Connect:

  1. Скачайте файл .zip (не распаковывайте).
  2. Откройте приложение nRF Connect → Programmer → DFU и выберите этот .zip.

2.3. Какой файл брать

ФайлКогда нужен
-merged.binпервая прошивка платы и смена роли: полный образ, пишется с 0x0
.binобычное обновление поверх текущей прошивки, пишется с 0x10000
.uf2для nRF52: копируется на диск после двойного Reset
.zipдля nRF52 через nRF Connect DFU, когда диск не появляется

2.4. Если прошивка не идёт

  • Кнопка не находит порт. Проверьте кабель (нужен с данными), другой USB-порт, драйвер USB-UART платы (CP210x или CH340). Кабель «только зарядка» не подойдёт.
  • Браузер не даёт выбрать устройство. Нужен Chrome или Edge 89+ и открытый https://meshinfo.ru/flasher/ — на других браузерах Web Serial просто нет.
  • Плата не входит в режим загрузчика. Зажмите кнопку BOOT (или PRG) и, не отпуская, нажмите RST, потом отпустите BOOT; затем нажмите «Подключить устройство» ещё раз.
  • Прошивка прошла, но плата молчит. Для ProMicro нужен внешний модуль SX1262: прошивка останавливается до инициализации радио (radio_init() → halt()), и Bluetooth не поднимается. Это не поломка.

2.5. Отдельный случай: плата SuperMini nRF52840 и прошивка по SWD

Такие платы ремонтируют и прошивают по проводу, когда USB и UF2 не работают вообще. У нас для этого собран отдельный набор инструментов: nrf52-tools — Raspberry Pi Pico с прошивкой debugprobe.uf2 (CMSIS-DAP v2) и окружение pyOCD.

.\scripts\flash-meshcore.cmd "путь\к\firmware.hex"   # прошивка + настройки загрузчика

Две вещи, которые важно знать заранее:

  • Драйвер пробника — libusbK, не WinUSB. С WinUSB библиотека libusb не может заявить интерфейс, и pyOCD просто не видит пробник.
  • После каждой прошивки по SWD нужно пересчитать настройки загрузчика (формат SDK 11: bank_0 и CRC16 приложения в страницах 0xFF000 и 0xFE000), иначе загрузчик не запустит приложение. Скрипт делает это сам.

И главная диагностика для «нет USB-устройства и нет UF2-диска»: сначала проверяйте кварц 32 МГц, а не питание. Без него USB-периферия не выходит в ready, подтяжка D+ не включается, и радио тоже молчит — при полностью исправном питании. Подробности, регистры и скрипты — в README папки nrf52-tools.

3. Первый запуск

При включении плата показывает стартовый экран: версию MeshCore, версию форка MESHINFO v0.2.0 и адрес meshinfo.ru.

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

Дальше открывается главная страница. На ней: имя узла и заряд батареи в верхней строке, точки страниц, число непрочитанных сообщений и PIN для подключения по Bluetooth.

Главный экран: MSG и PIN

Часы на главном экране

Время и дата показываются на главной странице (на узких экранах — компактно, под счётчиком непрочитанных). Своих часов у плат нет: время приходит от приложения при подключении, поэтому до первого подключения на экране будет 00:00, а после смены часового пояса — пересчитанное время.

Часовой пояс задаётся на самом устройстве: долгое нажатие на главной странице → строка Timezone → долгое нажатие для входа в правку, одно нажатие +1 час, два нажатия −1 час, диапазон от −12 до +14.

Кнопка и страницы

Почти везде в форке одна кнопка, и у неё четыре действия.

Страницы устройства и кнопка

  • Одно нажатие — следующая страница, а внутри списка — вниз.
  • Два нажатия — предыдущая страница, внутри списка — вверх.
  • Долгое нажатие — войти в меню или выполнить действие, которое написано внизу экрана (setup: long press, toggle: long press, advert: long press).
  • Три нажатия — включить или выключить звук.

Страниц восемь: Главная → RECENT → RADIO → BLUETOOTH → ADVERT → DISCOVERY → THEME → POWER, после последней снова первая. Страницы THEME нет на монохромных экранах: тем там не бывает. На платах с поворотным энкодером или джойстиком (например, T-Deck) вместо этого работают «вперёд/назад/Enter» — надписи на экране будут press Enter вместо long press.

Осторожно: если держать кнопку дольше в первые 8 секунд после включения, устройство уйдёт в режим консоли (CLI rescue) вместо меню. Если экран «залип» на консоли — просто перезагрузите плату.

Две соседние страницы — RECENT (кого слышно и как давно) и RADIO (текущие параметры радио):

Страницы RECENT и RADIO

Поиск репитеров (DISCOVERY)

Страница DISCOVERY отвечает на вопрос «кто меня слышит»: короткое нажатие рассылает запрос, и на экране появляются репитеры поблизости с уровнями SNR — сколько слышно вас и сколько слышно их. Двойное нажатие переключает показ имён и коротких хешей. Запрос можно повторять не чаще, чем раз в 5 секунд.

Страница DISCOVERY: кто из репитеров слышит вас и насколько

Включить Bluetooth

Страница BLUETOOTH показывает состояние радиомодуля Bluetooth. Долгое нажатие переключает его: иконка меняется, а на главной странице вместо PIN появится < Connected >, когда телефон подключится. Если устройство не находится в приложении — сначала проверьте эту страницу.

4. Приложение на телефоне

  1. Установите MeshCore для Android или iOS (ссылки в конце страницы).
  2. Включите Bluetooth на телефоне и на странице BLUETOOTH у платы.
  3. В приложении нажмите добавление устройства и выберите свою плату в списке.
  4. При запросе PIN введите код с экрана платы (страница «Главная», строка Pin:). Если PIN не отображается, попробуйте стандартный 123456.
  5. После подключения задайте имя узла — оно будет видно другим участникам сети.

Для USB-версий прошивки (companion_radio_usb) вместо телефона можно открыть веб-клиент app.meshcore.nz и подключиться к плате по последовательному порту.

Что приложение умеет менять на устройстве. По протоколу обмена (список команд в examples/companion_radio/MyMesh.cpp) телефон может задать:

  • параметры радио — частоту, полосу, SF, CR (CMD_SET_RADIO_PARAMS);
  • мощность передатчика (CMD_SET_RADIO_TX_POWER);
  • имя узла и координаты для объявлений (CMD_SET_ADVERT_NAME, CMD_SET_ADVERT_LATLON);
  • каналы: имя и общий секрет (CMD_SET_CHANNEL);
  • длину хэша пути (CMD_SET_PATH_HASH_MODE);
  • PIN для подключения по Bluetooth (CMD_SET_DEVICE_PIN);
  • время устройства (CMD_SET_DEVICE_TIME) и отправку объявления (CMD_SEND_SELF_ADVERT).

То есть с телефона доступно всё то же, что и с экрана устройства, — экран нужен, когда телефона нет под рукой.

Названия пунктов в мобильном приложении могут отличаться от версии к версии: приложение развивает отдельный автор, его исходники закрыты. Всё, что касается самого устройства, ниже описано по его собственным экранам — они всегда под рукой и не зависят от приложения.

5. Радиопараметры — самое важное

Сеть MeshCore держится на четырёх числах: частота, полоса (BW), SF и CR. Если хотя бы одно отличается, узлы друг друга не слышат — они просто живут в разных сетях. Плюс есть мощность передатчика (TX), но она на совместимость не влияет.

Откуда взять числа для своего города

Мы собрали настройки по регионам России отдельной таблицей: Настройки MeshCore по регионам России. Для Москвы и области это 868.731 МГц / BW 62.5 / SF7 / CR7, у других регионов бывают свои наборы (например, Самарская область — 864.281, Волгоградская — 869.525). Ориентируйтесь на свой городской чат: он знает, что сейчас в эфире.

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

Страница RADIO показывает текущие параметры и шумовой пол. Долгое нажатие открывает редактор, а перед входом устройство предупреждает: Nodes must match — остальные узлы сети должны иметь те же параметры.

Редактор радио: список, правка значения, сохранение

  1. Долгое нажатие на странице RADIO — открылся список FQ, BW, SF, CR, TX, Save & exit.
  2. Одним нажатием переходите к нужной строке.
  3. Долгое нажатие на строке — вход в правку значения.
  4. В правке: одно нажатие — плюс, два нажатия — минус. Долгое нажатие возвращает к списку. У частоты долгое нажатие переключает разряд: сначала правится целая часть (шаг 1 МГц), затем сотни, десятки и единицы кГц — активный разряд подсвечен.
  5. Дойдите до строки Save & exit и нажмите долго: появится попап Saved. Без этого шага значения останутся только в памяти до перезагрузки.
  6. Если ничего не нажимать, меню само закроется через 5 минут, а сообщения, пришедшие во время настройки, не будут всплывать поверх — их покажут после выхода.

Настройка из приложения

Те же четыре числа можно выставить с телефона — устройство принимает их отдельной командой (CMD_SET_RADIO_PARAMS), рядом обычно есть и мощность передатчика. Логика та же: сначала параметры радио, потом всё остальное. После смены параметров дайте устройству объявить себя (страница ADVERT или соответствующий пункт в приложении), чтобы соседи увидели узел уже с новыми настройками.

Ещё один параметр, который стоит проверить, — длина хэша пути (path hash). Это не частота, но он тоже влияет на совместимость: репитеры на прошивке старше 1.14 молча отбрасывают пакеты с 2- и 3-байтовыми путями. Для Москвы в региональном профиле указан хэш 2 байта — если ваш регион перешёл на многобайтовые пути, выставьте то же значение; иначе вас не пропустят репитеры.

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

Вход: долгое нажатие на главной странице.

Меню уведомлений: тихие часы, каналы, звук

  • Unread — сколько сообщений накопилось.
  • Popups — показывать ли всплывающее окно на входящее сообщение.
  • Wake screen — зажигать ли экран при входящем.
  • Alerts — как оповещать: sound+vibe → sound → vibe → off.
  • Channels — режим для каждого канала отдельно: popup, silent или off.
  • Timezone — часовой пояс, например UTC+03: по нему считается время на главном экране.
  • Quiet hours — тихие часы: включение, From и To. В тихие часы звук, вибрация и всплытия отключены, но сообщения не теряются — они попадут в Unread.
  • Save & exit — сохранить и выйти.

Правка значений в этом меню такая же, как в редакторе радио: одно нажатие — плюс, два — минус, долгое — назад. На узких экранах (128×64) список прокручивается: видно семь строк из восьми, а пока значение правится — нижнюю строку занимает подсказка click+ dbl- hold=back; после долгого нажатия список снова показывается целиком.

7. Страница POWER

Страница POWER: батарея, коррекция АЦП, перезагрузка

  • Сверху крупно: заряд батареи, процент и напряжение.
  • Battery — что показывать в статус-баре рядом с иконкой: напряжение (Volt), процент (Perc) или ничего (Off).
  • ADC corr — подстройка измеряемого напряжения, если показания врут. Одно нажатие +0.01, два нажатия −0.01, отсчёт идёт от текущего значения. Работает на платах, которые поддерживают коррекцию: Heltec V4 и V4 R8, Heltec T096, ProMicro, Heltec RC32, Meshnology W12.
  • Reboot/Shut — подменю Reboot, Shutdown, Back. Shutdown полностью выключает плату, включая радио и дисплей.

8. Темы экрана

На платах с цветным TFT есть страница THEME: пять палитр с образцами цветов.

Страница THEME и выбор темы

  1. Долгое нажатие на странице THEME — открывается список тем: amber, teal, signal, neon, classic и строка Exit.
  2. Перемещение по списку сразу показывает, как будет выглядеть интерфейс — это предпросмотр, ничего не сохраняется.
  3. Долгое нажатие на выбранной теме — запомнить её. Появится попап theme <имя> OK, и тема переживёт перезагрузку.
  4. Строка Exit выходит, оставляя сохранённую тему прежней.

Как выглядят темы на реальном экране T096:

Пять тем на экране T096

9. Advert: как дать себя найти

Advert — это объявление о себе: имя, позиция и публичный ключ, подписанные ключом устройства. Через него соседи узнают о вас и появляются в списке контактов.

  • Страница ADVERT: долгое нажатие — отправить объявление. На экране появится Advert sent! или Advert failed...
  • Объявление можно разослать по всей сети (flood) или только для ближайших (zero hop). У репитеров это команды advert и advert.zerohop.

Отправляйте advert после смены имени или радиопараметров: иначе соседи будут видеть старые данные.

10. Repeater и Room Server

Эти роли прошиваются тем же прошивальщиком, но файл выбирается другой: repeater или room_server. Настраиваются они не с экрана, а по USB-консоли или по радио из приложения.

Первый шаг после прошивки — частота

Пока частота не выставлена, устройство работает «не там» и его трудно даже найти по радио.

set radio 868.731,62.5,7,7      # freq, bw, sf, cr — все параметры одной строкой
reboot                          # параметры применяются после перезагрузки

Отдельной команды на полосу, SF или CR нет: либо set radio целиком, либо set freq <МГц> для одной частоты — но она работает только по USB-консоли. Проверить, что получилось: get radio и get freq.

Если нужно проверить чужие параметры, не трогая свои настройки, есть tempradio:

tempradio 864.281,62.5,8,7,30   # переключиться на 30 минут, в память не пишется

Как подключиться к консоли

  1. По USB — откройте config.meshcore.io или на странице прошивальщика используйте кнопку Console и подключитесь к COM-порту платы.
  2. По радио — из мобильного приложения через удалённое администрирование (Remote Management), если частота уже совпадает с соседями.

Полезные команды

КомандаЧто делает
set name <имя>имя узла в сети
set radio <freq>,<bw>,<sf>,<cr>все радиопараметры сразу (нужна перезагрузка)
set freq <МГц>только частота, применяется после перезагрузки, только по USB
tempradio <freq>,<bw>,<sf>,<cr>,<мин>временно переключить радио, в память не пишется
set tx <dbm>мощность передатчика, 1–22 дБм
set lat <градусы>, set lon <градусы>координаты для карт
advert, advert.zerohopобъявить себя по всей сети или только рядом
neighborsдо восьми последних услышанных соседей
password <новый>сменить админский пароль (по умолчанию password)
set guest.password <новый>гостевой пароль room server (по умолчанию hello)
set repeat <on/off>пересылать ли пакеты (для room server по умолчанию выключено)
set flood.advert.interval <часы>как часто репитер рассылает объявление (по умолчанию 12 часов)
set advert.interval <минуты>интервал локального zero-hop объявления
set agc.reset.interval <секунды>сброс АЦП приёмника — лечит «глухоту» рядом с помехами
set path.hash.mode <0/1/2>длина хэша пути в объявлениях: 1, 2 или 3 байта
region home <имя>домашний регион для фильтрации трафика
clock sync, time <epoch>синхронизация времени (нужна для истории в room server)
start otaпереход в режим обновления по воздуху
reboot, poweroffперезагрузка и выключение
eraseполный сброс (только по USB, стирает всё)

Что важно для Room Server

  • Он хранит историю: при входе клиент получает последние 32 непрочитанных сообщения.
  • Включать на нём ретрансляцию (set repeat on) не рекомендуют: room server не заменяет репитер. Лучше держать эти роли на разных устройствах.
  • Обязательно смените гостевой пароль, если комната публичная.

Обновление по воздуху

На репитере: start ota, затем обновление по Wi-Fi (ESP32) или через nRF Connect DFU (nRF52). Для ESP32 команда поднимает точку доступа MeshCore OTA — подключитесь к ней и откройте http://192.168.4.1/update.

11. Если что-то не работает

СимптомПричинаЧто делать
Телефон не видит платуПрошита USB-версия, а не BLEПрошить companion_radio_ble
Не находит устройствоBluetooth выключен на платеСтраница BLUETOOTH, долгое нажатие
Просит PIN, не подходитPIN показан на экране устройстваСмотрите Pin: на главной странице; стандартный — 123456
В сети никого не видноНе совпадают частота, BW, SF или CRСверить с таблицей регионов и с городским чатом
Слышно только соседей рядомНизко стоит антеннаПоднять выше, искать прямую видимость
Репитер «оглох» рядом с мощными помехамиПерегрузка АЦП приёмникаset agc.reset.interval 4
Плата не определяется по USBКабель «только зарядка» или нет драйвераДругой кабель, драйвер CP210x/CH340
Нет ни USB, ни диска UF2, ни BLEНе запустился кварц 32 МГц (nRF52)Проверять HFXO, а не питание; см. nrf52-tools
Прошился ProMicro, но Bluetooth не поднимаетсяНет внешнего модуля SX1262Подключить радиомодуль: без него прошивка останавливается
Экран показывает консоль вместо менюКнопку держали в первые 8 секунд после включенияПерезагрузить плату
Часы и история сообщений врутНе синхронизировано времяclock sync или time <epoch>

12. Ссылки