📌 Это вторая часть цикла. Часть 1: Теория объясняет, зачем это нужно.


📦 Распаковка и подготовка

Комплектация Heltec V4

КомпонентНазначение
Плата ~60×30 ммESP32-S3R2 + SX1262, OLED 128×64, USB-C
Антенна (IPEX)Подключается к разъёму ANT - обязательно!
Кабель USB-CПитание + прошивка + отладка
Пины (опционально)Для подключения внешних датчиков/антенн

⚠️ Важно: без подключённой антенны радиомодуль может выйти из строя. Всегда подключайте антенну перед подачей питания.

Характеристики Heltec V4

КомпонентОписание
MCUESP32-S3R2 (WiFi + Bluetooth)
LoRa TransceiverSemtech SX1262
Частоты863–870 МГц (EU), 902–928 МГц (US)
Дисплей0.96" OLED 128×64
МощностьДо +28±1 dBm (High Power option)
ПитаниеUSB-C + оптимизированное управление LiPo
РазъёмыUSB-C, U.FL/IPEX для LoRa, 1.25-8Pin GNSS, 1.25-2Pin Solar
Форм-факторСовместим с V3/V3.1 по пинам

⚡ Прошивка: веб-флешер

Официальный флешер: https://flasher.meshtastic.org

Требования

ТребованиеПочему
Chromium-браузер (Chrome, Edge, Brave)Web Serial API работает только в них
Доступ к COM-портамВ Linux - права пользователя на dialout
Отключённая батареяНа время прошивки - только питание по USB

🐧 Linux: права на последовательный порт

Если при подключении видите:

[09:52:42.841] Serial: serial_io_handler.cc:157 Failed to open serial port: FILE_ERROR_ACCESS_DENIED

Решение:

# Добавить пользователя в группу dialout
sudo usermod -a -G dialout $USER

# Применить изменения (выйти и зайти снова, или)
newgrp dialout

# Проверить доступ
ls -l /dev/ttyUSB*  # или /dev/ttyACM*

🔧 Процесс прошивки

  1. Отключите батарею и USB от платы
  2. Откройте веб-флешер, выберите:
    • Device: Heltec V4
    • Firmware: 2.7.21 (или новее стабильный/бета)
    • Вариант: Full erase and install
  3. Нажмите Erase Flash and Install
  4. Зажмите кнопку PRG на плате
  5. Не отпуская PRG, подключите USB-кабель
  6. Наблюдайте: краткая красная вспышка → в выпадающем списке порта появится USB JTAG
  7. Отпустите PRG, выберите USB JTAG, нажмите Connect
  8. Дождитесь окончания прошивки (терминал покажет прогресс)
  9. После сообщения Leaving... нажмите кнопку RST (сброс)

💡 Если флешер не видит порт - попробуйте другой кабель (не все кабели поддерживают данные), другой порт USB, или перезапустите браузер.


🔌 Первое подключение: три способа

После прошивки плата перезагрузится и запустит Meshtastic.

Варианты подключения к ноде

ИнтерфейсКак подключитьсяКогда использовать
BluetoothПриложение Meshtastic (Android/iOS) → поиск устройствПереносная нода, одно активное подключение
Wi-FiНода создаёт AP → подключитесь к вашей сети → IP отображается на экранеСтационарная нода, несколько устройств одновременно
USB/COMПодключение через терминал (PuTTY, screen)Домашняя нода, отладка, прямой доступ

⚠️ Bluetooth: только одно активное подключение.
Wi-Fi: можно подключить несколько устройств одновременно (удобно для стационарных нод).
USB: надёжно для настройки и отладки, не требует беспроводного подключения.

Настройка через приложение на смартфоне (рекомендуется)

  1. Установите Meshtastic (Android) или iOS-версию
  2. Запустите, дайте разрешения на локацию и Bluetooth
  3. Перейдите на вкладку «Устройства» (иконка роутера) → выберите тип подключения (Bluetooth, Wi-Fi или COM-порт), в зависимости от режима ноды (по умолчанию - Bluetooth) → нажмите 🔍 Сканирование или + Добавить
  4. Подтвердите сопряжение

