Готовая бомж нода
Готовая бомж нода

В самом базовом случае нода Meshtastic, как и Meshcore, состоит из двух обязательных половинок: LoRa модем и микроконтроллер с WiFi/Bluetooth/USB. А в дополнение к этому могут идти разные опции: антенна, корпус, аккумулятор, управление зарядом и питанием, дисплей. Но обязательны только две платы/модуля: микроконтроллер и LoRa, а в качестве антенны подойдет и кусочек проволоки.

Микроконтроллер

Прошивка Meshtastic работает почти на всем, у чего в названии есть ESP32, NRF52 или RP2040. Если точнее, то:

  • ESP32-D0WD - самый первый и очень широко распространенный EPS32, скорее всего вы встречали модуль с ним ESP32-WROOM-32 или готовую плату ESP32 Devkit V1

  • ESP32-S3 - более современный и мощный, сейчас это mainstream для Meshtastic

  • ESP32-C3 - самый дешевый на сегодня вариант

  • NRF52840 - энергоэффективный микроконтроллер, но без WiFi, с ним есть прекрасные платы для клавиатур nice!nano, и огромное количество китайских клонов под названием “Pro Micro” (не путать с Arduino)

    Мы делаем бомж ноду, так что выбираем что дешевле. Если покупать на маркетплейсах или Али, то дешевле всего будет плата ESP32-C3 SuperMini, сегодня с доставкой из Китая можно найти за цену около 200 руб. NRF52840 Pro Micro будет стоить чуть дороже, рублей 250, и без WiFi, но нода с NRF52 проживет почти в два раза дольше от той же батареи и, что немаловажно, плата уже имеет встроенную микросхему заряда LiPo/LiIon, не нужно будет отдельно колхозить TP4056.

    Так что:

  • ESP32-C3 SuperMini - для стационарной бомж ноды с постоянным питанием от сети и возможностью работы через WiFi

  • NRF52840 Pro Micro - для носимой бомж ноды с питанием от АКБ и подключением к телефону по Bluetooth

    Но у меня был другой путь, у меня уже было несколько ESP32 Devkit V1, поэтому я соберу свою бомж ноду вообще без дополнительных расходов.

LoRa модем

LoRa - это проприетарный протокол от компании Semtech, так что нужен либо ее чип, либо от кого-то, кто сделал чип по лицензии. Обычно на 433 МГц и на 868 Мгц - это два разных чипа. В РФ гораздо больше развиты сети 868 Мгц, так что на них и будем ориентироваться. Какие тут варианты чипов:

  • SX1276 - это был первый чип, получивший мощное распространение, но он немного устарел

  • SX1262 - современная версия, чуть мощнее на передачу и более энергоэффективная

  • LLCC68 - урезанная версия чипа SX1262

Самый простой и правильный вариант - купить модуль Heltec HT-RA62. Цена 300-350 рублей. Это будет модуль для поверхностного монтажа. Паять не очень удобно, но возможно. Зато по соотношению цена/качество - это лучшее, что можно купить сегодня.

Я искал дешевле, время от времени вбивал на Авито в поиске “LoRa”, “SX1276”, “SX1262”, и нашел!

Устройство с Авито на базе LoRa1276
Устройство с Авито на базе LoRa1276

Некое устройство на базе NiceRF LoRa1276. Конечно, любопытство не давало мне покоя, и я пытался выяснить что это такое. Из вводных была маркировка “Softline.com 2018”, и я стал искать, что это за проект такой делал Софтлайн в 2018 году на базе LoRa. Оказалось, это умные каски)

Ссылку на лот прикладывать не буду, не в этом цель материала. Кто захочет - без труда найдёт по ключевым словам и цене.

Прошивка

