Skip to content
Get started

From nothing to on the mesh, in an afternoon

You need one small radio and the phone you already own. No license, no exam, no account, and no recurring cost. Here's exactly what to buy and what to do with it.

The process

Four steps, start to finish

  1. 01

    Buy a companion

    A WisMesh Tag is the safest first purchase. It's small, weatherproof, and it has a built-in antenna so you don't have to worry about that yet.

  2. 02

    Flash MeshCore

    Firmware goes on over USB from a browser-based flasher. Ten minutes, no toolchain, no soldering. We'll walk you through it if it's your first time.

  3. 03

    Install the app

    MeshCore for iOS or Android. It generates your keypair on first launch and pairs to the board over Bluetooth.

  4. 04

    Join a channel

    Get on the regional channel, say hello, and see who hears you. Then dial in the settings below so your node plays well with the rest of the mesh.

Prices and board availability change constantly. Ask in the group before ordering, we keep track of what's currently in stock and what's worth avoiding.

Hardware

Which board should you buy?

All of these run MeshCore. The difference is what job you want the node to do.

First Companion

WisMesh Tag

~$40–60

Recommended for new users. It's easy to use, well supported, and easy to carry around on a daily basis.

Excellent battery lifeCompact sizeIP66 weatherproofBuilt-in antenna
Repeater or Companion

Heltec WiFi V4

~$25-35

There are more of these on the mesh than anything else, it has a lot of power for a low cost but can be a little power hungry.

USB-COLED screen capableBattery connectorSolar friendly
Repeater or Companion

Heltec T096

~$35-45

Has a lot of power for a moderate cost without being too power hungry.

USB-CExcellent battery lifeBattery connectorSolar friendly
Repeater

RAK WisBlock (4631)

~$40–60

Very low power draw and a modular enclosure ecosystem. The usual choice for a solar repeater that has to sit on a mast and be forgotten.

Excellent battery lifeSolar friendlyWeatherproof cases available
Repeater

Station G2/G3

~$80-$120

The G2, and G3, is a modular high-power fixed node for a good site. May be more difficult to get as stock is low but might be able to find it used.

Fixed installWell supported
Repeater

XIAO nRF52 w/ Wio-SX1262

~$15-25

An inexpensive compact LoRa board which is a good choice for a repeater if you are comfortable with soldering and want to save money.

Very smallWell supportedExcellent battery life

Make sure you're buying the 915 MHz version

LoRa boards ship in region-specific variants. In the United States you want US915 / 902–928 MHz. An 868 MHz board sold for Europe will not talk to anything here, it's the single most common ordering mistake.

Antennas, mounts, and power

Once the board works on a desk, everything that determines whether it is useful is outside the board. Where you put the antenna, how high it goes, and whether the power source survives a week of clouds.

For a handheld or vehicle node

A decent whip antenna and a USB power bank is genuinely all you need. In a truck, a mag-mount on the roof makes a large difference over an antenna inside the cab.

For a repeater

A weatherproof enclosure, a small solar panel with a lithium pack sized for several cloudy days, and a mount that gets the antenna as high as you can safely reach. Use proper coax, keep the run short, and seal every connector.

Run the site through the explorer first. Terrain decides this, not hardware, and it is much cheaper to learn that from a terrain profile than from a ladder.

Replace the stock antenna first

The little rubber antenna in the box is the weakest part of any kit. A decent 915 MHz whip is the cheapest range upgrade you will ever buy.

Height beats gain

A modest antenna twenty feet up outperforms an expensive one at head height. Spend your effort on the mount before the hardware.

Never transmit without one

Powering a LoRa board with no antenna attached can damage the radio. Connect the antenna before you plug in USB, every time.

Configure

Dial in your companion

