building
Meshtastic uses PlatformIO, a development environment that enables easy multi-platform development and centralized tooling.
Setup the Build Environment
- Install Git
- Install PlatformIO
- Clone the Meshtastic Firmware repository
shell git clone https://github.com/meshtastic/firmware.git - Update the repository's submodules
shell cd firmware && git submodule update --init:::info If you want to build the RP2040 targets and get a 'Filename too long' error on Windows, please refer to the Platformio documentation for this toolchain :::
Update the Build Environment
- Change to
firmwarefoldershell cd firmware - Gather the latest changes to the Meshtastic Firmware repository and submodules
shell git pull --recurse-submodules
Build
- Open the newly cloned folder in Visual Studio Code. If you do this for the first time, this can take quite some while as PlatformIO will download all the necessary tooling and libraries. Also if platformio is not installed, VSCode will ask you to install it, probably requiring a restart of the program.
- To select the device you wish to build, open your command palette:
- Windows:
Ctrl + Shift + P - Mac:
command + Shift + P - Enter:
PlatformIO: Pick Project Environmentand select your target. - To build the firmware, simply run
PlatformIO: Buildfrom your command palette. - Finally, flash the firmware to your device by running
PlatformIO: Upload
Adding Custom Hardware
The build system is modular. Adding a new board variant for an already supported architecture is straightforward.
Build with Custom Hardware
- Go to the
variantsfolder in the firmware source code and make a new directory for your hardware, let's call itm5stack_atom, and copy an existing configuration you want to modify:shell cd variants; mkdir m5stack_atom cp heltec_v1/* m5stack_atom cd m5stack_atom - Modify the
platformio.iniin this subdirectory from the canonical define of the hardware variant (HELTEC_V1in this case) toPRIVATE_HWand make the-Ion thebuild_flagspoint to the newly created dir.shell [env:m5stack-atom] extends = esp32_base board = m5stack-atom monitor_filters = esp32_exception_decoder build_flags = ${esp32_base.build_flags} -D PRIVATE_HW -I variants/m5stack_atom lib_deps = ${esp32_base.lib_deps} - Edit the
variant.hfile in this subdirectory to reflect the defines and configurations for your board. The example is very well commented. - Build, run, and debug until you are satisfied with the result.
Hardware Model Acceptance Policy
Due to limited availability and ongoing support, new hardware model numbers will only be added for Meshtastic Backers and Partners. The Meshtastic team reserves the right to make exceptions to this policy where needed. If you wish to have your hardware officially supported please contact Meshtastic Solutions.
Alternative for Community Contributors
Community Supported hardware is still welcomed, and community contributors can still add DIY hardware, however, please note:
- DIY hardware should use the
PRIVATE_HWmodel number. - DIY hardware will not be officially supported by the core Meshtastic team, and will be denoted as
Community Supported. - DIY hardware will not appear in the Web Flasher or GitHub release assets.
- You will be responsible for ongoing maintenance and support.
- DIY hardware models are experimental and will likely have limited or no testing.