MeshTRX — Руководство пользователя
Приложение 4.4.5 | Прошивка 4.4.4 | Обновлено: 2026-08-31
Содержание
- Обзор
- Аппаратура
- Первое подключение 3.1. Настольный клиент
- Главный экран
- Голосовая связь (PTT)
- Режимы прослушивания
- Система вызовов
- Текстовые сообщения
- Передача файлов
- Карта и радар
- Настройки 11.1. Шифрование эфира
- Режим ретранслятора
- Кнопка на устройстве
- Индикация
- Технические характеристики
Обзор
MeshTRX — децентрализованная голосовая mesh-сеть на LoRa + BLE. Два (или более) устройства Heltec WiFi LoRa 32 связываются по LoRa на расстоянии до 5+ км. К каждому устройству подключается по Bluetooth BLE либо Android-смартфон, либо компьютер с настольным клиентом.
[Телефон A] <--BLE--> [Heltec A] <--LoRa 868МГц--> [Heltec B] <--BLE--> [Компьютер B]
Что можно делать
- Голосовая связь в режиме PTT или VOX
- Текстовые сообщения (до 84 символов)
- Передача фото и файлов (до 100 КБ)
- Отображение станций на карте и тактическом радаре
- Общие, личные и групповые вызовы
- Режим ретранслятора с WiFi-мониторингом
- 23 канала в диапазоне 863–870 МГц (на платах V3 433 МГц — 5 каналов 433 МГц)
- Работа с телефона (Android) или с компьютера (Windows, Linux, macOS)
Аппаратура
Устройство: Heltec WiFi LoRa 32 (V3 или V4)
| Параметр | Значение |
|---|---|
| MCU | ESP32-S3 (WiFi + BLE 5.0) |
| LoRa | Semtech SX1262 |
| Дисплей | OLED 128x64 (I2C) |
| Диапазон | 863–870 МГц (EU868); V3 на 433 МГц — 433,075–434,79 МГц |
| Питание | USB-C или LiPo аккумулятор |
| Мощность TX | 1–22 дБм (настраивается) |
Поддерживаются обе ревизии платы. Прошивка у них разная — берите файл, в имени которого указана ваша:
| Плата | Что внутри | Файл прошивки |
|---|---|---|
| V3 | SX1262 без внешнего усилителя | firmware-v3-<версия>.bin |
| V3 на 433 МГц | то же, исполнение на 433 МГц | firmware-v3-433-<версия>.bin |
| V4 rev 4.2 | усилитель GC1109 | firmware-v4-<версия>.bin |
| V4 rev 4.3 | усилитель KCT8103L | firmware-v4.3-<версия>.bin |
Ревизия напечатана мелким шрифтом на обратной стороне платы, у разъёма GPS: надпись вида «HTIT-WB32LAF V4.3». Прошивка от чужой ревизии запустится, но усилитель будет управляться не тем выводом: устройство станет слышать хуже или не выйдет в эфир вовсе.
Платы на 433 МГц (с версии 4.4.34, пока бета). Heltec V3 выпускается и в
исполнении на 433 МГц — у него своя прошивка firmware-v3-433. Она работает в
диапазоне LPD: 5 каналов 433,225–434,425 МГц с шагом 300 кГц, мощность не
больше 10 дБм (10 мВт). Приложение узнаёт диапазон у рации и само показывает
нужные каналы. Рации на 433 и на 868 МГц друг друга не слышат: у всей группы
должны быть платы одного диапазона. Антенна нужна на 433 МГц.
Что нужно
- 2+ устройства Heltec WiFi LoRa 32 (V3 или V4)
- на каждое устройство — Android-телефон (5.0+) или компьютер с настольным клиентом
- USB-C кабель для прошивки
- антенна на диапазон платы (868 или 433 МГц), прикрученная до подачи питания: передача без антенны выводит из строя выходной каскад
- по желанию — аккумулятор Li-Po 3,7 В с разъёмом JST 1,25 мм и корпус. Плата та же, что у Meshtastic, поэтому подходят корпуса для неё. Для V3 удобен H1 Case — проверен автором проекта
Первое подключение
1. Прошивка устройства
Проще всего — прошить прямо из браузера: откройте страницу прошивки в Chrome или Edge, подключите устройство по USB и выберите свою ревизию платы. Если на плате раньше стоял Meshtastic или MeshCore, отметьте «Стереть плату полностью»: их остатки в памяти мешают подключению по Bluetooth — телефон подключается и сразу отключается. Если это уже случилось, после прошивки с полным стиранием удалите плату в настройках Bluetooth телефона и подключитесь из приложения. Готовые файлы лежат на странице загрузки, если хотите прошивать своими средствами (см. таблицу ревизий выше). Из исходников:
cd firmware
pio run -e heltec_wifi_lora_32_V3 --target upload --upload-port /dev/ttyUSB0 # V3
pio run -e heltec_wifi_lora_32_V4 --target upload --upload-port /dev/ttyUSB0 # V4 rev 4.2
pio run -e heltec_wifi_lora_32_V43 --target upload --upload-port /dev/ttyUSB0 # V4 rev 4.3
После обновления прошивки обновите и приложение: они договариваются по общему протоколу, и старая пара «новая прошивка + старое приложение» может не найти друг друга по Bluetooth.
Прошивка вручную, через esptool. Понадобится, если браузерный мастер не подходит (нет Chrome или Edge, прошиваете с другого компьютера). Одного файла прошивки мало — после полного стирания на плате не остаётся ни загрузчика, ни таблицы разделов, и она уходит в бесконечную перезагрузку. Нужны четыре файла, каждый по своему адресу:
# esptool 5.x — команда и ключи через дефисы
esptool --chip esp32s3 --port COM3 --baud 921600 \
write-flash -z --flash-mode dio --flash-freq 80m --flash-size 16MB \
0x0 bootloader-v4.bin \
0x8000 partitions-v4.bin \
0xe000 boot_app0.bin \
0x10000 firmware-v4.3-<версия>.bin
# esptool 4.x — то же самое, но через подчёркивания
esptool.py --chip esp32s3 --port COM3 --baud 921600 \
write_flash -z --flash_mode dio --flash_freq 80m --flash_size 16MB \
0x0 bootloader-v4.bin \
0x8000 partitions-v4.bin \
0xe000 boot_app0.bin \
0x10000 firmware-v4.3-<версия>.bin
Версию покажет esptool version. В пятой версии команды и ключи переехали на
дефисы, а сам вызов стал просто esptool; со старым написанием она откажется
работать.
Два места, где ошибаются чаще всего:
- Загрузчик у ESP32-S3 лежит по адресу
0x0, а не0x1000. Адрес0x1000— от старого ESP32; с ним плата включается и сразу перезагружается, по кругу. - У V4 флеш на 16 МБ, поэтому
--flash_size 16MB. У V3 — 8 МБ, и файлы загрузчика с таблицей разделов у него свои:bootloader.binиpartitions.bin.
Все четыре файла лежат на странице загрузки, в блоке «Ручная прошивка V4» под кнопками с прошивками.
2. Установка приложения
Скачайте APK со страницы загрузки и разрешите установку из неизвестных источников — Android спросит об этом сам. Все версии подписаны одним ключом, поэтому обновление ставится поверх предыдущего, без удаления.
Из исходников:
cd android/MeshTRX
./gradlew assembleDebug
adb install -r app/build/outputs/apk/site/debug/app-site-debug.apk
3. Подключение по BLE
- Откройте приложение MeshTRX
- Перейдите на вкладку Настройки
- Нажмите Подключить — начнётся сканирование
- Устройство появится как MeshTRX-XXXX
- На экране устройства нажмите кнопку (>1 сек) — появится PIN
- Введите PIN в приложении
- Статус изменится на ● Подключено (зелёный)
Если телефон не видит устройство в списке Bluetooth. Проверьте, что и телефон, и устройство на свежих версиях: до 4.4.3 устройство выходило в эфир без имени, поэтому телефон его не видел и не показывал в списке. Обновите обе стороны — по отдельности не поможет. Если не помогло, выключите и включите питание устройства: брошенное соединение оно отпускает само, но не мгновенно.
Настольный клиент (Windows / Linux / macOS)
С компьютера доступно то же, что с телефона: голос, сообщения, вызовы, файлы, радар, карта, настройки и ретранслятор. Плюс журнал диагностики, которого в телефоне нет.
python3 -m venv .venv
.venv/bin/pip install -r desktop/requirements.txt
.venv/bin/python desktop/run.py
Клиенту нужна системная библиотека Codec2 (libcodec2 в Linux и macOS,
codec2.dll рядом с программой в Windows). Если её нет, клиент скажет об этом
при запуске, а не останется молча без голоса.
Передача голоса — удержание кнопки мышью или пробелом, с тем же пределом в 10 секунд и тем же обратным отсчётом, что в телефоне. Подробности и разбор устройства программы — в desktop/README.md.
Главный экран
Экран собран под то, как рацией пользуются на самом деле: наверх смотрят, а нажимают внизу. Поэтому сверху вниз идут сводка о сети, режимы приёма, список последних вызовов, выбор адресата, строка состояния и только потом — кнопка Говорить, у самого низа, под большим пальцем. У настоящих раций кнопка вынесена на боковую грань и нажимается не глядя; на телефоне такого нет, и единственное, что можно сделать, — не заставлять тянуться к середине экрана.
Сводка о сети
Две строки над всем остальным отвечают на вопрос «с кем я вообще сейчас на связи»:
слышно 3 станции · ретранслятор TX-C4C8 (-71 dBm)
последний: ANDREY, 2 мин назад · -88 dBm, SNR 7
- сколько станций слышно — те, от кого приходили маяки или передачи за время жизни абонента из настроек (по умолчанию час). Станция, замолчавшая давно, в счёт не идёт: она в сети уже не участвует;
- ретранслятор — отдельной строкой, с уровнем сигнала до него. Это главное, что стоит знать перед разговором: если ретранслятор слышно, ваш голос дотянется дальше собственной слышимости. Рация в режиме ретранслятора помечает себя в маяке сама, приложению не нужно ничего настраивать;
- последнее движение в эфире — кто выходил на связь, как давно и с каким уровнем. По уровню видно не только «слышал», но и «дотянется ли ответ»: −60 дБм это запас, −110 это предел.
Если вместо числа стоит ≥0 дБм, это не сбой и не отсутствие сигнала, а наоборот: станция так близко, что шкала кончилась. Приёмник считает уровень как минус половину беззнакового числа, поэтому выше нуля подняться не может — раньше в этом месте показывался голый ноль, и его читали ровно наоборот.
Позывного и канала здесь нет намеренно — они строкой выше, в шапке приложения.
Голосовая связь (PTT)
Кодек
Используется Codec2 3200 bps — обеспечивает разборчивую речь при минимальном использовании радиоканала.
| Параметр | Значение |
|---|---|
| Битрейт | 3200 bps |
| Фрейм | 20 мс / 8 байт |
| Пакет | 4 фрейма = 32 байта = 80 мс |
| LoRa-пакет | 39 байт (7 заголовок + 32 аудио) |
| Время в эфире | ~53 мс |
Задержка складывается из нескольких мест. Первое неустранимо: пока не набралось 80 мс речи, отправлять нечего — это нижняя граница, заданная размером пакета. Дальше добавляется передача в устройство по Bluetooth (интервал соединения 30–50 мс), время пакета в эфире, обратный путь по Bluetooth и буфер воспроизведения. Сквозную задержку на живом железе мы не мерили, поэтому числа здесь не приводим: разговор идёт как по рации — сказал, отпустил, дождался ответа.
Сколько можно говорить: предел 10 секунд
Одна передача занимает канал целиком. LoRa работает в полудуплексе: пока кто-то говорит, остальные не могут ни ответить, ни позвать на помощь — их просто не слышно. Поэтому длительность речи ограничена десятью секундами во всех режимах:
| Где | Что происходит на десятой секунде |
|---|---|
| Удержание кнопки (PTT) | передача прекращается сама, на кнопке идёт обратный отсчёт; чтобы продолжить, отпустите кнопку и нажмите заново |
| Голосовая активация (VOX) | то же самое, с тем же отсчётом на кнопке; чтобы продолжить, сделайте паузу — передача начнётся с новой фразы |
| Голосовое сообщение в чате | запись останавливается, сообщение уходит как есть |
| Адресный голос | то же самое: пишется до 10 секунд и отправляется файлом |
Предел продублирован в самом устройстве, а не только в приложении: если
телефон завис или кнопка залипла, рация всё равно замолчит на десятой секунде
и освободит канал. На экране устройства при этом появится LIMIT 10s.
Говорить дольше — просто нажать кнопку ещё раз. Пауза между передачами нужна и по существу: за это время собеседник успевает ответить, а сеть — пропустить чужие сообщения и вызовы.
Режим PTT (Push-To-Talk)
- Убедитесь что переключатель PTT/VOX в положении PTT
- Нажмите и удерживайте большую круглую кнопку
- Говорите — статус покажет ● передача… осталось N с
- Отпустите кнопку — передача прекратится
- Собеседник услышит короткий двухтональный сигнал окончания передачи (его можно выключить в настройках, раздел «Аудио»)
Если не отпустить, на десятой секунде передача завершится сама.
Режим VOX (голосовая активация)
- Переключите PTT/VOX в положение VOX
- Передача начнётся автоматически при обнаружении голоса
- Статусы:
...(атака) →>>> TX <<<(передача) →TX (пауза)(затухание)
Настройки VOX (вкладка Настройки):
- Порог VOX (0–5000) — чувствительность, чем ниже тем чувствительнее
- Задержка VOX (200–2000 мс) — пауза перед окончанием передачи
Громкая связь
Кнопка динамика (справа сверху от PTT кнопки):
- Зелёная — динамик включён (по умолчанию)
- Серая — динамик выключен (звук через наушник)
Шумоподавление (PTT RMS)
В настройках слайдер PTT RMS (0–1000):
- 0 — отключено (передаётся всё, по умолчанию)
- 50–300 — лёгкая фильтрация фонового шума
- 300+ — агрессивная фильтрация (только громкая речь)
Громкость приёма
Слайдер Громкость приёма в настройках (50%–300%, по умолчанию 200%).
Режимы прослушивания
На PTT экране вверху две кнопки:
| Режим | Описание |
|---|---|
| Все | Слышите все передачи на канале |
| Мои | Слышите только адресованные вам вызовы |
Активный режим подсвечен зелёным.
Система вызовов
Типы вызовов
| Тип | Кнопка | Описание |
|---|---|---|
| Общий | ОБЩИЙ (синяя) | Вызов всем на канале |
| Личный | ВЫЗВАТЬ (зелёная) | Вызов конкретному абоненту |
| Групповой | Через picker | Вызов группе (до 8 участников) |
Как вызвать
- Общий вызов: нажмите кнопку ОБЩИЙ — все на канале получат уведомление
- Личный вызов: нажмите ВЫЗВАТЬ → выберите абонента из списка → вызов отправлен
- Входящий вызов: появится overlay с кнопками ПРИНЯТЬ / ОТКЛОНИТЬ
Последние вызовы
Внизу PTT экрана — скроллируемый список последних вызовов:
- Показывает уникальные записи (дубли заменяются)
- Направление: → исходящий, ← входящий
- Цвет по типу: синий (общий), зелёный (личный), жёлтый (группа)
- Нажатие — повторный вызов
Счётчики на вкладках
Красная цифра на вкладке PTT — сколько вызовов пропущено: вызов закончился, а вы его не приняли и не отклонили. Цифра на вкладке Чат — сколько пришло сообщений (текстовых и голосовых), пока чат не был открыт. Цифра пропадает, когда открываете вкладку.
Текстовые сообщения
Отправка
- Перейдите на вкладку Чат
- Введите текст (до 84 символов)
- Нажмите кнопку отправки (зелёная стрелка)
- По умолчанию — broadcast на канал
Адресная отправка
- Нажмите кнопку @ рядом с полем ввода
- Выберите получателя из списка
- Над полем ввода появится Кому: [имя]
- Сообщение получит только адресат
Рядом со временем у адресного сообщения стоит отметка:
| Отметка | Что значит |
|---|---|
| ⏳ | ждём ответа от рации адресата |
| ✓ (зелёная) | доставлено: сообщение уже на телефоне адресата |
| ✓ принято нодой | рация адресата приняла, но его телефон сейчас не подключён — сообщение ждёт на рации и появится у человека, когда он подключится |
| ↑ | ушло в эфир, ответа нет — сообщение могло дойти, а потеряться мог сам ответ |
| ✗ | не ушло даже на свою рацию — нажмите на сообщение, чтобы отправить снова |
Голосовые сообщения
Справа от поля ввода — кнопка с микрофоном. Удерживайте её и говорите, отпустите — запись до 10 секунд уйдёт в чат. Её видно в переписке с кнопкой ▶, и прослушать её можно сколько угодно раз — и вам, и получателю.
- Кому: Всем (с прошивки 4.4.35) — запись получат все рации на канале. Подтверждать её некому, поэтому рация передаёт короткую запись дважды. Рации со старой прошивкой такое сообщение не примут — обновите прошивку у всей группы.
- Кому: [имя] — запись получит только адресат, с отметкой о доставке, как у текста.
Если телефон был отключён от рации
Рация хранит входящие сообщения, пока к ней не подключён телефон, и отдаёт их при подключении — с тем временем, когда они пришли. Место ограничено: на V3 около двухсот обычных сообщений, на V4 — несколько тысяч. Когда место кончается, вытесняются самые старые. Буфер живёт в памяти и при выключении рации пропадает. Работает с прошивки 4.4.32.
Уведомления
Когда приложение свёрнуто, о входящем сообщении приходит системное уведомление. Личные и общие разделены: адресованное лично вам приходит со звуком, сообщение в общий чат — тихо. В настройках, раздел «Уведомления о сообщениях», можно выбрать «обо всех», «только о личных» или выключить вовсе.
Пока приложение открыто, уведомлений нет: сообщения и так видны в чате.
Разделение работает с прошивки 4.4.31 — до неё рация не сообщала телефону, кому адресовано сообщение, и всё считается общим.
Очистка истории
Кнопка с корзиной в строке фильтра удаляет всю переписку с этого телефона. Приложение спросит подтверждение.
Сообщения хранятся только на вашем телефоне: у собеседников останутся свои копии, и вернуть удалённое нельзя.
Фильтрация
Используйте выпадающий список фильтра для просмотра сообщений от конкретного абонента или всех.
Передача файлов
Отправка фото
- Перейдите на вкладку Файлы
- Нажмите Фото — откроется галерея
- Выберите фото — приложение само уменьшит его до 320×426 точек, пережмёт в JPEG и срежет метаданные; на выходе обычно 5–20 КБ
- Подтвердите отправку
- Прогресс виден в списке
Отправка файлов
- Нажмите Файл — откроется файловый менеджер
- Выберите файл (макс. 100 КБ)
- Передача стартует автоматически
Параметры передачи
| Параметр | Значение |
|---|---|
| Макс. размер | 100 КБ |
| Размер чанка | 120 байт |
| Интервал | 100 мс |
| Скорость | ~1.2 КБ/с |
| 11 КБ фото | ~10 секунд |
Сто килобайт — это потолок для любого файла, а не размер, до которого дожимается снимок: подготовленное приложением фото занимает 5–20 КБ и уходит секунд за десять. Потолок стоит по двум причинам сразу. Первая — память устройства: файл целиком лежит в оперативке рации, а её там около сотни килобайт свободной, поэтому запрос на больший размер прошивка отклоняет, а не обрывает передачу на середине. Вторая — эфир: канал один и полудуплексный, и всё время передачи остальные не могут ни поговорить, ни отправить сообщение. Отсюда и правило: чем меньше файл, тем меньше вы занимаете общий канал.
Действия с файлами
Нажмите на файл в списке:
- Поделиться — отправить в другое приложение
- Повторить — повторная отправка
- Удалить — удалить из истории
Карта и радар
Карта (OpenStreetMap)
- Отображает ваше местоположение и все обнаруженные станции
- Маркеры с позывными и уровнем сигнала
- Пунктирные линии к станциям (цвет по давности)
- Кнопки:
- Я — центрировать на своей позиции
- Все — показать все станции
Радар (тактический)
- Чёрный фон с зелёными кольцами дальности
- Компасная ориентация (реальный азимут)
- Станции отображаются относительно вашей позиции
- Кнопки масштаба +/− (100м–100км)
- Кнопка переключения контраста (обычный/яркий для улицы)
- Автомасштаб по дальней станции (5 км по умолчанию)
- Яркость по RSSI
- Позывной на точке
GPS
Используется Android LocationManager (работает без GMS). Обновление каждые 15 секунд. Статус GPS отображается на экране карты.
Настройки
Подключение
- Подключить/Отключить — управление BLE соединением
- Новое устройство — забыть текущее и найти новое
Позывной
- До 8 символов, отображается в шапке и в beacon
Радио
- Канал (0–22) — выбор рабочей частоты (863.15–869.75 МГц)
- Найти свободный канал — рация проходит по всем каналам, слушает эфир и показывает, где тише всего. Диапазон 868 МГц в городе людный: там работают домофоны, метеостанции, счётчики, сигнализации, и занятый канал бьёт прежде всего по голосу — ему нужно провести подряд десяток пакетов, тексту хватает одного удачного окна. Сканирование занимает пару секунд, приём на это время прерывается
- Сменить канал у всех — переводит на выбранный канал всю группу разом: рация рассылает команду в эфир, и все, кто её слышит (включая ретранслятор), переходят одновременно через 10 секунд. Обходить каждое устройство руками не нужно — а это и не всегда возможно, часть раций в этот момент у других людей. Тот, кто команду не услышал, остаётся на прежнем канале; тот, кто перешёл, но за две минуты никого на новом канале не услышал, сам возвращается обратно — так рация не остаётся в одиночестве там, куда за ней никто не пришёл
- Мощность TX (1–22 дБм) — дальность передачи
- Duty Cycle EU868 — ограничение 1% для соответствия EU нормам
Аудио
- Громкость приёма (50–300%)
- PTT RMS (0–1000) — шумоподавление
- Звук окончания передачи — короткий сигнал, которым заканчивается чужая речь. Можно выключить, если мешает; настройка запоминается (с версии 4.4.5)
- Порог VOX (0–5000)
- Задержка VOX (200–2000 мс)
Тембр самого голоса не настраивается: в эфир он идёт кодеком Codec2 с постоянной скоростью 3200 бит/с, и «модуляции» как отдельной регулировки нет. Разборчивость меняют громкостью приёма и порогом PTT RMS: чем выше порог, тем больше тихих звуков отсекается до передачи.
Начиная с версии 4.4.5 все настройки этого раздела запоминаются и переживают перезапуск приложения. В более ранних версиях они сбрасывались к заводским после каждого закрытия — если подобранный порог VOX «сам собой» возвращался к 800, дело было в этом.
Beacon
- Интервал отправки маячка (Никогда / 1–60 мин / 1 час)
Список станций
- Таймаут удаления неактивных (15 мин – 24 часа)
История файлов
- Срок хранения (7 / 14 / 30 / 90 дней / Без ограничений)
Ретранслятор
- См. раздел Режим ретранслятора
Оформление
- Основное (сине-жёлтое) / Хаки — приложение сразу перерисовывается в выбранных цветах
Язык
- Русский / English — переключение мгновенное
Применить и сохранить
Кнопка отправляет настройки радио на устройство и сохраняет в NVS.
Обновления
В настройках, внизу, приложение показывает, что вышло: «Проверить обновления». Раз в сутки оно спрашивает сайт само и, если появилась новая версия, пишет «Вышло приложение 4.4.13, у вас 4.4.12» и показывает кнопку Скачать. Она открывает файл на сайте; установку Android всё равно подтверждает у вас — обойти это нельзя.
Версию прошивки видно в трёх местах: на экране рации при включении, в настройках приложения (строка «Устройство») и на странице ретранслятора, если рация работает ретранслятором.
Там же, в настройках, видно, какая прошивка стоит на вашей рации и какая вышла. Рация называет свою версию сама при подключении, начиная с 4.4.22; если она старше, строки про прошивку не будет — рации до 4.4.22 своей версии не знали.
Прошивка кнопкой не обновляется: её по-прежнему шьют с компьютера. Приложение только предупреждает, что вышла новее.
Если интернета нет, проверка молча ничего не делает: рация нужна как раз там, где сети нет, и ругаться на это в каждом запуске незачем.
Шифрование эфира
По умолчанию эфир открыт: любой человек с такой же рацией на том же канале слышит разговор целиком. Чтобы этого не было, задайте кодовое слово группы — «Настройки» → «Шифрование эфира».
Как это работает:
- рация сама выводит из кодового слова полноценный ключ; фраза никуда не передаётся и в телефоне не хранится;
- то же слово нужно ввести на всех рациях группы, включая ретранслятор;
- под словом появляется отпечаток — четыре знака. Он одинаков у всех, у кого ключ совпал, поэтому сверять ключ можно вслух, не диктуя само слово;
- вывод ключа занимает около трёх секунд — это нормально, так устроена защита от перебора;
- слово должно быть не короче восьми символов, и лучше, если это несколько слов: короткую фразу подбирают за вечер.
Что шифруется сейчас: голос и текстовые сообщения. Файлы и маяки пока идут открытыми — значит позывной и координаты видны постороннему. Об этом честно сказано здесь, чтобы вы не рассчитывали на большее, чем есть.
Если рядом говорят чужим ключом, приложение об этом скажет: под отпечатком появится строка «рядом говорят, но другим ключом». Это главный признак того, что фразы разошлись — например, клавиатура добавила пробел в конце. Сверьте отпечаток на всех рациях: он совпадает только там, где совпало слово.
Слышать и открытый эфир. Если вам нужен и общий незашифрованный чат, и разговор со своими под ключом, включите этот переключатель рядом с кодовым словом. Открытые сообщения снова станут видны и будут помечены красными словами «без шифра» — чтобы защищённое и незащищённое не выглядели одинаково. По умолчанию переключатель выключен, и вот почему:
Рация с ключом не слушает открытый эфир. Если кодовое слово задано, голос и сообщения без шифра отбрасываются — в том числе от своих, у кого ключ не поставлен или стоит старая прошивка. Иначе достаточно одной такой рации, чтобы разговор шёл мимо шифрования, а люди считали, что он закрыт. Поэтому ключ задают на всех сразу и сверяют отпечаток: он одинаков только у тех, у кого слово совпало.
Ретранслятору ключ не нужен: он пересылает пакеты, не заглядывая внутрь. Если ретранслятор чужой, он всё равно донесёт ваш разговор, но не услышит его.
Чего шифрование не даёт. Оно не спасает от того, у кого ключ уже есть: ключ один на группу, и при уходе человека его меняют у всех. Оно не спасает от физического доступа к плате — ключ лежит в её памяти. И оно совсем не скрывает сам факт передачи: радиоразведка видит, что кто-то вышел в эфир и сколько говорил, даже не понимая слов. Подробный разбор — в статье «Шифрование в 39 байтах».
Режим ретранслятора
Устройство может работать как автономный ретранслятор — принимает пакеты LoRa и пересылает их с уменьшением TTL.
Работающий ретранслятор помечает себя в маяке, поэтому у станций рядом он виден отдельной строкой в сводке на главном экране: «ретранслятор TX-C4C8 (−71 дБм)». Настраивать для этого ничего не нужно, но рации должны быть на прошивке 4.4.18 или новее, а приложение — 4.4.11 или новее.
Сколько голоса проходит через ретранслятор
Через ретранслятор проходит примерно половина голосовых пакетов, и это не дефект. Он работает в том же канале и том же полудуплексе, что и все: пока повторяет чужой пакет, следующий он не слышит. Голосовой пакет занимает эфир около 53 мс, а отправляется каждые 80 мс — одна говорящая станция забирает две трети канала, повтор удваивает нагрузку, и она перестаёт помещаться.
Для речи это терпимо: пропуск в 80 мс слышен как щелчок, а не как дыра. Для файлов было бы плохо, поэтому файлы идут с подтверждением и дозапросом потерянных кусков.
Практический вывод: ретранслятор увеличивает охват, но не ёмкость эфира. Три ретранслятора, слышащие друг друга, голос в одном канале не пронесут — для такой сети нужны зоны и отдельная линия между ретрансляторами, и это пока в планах.
Что ретранслируется
| Тип пакета | Ретрансляция |
|---|---|
| Голос (0xA0) | Да |
| Текст (0xB0) | Да |
| Файлы (0xC0, 0xC1, 0xC3) | Да |
| Beacon (0xD0) | Да |
| Вызовы (0xE0–0xE6) | Да |
| File ACK (0xC2) | Нет |
Включение
- Перейдите в Настройки → секция Ретранслятор
- Опционально введите WiFi SSID и пароль для подключения к сети
- Опционально введите статический IP
- Нажмите ВКЛЮЧИТЬ РЕТРАНСЛЯТОР
- Подтвердите в диалоге
- Устройство перезагрузится в режиме ретранслятора
WiFi мониторинг
После включения устройство поднимает WiFi:
- Без SSID: создаёт точку доступа
MeshTRX-Repeater(пароль:meshtrx123) - С SSID: подключается к указанной сети и гасит собственную точку — лишний передатчик рядом с приёмником мешает приёму. Если сеть пропала дольше чем на полминуты, точка поднимается обратно
Веб-интерфейс доступен по адресу:
- AP режим:
http://192.168.4.1 - STA режим: по указанному или полученному IP
Кого слышит ретранслятор: радар и карта
По ссылке «Кого слышит ретранслятор» открывается список станций, чьи маяки он принимает: позывной, уровень сигнала, заряд батареи и когда слышали в последний раз. Там же две картинки на выбор.
Радар рисуется прямо в браузере и работает всегда, даже когда у ретранслятора нет интернета. Кольца — расстояние, точки — станции; за центр берётся первая станция с координатами, потому что у самого ретранслятора GPS нет. Станции, о которых не слышали больше десяти минут, показываются тусклее.
Карта — обычный OpenStreetMap с метками. Тайлы подгружает браузер того, кто смотрит страницу, поэтому карта появится, только если у ретранслятора есть доступ в интернет; иначе останьтесь на радаре, он показывает то же самое.
Координаты берутся из маяков, которые станции рассылают сами. Маяк по умолчанию уходит раз в 5 минут, так что метка может отставать — рядом всегда написано, когда станцию слышали.
Подключение ретранслятора к домашней сети
Ретранслятор поднимает свою точку доступа MeshTRX-Repeater, а может вместо
неё подключиться к обычной сети — тогда на его странице заработает карта, а сам
он станет доступен из этой сети по своему адресу. Годится любая сеть, в том
числе раздача с телефона: ретранслятору нужен лишь выход в интернет для тайлов
карты.
В разделе «Сеть» на странице: Обновить список — поиск сетей вокруг, дальше выбираете свою, вводите пароль и жмёте Проверить. Ретранслятор подключится на несколько секунд и честно скажет, вышло или нет — ничего при этом не сохраняя. И только если проверка прошла, кнопка Подключить сохранит сеть. Порядок именно такой не случайно: опечатка в пароле иначе оставила бы ретранслятор на мачте без связи.
Пока ретранслятор подключён к сети, своя точка доступа выключена: лишний передатчик у самой антенны ни к чему. Если сеть пропала дольше чем на полминуты — роутер перезагрузился, сменили пароль, — точка поднимается сама, и на страницу снова можно зайти с телефона рядом. Сразу после сохранения новой сети точка ещё три минуты работает в любом случае: иначе вы вылетели бы с неё ровно в тот момент, когда страница показывает новый адрес. Кнопка Забыть сеть возвращает всё к исходному состоянию.
Веб-интерфейс
Страница обновляется каждые 5 секунд и показывает:
- Uptime — время работы
- Канал — текущий + возможность смены через dropdown
- TX Power — мощность передатчика
- Forwarded / Dropped — счётчики пакетов
- По типам: Audio, Text, File, Beacon
- RSSI диапазон — мин/макс уровень сигнала
- IP адрес — текущий
Смена канала
Канал можно сменить:
- Через веб-интерфейс: выпадающий список и кнопка Set — только у самого ретранслятора, кнопка Set all — у всей сети сразу
- Через приложение (подключиться по BLE и сменить в настройках)
Выключение
- Через приложение: Настройки → Выключить ретранслятор (BLE доступен в режиме ретранслятора)
- Устройство перезагрузится в нормальный режим
Дедупликация
- Кеш 64 записи, окно 30 секунд
- TTL уменьшается на 1 при каждой ретрансляции
- Пакеты с TTL=0 не ретранслируются
- Случайная задержка 10–50 мс для избежания коллизий
Кнопка на устройстве
В нормальном режиме
| Нажатие | Действие |
|---|---|
| Короткое (<1 сек) | Включить экран на 30 сек |
| Среднее (>1 сек) | Показать PIN и имя устройства на 10 сек |
| Долгое (>3 сек) | Выключить устройство |
В режиме ретранслятора
| Нажатие | Действие |
|---|---|
| Короткое | Включить экран |
| Среднее (>1 сек) | Сбросить статистику |
| Длинное (>3 сек) | Выйти из режима ретранслятора |
| Долгое (>8 сек) | Выключить устройство |
Выключение и включение
Выключателя питания на плате нет, поэтому его роль играет кнопка. Держите её три секунды: на экране крупно появится SLEEP, и устройство уснёт — радио, усилитель и экран обесточиваются, потребление падает до микроампер, то есть батареи хватает на месяцы ожидания.
Включается тем же нажатием: короткого хватает. Выход из этого сна — полный
старт устройства, как после подачи питания, поэтому связь и настройки
восстанавливаются сами. В журнале это видно строкой reason=DEEPSLEEP wake=BUTTON.
В режиме ретранслятора порог больше — восемь секунд: там короткие удержания уже заняты сбросом статистики и выходом из режима. Пока вы держите кнопку, на экране идёт обратный отсчёт, так что вслепую держать не придётся.
Индикация
OLED дисплей
Нормальный режим: канал, частота, RSSI, SNR, мощность TX, BLE статус, напряжение батареи (2 знака), VOX статус.
Режим ретранслятора: ** REPEATER **, канал, частота, счётчики FWD/DRP, последний RSSI/SNR, TTL.
Экран автоматически выключается через 30 секунд.
LED (GPIO35)
| Паттерн | Значение |
|---|---|
| Постоянно горит | Передача (TX) |
| Мигание ~300 мс | BLE ожидает подключения |
| Короткая вспышка 5 сек | BLE подключено |
| Быстрое мигание | Передача файла |
| Короткий импульс | Приём пакета (RX) |
Шапка приложения
| Элемент | Положение | Описание |
|---|---|---|
| Позывной | Слева сверху | Крупный белый текст |
| Имя устройства | Слева снизу | Мелкий серый текст |
| Статус | Справа сверху | ● Подключено (зелёный) / Отключено (серый) |
| Канал + частота | Справа снизу | Зелёный текст "CH 5 · 864.65 MHz" |
Нижняя панель навигации
5 вкладок: PTT, Чат, Файлы, Карта, Настройки. Активная вкладка подсвечена зелёным.
Технические характеристики
LoRa радио
| Параметр | Значение |
|---|---|
| Диапазон | 863.15–869.75 МГц |
| Каналы | 23 (шаг 300 кГц) |
| Bandwidth | 250 кГц |
| Spreading Factor | 7 |
| Coding Rate | 4/5 |
| Sync Word | 0x34 |
| Мощность | 1–22 дБм |
| Дальность | до 5+ км в прямой видимости; замеры в городе — голос ~1 км, текст ~2 км; в поле — голос до 2 км, дальше текст |
Аудио кодек
| Параметр | Значение |
|---|---|
| Кодек | Codec2 3200 bps |
| Частота дискретизации | 8000 Гц |
| Фрейм | 160 сэмплов = 20 мс = 8 байт |
| Пакет | 4 фрейма = 32 байта = 80 мс |
| LoRa пакет | 39 байт (7 заголовок + 32 аудио) |
BLE протокол
| Параметр | Значение |
|---|---|
| Сервис | Nordic UART Service (NUS) |
| MTU | 128 байт |
| Команды | 40+ (0x01–0x28) |
| Аудио пакет | 36 байт (cmd + flags + отправитель + 32 payload) |
| Авторизация | 4-значный PIN (из MAC) |
Пакеты LoRa
| Тип | ID | Размер |
|---|---|---|
| Голос | 0xA0 | 39 байт |
| Текст | 0xB0 | до 91 байт |
| Файл (заголовок) | 0xC0 | 36 байт |
| Файл (чанк) | 0xC1 | до 128 байт |
| Файл (конец) | 0xC3 | 6 байт |
| Beacon | 0xD0 | 36 байт |
| Вызовы | 0xE0–0xE6 | 8–47 байт |
Батарея
| Параметр | Значение |
|---|---|
| ADC | GPIO1 через делитель |
| Управление | GPIO37 enable |
| Калибровка | множитель 5.55 |
| Усреднение | 8 замеров |
| Диапазон | 3.0V (0%) – 4.2V (100%) |