Skip to main content

Building Meshtastic Firmware

Meshtastic uses PlatformIO, a development environment that enables easy multi-platform development and centralized tooling.

Setup the Build Environmentโ€‹

  1. Install PlatformIO
  2. Clone the Meshtastic Firmware repository
    git clone https://github.com/meshtastic/firmware.git
  3. Update the repository's submodules
    cd firmware && git submodule update --init

Buildโ€‹

  1. 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.
  2. To select the device you you wish to build, open your command palette:
    • Windows: Ctrl + Shift + P
    • Mac: command + Shift + P
  3. Enter: PlatformIO: Pick Project Environment and select your target.
  4. To build the firmware, simply run PlatformIO: Build from your command palette.
  5. 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โ€‹

  1. Go to the variants folder in the firmware source code and make a new directory for your hardware, let's call it m5stack_atom and copy an existing configuration you wanna modify:
    cd variants; mkdir m5stack_atom
    cp heltec_v1/* m5stack_atom
    cd m5stack_atom
  2. Modify the platformio.iniin this subdirectory from the canonical define of the hardware variant (HELTEC_V1 in this case) to PRIVATE_HW and make the -I on the build_flags point to the newly created dir.
    [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}
  3. Edit the variant.h file in this subdirectory to reflect the defines and configurations for your board. The example is very well commented.
  4. Build, run and debug until you are satisfied with the result.

Distribute / Publish Custom Buildsโ€‹

  1. Perform all of the steps building with custom hardware until your hardware runs fine.
  2. Send a proposal to add a new board.
  3. If approved, go to (https://github.com/meshtastic/protobufs) and send a Pull Request for the mesh.proto file, adding your board to the HardwareModel Enum.
  4. Change your define in platformio.ini from PRIVATE_HW to YOUR_BOARD. Adjust any macro guards in the code you need to support your board.
  5. Add your board identifier to configuration.h on the firmware repo and send in that Pull Request too.
  6. Wait for the Pulls to be merged back into Master.
  7. Profit :-)