Руководство по прошивкам
Руководство по прошивкам: как собрать, обновить и не получить «кирпич».
Коротко. Это руководство по форку MeshCore от MESHINFO — прошивке для плат с дисплеем. Форк добавляет русский интерфейс, настройку радио прямо с кнопок устройства, меню уведомлений, темы экрана и страницу питания. Готовые прошивки лежат на 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 (чат) | repeater | room 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.
- Откройте meshinfo.ru/flasher в Chrome или Edge.
- Найдите раздел «MeshCore — наш форк» и выберите свою плату в списке.
- Выберите файл нужной роли:
companion_radio_ble(чат через Bluetooth),repeaterилиroom_server. - Если прошиваете плату впервые или меняете роль — поставьте галочку «Стереть флеш полностью перед прошивкой». При обычном обновлении галочка не нужна.
- Нажмите «Подключить устройство» и выберите COM-порт платы в системном окне.
- Нажмите «Прошить». В журнале пойдут строки про определение чипа и запись, внизу — прогресс.
- Дождитесь надписи об успехе и нажмите кнопку перезагрузки — плата стартует уже с новой прошивкой.
Что происходит внутри: полный образ -merged.bin пишется с адреса 0x0 и затирает всё, включая загрузчик; обычный .bin пишется с адреса 0x10000 и обновляет только приложение. Если нужно просто стереть плату, не прошивая, на странице есть отдельная кнопка «Только стереть».
2.2. Платы на nRF52 — через диск UF2 или DFU
ProMicro (в том числе SuperMini), Heltec T114, Seeed T1000-E и другие nRF52. Браузер их не прошивает: файл нужно скачать и записать вручную.
Способ первый, обычный — диск UF2:
- Скачайте файл
.uf2со страницы прошивальщика. - Нажмите Reset дважды подряд (двойной сброс). В системе появится диск
NICENANOилиFTHRSBOOT— это загрузчик. - Скопируйте
.uf2на этот диск. Плата сама перезагрузится и запустит прошивку.
Способ второй — DFU через приложение nRF Connect:
- Скачайте файл
.zip(не распаковывайте). - Откройте приложение 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.

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

- Одно нажатие — следующая страница, а внутри списка — вниз.
- Два нажатия — предыдущая страница, внутри списка — вверх.
- Долгое нажатие — войти в меню или выполнить действие, которое написано внизу экрана (
setup: long press,toggle: long press,advert: long press). - Три нажатия — включить или выключить звук.
Страниц восемь: Главная → RECENT → RADIO → BLUETOOTH → ADVERT → DISCOVERY → THEME → POWER, после последней снова первая. Страницы THEME нет на монохромных экранах: тем там не бывает. На платах с поворотным энкодером или джойстиком (например, T-Deck) вместо этого работают «вперёд/назад/Enter» — надписи на экране будут press Enter вместо long press.
Часы на главном экране
Время и дата показываются на главной странице (на узких экранах — компактно, под счётчиком непрочитанных). Своих часов у плат нет: время приходит от приложения при подключении, поэтому до первого подключения на экране будет 00:00, а после смены часового пояса — пересчитанное время. Часовой пояс задаётся на устройстве: долгое нажатие на главной странице → строка Timezone → долгое нажатие для входа в правку, одно нажатие +1 час, два нажатия −1 час.
Поиск репитеров (DISCOVERY)
Страница DISCOVERY отвечает на вопрос «кто меня слышит»: короткое нажатие рассылает запрос, и на экране появляются репитеры поблизости с уровнями SNR. Двойное нажатие переключает показ имён и коротких хешей. Запрос можно повторять не чаще, чем раз в 5 секунд.

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

Включить Bluetooth
Страница BLUETOOTH показывает состояние радиомодуля Bluetooth. Долгое нажатие переключает его: иконка меняется, а на главной странице вместо PIN появится < Connected >, когда телефон подключится. Если устройство не находится в приложении — сначала проверьте эту страницу.
4. Приложение на телефоне
- Установите MeshCore для Android или iOS (ссылки в конце страницы).
- Включите Bluetooth на телефоне и на странице BLUETOOTH у платы.
- В приложении нажмите добавление устройства и выберите свою плату в списке.
- При запросе PIN введите код с экрана платы (страница «Главная», строка
Pin:). Если PIN не отображается, попробуйте стандартный 123456. - После подключения задайте имя узла — оно будет видно другим участникам сети.
Для 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 — остальные узлы сети должны иметь те же параметры.

- Долгое нажатие на странице RADIO — открылся список
FQ,BW,SF,CR,TX,Save & exit. - Одним нажатием переходите к нужной строке.
- Долгое нажатие на строке — вход в правку значения.
- В правке: одно нажатие — плюс, два нажатия — минус. Долгое нажатие возвращает к списку. У частоты долгое нажатие переключает разряд: сначала правится целая часть (шаг 1 МГц), затем сотни, десятки и единицы кГц — активный разряд подсвечен.
- Дойдите до строки
Save & exitи нажмите долго: появится попапSaved. Без этого шага значения останутся только в памяти до перезагрузки. - Если ничего не нажимать, меню само закроется через 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

- Сверху крупно: заряд батареи, процент и напряжение.
- 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 — открывается список тем:
amber,teal,signal,neon,classicи строкаExit. - Перемещение по списку сразу показывает, как будет выглядеть интерфейс — это предпросмотр, ничего не сохраняется.
- Долгое нажатие на выбранной теме — запомнить её. Появится попап
theme <имя> OK, и тема переживёт перезагрузку. - Строка
Exitвыходит, оставляя сохранённую тему прежней.
Как выглядят темы на реальном экране 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 минут, в память не пишется
Как подключиться к консоли
- По USB — откройте config.meshcore.io или на странице прошивальщика используйте кнопку Console и подключитесь к COM-порту платы.
- По радио — из мобильного приложения через удалённое администрирование (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. Ссылки
- Прошивальщик: meshinfo.ru/flasher
- Исходники форка: git.meshinfo.ru/shade/MeshCore
- Оригинальный MeshCore: github.com/meshcore-dev/MeshCore
- Документация и FAQ MeshCore: docs.meshcore.io
- Приложение Android: Google Play
- Приложение iOS: App Store
- Веб-клиент: app.meshcore.nz
- Настройки радио по регионам России: таблица регионов
- Анализатор сетей: Мешкартель