The defaults will get you on the air, but not all of them are good defaults. These four are ordered by what it costs you to skip them: the pairing PIN first, because a weak one hands your node to anyone standing nearby, then a privacy decision only you can make, then two that shape how well you sit on the mesh and how long the battery lasts.

  1. 01

    Bluetooth Pairing PIN

    Boards without a screen
    Where
    Settings → Other Settings → Bluetooth Settings
    Set to
    Custom, with a PIN of your own

    A companion with a screen invents a random PIN every time you pair and shows it on the display, so there is nothing for you to do. A companion without a screen has nowhere to show one, so it falls back to a fixed default instead: 123456. That default is not a secret, it is the same on every screenless board and it is written down in public, so anyone within Bluetooth range can pair with your node and take over the app side of it. Change it before you take the device out of the house. In the app, open Settings, scroll down to Other Settings, then open Bluetooth. Switch Bluetooth Pin Type to Custom and enter six digits of your own underneath. The app validates what you type, it has to land between 100,000 and 999,999, so it is always a full six digits and can never lead with a zero, something like 012345 is rejected. Tap the check mark to save. Then write the PIN down somewhere you will not lose it, because recovering a forgotten one is not a reset button, it means reflashing the device over USB.

    The Bluetooth Settings screen. A notice warns that a forgotten PIN can only be reset by flashing the USB firmware. Below it, Bluetooth Pin Type is set to Custom, and a Bluetooth Pin (6 digits) field holds an example six-digit value.
    Set Pin Type to Custom, enter six digits, then tap the check mark.
  2. 02

    Share Position in Advert

    Where
    Settings
    Set to
    Leave unchecked

    Your companion periodically advertises itself so other nodes know it is there. With this enabled, that advert carries your current GPS position, and anyone in range can see where you are. That is genuinely useful for a work crew or a response team keeping track of each other, and it is a real exposure if you would rather not broadcast your location. It ships unchecked. Leave it that way unless you have a specific reason to turn it on.

    The MeshCore Settings screen. 'Share Position in Advert' sits at the top as an unchecked checkbox, above Radio Settings and Network Settings.
  3. 03

    Default Path Hash Size

    Where
    Settings → Network Settings
    Set to
    2-byte (max 32 hops)

    The Austin-area network runs with this setting, so matching it keeps your messages moving efficiently in places with a lot of repeaters. This is the one setting on this page where the right answer is decided by the network rather than by you, if your companion disagrees with everyone else, your traffic is the traffic that suffers.

    The same Settings screen scrolled to Network Settings, where 'Default Path Hash Size' is set to '2-byte (max 32 hops)'.
  4. 04

    GPS Mode

    Where
    Settings → Other Settings → Position Settings
    Set to
    Disabled

    If your board has its own GPS receiver, it draws power the entire time it is powered on. Turning it off and letting the app supply your phone's location instead buys you meaningfully more runtime between charges, and your phone's GPS is usually the better receiver anyway. Skip this step if your board has no GPS; many of the cheaper ones do not.

    The Other Settings list, showing rows for Manage Identity Key, Bluetooth, Contact, Message, Notification, and Position Settings.
    Scroll to Other Settings and open Position Settings.
    The Position Settings screen showing GPS Mode with two options, Disabled and Enabled, and Disabled selected.
    Set GPS Mode to Disabled.
Configure

Set up a repeater

