Skip to content
This repository was archived by the owner on Aug 6, 2026. It is now read-only.
This repository was archived by the owner on Aug 6, 2026. It is now read-only.

Proposed MeshCore Repeater With ESP Now Testing Report #1

Description

@wirless63

title: MeshCore Repeater W/ESPNow Bridging Test Report

Date: 08/04/2026 Locations: Lakewood, CO

Test Purpose: To determine if MeshCore Repeaters configured with
ESPNow Bridging does work as a bridging capability between repeaters and
what limitations and functionality that includes. The evaluation may be
used to determine an alternative implementation in MeshCore networks for
repeater to repeater linking which could reduce the congestion on LoRa
links and spectrum.

Test Method: Establish a baseline and then evaluate the ESPNow
Bridging through various isolated network configurations. Then, bridge
from the isolated network to a live regional MeshCore network.

About ESP Now:
ESP-NOW is a kind of connectionless Wi-Fi communication protocol that is
defined by Espressif. In ESP NOW, application data is encapsulated in a
vendor-specific action frame and then transmitted from one WiFi device
to another without connection. The current version is 2.0 with version
1.0 mostly compatible with version 2.0.

ESP-NOW data can be sent via both the Station and the Access Point
(SoftAP) interface modes.

The range of channels the paired devices can use is from 0 to 14 in the
2.4 GHz ISM Band. If the channel is set to 0, data will be sent on the
current channel. Otherwise, the channel must be set as the channel that
the local device is on.

It has a fast and user-friendly pairing method that is suitable for
connecting “one-to-many” and “many-to-many” devices, while also
controlling them. The maximum number of paired devices is 20, and
the paired encryption devices are no more than 17, the default is 7.

CTR with CBC-MAC Protocol (CCMP) is used to protect the action frame for
security. ESP-NOW is widely used in smart light, remote controlling,
sensor, etc.

ESP-NOW is based on the data-link layer which reduces the five layers of
the OSI model to only one. This way, the data need not be transmitted
through the network layer, the transport layer, the session layer, the
presentation layer, and the application layer. Also, there is no need
for packet headers or unpackers on each layer, which leads to a quick
response reducing the delay caused by packet loss in congested networks.

ESP-NOW uses the CCMP method, which is described in IEEE Std.
802.11-2012, to protect the vendor-specific action frame. The Wi-Fi
device maintains a Primary Master Key (PMK) and several Local Master
Keys (LMKs, each paired device has one LMK). The lengths of both PMK and
LMK are 16 bytes.

Background: In researching this capability for testing, it was found
that the national emergency management MeshCore network of the country
of Portugal has endorsed the use of this bridging functionality and has
written their own repeater firmware to use in their repeater network(s).
Additionally, a U.S. MeshCore network in northern California has also
endorsed the use of this bridging functionality and has written their
own firmware to use in their network as well. Their version is an
adaptation of the Portugues MeshCore network firmware version.

This northern California firmware version is what was used in the
testing because it had supporting documentation, was considered stable,
and included a bridge filtering capability to help reduce congestion
within the ESP Now bridge connections.

Test Results:

Caveats:
This testing was performed at a small scale and in a mostly isolated
network. The results should not be taken to imply that the use of
ESPNow bridging with MeshCore repeaters will be successful in a
private isolated network nor appropriate on a large scale live
MeshCore network. Further testing should be performed to determine if
and when such a functionality can and should be used.

MeshCore is being written and maintained by two entities, MeshCore.uk
and MeshCore.io, which are in a legal battle. It’s unknown if the
truly open-source MeshCore.io version will continue to exist after the
legal battle is over. The MeshCore.uk version in trademarked and is
available with licensing fees which may deter public adoption and use
in the future.

The firmware used in the testing is not formally endorsed nor
maintained by MeshCore.io or MeshCore.uk and was written by two
regional MeshCore organizations. This firmware may not exist in the
future.

Limitations:
The research and testing revealed several limitations with the
firmware tested and ESP Now functionality and capability which must be
noted. This is not a comprehensive list and there may be many more.

The firmware, while it has a filtering capability, is limited. As an
example, you can set the filtering to block all adverts but doesn’t
have the granularity to say allow only repeater or room adverts.
Similarly, you can set the filtering to block all public channel
traffic but doesn’t have the granularity to allow certain types of
public traffic.

The number of networked repeaters using ESP Now would be limited 20
without encryption and 17 with encryption. In a large network that
could be a design challenge. It is possible, in a large network to
divide the network in clusters by using different WiFi channels but
this means managing the overall network design and creates a need for
gateways between clusters to interconnect the differing WiFi channels.