Альтернативные варианты настройки

  1. На экране ноды отобразится IP-адрес (обычно 192.168.1.x)
  2. Подключитесь к Wi-Fi сети ноды (пароль отображается на экране)
  3. Откройте в браузере http://<IP_адрес_ноды>
  4. Через веб-интерфейс можно просматривать данные (например, JSON-сообщения), но настройка ноды не выполняется здесь. Для конфигурации используйте:
    • Приложение Meshtastic
    • Приложение MeshApp
    • CLI через Python (meshtastic), подключаясь по USB, BLE или Wi-Fi

💡 IP-адрес: нода получает адрес от вашего роутера (не 192.168.4.1!). Точный адрес отображается на OLED-экране устройства.


👤 Настройка пользователя (User)

Основные параметры

ПараметрЗначениеПримечание
Long Name[PE] ponfertatoПолное имя ноды, видно всем в сети (до 20 символов, можно кириллицу)
Short NameponfКороткий идентификатор в сообщениях (строго 4 символа, латиница)
RoleCLIENT или CLIENT_MUTEДля городов с >200 нод - CLIENT_MUTE (безопасный режим без ретрансляции чужих пакетов)
Is Licensed (HAM)НетЕсли Да - отключите шифрование в MQTT (требования регулятора)

💡 ShortName: ровно 4 символа! Это отображается в заголовках сообщений. Примеры: ponf, KST1, MOW2.

Дополнительные флаги (опционально)

ПараметрЗначениеЗачем
Show on mapДаРазрешить отображение на публичных картах (управляется через MQTT)
Ignore location requestsНетОтвечать на запросы координат от других нод

Продвинутые настройки пользователя

ПараметрЗначениеПримечание
Public Key(автогенерация)Не менять вручную; используется для шифрования
Private Key(хранить в секрете)Экспортировать и сохранить при первой настройке
Admin Key(пусто)Заполнять только при удалённом управлении нодой
Managed ModeНетНе включать без настроенного Remote Admin

🌐 Настройка MQTT для ONEmesh (RU)

ONEmesh - карта устройств Meshtastic в России. Подключение к их MQTT-серверу позволяет вашей ноде отображаться на карте и обмениваться данными с другими участниками.

🔐 Что передаётся через MQTT: текстовые сообщения, метрики устройства (батарея, сигнал), местоположение (если включено). Данные попадают на карту и в региональные чаты Telegram согласно настройкам города.

Основные параметры

ПараметрЗначениеПримечание
MQTT Addressmqtt.onemesh.ruСервер сообщества (домен, не IP)
Port8883 (TLS) / 1883 (без TLS)Порт выбирается автоматически при включении TLS
UsernameonemeshПо умолчанию; onemeshz / onemeshd - для downlink
PasswordonecatОбщий для всех участников проекта
Encryption enabledДаШифрование трафика в MQTT; требует PSK: AQ== в канале
JSON enabledНетНе нужно для карты, создаёт лишнюю нагрузку
TLS enabledДаШифрование соединения; если ошибки - попробуйте Нет + порт 1883
Root topicmsh/RU/KSTKST = код города Кострома (список кодов)
Proxy to clientДа (Bluetooth) / Нет (Wi-Fi)При прямом Wi-Fi прокси не нужен
Map reportsДаРазрешить отправку отчётов для отображения на карте
I agreeДаПодтверждение правил передачи геоданных
Precision729 mТочность координат на публичной карте (~15 бит)
Map report interval3600 s (1 час)Минимальный интервал отправки отчётов

💡 Совет: если кнопка «Сохранить» неактивна - заполняйте настройки поэтапно: сначала базовые (адрес, логин, пароль), потом карту, потом дополнительные опции.

Режимы имён пользователя

