[ Meshtastic Node Build ]

[ 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 ]