[ Meshtastic Node Build ]
[ Overview |
Pick the board |
Region / frequency |
Antenna |
Power & solar |
Node roles |
Enclosure |
Flash & first config |
Placement |
Worked example ]
[ Overview ]
Meshtastic turns a cheap LoRa board into a node on a long-range, low-power, encrypted mesh that needs no cell service, no internet, and no infrastructure. You flash firmware, add an antenna and a battery, and it finds every other node in radio range and relays text for the whole mesh. Building a node is easy. Building one that actually reaches and survives comes down to three decisions, in order of how often people get them wrong: 1. The antenna and where it sits — decides your range more than anything else on the bench. 2. Power — decides whether a remote node is alive next month or a dead box on a hill. 3. The board (chip family) — mostly a power-budget and uplink decision once 1 and 2 are settled. This guide walks each one with real numbers, then ends with a worked solar-relay build. For where to put the finished node — modelling terrain, line-of-sight, and predicted coverage before you climb anything — see the companion Meshtastic RF Coverage Planning guide.
[ Pick the board ]
Every Meshtastic-supported board is some combination of an MCU and a Semtech
LoRa transceiver (almost always the SX1262 now — better
sensitivity and lower RX current than the older SX1276). The MCU is the choice
that matters, and it's really two families:
nRF52840 — deep-sleep in microamps. BLE only (no
Wi-Fi). The right brain for anything battery- or
solar-powered that has to last. RAK4631, T-Echo.
ESP32 / -S3 — deep-sleep in milliamps (10×–1000×
thirstier). Has Wi-Fi + BT, so it can uplink to MQTT
over your LAN. The right brain for a mains-powered
home node. Heltec V3, T-Beam, T-Deck.
Rule of thumb: mains power → ESP32 (you get Wi-Fi/MQTT for
free); battery or solar → nRF52 (you get weeks-to-months of
runtime instead of days).
Common boards, what they're for:
Heltec LoRa32 V3 ESP32-S3, SX1262, 0.96" OLED. ~$15. The default
starter / cheap mains node. Tiny battery JST but
ESP32 sleep is poor — don't expect solar magic.
LILYGO T-Beam ESP32 + SX1262 + GPS + 18650 holder + PMU. The
classic GPS / mobile / vehicle node.
RAK WisBlock nRF52840 (RAK4631) core on a modular base board.
(RAK4631) The go-to for solar relays — microamp sleep,
screw terminals, solar input on the base. Buy the
core + a RAK19007 (or RAK5005-O) base.
LILYGO T-Echo nRF52840 + SX1262 + e-paper + GPS. Low-power
pocket node; the screen costs ~zero idle power.
Wio Tracker L1 nRF52840 + SX1262 + GNSS (Seeed). Low-power
tracker / portable node; Grove ports for sensors.
A dev board — BYO antenna, battery, case.
T-Deck / T-Deck+ ESP32-S3 + QWERTY + LCD (+ GPS on the Plus). A
standalone messenger you can type on without a phone.
If you just want to get on the mesh today: a Heltec V3 (or two) and a
decent antenna. If you want to extend the mesh into a dead area
that has no power: RAK4631 + solar.
[ Region / frequency — get this right first ]
LoRa runs in license-free ISM bands that differ by country, and
this bites people twice:
— Hardware: a board is sold per band. A 915 MHz (US) radio
and an 868 MHz (EU) radio are different SKUs. Order the one for
where you live — the wrong band radio is the wrong antenna too.
— Firmware: on first boot the region is UNSET and the
node will not transmit until you pick one. Set
LoRa → Region to your actual region (US, EU_868,
EU_433, ANZ, …). Setting a region you're not in is a good way to
transmit illegally.
Get the band wrong and nothing on this page helps — you'll have a
node that's deaf, illegal, or both.
[ Antenna — where range is won and lost ]
This is the part people skimp on and then blame the radio. At 900 MHz a few details decide everything: 1. Never transmit without an antenna. Powering a LoRa board with no antenna (or a badly mismatched one) reflects the transmit energy back into the PA. LoRa is low power (~22 dBm), so you might get away with it once, but repeated keying can degrade or kill the radio. No antenna on the bench → no power, or fit a dummy load. 2. Match the connector — SMA vs RP-SMA. They look identical and do not mate. SMA has a center pin on the cable; RP-SMA reverses it (pin on the jack). Buy the antenna that matches your board's connector or nothing screws together right and you'll think it's tight when it isn't. 3. Tune to your band. A "900 MHz" antenna built for the US 915 band is not optimal on EU 868 and definitely not on 433. A stock rubber-duck that's resonant on the wrong band wastes most of your budget as reflected power (high SWR). 4. Gain is a trade, not free range. A high-gain antenna (say 5–8 dBi) squashes the radiation donut flatter — more reach toward the horizon, less straight up and down. That's perfect between two nodes at similar elevation on flat ground. On a mountaintop it can fire your signal clean over the users in the valley below. Match the pattern to the geometry, not just the dBi number. (More on this in the coverage guide.) 5. Height beats power, and feedline eats both. Getting the antenna a few meters higher does more than any legal power increase. But coax loss at 900 MHz is brutal — thin RG174 can swallow several dB in a short run. Keep the radio close to the antenna and the feedline short; if you must run cable, use low-loss LMR-240/400. Mount the antenna high, not the box.
[ Power & solar — keeping a relay alive ]
A node on your desk runs off USB and you never think about it. A node on a
ridge that has to feed itself is a different engineering problem.
The TX current spike. Transmitting pulls a short, sharp current spike
(roughly 100–150 mA on the whole board during a packet). A solar panel
alone can't supply that cleanly — you always need a battery (or a
big cap) between the panel and the board to absorb the spikes. Panel charges
battery, battery runs node.
Size for the worst day, not the average. The classic remote-node death
is a brownout loop: undersized battery + a run of cloudy, cold days → the
pack sags → the board browns out and resets → reset draws more → it
never recovers. Size the battery for your darkest expected stretch with zero
charging, then add margin. Cold also robs LiPo capacity — derate for winter.
This is why nRF52 wins outdoors. An nRF52 relay sleeping at microamps
between rebroadcasts can ride out days of bad weather on a small pack. An
ESP32 doing the same job burns through it. If the node must live on sun,
start from a RAK4631.
A sane small solar relay budget:
— nRF52 board (RAK4631) — low idle draw
— 3000–3500 mAh Li-ion / 18650, quality cell
— 5–6 W / 6 V panel (oversize the panel; sun is unreliable)
— a real charge controller / solar-input base (don't hang a raw
panel on a LiPo)
— role that doesn't keep the radio needlessly awake (see below)
[ Node roles — please don't set ROUTER ]
A node's role tells the mesh how it should behave when it hears a
packet. Picking the wrong one is the most common way well-meaning people
degrade a local mesh.
CLIENT Default. Full app/UI, and it rebroadcasts to extend
the mesh. This is what almost every node should be.
CLIENT_MUTE Participates but does not rebroadcast. Use for a
leaf node sitting next to a router, so it doesn't add
duplicate hops and airtime.
ROUTER Prioritized rebroadcaster meant for a node that is
genuinely high and covers a wide area. It also sleeps
its screen/peripherals to save power. Only justified on
real infrastructure sites — a rooftop, a tower, a peak.
ROUTER_LATE Like a router but rebroadcasts later in the priority
order — for secondary infrastructure that should
help only when the primary routers didn't already cover
it. Great for a second hilltop relay.
REPEATER Infrastructure-only: rebroadcasts but exposes no
client UI and doesn't show up as a normal node. For a
set-and-forget relay you won't message from.
The antipattern: setting every node to ROUTER because it "sounds
better." A pile of equal-priority routers in earshot all rebroadcast the
same packet, flooding airtime and actually shrinking effective range.
Default everything to CLIENT; promote a node to ROUTER / ROUTER_LATE /
REPEATER only when it's a real high site doing real relaying.
[ Enclosure & weatherproofing ]
An outdoor relay lives or dies on water management. Electronics rarely die
from rain directly — they die from condensation that forms inside a
sealed box as it heats and cools each day.
— IP65+ enclosure, UV-stable (cheap ABS goes brittle in a season
of sun).
— Vent it. A Gore-style breathable vent equalizes pressure and lets
moisture out without letting rain in. A perfectly sealed box is a
condensation trap.
— Bulkhead the antenna. Mount the SMA connector through the wall of
the box, antenna outside, with a drip loop in any cable so water
runs off instead of into the connector.
— Mind the heat. Dark box in direct sun cooks LiPo cells and shortens
their life. Light color, shade, or airflow.
— Strain-relieve every cable entry. Wind works connectors loose over
months.
[ Flash & first config ]
Flashing is the easy part: 1. Plug the board in over USB. 2. Open the web flasher in a Chromium browser (it uses Web Serial), pick your board, flash the current stable firmware. 3. Connect with the phone app (BLE) or the web client and set, at minimum: — Region (or it won't transmit — see above) — Role (CLIENT unless it's real infrastructure) — a node name so it's identifiable on the mesh 4. Leave the modem preset on the default (LongFast) unless your whole local mesh agreed to change it — every node has to share the same preset and channel to talk, and faster presets trade away range.
# prefer the CLI? the python tool does the same config headless pip install --upgrade meshtastic meshtastic --set lora.region US meshtastic --set device.role CLIENT meshtastic --set-owner "ridge-relay-01" meshtastic --info # dump the running config to verify
[ Placement — the multiplier ]
A modest node up high beats a maxed-out node down low, every time. Once the
hardware works, where you put it is the single biggest lever on coverage:
— Height and clear line-of-sight toward the nodes you want to reach.
— Get the antenna above the local clutter (roofline, trees), not just
the box off the ground.
— On hills, remember the high-gain-over-the-valley trap from the antenna
section.
Rather than guess, model it first. The companion
Meshtastic RF Coverage Planning guide walks the
terrain-aware Site Planner end to end — drop your node at a lat/lon, set the
antenna height you actually plan to use, and see the predicted coverage
before you climb the hill.
[ Worked example — a solar ridge relay ]
Goal: a set-and-forget relay on an off-grid high point to bridge two
populated areas that can't hear each other directly.
Board RAK4631 (nRF52840 + SX1262) on a RAK19007 base
→ microamp sleep, screw terminals, solar input
Power 3500 mAh 18650 + 6 W/6 V panel into the base's
solar input → rides out cloudy stretches
Antenna 5.8 dBi fiberglass omni, tuned to band, on a short
mast; radio mounted right at the base of it (short
feedline) → height without coax loss
Role ROUTER_LATE → helps relay from a true high site
without stomping the primary routers
Box IP67 UV-stable enclosure, Gore vent, bulkhead SMA,
drip loop, mounted out of direct afternoon sun
Siting chosen by modelling candidate peaks in the Site Planner
first, then validated in the field
That's the whole recipe: low-power brain so it survives, a real antenna up
high on a short feedline so it reaches, a battery to eat the TX spikes, and
a role that helps the mesh instead of flooding it. Everything else is
weatherproofing and patience.
[ See Also ]
Meshtastic RF Coverage Planning # model coverage before you climb the hill
The Hawaii Meshtastic Mesh # a real inter-island mesh built from nodes like this
ESP32 Bluetooth Proxy # adjacent ESP32 flashing / RF work
Hardware Hacking (parent) # arduino, firmware, ISP, RF
Meshtastic # the LoRa mesh project + docs
Meshtastic Web Flasher # flash firmware from the browser