A repeater is tuned for different things than a companion. Start by giving it an identity of its own, every other repeater step builds on this one.

  1. 01

    Generate a keypair with a unique 2-byte prefix

    A repeater is identified on the mesh by its public key, and the first two bytes of that key act as its short prefix. Two nodes sharing a prefix are ambiguous to everything around them, so pick one nobody else on the network is already using before you generate the key.

    First, claim a prefix

    The analyzer has a prefix tool that will generate an unused 2-byte prefix for you, or tell you whether one you already have in mind is free.

    Open the prefix tool on the analyzer

    Then, generate the key, and back it up

    Generate the public/private pair with mc-keygen, matching the prefix you just claimed. Store the private key somewhere secure before you go any further. It is what lets you restore the same identity if the repeater ever has to be replaced, and it is not recoverable from the device afterwards.

    Finally, write the key to the repeater

    Two routes. Use the first if the repeater is already mounted and you would rather not take it down; use the second if you have it on the bench.

    Remotely, from your phone

    1. Generate the key at gessaman.com/mc-keygen on the phone itself, so you never have to retype it.
    2. In the MeshCore app, log in to the repeater with its admin password.
    3. Open the Command Line tab at the bottom of the screen.
    4. Enter the command, substituting your generated key, and press enter:
      set prv.key <private key>
    5. The repeater replies OK if it took. Then restart it:
      reboot

    From a PC, over USB

    1. Generate the key at gessaman.com/mc-keygen in another tab, so you can paste it straight into the console.
    2. Connect the repeater to the computer with a USB cable.
    3. Open the MeshCore Flasher Console and connect to the repeater through its serial port.
    4. Enter the same command, substituting your generated key:
      set prv.key <private key>
    5. Again it replies OK on success. Restart it to finish:
      reboot
  2. 02

    Set the Path Hash Size to 2-byte

    Same setting your companion needs, same reason: the Austin-area network runs on 2-byte path hashes, and a repeater that disagrees makes routing worse for everything downstream of it. Unlike the companion, this one is changed through the repeater's admin screens rather than your own settings.

    1. In the MeshCore app, open the repeater from your contact list and log in to Repeater Admin with its admin password.
    2. Tap the Settings tab along the bottom, then scroll down to Network Settings.
    3. To see what the repeater currently has stored, tap the refresh icon beside the check mark on Path Hash Size. Values are not fetched automatically, the app asks you to request them so it is not spending mesh airtime on settings you did not ask to see.
    4. Select 2-byte (max 32 hops) and tap the check mark to save it.
    5. Scroll to the bottom of the Settings tab and tap the reboot button. The change does not take effect until the repeater restarts, and there is no need to drop to the command line for it here.
    The Repeater Admin settings list, with a Network Settings row labelled 'Configure Mesh Network' between Neighbours and Repeat Settings.
    On the Settings tab, scroll to Network Settings.
    The repeater's Network Settings screen showing Path Hash Size with a refresh icon and a check mark, currently set to 2-byte (max 32 hops).
    Refresh to read the current value, pick 2-byte, then tap the check mark.
  3. 03

    Set the advert intervals

    A repeater announces itself with adverts so the rest of the mesh knows it is there. Zero-hop adverts reach only its direct neighbours; flood adverts travel outward across the network. Both run on timers, and the numbers below are what established repeaters on this network use.

    1. Open the repeater from your Contact List and enter Repeater Admin. Resume the previous admin session if it is still open, or enter the admin password again to start a new one.
    2. Tap Settings at the lower right, then scroll down to Advert Intervals.
    3. Tap the refresh icon on both Auto Advert (Zero Hop) and Auto Advert (Flood) to pull the values the repeater currently has stored. Neither is fetched until you ask for it.
    4. Set the two intervals, then tap the check mark on each to save. Mind the units, one field is in minutes and the other is in hours:
      Auto Advert (Zero Hop)
      240 minutes
      Auto Advert (Flood)
      23 hours

    Unlike the Path Hash Size in step 02, these intervals take effect the moment you save them, no reboot required.

    If this is a brand new repeater

    Those intervals are tuned for repeaters the network already knows about. A node nobody has heard from yet should not wait up to 23 hours to introduce itself, tap Advert on the settings screen, just above Advert Intervals, a few times over the next ten minutes to announce it.

    The Repeater Admin settings list showing Advert, which sends a flood advert, then Advert Intervals for setting auto advert intervals, then Position.
    Advert Intervals sits just below Advert on the Settings tab.
    The Advert Intervals screen with Auto Advert (Zero Hop) set to an interval of 240 minutes and Auto Advert (Flood) set to an interval of 23 hours, each with a refresh icon and a check mark.
    Refresh each value, set 240 and 23, then tap the check marks.

More repeater steps

Coming soon

Duty cycle, power budget, and how much traffic a repeater is willing to carry all still need writing up. Until they land, ask in the group before you put a node on a mast, somebody has already tuned one on a similar site.

Stuck? That's what we're for.

Nobody's first flash goes smoothly. Bring the board to a meetup or post what you're seeing, somebody in the group has hit the exact same error and can save you an evening.