Go to file
2022-11-01 23:34:34 +01:00
Documentation Updated manual 2020-04-30 11:36:28 +02:00
Libraries Fixed reference in Python Library 2020-05-28 17:58:08 +02:00
Release Updated readme 2022-11-01 23:21:18 +01:00
Schematics Updated readme 2018-07-01 19:22:36 +02:00
.gitignore Library and example 2018-06-22 11:17:14 +02:00
arduino-cli.yaml Added compatibility for Adafruit FeatherESP32, generic ESP32 and ATmega2560 2022-01-21 20:43:29 +01:00
Config.h Version bump 2022-06-29 15:44:05 +02:00
Framing.h Added board command to host protocol 2022-01-22 22:34:03 +01:00
LICENSE Renamed license 2022-11-01 23:09:38 +01:00
LoRa.cpp Updated board definitions 2022-06-29 14:28:01 +02:00
LoRa.h Updated SNR indication method 2020-05-21 12:41:39 +02:00
Makefile Updated makefile 2022-10-28 10:09:47 +02:00
MD5.cpp MD5 library 2018-06-20 08:45:36 +02:00
MD5.h MD5 library 2018-06-20 08:45:36 +02:00
README.md Update README.md 2022-11-01 23:34:34 +01:00
RNode_Firmware.ino RGB LED indications for RNode NG 2022-06-11 16:42:49 +02:00
ROM.h Updated board definitions 2022-06-29 14:28:01 +02:00
Utilities.h Fixed NeoPixel init on library version 1.10.6 2022-10-28 11:14:51 +02:00

RNode Firmware

This is the firmware for RNode, a very flexible LoRa-based communication device. RNode can functions as a:

  • A general purpose long-range data radio
  • Network adapter for Reticulum
  • LoRa interface for your computer (or any device with a USB or serial port)
  • Generic LoRa-based network adapter for your Linux devices
  • Packet sniffer for LoRa networks
  • LoRa development board
  • A LoRa-based KISS-compatible TNC for amateur radio and AX.25 applications
  • A flexible platform for experiementing with LoRa technology

To install this firmware on homebrew RNodes and other supported boards, please use the RNode Config Utility. It contains an auto-installer that allows you to install the RNode firmware on a variety of boards. For guides and tutorials on how to get started with making your own RNodes, visit unsigned.io.

Get Started

You can download and flash the firmware to all the supported boards using the RNode Config Utility. All firmware releases are now handled and installed directly through the rnodeconf utility, which is inclueded in the rns package. It can be installed via pip:

# Install rnodeconf via rns package
pip install rns --upgrade

# Install the firmware on a board with the install guide
rnodeconf --autoinstall

Current Status

The RNode firmware can be considered stable at this point. If you do find a bug or discover unintended behaviour, please report it as an issue here, so I can fix it!

Supported Hardware

The RNode Firmware supports the following boards:

  • The original RNode from unsigned.io
  • Homebrew RNodes based on ATmega1284p boards
  • Homebrew RNodes based on ATmega2560 boards
  • Homebrew RNodes based on Adafruit Feather ESP32 boards
  • Homebrew RNodes based on generic ESP32 boards
  • LilyGO T-Beam v1.1 devices
  • LilyGO LoRa32 v2.0 devices
  • LilyGO LoRa32 v2.1 devices
  • Heltec LoRa32 v2 devices

The original RNode from unsigned.io is controlled by a powerful ATmega1284p MCU, and is fully Arduino compatible. You can use this firmware, or it can be programmed any way you like, either from the Arduino IDE, or using any of the available tools for AVR development. This firmware can also be edited and compiled directly from the Arduino IDE.

For adding RNode to your Arduino environment, please see this post.

For configuring an RNode with this firmware, please have a look at the RNode Config Utility.

Operating Modes

RNode can operate in two modes, host-controlled (default) and TNC mode:

  • When RNode is in host-controlled mode, it will stay in standby when powered on, until the host specifies frequency, bandwidth, transmit power and other required parameters. This mode can be enabled by using the -N option of this utility. In host-controlled mode, promiscuous mode can be activated to sniff any LoRa frames.

  • When RNode is in TNC mode, it will configure itself on powerup and enable the radio immediately. This mode can be enabled by using the -T option of this utility (the utility will guide you through the settings if you don't specify them directly).

USB and Serial Protocol

You can communicate with RNode either via the on-board USB connector, or using the serial pins on the board (labeled RX0 and TX0). RNode uses a standard FTDI USB chip, so it works out of the box without additional drivers in most operating systems.

All communications to and from the board uses KISS framing with a custom command set. RNode also does not use HDLC ports in the command byte, and as such uses the full 8 bits of the command byte is available for the actual command. Please see table below for supported commands.

Command Byte Description
Data frame 0x00 A data packet to or from the device
Frequency 0x01 Sets or queries the frequency
Bandwidth 0x02 Sets or queries the bandwidth
TX Power 0x03 Sets or queries the TX power
Spreading Factor 0x04 Sets or queries the spreading factor
Coding Rate 0x05 Sets or queries the coding rate
Radio State 0x06 Sets or queries radio state
Radio Lock 0x07 Sets or queries the radio lock
Device Detect 0x08 Probe command for device detection
Promiscuous 0x0E Sets or queries promiscuous mode
RX Stats 0x21 Queries received bytes
TX Stats 0x22 Queries transmitted bytes
Last RSSI 0x23 Indicates RSSI of last packet received
Blink 0x30 Blinks LEDs
Random 0x40 Queries for a random number
Firmware Version 0x50 Queries for installed firmware version
ROM Read 0x51 Read EEPROM byte
ROM Write 0x52 Write EEPROM byte
TNC Mode 0x53 Enables TNC mode
Normal Mode 0x54 Enables host-controlled mode
ROM Erase 0x59 Completely erases EEPROM
Error 0x90 Indicates an error

Programming Libraries

Have a look in the "Libraries" folder for includes to let you easily use RNode in your own software.

Here's a Python example:

from RNode import RNodeInterface

def gotPacket(data, rnode):
	print "Received a packet: "+data

rnode = RNodeInterface(
	callback = gotPacket,
	name = "My RNode",
	port = "/dev/ttyUSB0",
	frequency = 868000000,
	bandwidth = 125000,
	txpower = 2,
	sf = 7,
	cr = 5,
	loglevel = RNodeInterface.LOG_DEBUG)

rnode.send("Hello World!")

Promiscuous Mode and LoRa Sniffing

RNode can be put into LoRa promiscuous mode, which will dump raw LoRa frames to the host. Raw LoRa frames can also be sent in this mode, and have the standard LoRa payload size of 255 bytes. To enable promiscuous mode send the "Promiscuous" command to the board, or use one of the programming libraries. You can also use the example program LoRaMon for an easy to use LoRa packet sniffer.

Support RNode Development

You can help support the continued development of open, free and private communications systems by donating via one of the following channels:

License

Permission is hereby granted to use the RNode firmware in binary form, for any and all purposes, and to freely distribute binary copies of the firmware, so long as no payment or compensation is charged or received for such distribution or use. If you want to charge money or receive compensation for providing this work to others, you must buy a license for doing so, which is cheap and easy.

Unless otherwise noted, this work is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License.

Prior versions of this work, until and including commit fe5e6aab9c2ab8fe69ede7f1da04bcffff7d1ed7 was licensed purely under MIT License.

If you want to use the RNode Firmware in commercial products, or build and sell RNode, it is easy to do so by licensing the firmware commercially. I provide a range of convenient tools and resources for anyone who wants to build and sell RNodes, so just get in contact with me to get started.