📌 Это вторая часть цикла. Часть 1: Теория объясняет, зачем это нужно.
📦 Распаковка и подготовка#
Комплектация Heltec V4#
| Компонент | Назначение |
|---|
| Плата ~60×30 мм | ESP32-S3R2 + SX1262, OLED 128×64, USB-C |
| Антенна (IPEX) | Подключается к разъёму ANT - обязательно! |
| Кабель USB-C | Питание + прошивка + отладка |
| Пины (опционально) | Для подключения внешних датчиков/антенн |
⚠️ Важно: без подключённой антенны радиомодуль может выйти из строя. Всегда подключайте антенну перед подачей питания.
Характеристики Heltec V4#
| Компонент | Описание |
|---|
| MCU | ESP32-S3R2 (WiFi + Bluetooth) |
| LoRa Transceiver | Semtech 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*
🔧 Процесс прошивки#
- Отключите батарею и USB от платы
- Откройте веб-флешер, выберите:
- Device:
Heltec V4 - Firmware:
2.7.21 (или новее стабильный/бета) - Вариант:
Full erase and install
- Нажмите Erase Flash and Install
- Зажмите кнопку
PRG на плате - Не отпуская
PRG, подключите USB-кабель - Наблюдайте: краткая красная вспышка → в выпадающем списке порта появится
USB JTAG - Отпустите
PRG, выберите USB JTAG, нажмите Connect - Дождитесь окончания прошивки (терминал покажет прогресс)
- После сообщения
Leaving... нажмите кнопку RST (сброс)
💡 Если флешер не видит порт - попробуйте другой кабель (не все кабели поддерживают данные), другой порт USB, или перезапустите браузер.
🔌 Первое подключение: три способа#
После прошивки плата перезагрузится и запустит Meshtastic.
Варианты подключения к ноде#
| Интерфейс | Как подключиться | Когда использовать |
|---|
| Bluetooth | Приложение Meshtastic (Android/iOS) → поиск устройств | Переносная нода, одно активное подключение |
| Wi-Fi | Нода создаёт AP → подключитесь к вашей сети → IP отображается на экране | Стационарная нода, несколько устройств одновременно |
| USB/COM | Подключение через терминал (PuTTY, screen) | Домашняя нода, отладка, прямой доступ |
⚠️ Bluetooth: только одно активное подключение.
Wi-Fi: можно подключить несколько устройств одновременно (удобно для стационарных нод).
USB: надёжно для настройки и отладки, не требует беспроводного подключения.
Настройка через приложение на смартфоне (рекомендуется)#
- Установите Meshtastic (Android) или iOS-версию
- Запустите, дайте разрешения на локацию и Bluetooth
- Перейдите на вкладку «Устройства» (иконка роутера) → выберите тип подключения (Bluetooth, Wi-Fi или COM-порт), в зависимости от режима ноды (по умолчанию - Bluetooth) → нажмите
🔍 Сканирование или + Добавить - Подтвердите сопряжение
Альтернативные варианты настройки#
- На экране ноды отобразится IP-адрес (обычно
192.168.1.x) - Подключитесь к Wi-Fi сети ноды (пароль отображается на экране)
- Откройте в браузере
http://<IP_адрес_ноды> - Через веб-интерфейс можно просматривать данные (например, JSON-сообщения), но настройка ноды не выполняется здесь. Для конфигурации используйте:
- Приложение Meshtastic
- Приложение MeshApp
- CLI через Python (
meshtastic), подключаясь по USB, BLE или Wi-Fi
💡 IP-адрес: нода получает адрес от вашего роутера (не 192.168.4.1!). Точный адрес отображается на OLED-экране устройства.
👤 Настройка пользователя (User)#
Основные параметры#
| Параметр | Значение | Примечание |
|---|
| Long Name | [PE] ponfertato | Полное имя ноды, видно всем в сети (до 20 символов, можно кириллицу) |
| Short Name | ponf | Короткий идентификатор в сообщениях (строго 4 символа, латиница) |
| Role | CLIENT или 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 Address | mqtt.onemesh.ru | Сервер сообщества (домен, не IP) |
| Port | 8883 (TLS) / 1883 (без TLS) | Порт выбирается автоматически при включении TLS |
| Username | onemesh | По умолчанию; onemeshz / onemeshd - для downlink |
| Password | onecat | Общий для всех участников проекта |
| Encryption enabled | Да | Шифрование трафика в MQTT; требует PSK: AQ== в канале |
| JSON enabled | Нет | Не нужно для карты, создаёт лишнюю нагрузку |
| TLS enabled | Да | Шифрование соединения; если ошибки - попробуйте Нет + порт 1883 |
| Root topic | msh/RU/KST | KST = код города Кострома (список кодов) |
| Proxy to client | Да (Bluetooth) / Нет (Wi-Fi) | При прямом Wi-Fi прокси не нужен |
| Map reports | Да | Разрешить отправку отчётов для отображения на карте |
| I agree | Да | Подтверждение правил передачи геоданных |
| Precision | 729 m | Точность координат на публичной карте (~15 бит) |
| Map report interval | 3600 s (1 час) | Минимальный интервал отправки отчётов |
💡 Совет: если кнопка «Сохранить» неактивна - заполняйте настройки поэтапно: сначала базовые (адрес, логин, пароль), потом карту, потом дополнительные опции.
Режимы имён пользователя#
| Username | Downlink | Когда использовать |
|---|
onemesh | ❌ Отключён | Большинству пользователей - безопасный режим, только uplink |
onemeshz | ✅ Zero-hop | Если нужно получать данные из интернета, но не ретранслировать их по радио (политика нулевого хопа) |
onemeshd | ✅ Полный | Только для интеграций, соединения сегментов сети; не рекомендуется для обычных нод - создаёт нагрузку на эфир |
⚠️ Использование onemeshd с включённым Downlink может перегрузить локальную сеть пакетами из интернета. Используйте осознанно и только при понимании последствий.
Продвинутые параметры MQTT#
| Параметр | Значение | Примечание |
|---|
| Connection Retry Interval | 30 сек | Как часто пытаться переподключиться при обрыве |
| Keepalive Interval | 60 сек | Интервал проверки живости соединения |
| QoS Level | 0 | Quality of Service: 0 = fire-and-forget (оптимально для Meshtastic) |
| Retain Messages | Нет | Не сохранять последние сообщения на брокере |
| Topic Filter | msh/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 appearing | Downlink отключён на сервере для onemesh | Использовать onemeshz если нужен downlink |
📡 Настройка LoRa и каналов#
Раздел LoRa#
| Параметр | Значение | Зачем |
|---|
| Region | Russia | Автоматически задаёт частоту 433 МГц, мощность ≤20 dBm и корневую тему MQTT |
| Modem Preset | LongFast | Баланс дальности и скорости для городских условий |
| Frequency Slot | 2 | Публичный интервал для RU868 (избегать конфликтов) |
| Transmit Power | 20 dBm | Максимальная разрешённая мощность для любительской связи в РФ |
| Boosted RX Gain | Вкл | Улучшает приём слабых сигналов (критично для городской застройки) |
| Hop Limit | 5 | Максимальное число прыжков; достаточно для города, не перегружает эфир |
| Ignore MQTT | Нет | Принимать пакеты, пришедшие через интернет (от соседей с MQTT) |
| OK to MQTT | Да ⚠️ | Критично: разрешает соседям ретранслировать ваши данные на карту OneMesh |
Продвинутые параметры LoRa#
| Параметр | Значение | Примечание |
|---|
| Bandwidth | 250 kHz | Ширина канала; не менять при использовании пресетов |
| Spreading Factor | 11 | Фактор расширения; выше = дальше, но медленнее |
| Coding Rate | 5 (4/5) | Коррекция ошибок; баланс надёжности/скорости |
| Frequency Offset | 0.0 Hz | Коррекция частоты кристалла; менять только при калибровке |
| Override Duty Cycle | Нет | Не переопределять ограничения по времени в эфире |
| SX126x RX Boosted Gain | Вкл | Аппаратное усиление приёма на SX1262 |
Каналы (Channels) - детально#
Настройте основной канал (Primary, индекс 0):
| Параметр | Значение | Примечание |
|---|
| Role | Primary | Только один канал может быть первичным; через него идёт телеметрия устройства |
| Name | LongFast | Точно так: публичная сеть фильтрует пакеты по этому имени |
| PSK | AQ== | Базовый ключ шифрования для OneMesh (128 бит); обязателен при включённом шифровании в MQTT |
| Uplink enabled | Да | Отправлять данные с этого канала на MQTT-сервер |
| Downlink enabled | Нет | Не получать данные из MQTT (если не используете onemeshz/onemeshd) |
| Position enabled | Да | Передавать координаты через этот канал |
| Precise location | Нет | Скрывать точные координаты от других нод в канале |
| Precision | 182 m | Точность позиции, передаваемой в канале (~17 бит) |
| Muted | Нет | Не заглушать канал (иначе сообщения не будут видны) |
Вторичный канал (опционально, индекс 1)#
| Параметр | Значение | Примечание |
|---|
| Role | Secondary | Дополнительный канал для приватных групп или ботов |
| Name | [PE] Backup | Любое имя <12 байт (латиница) |
| PSK | (сгенерировать свой) | Приватный ключ для своей группы |
| Uplink / Downlink | Нет | Не отправлять в публичный MQTT |
| Position | Нет | Не передавать координаты в приватный канал |
| Precision | 45 m | Максимальная точность для приватного использования |
✅ Важно: хотя бы один канал должен иметь PSK: AQ== или быть без шифрования, чтобы сервер OneMesh принял пакеты.
💡 Вторичные каналы создаются через + в приложении. Они не мешают основному трафику и полезны для приватного общения.
Управление каналами: советы#
- Порядок каналов: Primary должен быть первым (индекс 0) - через него идёт системная телеметрия.
- Имена каналов: используйте латиницу, без пробелов и спецсимволов.
- PSK длины: поддерживаются 0 (нет шифрования), 8, 128, 256 бит. OneMesh требует
AQ== (8 бит). - Экспорт/импорт: настройки каналов можно экспортировать в JSON для быстрого развёртывания на других нодах.
📍 Местоположение (Position)#
Фиксированные координаты (для стационарных нод)#
| Параметр | Значение | Рекомендация |
|---|
| Fixed position | Включено | Для нод без GPS-модуля |
| Latitude | 57.742 | Широта Костромы, без лишних нулей (вводить как 57.742, не 57.742000) |
| Longitude | 40.978 | Долгота Костромы, аналогично |
| Altitude | 100 | Высота над уровнем моря (примерно, в метрах) |
💡 Координаты хранятся как integer × 1e7. В приложении вводите с 6 знаками после запятой.
Пакет позиции - интервалы и точность#
| Параметр | Значение | Зачем |
|---|
| Position broadcast interval | 7200 s (2 часа) | Баланс между актуальностью на карте и нагрузкой на эфир |
| Smart position | Нет | Фиксированный интервал надёжнее для стационарной ноды |
| Smart position min distance | 100 m | Мин. расстояние для отправки при включённой умной рассылке |
| Smart position min interval | 300 s | Мин. интервал для умной рассылки |
| Position flags | ALTITUDE + TIMESTAMP | Передавать только высоту и метку времени (меньше трафика) |
| Provide location to network | Да | Разрешить передачу координат в сеть (управляется через OK to MQTT) |
Продвинутые настройки позиции#
| Параметр | Значение | Примечание |
|---|
| GPS Enabled | Нет | Отключить, если нет модуля; экономит питание |
| GPS Update Interval | 60 сек | Как часто опрашивать GPS (если включён) |
| GPS Attempt Time | 0 | Не ограничивать время поиска спутников |
| RX/TX/Enable GPIO | 0 | Пины для внешнего GPS-модуля (по умолчанию) |
| Broadcast Smart Minimum Distance | 100 м | Мин. смещение для триггера умной рассылки |
| Broadcast Smart Minimum Interval | 300 сек | Мин. время между умными рассылками |
🔐 Для повышения приватности: уменьшите Precision в канале (182 m) и Map precision (729 m), либо задайте фиксированные координаты в стороне от реального местоположения.
⚙️ Дополнительные модули#
Информация об окружении (Neighbor Info)#
| Параметр | Значение | Примечание |
|---|
| Enabled | Да | Для отображения слоя «Соседи» на карте OneMesh |
| Update interval | 14400 s (4 часа) | Минимальный интервал, не сокращать - лишняя нагрузка на эфир |
| Transmit over LoRa | Нет | Не передавать данные о соседях по радио (только через MQTT) |
🗺️ На карте появятся слои «Кто слышал это устройство» и «Кого слышало это устройство» - полезно для анализа покрытия.
Устройство (Device) - роль и ретрансляция#
| Параметр | Значение | Когда использовать |
|---|
| Role | CLIENT_MUTE | В городах с >200 нод - безопасный режим без ретрансляции чужих пакетов |
| CLIENT | Если сеть маленькая или у вас хорошая антенна/расположение - можно помогать сети |
| Rebroadcast mode | CORE_PORTNUMS_ONLY | Ретранслировать только базовые типы пакетов (позиция, текст) - оптимально для города |
| ALL | Ретранслировать всё - только для тестов или очень маленьких сетей |
| Node info broadcast interval | 43200 s (12 часов) | Как часто рассылать информацию о себе; 12 ч - достаточно для мониторинга |
| Double tap as button | Нет | Защита от случайных срабатываний |
| Disable triple click | Да | Защита от ложных маяков (beacon) |
| LED heartbeat disabled | Нет | Визуальный контроль работы (мигание светодиода) |
Продвинутые настройки устройства#
| Параметр | Значение | Примечание |
|---|
| Button GPIO | 0 | Пин кнопки (по умолчанию) |
| Buzzer GPIO | 0 | Пин бузера (по умолчанию) |
| Buzzer Mode | ALL_ENABLED | Режим бузера: DISABLED, ALERTS_ONLY, ALL_ENABLED |
| TZDEF | GMT-3 | Часовой пояс для локального времени |
| Is Managed | Нет | Управляемый режим (только для админ-нод) |
| Serial Enabled | Нет | Последовательная консоль (для отладки) |
| Debug Log API | Нет | Вывод отладочных логов (не для продакшена) |
Часовой пояс#
| Параметр | Значение | Примечание |
|---|
| Timezone | GMT+3 (Москва) | Для корректного отображения времени в логах и метках |
| Use phone timezone | Кнопка | Нажать, чтобы подставить часовой пояс из настроек телефона |
Питание (Power) - для стабильности#
| Параметр | Значение | Примечание |
|---|
| Power Saving Mode | Нет | Стационарная нода с питанием от USB |
| On Battery Shutdown After | 0 сек | Не выключать при потере питания (если есть ИБП) |
| ADC Multiplier Override | 1.0 | Калибровка напряжения батареи |
| Wait Bluetooth Secs | 0 | При прямом WiFi не ждать BLE-подключения |
| Min Wake Secs | 30 | Мин. время активности после получения пакета |
| INA219 Address | 0 | Адрес монитора питания (автоопределение) |
Дисплей (Display) - оптимизация OLED#
| Параметр | Значение | Примечание |
|---|
| Screen Timeout | 60 сек | Тайм-аут OLED для экономии |
| GPS Format | UNUSED | Формат координат на экране (не используется при фиксированной позиции) |
| Auto Screen Carousel | 0 | Отключить автопереключение окон |
| Compass North Top | Да | Фиксировать север сверху на компасе |
| Flip Screen | Нет | Не переворачивать экран (по ориентации корпуса) |
| Units | METRIC | Метрическая система (°C, м, км/ч) |
| OLED Type | OLED_AUTO | Автоопределение контроллера дисплея |
| Display Mode | DEFAULT | Стандартный режим отображения |
| Heading Bold | Да | Жирный заголовок для лучшей читаемости |
| Wake on Tap or Motion | Нет | Отключить пробуждение по движению (нет акселерометра на V4) |
Bluetooth - при отключённом WiFi#
| Параметр | Значение | Примечание |
|---|
| Enabled | Нет | При включённом WiFi Bluetooth отключается автоматически на ESP32 |
| Pairing Mode | FIXED_PIN | Если нужно включить - использовать фиксированный PIN |
| Fixed PIN | 123456 → смените! | Обязательно измените на случайный 6-значный код |
Сеть (Network) - WiFi для стационарной ноды#
| Параметр | Значение | Примечание |
|---|
| WiFi Enabled | Да | Прямое подключение к роутеру |
| SSID / PSK | <ваши данные> | Только 2.4 GHz сети |
| Enable Local UDP Broadcast | Нет | Не требуется для OneMesh |
| NTP Server | pool.ntp.org | Надёжнее, чем meshtastic.pool.ntp.org |
| Address Mode | DHCP | Автополучение IP |
| IPv6 Enabled | Нет | Не используется в текущей конфигурации |
⚠️ При включённом WiFi Bluetooth автоматически отключается на архитектуре ESP32.
🧩 Настройки модулей (продолжение)#
Телеметрия (Telemetry)#
| Параметр | Значение | Примечание |
|---|
| Send Device Telemetry | Да | Включить для мониторинга статуса ноды |
| Device Metrics Interval | 900 сек (15 мин) | Как часто отправлять метрики устройства |
| Power Metrics Enabled | Да | Критично для мониторинга питания |
| Power Metrics Interval | 300 сек (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 | Нет | Не требуется для стационарной ноды |
🔑 Критичные флаги и порядок применения#
- Имя канала: Primary должен называться строго
LongFast. - PSK:
AQ== в основном канале обязателен для фильтрации OneMesh. - OK to MQTT:
Вкл - без этого соседи не смогут ретранслировать ваши пакеты на сервер. - Порядок сохранения (обход багов UI):
- LoRa → Region → сохранить
- Каналы → имя + PSK + Uplink/Downlink → сохранить
- MQTT → базовые параметры → сохранить
- MQTT → Отчёты по карте → сохранить отдельно
- Местоположение / Устройство / Питание → сохранить
- Перезагрузить ноду
- Проверка:
- В приложении: MQTT → статус
Подключено - На карте: нода появляется в течение 1–3 часов
- В чате
LongFast: видны сообщения от соседей
🔧 Оптимизация процесса прошивки#
Для Heltec V4 (обход бага загрузчика)#
Из-за особенности загрузчика Heltec V4, стандартный порядок не всегда работает. Оптимальный процесс:
- Отключите батарею и USB от платы
- Откройте веб-флешер
- Выберите device:
Heltec V4, firmware: 2.7.21 - Нажмите Erase Flash and Install
- Зажмите кнопку
PRG на плате - Не отпуская
PRG, подключите USB-кабель - Наблюдайте: краткая красная вспышка → в списке портов появится
USB JTAG - Отпустите
PRG, выберите USB JTAG, нажмите Connect - Дождитесь окончания прошивки
- После
Leaving... нажмите кнопку RST (сброс)
💡 Примечание: этот процесс описан в meshtastic/firmware#8543
📤 Первые сообщения между двумя нодами#
Подготовка#
- Прошейте обе платы по инструкции выше
- На каждой настройте:
- Один и тот же регион (
Russia) - Один и тот же канал с одинаковым
PSK (AQ==) Position enabled: Yes (для теста)
- Разместите ноды на расстоянии 10–50 м (для первого теста)
Тест#
- На первой ноде в приложении:
Messages → + → введите текст → Send - На второй ноде: должно появиться входящее сообщение
- Проверьте вкладку
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 |
🆘 Помощь и сообщество#