Make your own Thread Border Router (Matter Bridge) for just $5

ck21 pts0 comments

Make your own Thread Border Router for just $5 - Community Guides - Home Assistant Community

= 40rem)" rel="stylesheet" data-target="desktop" />

= 40rem)" rel="stylesheet" data-target="chat_desktop" /><br>= 40rem)" rel="stylesheet" data-target="discourse-ai_desktop" /><br>= 40rem)" rel="stylesheet" data-target="discourse-reactions_desktop" /><br>= 40rem)" rel="stylesheet" data-target="poll_desktop" />

= 40rem)" rel="stylesheet" data-target="desktop_theme" data-theme-id="19" data-theme-name="scroll to top"/>

Make your own Thread Border Router for just $5

Community Guides

thread,<br>esp32

parhelion

(Parhelion)

December 15, 2025, 1:01am

Yes, you heard me right. In this post I'm going to describe how to make your own cheap Thread Border Router for just ~$5.

Steps

1. Get the materials

An ESP32-C6 or ESP32-H2 board with a USB port.

Any board will work, but the Seeed Studio XIAO ESP32-C6 is recommended for the best range and ease of setup.

ESP32-C6 boards are recommended over ESP32-H2 boards because they are both more performant and cheaper.

The newer ESP32-C5 boards are also reported to work, but I haven't tested myself.

Seeed Studio XIAO ESP32-C6240×200 23.3 KB

ESP32-C6-N4 clone240×200 20.3 KB

ESP32-C6 Super Mini240×200 16 KB

(Optional) An external U.FL antenna for better coverage.

This is highly recommended. Even unshielded boards without an antenna can communicate across nearby rooms, but using an external antenna lets you reliably punch through multiple walls or dense materials like brick or concrete.

Even if your board has no external antenna connector, you can still modify it to add an external antenna. See these guides: for SuperMini boards, for other boards.

Antennas are not plug and play! In most cases, you'll need to set your board to use the external antenna manually. If you get the XIAO ESP32-C6 board mentioned above, this can be done entirely in the software, and the instructions are available below.

4.5dBi - 5dBi gain antennas are fine, higher gain values don't always mean better range.

A USB-C cable that can transfer data.

Beware, cheap phone charger cables are often power-only and can't transfer data.

2. Make the ESP board an OpenThread RCP

To turn your ESP32 board to an OpenThread RCP (Radio Co-Processor), you'll need RCP firmware. Fortunately, Espressif provides the code, all you need to do is to compile it.

If you don't want to compile yourself, you can also download the binary compiled by me. Continue with one of the options below:

Pre-compiled firmware

Download the relevant file:

For the XIAO ESP32-C6 board (set to use the external antenna): link

For the XIAO ESP32-C6 board (set to use the internal antenna) or any other ESP32-C6 board: link

For any ESP32-H2 board: link.

For any ESP32-C5 board: link.

Go to web.esphome.io. Follow the instructions to flash the firmware you downloaded.

Compile the firmware yourself<br>You'll need a Linux machine or VM for these steps.

You can create a Linux container with all dependencies included with distrobox:

distrobox create --image debian:latest --name esp-idf --additional-packages "git python3.13 libusb-1.0-0 python3-venv cmake micro"

You can then enter the container with:

distrobox enter esp-idf

If you don't want to use distrobox, you'll need to manually install the following packages (listed are apt names):

python3.13 (any version above 9 is fine)

libusb-1.0-0

python3-venv

cmake

1. Install esp-idf toolchain

Run these commands. A fast internet connection is recommended.

If you want to compile for ESP32-H2, simply follow the comments to replace c6 with h2 in the commands.

rm -rf cheap-esp-tbr && mkdir cheap-esp-tbr && cd cheap-esp-tbr<br>git clone -b v6.0-beta1 --recursive https://github.com/espressif/esp-idf.git .<br># If you are compiling for esp32-h2, change the line below:<br>./install.sh esp32-c6

2. Configure the firmware

Now we'll configure the firmware in order for the board to communicate with OTBR over USB.

. ./export.sh<br>cd examples/openthread/ot_rcp<br>export LC_ALL=C.UTF-8 TERM=xterm<br># If you are compiling for esp32-h2, change the line below:<br>idf.py set-target esp32c6<br>idf.py menuconfig

In the menu, navigate to: Component config → OpenThread → Thread Core Features → Thread Radio Co-Processor Feature → The RCP transport type and select USB , then save and quit by pressing s, then esc, and then q.

3. (Optional) Apply patch for connection dropout issue

Some users have reported an issue where the connection drops after a few hours. You can apply this patch which is reported to solve the issue:

curl -L https://gist.githubusercontent.com/rayanamal/f0bdc614ea630e865a8a09e905ffa453/raw/5ac5bfffc67f4a961ea5c830aa9240b6d07f7b4d/connection-drop-fix.patch | git apply

3. (Optional) Connect the external antenna

If you got an external U.FL antenna, now is the time to connect it to your board. Align it straight and press straight down until you feel/hear a soft click. Be careful, U.FL connectors are delicate.

Now, you'll need...

esp32 board data antenna external thread

Related Articles