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:
- Connect your device — plug in the board and press Enter
- Select the serial port — choose the port your board is on
- Select device type — choose "A Specific Kind of RNode"
- Select your board model — pick the exact board you have and its frequency band
- 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]