UsernameDownlinkКогда использовать
onemesh❌ ОтключёнБольшинству пользователей - безопасный режим, только uplink
onemeshz✅ Zero-hopЕсли нужно получать данные из интернета, но не ретранслировать их по радио (политика нулевого хопа)
onemeshd✅ ПолныйТолько для интеграций, соединения сегментов сети; не рекомендуется для обычных нод - создаёт нагрузку на эфир

⚠️ Использование onemeshd с включённым Downlink может перегрузить локальную сеть пакетами из интернета. Используйте осознанно и только при понимании последствий.

Продвинутые параметры MQTT

ПараметрЗначениеПримечание
Connection Retry Interval30 секКак часто пытаться переподключиться при обрыве
Keepalive Interval60 секИнтервал проверки живости соединения
QoS Level0Quality of Service: 0 = fire-and-forget (оптимально для Meshtastic)
Retain MessagesНетНе сохранять последние сообщения на брокере
Topic Filtermsh/RU/KST/#Подписка на подтопики (для интеграций)

Частые проблемы с MQTT

СимптомВозможная причинаРешение
Connection refusedНеверный логин/пароль или портПроверить onemesh/onecat, порт 8883 с TLS
TLS handshake failedПроблема с сертификатами или временемПроверить синхронизацию времени (NTP), временно отключить TLS для теста
No messages on mapНеверный Root topic или PSKУбедиться: msh/RU/KST, канал с PSK: AQ==
MQTT disconnectedНестабильный интернет на ноде/телефонеПроверить соединение, увеличить Map report interval
Message not appearingDownlink отключён на сервере для onemeshИспользовать onemeshz если нужен downlink

📡 Настройка LoRa и каналов

Раздел LoRa

ПараметрЗначениеЗачем
RegionRussiaАвтоматически задаёт частоту 433 МГц, мощность ≤20 dBm и корневую тему MQTT
Modem PresetLongFastБаланс дальности и скорости для городских условий
Frequency Slot2Публичный интервал для RU868 (избегать конфликтов)
Transmit Power20 dBmМаксимальная разрешённая мощность для любительской связи в РФ
Boosted RX GainВклУлучшает приём слабых сигналов (критично для городской застройки)
Hop Limit5Максимальное число прыжков; достаточно для города, не перегружает эфир
Ignore MQTTНетПринимать пакеты, пришедшие через интернет (от соседей с MQTT)
OK to MQTTДа ⚠️Критично: разрешает соседям ретранслировать ваши данные на карту OneMesh

Продвинутые параметры LoRa

ПараметрЗначениеПримечание
Bandwidth250 kHzШирина канала; не менять при использовании пресетов
Spreading Factor11Фактор расширения; выше = дальше, но медленнее
Coding Rate5 (4/5)Коррекция ошибок; баланс надёжности/скорости
Frequency Offset0.0 HzКоррекция частоты кристалла; менять только при калибровке
Override Duty CycleНетНе переопределять ограничения по времени в эфире
SX126x RX Boosted GainВклАппаратное усиление приёма на SX1262

Каналы (Channels) - детально

Настройте основной канал (Primary, индекс 0):

ПараметрЗначениеПримечание
RolePrimaryТолько один канал может быть первичным; через него идёт телеметрия устройства
NameLongFastТочно так: публичная сеть фильтрует пакеты по этому имени
PSKAQ==Базовый ключ шифрования для OneMesh (128 бит); обязателен при включённом шифровании в MQTT
Uplink enabledДаОтправлять данные с этого канала на MQTT-сервер
Downlink enabledНетНе получать данные из MQTT (если не используете onemeshz/onemeshd)
Position enabledДаПередавать координаты через этот канал
Precise locationНетСкрывать точные координаты от других нод в канале
Precision182 mТочность позиции, передаваемой в канале (~17 бит)
MutedНетНе заглушать канал (иначе сообщения не будут видны)

Вторичный канал (опционально, индекс 1)

