Готовую Meshtastic-ноду можно просто купить. Это быстро, удобно и, в некоторых случаях, даже дешевле. Но тогда теряется самое интересное: возможность собрать устройство самому, разобраться в распиновке, поковыряться в прошивке и на практике понять, как все это работает.

Я решил пойти именно этим путем и собрал свою ноду на ESP32-S3 Super Mini. Ниже покажу, какие комплектующие использовал, как все подключал и что пришлось менять в прошивке, чтобы это заработало.

Компоненты

Для сборки самодельной Meshtastic-ноды я использовал такой набор компонентов:

  • ESP32-S3 Super Mini - 373 ₽, 1 шт. ссылка

  • LoRa-антенна 868 MHz, 5 dBi, SMA Male to Female - 134 ₽, 1 шт. ссылка

  • GPS Neo-6M v2 - 251 ₽, 1 шт. ссылка

  • LoRa E22-900M30S - 873 ₽, 1 шт. ссылка

  • OLED-дисплей 0.96", 128x64, SSD1306 - 233 ₽, 1 шт. ссылка

  • USB-UART преобразователь - 187 ₽, 1 шт. ссылка

  • Провода-перемычки, около 20 шт.

  • Беспаечная макетная плата, 2 шт.

Если не учитывать провода, макетки и USB-UART адаптер, итоговая стоимость получается 1864 ₽.
С адаптером уже 2051 ₽.

Да, это дороже, чем некоторые готовые бюджетные ноды. Но собирать такую штуку самому намного интереснее.

Также стоит добавить, что некоторые компоненты я покупал дешевле, чем они продаются на маркет плейсе сейчас. Например я получил 20% скидку на лору из-за того, что мне в начале прислали модуль не на ту частоту.

Подключение

На первый взгляд этап подключения кажется самым сложным. Но у ESP32-S3 есть важное преимущество: у нее очень гибкая матрица GPIO. На практике это означает, что интерфейсы SPI, I2C и UART можно развести по разным свободным пинам и затем указать их в конфигурации прошивки.

Ниже как раз показана схема, которая помогает понять сам принцип:

Распиновка ESP32-S3 super mini

Конечно, это не значит, что можно бездумно использовать вообще любой вывод. Некоторые пины могут быть заняты служебными функциями платы, USB или режимом загрузки. Но в целом свободы для разводки у ESP32-S3 действительно много, и для самодельной ноды это очень удобно.

Прошивка

Теперь перейдем к прошивке. Если открыть официальный сайт Meshtastic, то в списке поддерживаемых устройств самодельных плат, разумеется, не будет. И это нормально: каждая готовая сборка завязана на конкретную распиновку, набор компонентов.

Поэтому самый простой путь, это взять близкий по железу вариант и адаптировать его под свою сборку.

Сначала клонируем репозиторий с прошивкой:

git clone https://github.com/meshtastic/firmware

Для сборки понадобится PlatformIO. У меня macOS, поэтому я устанавливал его через Homebrew:

brew install platformio

Дальше переходим в каталог репозитория, открываем папку variants/, затем esp32s3/, и внутри выбираем EBYTE_ESP32-S3. Этот вариант удобно взять за основу, потому что он уже рассчитан на связку ESP32-S3 и EBYTE-модуля.

Открываем файл variant.h и меняем распиновку LoRa под свою схему подключения. В моем случае получилось так:

#define SX126X_CS 10   // EBYTE module's NSS pin // FIXME: rename to SX126X_SS
#define LORA_SCK 11     // EBYTE module's SCK pin
#define LORA_MOSI 12    // EBYTE module's MOSI pin
#define LORA_MISO 7    // EBYTE module's MISO pin
#define SX126X_RESET 6 // EBYTE module's NRST pin
#define SX126X_BUSY 5  // EBYTE module's BUSY pin
#define SX126X_DIO1 4  // EBYTE module's DIO1 pin

Ниже в этом же файле находим настройки I2C для дисплея и подставляем свои пины SCL и SDA:

// I2C
#define I2C_SCL 9
#define I2C_SDA 8

Если вы используете экран, не забудьте включить его в конфигурации:

#define HAS_SCREEN 1

Ниже расположен блок, связанный с GPS. Здесь логика та же: нужно указать тот пин, к которому подключен модуль. В моем случае на плате почти не осталось свободных GPIO, поэтому я использовал только одну линию данных от GPS.

Я сознательно не задействовал выводы TX и RX, подписанные на самой плате, чтобы не мешать прошивке и отладке через последовательный порт. Поэтому подключил только передачу данных от GPS-модуля к ESP32-S3:

#define GPS_TX_PIN 1

После этого стоит поправить скорость прошивки и монитора порта. Для этого открываем platformio.ini и добавляем в нужное окружение:

upload_speed = 115200
monitor_speed = 115200

Теперь можно собирать прошивку:

pio run -e EBYTE_ESP32-S3

Зачем нужен USB-UART адаптер

Тут может возникнуть закономерный вопрос: зачем вообще внешний USB-UART адаптер, если ESP32-S3 обычно можно прошивать напрямую через встроенный USB-C?

Если ваша плата нормально определяется и шьется через родной порт, внешний адаптер не нужен. Но у меня с дешевыми платами это работало нестабильно, поэтому я сразу взял отдельный преобразователь. С ним процесс оказался предсказуемее.

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

  • 5V адаптера к 5V на ESP32

  • GND к GND

  • TX адаптера к RX платы

  • RX адаптера к TX платы

После этого подключаем адаптер к компьютеру. Обычно драйверы ставятся автоматически.

Для загрузки прошивки используем:

pio run -e EBYTE_ESP32-S3 -t upload

Когда в консоли появится сообщение Connecting..., нужно перевести плату в режим загрузки. На моей ESP32-S3 Super Mini это делалось так:

  1. зажать Boot

  2. нажать Reset

  3. отпустить Reset

  4. через секунду отпустить Boot

После этого прошивка начинает загружаться на контроллер.

Что получилось у меня

Готовая самодельная нода. (1 рис)
Готовая самодельная нода. (1 рис)
Готовая самодельная нода. (2 рис)
Готовая самодельная нода. (2 рис)

Выглядит конечно неаккуратно, но это работает! Далее планирую избавиться от проводов и все распаять на плате.

Комментарии (11)


  1. Vinni37
    03.04.2026 06:58

    Ну что же, все написанное дальше ИМХО.

    • Выкидываем GPS, в текущих реалиях бесполезная вещь + меньше эфир будет засорять;

    • Выкидываем экран, реальной польза от него толька эстетическая;

    • Если нода не стационарная, меняем ESP32 на NRF52840 (а еще дешевле, взять сразу бутерброд NRF52840 и SX1262), будет автономность раза в 4 лучше.


    1. NanoVHF
      03.04.2026 06:58

      Про автономность 1W ноды на E22-900M30S говорить наверное смысла нет. Один только радиомодуль кушает 5Вт. Если вы "в центре радио-событий", то он у вас будет шуметь безостановочно. А вот связка NRF52840 и SX1262 будет прям автономность-автономность.


      1. Vinni37
        03.04.2026 06:58

        Вот и я перепробовав несколько вариантов, остановился на NRF52840 и SX1262, пришлось правда чуть подколхозить, к примеру заменить керамическую BT антенну на нормальную. А так от банки в 3к махов нода живет около 5-7 дней в зависимости от эфира.


      1. vvetta Автор
        03.04.2026 06:58

        Спасибо за совет! Это был мой первый опыт, далее планирую развиваться в этом направлении!


  1. Strijar
    03.04.2026 06:58

    Для модуля E22 надо еще подключать RX_En и TX_En - они управляют переключением усилителя и антенны. Без этого будет слабый прием и слабая передача.


    1. vvetta Автор
      03.04.2026 06:58

      Спасибо! Уже после написания статьи узнал об этом)


  1. PKav
    03.04.2026 06:58

    По своему опыту: E22-900M30S - очень негодный модуль в плане чувствительности. Причины две:

    1. Широкополосные фильтры на дискретных компонентах на входе, приводящие к потерям до 4dB на 868МГц (да, я разбирал и измерял).

    2. LNA, стоящий за ними прямо перед SX1276, который по причине наличия неподалёку базовых станций сотовой связи либо сам уходит в компрессию, либо перегружает вход SX1276. Часто его удаление и установка перемычки сильно улучшает приём. Тоже сам разбирал, проверял и подтверждаю.

    Также в статье не вижу ничего об управлении пинами RXEN и TXEN модуля E22-900M30S. Для него это обязательно, у него там внутри RF Switch, он так либо включает усилитель и подключает антенну к нему, либо включает LNA и переключает антенну уже на него. Если этого не делать, то будет, как говорят программисты, undefined behavior. Скорее всего, не будет ни нормального приёма, ни передачи.


    В целом, в данный момент не вижу особого смысла делать ноду самостоятельно ввиду наличия дешевых и довольно-таки неплохо спроектированных решений.


    1. NanoVHF
      03.04.2026 06:58

      У меня всё с точностью до наоборот. Когда эфир не был сильно загажен большим количеством нод и я ездил снимал покрытие, то разница в лучшую сторону по приёму с мощным модулем и LNA прям была заметна в цифрах приёма. Не 20дБ, конечно, но 5...6дб улучшение было точно.

      В целом, в данный момент не вижу особого смысла делать ноду самостоятельно ввиду наличия дешевых и довольно-таки неплохо спроектированных решений.

      Тут тоже соглашусь. Самому собирать - это надо чисто фанатствовать этим делом. Полуватный модуль Heltek V4 - прекрасен, на мой взгляд. Всего чего не хватало в железе 4 года, в нём очень хорошо реализовано!


      1. PKav
        03.04.2026 06:58

        Разница в dB или dBm? Измеряли SNR или RSSI?

        Дело в том, что LNA усиливает и сигнал, и шум, поэтому он может поднять RSSI (т.е. общую мощность принимаемого сигнала), но повлиять на SNR (соотношения полезного сигнала к шуму) он особо не может. Обычно LNA ставится сразу после антенны, чтобы скомпенсировать потерю сигнала в кабеле и других компонентах перед приёмником. Установить его прямо перед приёмником это всё-равно, что человеку одеть слуховой аппарат - всё вокруг станет громче, но отдалённого собеседника от этого разборчивее слышать не станешь. А при наличии в прямой видимости базовых станций сотовой связи, работающих в районе 930-960МГц он может сослужить очень плохую службу, по сути, оглушая приёмник усиленным сигналом от них.


    1. kpmy
      03.04.2026 06:58

      Кстати, про TXEN, RXEN есть схема, в которой модуль сам управляет этими выводами, а микроконтроллер управляет только пином DIO1

      Соотв. на своей сборке я снял эти ноги с контроллера, оставил там светодиоды, для мониторинга TX/RX в радиочасти.


    1. vvetta Автор
      03.04.2026 06:58

      На счет RXEN и TXEN - я действительно их не подключил) Просто не знал об этом. На сегодняшний момент подключил и все работает! Да, я тоже считаю, что проще купить, но мне было просто интересно!