The encryption keys in the ESP Now coding appear to be hard coded in
the firmware which makes it difficult to maintain as repeaters leave
and join the cluster. As a matter of good security practices, all
members of cluster would require a firmware update to changing the
encryption keys after a repeater leaves a cluster. Again, making
managing the overall network more complex, channels and key
management.

If ESP Now bridging is implemented, the repeater cannot use Bluetooth
nor use RS-232 bridging. Only one bridging capability can be used at a
time and either Bluetooth or WiFi can be used.

ESP Now is currently an Espressif vendor proprietary protocol. The
implementation of the ESP Now bridging capability may be limited to
only Espressif products or licensee products which could limit
competition and result in increased pricing.

Results: Does ESP Now Bridging work between repeaters, Yes. Three
repeaters were configured with ESP Now and bridging communications
between them with ESP Now, instead of LoRa, work as expected. In
addition, using ESP Now to bridge between an
isolated/private/non-standard cluster to a regional MeshCore network
worked as expected as well.

In summary, using ESP Now to bridge MeshCore repeaters together to
reduce LoRa congestion will work as long as it’s done so taking the
caveats and limitations into consideration.

Test Plan:

Step1

To establish a baseline, confirm direct communications do work between
A and B Companion Radios on all three LoRa Frequency settings in the
test.

MeshCore App <<>> Comp A Radio <<>> Comp B Radio <<>> MeshCore App

Procedure: Set both Companion Radios to Direct and to each of the
frequencies and send a message “Test” in both directions. The Radios
were rebooted after each frequency change.

Results:
Freq 924.500: A to B-Success B to A-Success
Freq 904.600: A to B-Success B to A-Success
Freq 910.525: A to B-Success B to A-Success

Step2

To establish a baseline, confirm flood communications do work between
2 Companion Radios on all three LoRa Frequency settings/Test Repeaters.

MeshCore App<<>>Comp A Radio<<>>Rptr Radio<<>>Comp B Radio<<>>MeshCore App

Procedure: Set both B and A Companion Radios set to Flood and each of
the frequencies/Repeaters and send a message “Test” via each Repeater
in both directions. The Radios were rebooted after each frequency
change.

Results:
Repeater1/Freq 910.525: A to B- Success B to A- Success
Repeater2/Freq 904.600: A to B- Success B to A- Success
Repeater3/Freq 924.500: A to B- Success B to A- Success

Step3

Conduct flood communications testing between A and B Companion Radios
on two different LoRa Frequency settings and two Test Repeaters thus
confirming the use of ESPNow between the two Repeaters and that the
ESPNow Bridging works.

MeshCore App<<>>Comp A Radio<<>>Rptr A Radio<<
<<Rptr B Radio<<>>Comp B Radio<<>>MeshCore App

Procedure: Set both A and B Companion Radios to Flood and each to a
different LoRa frequency and repeater then, send a message “Test”
across the two bridged repeaters in both directions. The Radios were
rebooted after each frequency change.

Results:
Rptr1/Freq 910.525 to Rptr2/Freq 904.600: A to B-Success B to A-Success
Rptr2/Freq 904.600 to Rptr3/Freq 924.500: A to B-Success B to A-Success
Rptr1/Freq 910.525 to Rptr3/Freq 924.500: A to B-Success B to A-Success

Step4

Conduct flood communications testing between a Companion Radio and
Test Repeater on a non-regional LoRa Frequency and one Test Repeater
on the regional network confirming the use of an ESPNow bridge between
the isolated and the regional network will bridge the isolated network
into the regional mesh network.

MeshCore App<<>>Comp A Radio<<>>Rptr A Radio<<
<<Rptr C Radio<<>>Regional Mesh Repeater

Results:
RptrA/Freq 924.500 to RptrC/Freq 910.525 (Regional Mesh Network): Success

Advents from the Regional Network Repeaters and Rooms and Group Text
Floods were passed across the ESPNow Bridge to the isolated network of
a Repeater, Companion Radio and MeshCore App.

Step5

Conduct flood communications testing between A and B Companion Radios
on two different LoRa Frequency settings and two Test Repeaters with a
third Repeater in between thus confirming the use of ESPNow between
the three Repeaters and that ESPNow Bridging works over three hops.

MeshCore App<<>>Comp A Radio<<>>Rptr A Radio<<>>Rptr B Radio<<