ПараметрЗначениеПримечание
RoleSecondaryДополнительный канал для приватных групп или ботов
Name[PE] BackupЛюбое имя <12 байт (латиница)
PSK(сгенерировать свой)Приватный ключ для своей группы
Uplink / DownlinkНетНе отправлять в публичный MQTT
PositionНетНе передавать координаты в приватный канал
Precision45 mМаксимальная точность для приватного использования

Важно: хотя бы один канал должен иметь PSK: AQ== или быть без шифрования, чтобы сервер OneMesh принял пакеты.

💡 Вторичные каналы создаются через + в приложении. Они не мешают основному трафику и полезны для приватного общения.

Управление каналами: советы

  • Порядок каналов: Primary должен быть первым (индекс 0) - через него идёт системная телеметрия.
  • Имена каналов: используйте латиницу, без пробелов и спецсимволов.
  • PSK длины: поддерживаются 0 (нет шифрования), 8, 128, 256 бит. OneMesh требует AQ== (8 бит).
  • Экспорт/импорт: настройки каналов можно экспортировать в JSON для быстрого развёртывания на других нодах.

📍 Местоположение (Position)

Фиксированные координаты (для стационарных нод)

ПараметрЗначениеРекомендация
Fixed positionВключеноДля нод без GPS-модуля
Latitude57.742Широта Костромы, без лишних нулей (вводить как 57.742, не 57.742000)
Longitude40.978Долгота Костромы, аналогично
Altitude100Высота над уровнем моря (примерно, в метрах)

💡 Координаты хранятся как integer × 1e7. В приложении вводите с 6 знаками после запятой.

Пакет позиции - интервалы и точность

ПараметрЗначениеЗачем
Position broadcast interval7200 s (2 часа)Баланс между актуальностью на карте и нагрузкой на эфир
Smart positionНетФиксированный интервал надёжнее для стационарной ноды
Smart position min distance100 mМин. расстояние для отправки при включённой умной рассылке
Smart position min interval300 sМин. интервал для умной рассылки
Position flagsALTITUDE + TIMESTAMPПередавать только высоту и метку времени (меньше трафика)
Provide location to networkДаРазрешить передачу координат в сеть (управляется через OK to MQTT)

Продвинутые настройки позиции

ПараметрЗначениеПримечание
GPS EnabledНетОтключить, если нет модуля; экономит питание
GPS Update Interval60 секКак часто опрашивать GPS (если включён)
GPS Attempt Time0Не ограничивать время поиска спутников
RX/TX/Enable GPIO0Пины для внешнего GPS-модуля (по умолчанию)
Broadcast Smart Minimum Distance100 мМин. смещение для триггера умной рассылки
Broadcast Smart Minimum Interval300 секМин. время между умными рассылками

🔐 Для повышения приватности: уменьшите Precision в канале (182 m) и Map precision (729 m), либо задайте фиксированные координаты в стороне от реального местоположения.


⚙️ Дополнительные модули

Информация об окружении (Neighbor Info)

ПараметрЗначениеПримечание
EnabledДаДля отображения слоя «Соседи» на карте OneMesh
Update interval14400 s (4 часа)Минимальный интервал, не сокращать - лишняя нагрузка на эфир
Transmit over LoRaНетНе передавать данные о соседях по радио (только через MQTT)

🗺️ На карте появятся слои «Кто слышал это устройство» и «Кого слышало это устройство» - полезно для анализа покрытия.

Устройство (Device) - роль и ретрансляция

ПараметрЗначениеКогда использовать
RoleCLIENT_MUTEВ городах с >200 нод - безопасный режим без ретрансляции чужих пакетов
CLIENTЕсли сеть маленькая или у вас хорошая антенна/расположение - можно помогать сети
Rebroadcast modeCORE_PORTNUMS_ONLYРетранслировать только базовые типы пакетов (позиция, текст) - оптимально для города
ALLРетранслировать всё - только для тестов или очень маленьких сетей
Node info broadcast interval43200 s (12 часов)Как часто рассылать информацию о себе; 12 ч - достаточно для мониторинга
Double tap as buttonНетЗащита от случайных срабатываний
Disable triple clickДаЗащита от ложных маяков (beacon)
LED heartbeat disabledНетВизуальный контроль работы (мигание светодиода)

Продвинутые настройки устройства

ПараметрЗначениеПримечание
Button GPIO0Пин кнопки (по умолчанию)
Buzzer GPIO0Пин бузера (по умолчанию)
Buzzer ModeALL_ENABLEDРежим бузера: DISABLED, ALERTS_ONLY, ALL_ENABLED
TZDEFGMT-3Часовой пояс для локального времени
Is ManagedНетУправляемый режим (только для админ-нод)
Serial EnabledНетПоследовательная консоль (для отладки)
Debug Log APIНетВывод отладочных логов (не для продакшена)

Часовой пояс

ПараметрЗначениеПримечание
TimezoneGMT+3 (Москва)Для корректного отображения времени в логах и метках
Use phone timezoneКнопкаНажать, чтобы подставить часовой пояс из настроек телефона

Питание (Power) - для стабильности

ПараметрЗначениеПримечание
Power Saving ModeНетСтационарная нода с питанием от USB
On Battery Shutdown After0 секНе выключать при потере питания (если есть ИБП)
ADC Multiplier Override1.0Калибровка напряжения батареи
Wait Bluetooth Secs0При прямом WiFi не ждать BLE-подключения
Min Wake Secs30Мин. время активности после получения пакета
INA219 Address0Адрес монитора питания (автоопределение)

Дисплей (Display) - оптимизация OLED

ПараметрЗначениеПримечание
Screen Timeout60 секТайм-аут OLED для экономии
GPS FormatUNUSEDФормат координат на экране (не используется при фиксированной позиции)
Auto Screen Carousel0Отключить автопереключение окон
Compass North TopДаФиксировать север сверху на компасе
Flip ScreenНетНе переворачивать экран (по ориентации корпуса)
UnitsMETRICМетрическая система (°C, м, км/ч)
OLED TypeOLED_AUTOАвтоопределение контроллера дисплея
Display ModeDEFAULTСтандартный режим отображения
Heading BoldДаЖирный заголовок для лучшей читаемости
Wake on Tap or MotionНетОтключить пробуждение по движению (нет акселерометра на V4)

Bluetooth - при отключённом WiFi

ПараметрЗначениеПримечание
EnabledНетПри включённом WiFi Bluetooth отключается автоматически на ESP32
Pairing ModeFIXED_PINЕсли нужно включить - использовать фиксированный PIN
Fixed PIN123456смените!Обязательно измените на случайный 6-значный код

Сеть (Network) - WiFi для стационарной ноды

ПараметрЗначениеПримечание
WiFi EnabledДаПрямое подключение к роутеру
SSID / PSK<ваши данные>Только 2.4 GHz сети
Enable Local UDP BroadcastНетНе требуется для OneMesh
NTP Serverpool.ntp.orgНадёжнее, чем meshtastic.pool.ntp.org
Address ModeDHCPАвтополучение IP
IPv6 EnabledНетНе используется в текущей конфигурации

⚠️ При включённом WiFi Bluetooth автоматически отключается на архитектуре ESP32.


🧩 Настройки модулей (продолжение)

Телеметрия (Telemetry)

ПараметрЗначениеПримечание
Send Device TelemetryДаВключить для мониторинга статуса ноды
Device Metrics Interval900 сек (15 мин)Как часто отправлять метрики устройства
Power Metrics EnabledДаКритично для мониторинга питания
Power Metrics Interval300 сек (5 мин)Как часто отправлять данные о питании
Environment Metrics EnabledНетЕсли нет датчиков BME280/BME680
Air Quality EnabledНетТолько для BME680
Display Metrics on ScreenДаПоказывать метрики на OLED
Display FahrenheitНетМетрическая система (°C)

