blog

Flash an RNode: Turn a $15 ESP32 LoRa Board into a Radio Modem

Turn a cheap ESP32 LoRa development board into an RNode radio modem for Reticulum. Step-by-step firmware flashing, configuration, and LoRa parameter guide.

Flash an RNode: Turn a $15 ESP32 LoRa Board into a Radio Modem

This is Part 5 of a 12-part series on building private, resilient communication networks with Reticulum, LoRa, and associated tools.


Up to now, everything has been software-only, running over WiFi and the internet. This is where it gets interesting. In this guide, you'll take a cheap off-the-shelf ESP32 LoRa development board and turn it into an RNode — a general-purpose digital radio transceiver that works with Reticulum.

An RNode lets you communicate over LoRa radio with no internet, no cell towers, no infrastructure of any kind. Just radio waves.

What is an RNode?

RNode is not a specific product — it's an open platform. Any supported LoRa development board running the RNode firmware becomes an RNode. It uses raw LoRa modulation (not LoRaWAN — that's a completely different protocol for IoT devices) and gives Reticulum full control over the radio parameters.

An RNode can: - Transmit and receive data over LoRa at ranges of 1-20+ km depending on terrain and antenna - Connect to a computer or phone via USB, Bluetooth, or WiFi - Act as a network interface for any Reticulum application - Run on battery power for portable/mobile use

Supported Hardware

The RNode firmware supports a wide range of boards. Here are the most common and cost-effective options:

Board Price Range Frequency Notes
LilyGO LoRa32 v2.1 $12-18 433/868/915 MHz Best for handheld builds, OLED display
LilyGO T-Beam $20-30 433/868/915 MHz Has GPS, good for mobile/tracking
LilyGO T-Beam Supreme $25-35 868/915 MHz SX1262 chip, better sensitivity
LilyGO T3S3 $15-22 433/868/915 MHz ESP32-S3, USB-C
Heltec LoRa32 v3.0 $15-20 868/915 MHz SX1262, compact
Heltec LoRa32 v2.0 $12-18 868/915 MHz SX1276, widely available
RAK4631 $20-30 868/915 MHz nRF52 based, very low power
LilyGO T-Deck $35-45 868/915 MHz Built-in keyboard and screen
LilyGO T-Echo $25-35 868/915 MHz E-ink display, nRF52, very low power
Heltec T114 $18-25 868/915 MHz nRF52, compact

The LilyGO LoRa32 v2.1 is the most popular choice for a first RNode — it's cheap, widely available, has an OLED display, and there's a 3D-printable handheld case for it (covered in Part 7).

Where to Buy

Search AliExpress, Amazon, or Banggood for the board name. They're sold under various brand names but the hardware is identical. Make sure you get the correct frequency variant for your region:

  • 868 MHz — Europe, most of Africa, Asia
  • 915 MHz — Americas, Australia
  • 433 MHz — Available in many regions, longer range but lower data rate

The 868, 915, and 923 MHz variants of most boards are physically identical and cover 820-1020 MHz. The 433 MHz variant covers 420-520 MHz.

What You'll Need

  • A supported LoRa development board
  • A USB cable (micro-USB or USB-C depending on the board)
  • A computer with Python 3 and pip installed
  • Reticulum already installed (pip install rns)

Step 1: Connect the Board

Plug the board into your computer via USB. On Linux, it will typically appear as /dev/ttyUSB0 or /dev/ttyACM0. On macOS, it'll be something like /dev/cu.usbserial-*.

Verify it's detected:

# Linux
ls /dev/ttyUSB* /dev/ttyACM*

# macOS
ls /dev/cu.usb*

On Linux, you may need to add your user to the dialout group for serial port access:

sudo usermod -a -G dialout $USER

Log out and back in after this.

Step 2: Run the Auto-Installer

The rnodeconf utility (installed with Reticulum) handles everything:

rnodeconf --autoinstall

