cd ../blog
#meshtastic#lora#esp32#433mhz#sx1278

A DIY Meshtastic Node for My Jeep: ESP32, a 433 MHz LoRa Module and a Printed Case

I built a Meshtastic node from an ESP32, an SX1278 LoRa module and a NEO-6M GPS, wired into my Jeep's 12V system, with the headless Bluetooth pairing fix.

Jaba Macharashvili 6 min read

In this post
  1. What went into the box
  2. Wiring
  3. Flashing and first setup
  4. The Meshtastic case
  5. In the Jeep
  6. Was it worth it
A DIY Meshtastic node in a yellow slotted case with a spring antenna, sending LoRa messages to a phone

I wheel with a small group, and once we leave the pavement there is usually no cell signal. We already carry handheld radios for talking. Meshtastic adds texts and shared positions over LoRa radio with no network at all, and a node costs about as much as a few modules. So I built one for the Jeep from parts and printed a case for it.

The finished Meshtastic node in its yellow printed case, mounted on the Jeep's rear power panel below the Renogy ONE Core display and next to the fuse block

I started from Adrelien’s guide, Meshtastic DIY: How To Build Your Own Meshtastic Node (ESP32 & LoRa Radio). It covers the basic ESP32 plus LoRa build well, so I’ll only go into detail where mine differs: a different radio module, a GPS, 12 V power and my own housing.

What went into the box

ModuleWhat it doesPrice (USD)
ESP32 dev board (ESP32-WROOM-32, USB-C)Runs the Meshtastic firmware, Bluetooth to the phone~$4
XL1278-SMT LoRa module (SX1278, 433 MHz)The radio~$3
u-blox NEO-6M GPS module with ceramic patch antennaPosition for the map~$3
DC-DC step-down (buck) converterJeep 12V down to 5V for the ESP32~$2

That is about $12 in modules. On top of that come a 433 MHz helical spring antenna soldered straight to the radio’s antenna pad, a round rocker switch for power, and thin hookup wire. Everything is soldered, with no jumper leads.

The guide uses an Ra-02 module. Mine is an XL1278-SMT, which has the same SX1278 chip on a smaller board with castellated edges and no antenna connector. That means soldering wires directly to the pads and soldering the antenna on as well. It’s fiddly work, but the result is small and nothing can shake loose.

The XL1278-SMT LoRa module, a small blue board with the pin names printed along one edge and a 433M / 169M frequency marking

There is no screen on this build. I left it out to keep the box simple, and it cost me some time later when I tried to pair the phone.

Wiring

The firmware target for a build like this is called DIY V1, and it expects the radio and GPS on fixed pins. I wired to match it:

Module pinESP32 pin
LoRa VCC3V3
LoRa GNDGND
LoRa SCKGPIO5
LoRa MISOGPIO19
LoRa MOSIGPIO27
LoRa NSSGPIO18
LoRa RESETGPIO23
LoRa DIO0GPIO26
LoRa DIO1GPIO33
LoRa DIO2GPIO32
GPS TXGPIO12 (firmware’s GPS RX)
GPS RXGPIO15 (firmware’s GPS TX)

Two things to watch. The SX1278 is a 3.3 V part, so it goes on the 3V3 pin and never on 5 V. And the radio must not transmit without an antenna attached, so solder the antenna before the first power-up.

Here is the whole circuit as a schematic:

Schematic: 12V from the Jeep's fuse block through a rocker switch into a DC-DC buck converter, 5V to an ESP32 dev board, an XL1278-SMT LoRa module on SPI with a 433 MHz helical antenna, and a NEO-6M GPS on GPIO12 and GPIO15

The ESP32 dev board wired to the LoRa module with thin black wires, the spring antenna already soldered to the module

The buck converter goes in last. Set its output to 5 V with a multimeter before connecting it to the ESP32, because these boards ship with the trimmer set to anything.

The workbench during the build: open case, soldering iron, multimeter and the laptop used for flashing

Flashing and first setup

Flashing is the easy part. Open the Meshtastic web flasher in Chrome, pick the DIY V1 device, choose the latest stable release and flash over USB. After the reboot I set the region to EU_433 to match the module.

Then I tried to pair my phone and it asked for a PIN. By default the node generates a random PIN for every pairing attempt and shows it on its screen. Mine has no screen. The fix is to connect over USB serial with the web client, go to the Bluetooth config and change the pairing mode to fixed PIN with a code of your own. The same thing from the CLI:

meshtastic --set bluetooth.mode FIXED_PIN --set bluetooth.fixed_pin 123456

Pick something other than 123456.

The GPS needed attention too. On a DIY build it is off until you set GPS mode to enabled in the position settings, and “fixed position” has to be off or the node keeps reporting the same coordinates forever. A first fix also needs open sky and can take several minutes, so don’t judge it on the bench.

First power-on over USB with the lid on, the ESP32's LED visible through the vent slots

The Meshtastic case

The housing is my own design. I modeled it around these exact boards, so each one has its own spot on the floor of the box and there is room to tuck the extra wire away. “MUD Fellas” is printed into the floor.

The open case with all parts in place: LoRa module, ESP32, NEO-6M GPS and the buck converter with its red power LED lit, the GPS patch antenna resting on the lid

The lid and all four walls are slotted. A buck converter and an ESP32 in a closed box inside a car in summer get hot, and the slots also let me see the status LEDs without opening anything. The GPS patch antenna sits right under the lid, facing up.

The closed case from above, each board visible through one of the six lid slots

The case from the side, showing the vent slots along the wall

The antenna comes out through a hole in the corner and the 12 V lead leaves through a slot in the wall.

The case with the 12 V lead coming out of one end and the spring antenna sticking out of the corner

A closer look through the lid at the NEO-6M GPS module and the buck converter's coil and heatsink

The top edge has the power switch and an opening for the ESP32’s USB-C port, so I can update the firmware or change settings over serial without taking the node apart.

The top edge of the case with the round rocker switch and the cutout for the ESP32's USB-C port

It stands upright with the antenna pointing up, which is how it sits in the car.

The finished node standing upright on the desk, antenna up, switch on top

The node straight on, all six slots showing the boards inside

In the Jeep

The node lives in the back, on the power panel with the fuse block and the Renogy ONE Core. It takes 12 V from the fuse block, so it runs from the house battery and stays up when the engine is off.

The node mounted on the Jeep's rear power panel, wired to the fuse block, with the Renogy display above it showing the battery at 68%

I flip the rocker switch, the node boots, and from the driver’s seat I use the Meshtastic app on my phone over Bluetooth.

Was it worth it

For a handful of cheap modules and some fiddly soldering, yes. I now have a node that is wired into the car, reports its own position and needs nothing from me except a flick of the switch. A ready-made board with a screen would have been quicker and would have saved me the pairing problem, but it would not have fit my panel or run from 12 V without more boxes around it.


Follow along. New posts show up on the RSS feed. I also share my projects on GitHub, MakerWorld and LinkedIn.

← All posts

Got it working, or stuck? [email protected]