Шаблонные сообщения (Canned Messages)

ПараметрЗначениеПримечание
EnabledДаУдобно для быстрых ответов
MessagesТест связи,На связи,73!,Координаты полученыЧерез запятую, без пробелов после
Send BellНетНе отправлять звуковой сигнал с сообщениями
Rotary EncoderНетЕсли не подключён энкодер

Отключённые модули (рекомендация для OneMesh)

МодульСостояниеПочему
COM-портНетНе используется консоль
External NotificationНетБез внешних пьезо/LED-модулей
Store & ForwardНетТолько для REPEATER/ROUTER
Range TestНетСоздаёт избыточный трафик
AudioНетНе поддерживается на Heltec V4
Remote HardwareНетНе используется
Ambient LightingНетЭкономия энергии
Detection SensorНетБез внешних GPIO-датчиков
PaxcounterНетИзбыточный трафик для OneMesh
Status MessageНетНе требуется для стационарной ноды

🔑 Критичные флаги и порядок применения

  1. Имя канала: Primary должен называться строго LongFast.
  2. PSK: AQ== в основном канале обязателен для фильтрации OneMesh.
  3. OK to MQTT: Вкл - без этого соседи не смогут ретранслировать ваши пакеты на сервер.
  4. Порядок сохранения (обход багов UI):
    • LoRa → Region → сохранить
    • Каналы → имя + PSK + Uplink/Downlink → сохранить
    • MQTT → базовые параметры → сохранить
    • MQTT → Отчёты по карте → сохранить отдельно
    • Местоположение / Устройство / Питание → сохранить
    • Перезагрузить ноду
  5. Проверка:
    • В приложении: MQTT → статус Подключено
    • На карте: нода появляется в течение 1–3 часов
    • В чате LongFast: видны сообщения от соседей

🔧 Оптимизация процесса прошивки

Для Heltec V4 (обход бага загрузчика)

Из-за особенности загрузчика Heltec V4, стандартный порядок не всегда работает. Оптимальный процесс:

  1. Отключите батарею и USB от платы
  2. Откройте веб-флешер
  3. Выберите device: Heltec V4, firmware: 2.7.21
  4. Нажмите Erase Flash and Install
  5. Зажмите кнопку PRG на плате
  6. Не отпуская PRG, подключите USB-кабель
  7. Наблюдайте: краткая красная вспышка → в списке портов появится USB JTAG
  8. Отпустите PRG, выберите USB JTAG, нажмите Connect
  9. Дождитесь окончания прошивки
  10. После Leaving... нажмите кнопку RST (сброс)

💡 Примечание: этот процесс описан в meshtastic/firmware#8543


📤 Первые сообщения между двумя нодами

Подготовка

  1. Прошейте обе платы по инструкции выше
  2. На каждой настройте:
    • Один и тот же регион (Russia)
    • Один и тот же канал с одинаковым PSK (AQ==)
    • Position enabled: Yes (для теста)
  3. Разместите ноды на расстоянии 10–50 м (для первого теста)

Тест

  1. На первой ноде в приложении: Messages+ → введите текст → Send
  2. На второй ноде: должно появиться входящее сообщение
  3. Проверьте вкладку Map - если включён MQTT, обе ноды появятся на карте в течение часа

Диагностика, если не работает

СимптомПроверкаРешение
Нет сообщенийПроверьте, что каналы имеют одинаковый PSKСкопируйте ключ точно, без пробелов
Нода не видна на картеПроверьте MQTT enabled, Map reports, интернет на телефоне/нодеПерезапустите ноду (RST), подождите 1–2 цикла отчёта
Ошибка подключения к MQTTПроверьте TLS enabled, корневую темуПопробуйте отключить TLS; убедитесь, что Root topic = msh/RU/XXX
Нет соединения по радиоПроверьте антенну, регион, Hop limitПодключите антенну, установите Region: Russia, Hop limit: 5

🆘 Помощь и сообщество