Skip to content
Guides

MeshMapper Guide: Wardriving MeshCore Coverage

Map real MeshCore RF coverage with MeshMapper. The five modes, how to read the colors, MQTT observer setup, and how to get your region online.

J
Josh
· Updated April 22, 2026 · 11 min read

Everyone who builds a mesh network eventually asks the same question: does this thing actually cover what I think it covers?

Node location maps will show you where hardware is sitting. They won’t tell you whether your signal reaches the park two miles east, whether that hill is blocking your repeater’s southern path, or which corner of downtown is a dead zone. For that you need real RF data from real locations. That’s exactly what MeshMapper collects and displays.

MeshMapper is a community wardriving platform built specifically for MeshCore networks. You drive around with your radio connected, it sends pings across the mesh, and the results show up as a live coverage map that anyone can read. The more people contribute, the more accurate and complete the picture gets.

We’ve been watching MeshMapper evolve and testing it on our own routes. What’s below is a walkthrough of how it works, how to use it, and what it takes to get a new region online. If you’re new to MeshCore, start with how MeshCore works before setting this up.

What Is Wardriving for Mesh Networks

The term “wardriving” originally meant scanning for Wi-Fi networks from a moving vehicle. In the MeshMapper context it means something more deliberate. You’re moving through the real world with your MeshCore radio connected, transmitting test pings into the mesh, and recording where those pings were heard and by which repeaters.

The data you collect answers questions like:

  • Can I reach the mesh from this road?
  • Does my signal make it through to this neighborhood?
  • Which repeater is carrying my traffic in this area?
  • Where are the dead zones between two repeaters?

A node location map shows you where hardware exists. MeshMapper shows you where the network actually works.

MeshMapper wardriving interface The MeshMapper wardriving interface showing coverage data. Image via MeshMapper.

What You Need

The requirements are straightforward.

  • A MeshCore radio running firmware v1.14.0 or newer. Companion firmware (BLE or USB), not repeater firmware.
  • A smartphone or computer. Android, iOS, or a Chromium-based browser (Chrome or Edge; Safari doesn’t support the Web Bluetooth API).
  • GPS. Your phone’s built-in GPS is fine.
  • Bluetooth for connecting to the radio.
  • An active MeshCore network in your area. At least one repeater within range.

The app is free. Download it from the Google Play Store or App Store by searching “MeshMapper Wardriver.” There’s also a web version at wd.meshmapper.net that works in Chrome and Edge, though it can’t run in the background like the mobile versions can.

You also need your area to have an active MeshMapper region set up. More on that below.

How MeshMapper Works: Pings, Observers, and the Coverage Map

Here’s what happens when you send a ping from the MeshMapper app.

  1. Your phone composes a ping that includes your GPS coordinates and transmit power level. The app encrypts it using the #wardriving channel key.
  2. Your companion radio floods the mesh with the encrypted ping. Every repeater in range forwards it onward. It travels as far as the network can carry it.
  3. Observer nodes hear the ping. These are specialized MeshCore nodes that monitor all mesh traffic and report it upstream via MQTT (a lightweight messaging protocol). Observers are what make the map work. Without them, there’s no way to know which repeaters heard your signal.
  4. MeshMapper’s backend processes the reports and cross-references them with known repeater locations. A few minutes later, your coverage data shows up on the map at meshmapper.net.

The map grid is divided into squares (300m × 300m in standard view, 100m × 100m in detailed view) color-coded by what happened at each location.

Connecting Your Radio

When you open MeshMapper and navigate to the Connect tab, you’ll scan for Bluetooth devices and select your radio. The app runs through a 9-step automated connection sequence. Establishing the Bluetooth link, verifying firmware compatibility, retrieving your radio’s encryption keys, syncing the clock, authenticating with the MeshMapper API, setting up the #wardriving channel, and waiting for GPS lock.

When the Connect icon turns green, you’re ready to ping.

One important thing: MeshCore only supports one BLE connection at a time. If another app is already connected to your radio (like the MeshCore companion app), MeshMapper won’t be able to connect. Disconnect the other app first.

The app remembers your last connected device, so subsequent sessions reconnect quickly. If Bluetooth drops mid-session, the app tries to reconnect automatically up to three times while preserving your upload queue.

The Wardriving Modes

MeshMapper has five modes for different situations. Knowing which to use matters.

Hybrid Mode is the recommended default. It alternates between discovery requests and channel messages at set intervals, producing the richest dataset while using 50% fewer channel messages than the older active mode. Unless you have a specific reason to use something else, start here. Requires repeater firmware 1.10 or newer for the discovery portion.

Passive Mode sends discovery requests every 30 seconds without flooding the mesh with channel messages. Use this when your zone is at TX capacity. When too many wardrivers are already active and you can’t send more channel messages. It still collects useful data about repeater locations and signal quality without adding to network load.

Manual Ping sends a single ping when you tap the button. Good for spot-checking a specific location or testing a new antenna position. Not practical for covering ground efficiently, but useful for targeted tests.

Active Mode is the legacy approach. Channel messages only, no discovery requests. Hybrid Mode produces better data with less network impact, so Active Mode is mostly there for backward compatibility.

Trace Mode focuses on a single specific repeater by hex ID. Useful for antenna alignment, testing a particular repeater’s coverage footprint, or diagnosing why a specific link is underperforming.

If your zone has hit maximum TX capacity, the app will limit you to Passive Mode automatically.

Reading the Map

The coverage map uses a color priority system. When a grid square has multiple data points, the highest-quality result wins.