Очень важно самым первым шагом обязательно прошить микроконтроллер. Убедиться, что все работает, а дальше уже подключать LoRa модем. Причем даже если вы решили ставить Meshcore, все равно желательно сначала прошить Meshtastic. Почему? Потому, что если что-то неправильно подключено, прошивка Meshtastic запустится и будет писать в UART что работает, а что - нет. Meshcore просто не запустится и будет тишина. Проще всего прошиваться через веб флешер. Можно пойти на официальный flasher.meshtastic.org, но официальных прошивок не так много, плюс доступ из РФ… Так же и для Meshcore flasher.meshcore.co.uk, с теми же ограничениями… Но есть решение лучше! mrekin.duckdns.org/flasher! Какие там есть варианты прошивок:

  • Official repo - прошивки Meshtastic (причем не только официальные)

  • m1nl - форк прошивки Meshtastic с улучшенным энергосбережением для ESP32

  • Meshcore - официальные прошивки Meshcore

  • Meshcore RU - прошивки Meshcore с поддержкой вывода русских символов на дисплей

    Выбираем Official, и смотрим какие есть варианты DIY. Более детальная информация об отличии того или иного варианта есть либо здесь либо тут. Я поискал, посмотрел, и для ESP32 Devkit V1 + LoRa1276 выбрал esp32/diy/v1.

    На что в этом файле обратить внимание:

  • OLED LCD - не важен, запустится и без него

  • GPS - тоже не важно

  • … и остальная периферия тоже не особо важна

  • #define LORA_ - эти значения задают какой вывод LoRa модема на какой вывод микроконтроллера подключается

  • RF95_RXEN/RF95_TXEN - дополнительные пины для RF95(SX1276)

  • USE_RF95 - если раскомментирован, значит будет работать и SX1276

  • USE_SX1262 - аналогично для SX1262

За этот вариант огромное спасибо товарищу @NanoVHF и его проекту Meshtastic-DIY.

Сначала подключаю ESP32 Devkit V1 к USB с зажатой кнопкой BOOT, плата определяется как COM-порт (или tty). Затем выбираю meshtastic-diy-v1, полную прошивку, нужный порт. Ставлю галочку “полная очистка” и шью.

Прошивка через mrekin flasher
Прошивка через mrekin flasher

По окончании можно подключиться через терминал USB-UART 115200, посмотреть лог загрузки, увидеть что прошивка не может найти GPS, а также пробует по очереди инициализировать разные LoRa модемы, но ни с одним не получается. Для удобства можно использовать веб терминал. Уже сейчас можно подключиться через мобильное приложение Meshtastic и отключить GPS, чтобы не было мусора в логах.

Подключение LoRa модема

На основе выбранного ранее variant.h, можно составить таблицу подключений. У меня получилось вот так:

Пин LoRa

Пин ESP32

Назначение

VCC

3.3V

Питание

GND

GND

Земля

SCK

GPIO 18

SPI

MISO

GPIO 19

SPI

MOSI

GPIO 23

SPI

NSS (CS)

GPIO 5

SPI

DIO0

GPIO 26

Прерывание приема/передачи сообщений

NRESET

GPIO 14

Аппаратный сброс, используется для инициализации радиочипа

ANT

Antenna

Выход на антенну

DIO1

Не подключен

DIO2

Не подключен

NC

Не подключен

Картинка из интернета где какие пины у ESP32 Devkit V1
Картинка из интернета где какие пины у ESP32 Devkit V1
Картинка из объявления где какие пины у LoRa модуля
Картинка из объявления где какие пины у LoRa модуля

Достаточно припаять 8 проводов. Ну и “сдуть” STM32 с платы, чтобы он не мешался на линии SPI. Ну а если нет фена, то можно просто и кусачками выкусить)

Готовая бомж нода
Готовая бомж нода

На плате каски установлен LDO на 2.5В. Для ESP32 этого слишком мало, так что нужно брать 3,3В от ESP32 к SX1276. При этом возле выводов питания LoRa1276 на плате есть россыпь керамических конденсаторов, это очень хорошо скажется на стабильности работы. Кстати, на плате ESP32-C3 SuperMini слишком слабый LDO питания LoRa модема, нужно будет ставить внешний. А на NRF52840 Pro Micro - мощности вполне достаточно.

Выходим в сеть

Последнее и самое главное - антенна! Без антенны не стоит даже подавать питание, есть не нулевой шанс спалить передатчик! Что сделал я? Подключил первый попавшийся кусок провода))

Антенна для тестов
Антенна для тестов