The installer will walk you through it:

  1. Connect your device — plug in the board and press Enter
  2. Select the serial port — choose the port your board is on
  3. Select device type — choose "A Specific Kind of RNode"
  4. Select your board model — pick the exact board you have and its frequency band
  5. Confirm — review the summary and confirm

The installer will: - Download the correct firmware (or use a cached copy) - Flash it to the board - Provision the device with a unique identity - Configure the EEPROM

This takes 1-2 minutes. When it's done, the board's OLED display (if it has one) will show the RNode logo and status information.

Step 3: Verify the RNode

Check that the RNode is working:

rnodeconf -i /dev/ttyUSB0

This displays device information: firmware version, frequency range, model, and serial number.

You can also check the device configuration:

rnodeconf -c /dev/ttyUSB0

Step 4: Quick Test with Reticulum

Add the RNode as an interface in your Reticulum config (~/.reticulum/config):

[[RNode LoRa Interface]]
  type = RNodeInterface
  enabled = yes
  port = /dev/ttyUSB0
  frequency = 867200000
  bandwidth = 125000
  txpower = 7
  spreadingfactor = 8
  codingrate = 5

Adjust the parameters for your region and needs:

  • frequency — in Hz. 867200000 = 867.2 MHz. Choose a frequency legal in your region within the ISM band.
  • bandwidth — 125000 (125 kHz) is standard. Lower = more range, less speed.
  • txpower — in dBm. 7 dBm = 5 mW. Max depends on your region's regulations (typically 14-17 dBm).
  • spreadingfactor — 7 to 12. Higher = more range, slower speed. 8 is a good default.
  • codingrate — 5 to 8. Higher = more error correction, slower speed. 5 is a good default.

Now run rnstatus:

rnstatus

You should see your RNode interface listed as Up:

RNodeInterface[RNode LoRa Interface]
   Status  : Up
   Mode    : Full
   Rate    : 1.30 kbps
   Traffic : 0 B↑  0 B↓

The low bitrate is normal — LoRa trades speed for range. At these settings you get roughly 1.3 kbps, which is plenty for text messaging and small data transfers.

LoRa Parameter Cheat Sheet

Use Case SF BW CR Approx. Range Approx. Speed
Maximum speed, short range 7 250 kHz 5 2-5 km ~5.5 kbps
Balanced (recommended start) 8 125 kHz 5 5-10 km ~1.3 kbps
Long range 10 125 kHz 5 10-15 km ~0.3 kbps
Maximum range 12 125 kHz 8 15-20+ km ~0.05 kbps

Ranges assume line-of-sight or near-line-of-sight with a decent antenna. Urban environments with buildings will significantly reduce range.

Updating Firmware

To update an existing RNode to the latest firmware:

rnodeconf --update

Connect the device when prompted and the utility will handle the rest.

Using the Browser-Based Flasher

If you prefer not to use the command line, there's a browser-based RNode flasher that can flash firmware directly from a Web Serial-compatible browser (Chrome, Edge). Just connect your board via USB, select it in the browser, and follow the prompts.

Important: Radio Regulations

LoRa operates in ISM (Industrial, Scientific, Medical) bands that are license-free in most countries, but there are rules:

  • Transmit power limits vary by region (typically 14-25 dBm / 25-316 mW)
  • Duty cycle limits may apply (e.g., 1% in parts of the EU 868 MHz band)
  • Frequency allocations differ by country

Reticulum supports airtime limiting to help you stay compliant:

[[RNode LoRa Interface]]
  # ... other settings ...
  airtime_limit_long = 1.5
  airtime_limit_short = 33

This limits long-term airtime to 1.5% and short-term bursts to 33%.

Check your local regulations before transmitting.

What's Next

You now have a working LoRa radio modem. In the next guide, we'll connect Sideband or MeshChat to your RNode and send your first message over radio — completely off-grid.


Previous: [Part 4 — Sideband: Encrypted Messaging on Your Phone] Next: [Part 6 — Go Off-Grid: Connect Sideband or MeshChat to Your RNode]

← back to index