Green (BIDIR). Two-way confirmed coverage. Your ping reached a repeater and the acknowledgment came back. This is the gold standard: the mesh works here in both directions.

Cyan (DISC). Discovery response. A repeater directly responded to a discovery request, confirming two-way communication.

Orange (TX). Your ping was sent but no confirmation came back. The mesh may cover this area, but the return path didn’t complete.

Purple (RX). Your radio heard mesh traffic here without you transmitting. The network reaches this spot passively.

Grey (DEAD). A repeater heard your ping but didn’t relay it further. Coverage stops here.

Red (DROP). Complete failure. No repeater responded.

Clicking on any grid square shows you the detailed data. Which repeaters heard your ping, the signal-to-noise ratio at each hop, transmit power used, and the path your signal took through the mesh. This is where you start to understand your network’s actual topology.

The map also has specialized overlays. Signal strength heatmaps, noise floor visualization, repeater neighbor lines (which repeaters can directly hear each other), and ping age coloring to show how recently an area was surveyed.

Switch between base layers (standard street map, topographic, dark mode, satellite) depending on what you’re trying to understand. Topographic is particularly useful in hilly terrain where line-of-sight questions matter.

The Community Side

MeshMapper has a leaderboard system that turns coverage mapping into something resembling a competitive sport, in the best possible way.

Top Contributors tracks data points submitted in the past 7 days, highlighting who’s been actively wardriving recently. One ping equals one point.

All Time Legends tracks cumulative contributions since your region launched. The people who’ve put the most data into the map overall.

Top Explorers rewards something different: not repetition, but discovery. The explorer ranking counts unique grid squares where you were the first person to place a ping. It incentivizes going somewhere new rather than re-driving the same roads.

Best Repeaters ranks infrastructure by maximum achieved range, broken down by data type (bidirectional, transmit-only, receive-only). A useful reality check on which repeaters are actually pulling their weight.

There’s a global leaderboard that aggregates across all active regions, with each user’s primary region determined by where they’ve contributed the most data.

Automatic awards kick in at milestones. First contribution, 1,000 points, 5,000 points, 10,000 points, 50,000 points. Explorer tiers for mapping 1,000, 5,000, and 10,000+ unique grid squares. Administrators can also grant manual awards for contest wins, events, or community contributions.

How to Add Your Region to MeshMapper

This is the part that requires some infrastructure work, and it’s important to understand before you expect the map to populate.

MeshMapper doesn’t know what your repeaters heard unless observer nodes are reporting that data. MQTT observers are MeshCore nodes (or devices connected to MeshCore nodes) that listen to all mesh traffic and forward it to an MQTT broker that MeshMapper’s backend reads.

Your area needs at least one observer node, ideally two or three, before you can request a region. The observer connects to either the LetsMesh broker (mqtt-us-v1.letsmesh.net) or the MeshMapper broker (mqtt.meshmapper.cc), both on port 443 with WebSocket TLS.

Four ways to set up an observer.

Python on a Raspberry Pi. A Pi connected to a MeshCore radio via USB or Bluetooth, running a Python script that forwards mesh traffic to MQTT. Continuous and reliable.

Home Assistant. If you’re already running Home Assistant, there’s a MeshCore integration that can pipe mesh traffic to MQTT from a connected radio. Useful if your mesh node is already near your home automation setup.

Native firmware (Heltec V3/V4). Heltec boards with onboard Wi-Fi can run observer functionality directly in firmware. Documentation is still being developed for this path.

PyMC integration. For networks running the PyMC repeater system, MQTT configuration goes through PyMC’s interface.

Once your observers are running, you submit a region request through MeshMapper’s onboarding form. You’ll provide a three-letter region code, geographic name, expected coverage area, your observer node public IDs, and draw a boundary polygon on the map. The system verifies your observer connectivity, administrators review it, and approved regions go live within five minutes.

Why It Matters for NodakMesh

North Dakota’s flat terrain is both an advantage and a challenge for mesh networking. Line of sight is excellent across open ground. A repeater on an elevated structure can cover remarkable distances. That same openness means you can’t rely on terrain to fill gaps. If there’s a hole in coverage, there’s nothing to catch it.

MeshMapper gives us the actual picture. Where does our infrastructure reach? Which areas need another repeater? Are our existing repeaters performing as expected, or is something degrading signal in a way we can’t see from the node map alone?

Wardriving doesn’t require special hardware beyond what you already have. If you’re running MeshCore and your area has observers in place, driving your normal routes with the app open contributes real data to the community map. Every trip to the grocery store is a coverage survey.

If you want to help get the Bismarck/Mandan or Fargo area onto MeshMapper, the first step is getting observer nodes running. Come talk to us on Discord. We can walk you through it.

Quick Reference

ItemDetails
App downloadGoogle Play Store or App Store: “MeshMapper Wardriver”
Web versionwd.meshmapper.net (Chrome/Edge only)
Community mapmeshmapper.net
Firmware requiredMeshCore v1.14.0+ (companion firmware)
Recommended modeHybrid Mode
MQTT brokersLetsMesh or MeshMapper (both supported, use both for redundancy)
Region requestVia MeshMapper onboarding form after observers are running
GitHub / docsgithub.com/MeshMapper/MeshMapper_Wiki

If you’re in North Dakota and want to help build out coverage data, join the NodakMesh Discord. Setting up your first observer node is more approachable than it looks, and the coverage data it enables helps everyone building out the mesh.

#meshmapper #meshcore #wardriving #coverage-map #mqtt #lora #rf-coverage #observer-node #coverage-testing #mesh-map #off-grid

Comments