Ниже показан пошаговый процесс компиляции прошивки Meshtastic для ESP32 и модуля E22-900M30S [2].
Поскольку произвольного оборудования (ESP32 + E22-900M30S) нет готовой официальной платы, основной задачей будет адаптация существующей конфигурации. Процесс состоит из нескольких этапов: от подготовки инструментов до сборки и заливки прошивки.
[Этап 1: Подготовка среды сборки]
Для компиляции прошивки вам понадобится набор инструментов. Вся работа ведется через командную строку.
1. Установите Git: система контроля версий для скачивания исходного кода.
2. Установите Python 3: скрипты сборки и инструменты PlatformIO написаны на Python.
3. Установите PlatformIO Core: это основная среда сборки для Meshtastic. Удобнее всего установить её через терминал. В системах macOS/Linux и Windows это делается одной и той же командой:
pip install platformio
После установки можно использовать команду pio в терминале.
После запуска и завершения команды pip install platformio попытка запустить pio в командной строке заканчивается неудачей с сообщением об ошибке:
pip install platformio
Defaulting to user installation because normal site-packages is not writeable
Collecting platformio
Downloading platformio-6.1.19-py3-none-any.whl.metadata (7.2 kB)
...
Collecting bottle==0.13.* (from platformio)
Collecting pyelftools< 1,>=0.27 (from platformio)
Using cached pyelftools-0.32-py3-none-any.whl.metadata (372 bytes)
Installing collected packages: pyelftools, bottle, semantic_version, marshmallow,
h11, colorama, anyio, ajsonrpc, wsproto, starlette, click, uvicorn, platformio
━━━╺━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1/13 [bottle] WARNING: The script bottle.exe is
installed in 'C:\Users\myuser\AppData\Roaming\Python\Python314\Scripts'
which is not on PATH.
Consider adding this directory to PATH or, if you prefer to suppress this warning,
use --no-warn-script-location.
...
pio
'pio' is not recognized as an internal or external command,
operable program or batch file.
Проблема ясна: Python установил исполняемые файлы PlatformIO в директорию, которая не добавлена в системную переменную PATH. Windows просто не знает, где искать команду pio. Ниже показано как это исправить.
Решение 1: добавить директорию в PATH (постоянно). Самый правильный способ — добавить нужную папку в переменные окружения.
1. Найдите путь. Из сообщений команды установки pip install platformio видно, что pio.exe находится здесь:
3. Измените переменную Path. Для этого в разделе "Системные переменные" (System variables) найдите переменную Path и выберите кликните на кнопку "Изменить..." (Edit...). В этом окне кликните на кнопку "Создать" (New) и вставьте скопированный путь (для нашего примера это C:\Users\myuser\AppData\Roaming\Python\Python314\Scripts, ваш путь может отличаться). Нажмите ОК во всех окнах.
4. Проверьте, как применились изменения. Для этого перезапустите командную строку (CMD) и выполните команду pio --version:
pio --version
PlatformIO Core, version 6.1.19
Решение 2: использовать полный путь (быстро, разово). Если нужно просто запустить PlatformIO один раз для сборки, можно не настраивать PATH, а указывать полный путь к pio.exe каждый раз.
Для сборки прошивки вы будете использовать эту длинную команду, например для варианта EBYTE_ESP32-S3:
C:\Users\myuser\AppData\Roaming\Python\Python314\Scripts\pio run -e EBYTE_ESP32-S3
Важное примечание: после того как вы добавите путь в PATH, обязательно закройте и откройте заново все окна командной строки, которые были открыты до этого. Изменения в переменных среды не применяются к уже запущенным процессам.
[Этап 2: Загрузка исходного кода]
Скачайте исходный код прошивки Meshtastic с GitHub [1]:
Инициализируйте и обновите субмодули (нужно для зависимостей):
git submodule update --init
[Этап 3: Адаптация конфигурации для E22-900M30S]
Это ключевой шаг. Поскольку ваш модуль отличается от стандартных, нужно указать прошивке, к каким пинам ESP32 он подключен.
1. Выберите основу для конфигурации. В папке variants/esp32s3 находятся готовые варианты конфигураций, найдите EBYTE_ESP32-S3. Она идеально подходит в качестве стартовой точки, так как уже содержит настройки для работы с модулями Ebyte. В этой конфигурации надо будет сделать настройку выводов портов для подключения модуля LoRa-радио (E22-900M30S).
2. Сделайте копию папки variants\esp32s3\EBYTE_ESP32-S3 и всего содержимого, что в ней находится, в папку variants\esp32s3\myvariant.
cd variants\esp32s3 cp -R EBYTE_ESP32-S3 myvariant
3. Перейдите в папку myvariant и откройте для редактирования файл variant.h (в этом примере использовался редактор кода VScode, но вы можете использовать любой другой подходящий редактор текста, например notepad2).
cd myvariant code variant.h
4. Найдите секцию с определениями портов для LoRa (SX126X_CS, LORA_SCK и т.д.) и измените номера GPIO в соответствии с вашей схемой подключения E22 к ESP32.
// Пример настройки (замените номера на свои) #define SX126X_CS 10 #define LORA_SCK 11 #define LORA_MOSI 12 #define LORA_MISO 7 #define SX126X_RESET 6 #define SX126X_BUSY 5 #define SX126X_DIO1 4
5. Установите правильные параметры мощности. Для модуля E22-900M30S важно указать его максимальную выходную мощность (30 дБм). Обычно это делается с помощью флагов сборки. Найдите их в том же файле variant.h или добавьте в platformio.ini для вашего окружения следующие строки:
#define EBYTE_E22_900M30S // Включает поддержку конкретного модуля #define TX_GAIN_LORA 7 // Усиление встроенного усилителя E22 #define SX126X_MAX_POWER 22 // Мощность, подаваемая на вход усилителя с чипа SX1262
6. (Опционально) настройте дисплей, GPS и другие компоненты. Если к вашей плате подключен OLED-экран или GPS-модуль, укажите пины для шины I2C или UART в том же файле variant.h:
#define HAS_SCREEN 1 // Сообщаем прошивке, что экран есть #define I2C_SCL 9 // Номера портов GPIO интерфейса экрана #define I2C_SDA 8 #define GPS_TX_PIN 1 // Номер порта GPIO, к которому подключен TX GPS-модуля
7. Добавьте ваш новый вариант сборки myvariant к списку вариантов Meshtastic. Корневой файл firmware\platformio.ini подключает все .ini файлы из папки variants/*/*.ini, в том числе и ваш файл platformio.ini в папке myvariant.
Откройте файл firmware\variants\esp32s3\myvariant\platformio.ini и внесите в него следующие изменения (измененные значения выделены жирным шрифтом):
Первая сборка может занять 10-15 минут, так как PlatformIO загрузит все необходимые инструменты и библиотеки. В случае успеха вы увидите сообщение `SUCCESS`, а готовый файл прошивки (`.bin` или `.uf2`) будет находиться в папке .pio/build/myvariant/.
При запуске компиляции командой pio.exe run -e myvariant возникает ошибка:
pio run -e myvariant
Processing myvariant (board: ESP32-S3-WROOM-1-N4; platform:
platformio/espressif32@6.13.0; framework: arduino)
------------------------------------------------------------------------------------------
Verbose mode can be enabled via `-v, --verbose` option
PROGNAME: firmware-myvariant-2.7.21.d3a8684
ESP32_FS_IMAGE_NAME: littlefs-myvariant-2.7.21.d3a8684
CONFIGURATION: https://docs.platformio.org/page/boards/espressif32/ESP32-S3-WROOM-1-N4.html
PLATFORM: Espressif 32 (6.13.0) > ESP32-S3-WROOM-1-N4 (4 MB Flash, No PSRAM)
HARDWARE: ESP32S3 240MHz, 512KB RAM, 4MB Flash
DEBUG: Current (esp-builtin) On-board (esp-builtin) External (cmsis-dap, esp-bridge,
esp-prog, iot-bus-jtag, jlink, minimodule, olimex-arm-usb-ocd, olimex-arm-usb-ocd-h,
olimex-arm-usb-tiny-h, olimex-jtag-tiny, tumpa)
PACKAGES:
- framework-arduinoespressif32 @ 3.20017.241212+sha.dcc1105b
- tool-esptoolpy @ 2.41100.0 (4.11.0)
- tool-mklittlefs @ 1.203.210628 (2.3)
- toolchain-riscv32-esp @ 8.4.0+2021r2-patch5
- toolchain-xtensa-esp32s3 @ 8.4.0+2021r2-patch5
LDF: Library Dependency Finder -> https://bit.ly/configure-pio-ldf
LDF Modes: Finder ~ chain, Compatibility ~ soft
[nanopb] No generation needed.
Found 98 compatible libraries
Scanning dependencies...
Dependency Graph
|-- ESP8266 and ESP32 OLED driver for SSD1306 displays @ 4.4.1
|-- OneButton @ 2.6.1
...
Building in release mode
Using meshtastic platformio-custom.py, firmware version 2.7.21.d3a8684 on myvariant
Using flags:
-DAPP_VERSION=2.7.21.d3a8684
-DAPP_VERSION_SHORT=2.7.21
-DAPP_ENV=myvariant
-DAPP_REPO=meshtastic/firmware
-DBUILD_EPOCH=1775336400
-DUSERPREFS_RINGTONE_RTTTL=\"24:d=32,o=5,b=565:f6,p,f6,4p,p,f6,p,f6,2p,p,b6,p,b6,p,
b6,p,b6,p,b,p,b,p,b,p,b,p,b,p,b,p,b,p,b,1p.,2p.,p\"
-DUSERPREFS_TZ_STRING=\"tzplaceholder \"
Compiling .pio\build\myvariant\src\BluetoothCommon.cpp.o
xtensa-esp32s3-elf-g++: error: CreateProcess: No such file or directory
Compiling .pio\build\myvariant\src\DebugConfiguration.cpp.o
*** [.pio\build\myvariant\src\BluetoothCommon.cpp.o] Error 1
xtensa-esp32s3-elf-g++: error: CreateProcess: No such file or directory
*** [.pio\build\myvariant\src\DebugConfiguration.cpp.o] Error 1
============================================= [FAILED] Took 23.19 seconds
Environment Status Duration
------------- -------- ------------
myvariant FAILED 00:00:23.185
======================================== 1 failed, 0 succeeded in 00:00:23.185
Эта ошибка вероятно происходит из-за слишком длинных путей до корневой папки Meshtactic (пути до папки firmware) или до файлов PlatformIO. В моем случае это было из-за слишком длинного пути до папки .platformio, которая находилась в профиле текущего пользователя Windows.
Как устранить ошибку:
1. Создайте папку PlatformIO на диске C: (полный путь C:\PlatformIO).
2. Переместите все содержимое каталога c:\Users\имя_пользователя\.platformio в эту новую созданную папку.
3. Создайте новую переменную окружения PLATFORMIO_HOME_DIR со значением C:\PlatformIO.
4. Проверьте, что путь к содержимому папки bin, где находится компилятор xtensa-esp32s3-elf-g++ и другие утилиты, находится также в переменой Path (c:\PlatformIO\packages\toolchain-xtensa-esp32s3\bin\).
3. Подключите устройство и залейте прошивку. Самый простой способ — использовать встроенную команду PlatformIO:
pio run -e myvariant -t upload
Если у вашей платы ESP32 возникают проблемы с автоматическим входом в режим прошивки, возможно, придется сделать это вручную: зажать кнопку BOOT, нажать и отпустить RESET, после чего отпустить BOOT.
● Внимание к питанию: модуль E22-900M30S — мощный передатчик. Убедитесь, что ваш источник питания способен обеспечить стабильные 5 В и достаточный ток (до 1-2 А в пиках). Рекомендуется устанавливать электролитические конденсаторы большой емкости (например, 1000-2000 мкФ) и керамический конденсатор на 100 нФ непосредственно у пинов питания модуля для сглаживания пульсаций.
● Проверка выходной мощности: многие пользователи отмечали, что при неправильной конфигурации модуль E22 может работать не на полную мощность, а на стандартных для SX1262 22 дБм. Убедитесь, что вы правильно определили флаги EBYTE_E22_900M30S, TX_GAIN_LORA и SX126X_MAX_POWER.
● Правила использования: мощность в 30 дБм (1 Вт) во многих странах превышает разрешенную для нелицензируемого использования. Перед использованием обязательно ознакомьтесь с местными нормативными актами и, при необходимости, ограничьте мощность через настройки устройства в приложении Meshtastic.