Далее подключаемся через официальное приложение Meshtastic, ищем Телеграм-канал своего города, в нем настройки. Почти для всех городов России будут такие:

  • Device (Устройство) / Роль устройства: CLIENT_MUTE - это самое важное! Если вы на 100% не уверены, что вам нужно стать ретранслятором для явно известных вам клиентов, то в городах всегда ставьте CLIENT_MUTE

  • LoRa / Регион: Russia

  • LoRa / Пресет: Long Range - Fast / Большая дальность - Быстрый

  • LoRa / Частотный слот: 2

  • LoRa / Переопределить частоту: 869.075

Дальше рассказываю эту прекрасную историю в общем канале LongFast, делюсь фотками, рассказываю про кусок провода. Проверяю что меня слышно через местного Telegram бота.

"Через провода кусок" - ответил я на вопрос про антенну
"Через провода кусок" - ответил я на вопрос про антенну

Итого: 500 рублей.

250 рублей плата с микроконтроллером + 250 рублей LoRa модуль.

Конечно, это справедливо, если вы радиолюбитель, у вас есть фен, паяльник, флюс, припой, провода, кусачки, пинцет... Теплый ламовый DIY вечер - бесценно!))

Что можно сделать лучше

Нормальная антенна

Вместо куска провода лучше взять две медные проволоки, например от витой пары, лучше без изоляции. Для частоты 869 МГц с учетом коэффициента укорочения будет два куска примерно по 82 мм. Компоненты согласующей цепи антенны лучше “сдуть”, либо перерезать дорожку, затем припаять два куска проволоки на выводы ANT и GND (полигон на обратной стороне), расположить под углом 120 градусов друг относительно друга, и повернуть всю конструкцию вертикально, так как у большинства других нод антенны с вертикальной поляризацией. При правильных длине и угле, это будет практически идеальная антенна с круговой диаграммой направленности. Не практично, зато бесплатно.

 Диполь с углом раскрыва 120 градусов
Диполь с углом раскрыва 120 градусов
Проверка связи от стола до случайного соседа, очень достойно
Проверка связи от стола до случайного соседа, очень достойно

Сделать нормальную плату, а не вот эти вот проводочки

На самом деле уже сдеали для соединения NRF52840 Pro Micro и Heltec HT-RA62, называется fakeTec. Я пошел дальше, и заказал разработку вариаций на базе fakeTec v5 под комбинации:

  • Pro Micro + RA-62 (чуть улучшенный v5)

  • Pro Micro + NiceRF SX1276

  • ESP32-C3 SuperMini + RA-62

  • ESP32-C3 SuperMini + NiceRF SX1276

Подробнее в комментарии на GitHub.

Дизайн еще не протестирован. Платы в пути из Китая. А обычные fakeTec периодически появляются в продаже на Ozon и Авито. Так же можно собраться и сделать групповой заказ плат из Китая. Минимальная партия на pcbwave мне обходилась в 90 рублей за плату.

Сделать что-то на базе исходного устройства без переделки

В этой умной каске стоит STM32L051C8T6 на 64 Kbytes Flash и 8 Kbytes RAM. Для сравнения, прошивка Meshtastic для ESP32 весит 2 Мб, а 520 КБ оперативной памяти едва хватает на 250 NodeInfo и 30 принятых сообщений. Но все же, не без помощи ИИ, удалось кое-что выжать:

  • Базовый прием Meshtastic пакетов

  • Ретрансляция пакетов с кольцевым буфером, чтобы не пересылать один и тот же пакет дважды

  • Расшифровка пакетов основного канала алгоритмом AES

  • Разбор сообщений чата

  • Разбор сообщений телеметрии

На этом 64 Кб закончилось) Из проблем написанного кода - полностью синхронная работа в один поток: пока по UART выводится информация об одном пакете, новые не принимаются. Так что логирование лучше отключать.

Проект на GitHub: https://github.com/delfer/meshtastic-kaska/releases/tag/v1.0.0

Я считаю, что это получился крутой пример, и на его базе уже можно делать энергоэффективные датчики с отправкой данных через Meshtastic. По крайней мере сколько я ни искал, ничего подобного не находил. Ну а кто считает, что нужно переделать на DMA или хотя бы прерывания - PRs are welcome!

Прием и расшифровка сообщений Meshtastic
Прием и расшифровка сообщений Meshtastic