Rptr C Radio<<>>Comp B Radio<<>>MeshCore App

Procedure: Set both A and B Companion Radios to Flood and each to a
different frequency and repeater and send a message “Test” across
three repeaters in both directions. The Radios were rebooted after
each frequency change. If proper isolation isn’t possible, this may
require forcing Repeater A and B to talk to only Repeater C and not
each other.

Results:
Performing the bridge linking of three repeaters was not possible as I
could not completely isolated Repeater A from Repeater B to perform
the test.

I was able to confirm that the ESPNow bridge does work between three
repeaters (a cluster network) by observing the bridge traffic
generated by a Companion Radio connected separately to each repeater
which was displayed on a terminal monitor of each of the three
repeaters.

Test Equipment:

Repeater1 W/ESPNow Bridge
Hardware: Heltec WiFi LoRa V4.3 OLED, no GPS module
Firmware: MeshCore Simple Repeater with ESPNow BridgeFilter Version 2.1
Bridge Enabled: Yes
Bridge Type: ESPNow
Bridge Filtering: None enabled (default)
Bridge Delay: 500 ms (default)
Bridge Source: logTx (default)
LoRa Freq: 910.525 MHz
LoRa Spread Factor: 7
LoRa Bandwidth: 62.50 KHz
LoRa CR: 5
LoRa Tx Power: 2 dBm
ESPNow WiFi Channel: 8
ESPNow Encryption Key: (default)

Repeater2 W/ESPNow Bridge
Hardware: Heltec WiFi LoRa V4.3 OLED, no GPS module
Firmware: MeshCore Simple Repeater with ESPNow BridgeFilter Version 2.1
Bridge Enabled: Yes
Bridge Type: ESPNow
Bridge Filtering: None enabled (default)
Bridge Delay: 500 ms (default)
Bridge Source: logTx (default)
LoRa Freq: 904.600 MHz
LoRa Spread Factor: 7
LoRa Bandwidth: 62.50 KHz
LoRa CR: 5
LoRa Tx Power: 2 dBm
ESPNow WiFi Channel: 8
ESPNow Encryption Key: (default)

Repeater3 W/ESPNow Bridge
Hardware: Heltec WiFi LoRa V4.3 OLED, no GPS module
Firmware: MeshCore Simple Repeater with ESPNow BridgeFilter Version 2.1
Bridge Enabled: Yes
Bridge Type: ESPNow
Bridge Filtering: None enabled (default)
Bridge Delay: 500 ms (default)
Bridge Source: logTx (default)
LoRa Freq: 924.500 MHz
LoRa Spread Factor: 7
LoRa Bandwidth: 62.50 KHz
LoRa CR: 5
LoRa Tx Power: 2 dBm
ESPNow WiFi Channel: 8
ESPNow Encryption Key: (default)

Companion Radio W/BLE (A)
Hardware: Heltec WiFi LoRa V4.3 OLED, GPS module
Firmware: MeshCore Companion Radio Version 1.16.0
LoRa Freq: 924.500 MHz
LoRa Spread Factor: 7
LoRa Bandwidth: 62.50 KHz
LoRa CR: 5
LoRa Tx Power: 2 dBm
Noise Floor: -113
Associated MeshCore Android App Version: 1.47.0

Companion Radio W/BLE (B)
Hardware: Heltec WiFi LoRa V4.3 OLED, GPS module
Firmware: MeshCore Companion Radio Version 1.16.0
LoRa Freq: 904.600 MHz
LoRa Spread Factor: 7
LoRa Bandwidth: 62.50 KHz
LoRa CR: 5
LoRa Tx Power: 2 dBm
Noise Floor: -112
Associated MeshCore Android App Version: 1.47.0

BridgeFilter Firmware v2.1:
https://github.com/Department-of-Mesh-Regional-Bridging/meshcore-esp-now-filtered-bridge/tree/main/MeshCore

Companion Radio Firmware v1.16.0:
https://github.com/meshcore-dev/MeshCore/tree/main/examples/companion_radio

Meshcore App v1.47.0:
https://play.google.com/store/apps/details?id=com.liamcottle.meshcore.android&hl=en_US&pli=1
https://apps.apple.com/us/app/meshcore/id6742354151

Flasher Tool v3.9.11:
https://docs.espressif.com/projects/esp-test-tools/en/latest/esp32/production_stage/tools/flash_download_tool.html

Web Repeater Setup/Console CLI:
https://meshcore.io/flasher

PC Serial Terminal/CLI Application:
https://putty.org/index.html

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions