diff --git a/Documentation/images/126dcfe92fb7.webp b/Documentation/images/126dcfe92fb7.webp new file mode 100644 index 0000000..31cf5eb Binary files /dev/null and b/Documentation/images/126dcfe92fb7.webp differ diff --git a/Documentation/images/rnv21_bgp.webp b/Documentation/images/rnv21_bgp.webp new file mode 100644 index 0000000..fe4196e Binary files /dev/null and b/Documentation/images/rnv21_bgp.webp differ diff --git a/README.md b/README.md index 047e2cd..63e9fd7 100644 --- a/README.md +++ b/README.md @@ -1,23 +1,51 @@ # RNode Firmware -This is the firmware for [RNode](https://unsigned.io/rnode), a very flexible LoRa-based Open Communications Device. +This is the firmware that powers RNodes. An RNode is an open, free and unrestricted digital radio transceiver. It enables anyone to send and receive any kind of data over both short and very long distances. RNodes can be used with many different kinds of programs and systems, but they are especially well suited for use with [Reticulum](https://reticulum.network). -An RNode can function as a: +RNode is not a product, and not any *one* specific device in particular. It is a system that is easy to replicate across space and time, that produces highly functional communications tools, which respects user autonomy and empowers individuals and communities to protect their sovereignty, privacy and ability to communicate and exchange data and ideas freely. -- General purpose long-range data radio module -- Network adapter for [Reticulum](https://github.com/markqvist/Reticulum) -- LoRa interface for your computer (or any device with a USB or serial port) -- Generic [LoRa-based network adapter](https://unsigned.io/15-kilometre-ssh-link-with-rnode/) -- [Packet sniffer](https://github.com/markqvist/LoRaMon) for LoRa networks -- LoRa-based KISS-compatible TNC for amateur radio and AX.25 applications -- Flexible platform for experiementing with LoRa technology + +
*An RNode made from readily available and cheap parts, in a durable 3D printed case*
-To install this firmware on homebrew RNodes and other supported boards, use `rnodeconf`, the *RNode Config Utility*. For guides and tutorials on how to get started with making your own RNodes, visit [unsigned.io](https://unsigned.io). +The RNode system is primarily software, which *transforms* different kinds of available hardware devices into functional, physical RNodes, which can then be used to solve a wide range of communications tasks. Such RNodes can be modified and built to suit the specific time, locale and environment they need to exist in. -![Devices Running RNode Firmware](https://github.com/markqvist/RNode_Firmware/raw/master/Documentation/rnfw_1.jpg) +## A Self-Replicating System -## Get Started +If you notice the presence of a circularity in the naming of the system as a whole, and the physical devices, it is no coincidence. Every RNode contains the seeds necessary to reproduce the system, the [RNode Bootstrap Console](/rnode_bootstrap_console), which is hosted locally on every RNode, and can be activated and accesses at any time - no Internet required. +The designs, guides and software stored within allows users to create more RNodes, and even to bootstrap entire communications networks, completely independently of existing infrastructure, or in situations where infrastructure has become unreliable or is broken. + +![RNode](Documentation/images/126dcfe92fb7.webp) +
*Where there is no Internet, RNodes will still communicate*
+ +The production of one particular RNode device is not an end, but the potential starting point of a new branch of devices on the tree of the RNode system as a whole. + +This tree fits into the larger biome of Free & Open Communications Systems, which I hope that you - by using communications tools like RNode - will help grow and prosper. + +## One Tool, Many Uses + +The RNode design is meant to flexible and hackable. At it's core, it is a low-power, but extremely long-range digital radio transceiver. Coupled with Reticulum, it provides encrypted and secure communications. + +Depeding on configuration, it can be used for local networking purposes, or to send data over very long distances. Once you have an RNode, there is a wide variety of possible uses: + +- As a network adapter for [Reticulum](https://reticulum.network) +- Messaging using [Sideband]({ASSET_PATH}software/Sideband.html) +- Information sharing and communication using [Nomad Network]({ASSET_PATH}software/Nomad_Network.html) +- LoRa-based [KISS-compatible amateur radio TNC]({ASSET_PATH}guides/2020_05_03_using_rnodes_with_amateur_radio_software.html) +- LoRa development platform +- [Packet sniffer]({ASSET_PATH}software/LoRaMon.html) for LoRa networks +- Long range [Ethernet and IP network interface]({ASSET_PATH}guides/2020_05_27_ethernet-and-ip-over-packet-radio-tncs.html) on Linux +- As a general-purpose long-range data radio + +## Types & Performance + +RNodes can be made in many different configurations, and can use many different radio bands, but they will generally operate in the **433 MHz**, **868 MHz**, **915 MHZ** and **2.4 GHz** bands. They will usually offer configurable on-air data speeds between just a **few hundred bits per second**, up to **a couple of megabits per second**. + +The RNode system has been designed to allow reliable systems for basic human communications, over very wide areas, while using very little power, being cheap to build, free to operate, and near impossible to censor. + +While **speeds are lower** than WiFi, typical communication **ranges are many times higher**. Several kilometers can be acheived with usable bitrates, even in urban areas, and over **100 kilometers** can be achieved in line-of-sight conditions. + +## Getting Started Fast You can download and flash the firmware to all the supported boards using the [RNode Config Utility](https://github.com/markqvist/rnodeconfigutil). 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`: ``` @@ -28,54 +56,43 @@ pip install rns --upgrade rnodeconf --autoinstall ``` -## Supported Hardware +For more detailed instruction and in-depth guides, you can have a look at some of these resources: +- Create a [basic RNode from readily available development boards](https://unsigned.io/guides/2022_01_25_installing-rnode-firmware-on-supported-devices.html) +- Follow a complete build recipe for [making a handheld RNode](https://unsigned.io/guides/2023_01_14_Making_A_Handheld_RNode.html), like the one pictured above +- Learn the basics on how to [create and build your own RNode designs](https://unsigned.io/guides/2022_01_26_how-to-make-your-own-rnodes.html) from scratch +- Once you've got the hang of it, start [selling your RNodes](https://unsigned.io/sell_rnodes.html) + +If you would rather just buy a pre-made unit, you can visit [my shop](https://unsigned.io/shop) and purchase my particular version of the [Handheld RNode](https://unsigned.io/shop/handheld-rnode/), which I can assure you is made to the highest quality, and with a lot of care. + +## Supported Boards & Devices The RNode Firmware supports the following boards: -- The original RNode from [unsigned.io](https://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 +- Handheld v2.x RNodes from [unsigned.io](https://unsigned.io/shop/product/handheld-rnode) +- Original v1.x RNodes from [unsigned.io](https://unsigned.io/shop/product/rnode) - LilyGO T-Beam v1.1 devices - LilyGO LoRa32 v2.0 devices - LilyGO LoRa32 v2.1 devices - Heltec LoRa32 v2 devices +- 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 -## Operating Modes -RNode can operate in two modes, host-controlled (default) and TNC mode: +## Supported Transceiver Modules +The RNode Firmware supports all transceiver modules based on **Semtech SX1276** or **Semtech SX1278** chips, that have an **SPI interface** and expose the **DIO_0** interrupt pin from the chip. -- 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. +## Latest Release -- 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). +The latest release, installable through `rnodeconf`, is version `1.55`. This release brings the following changes: -## Programming Libraries -Have a look in the "Libraries" folder for includes to let you easily use RNode in your own software. +- Added the **RNode Bootstrap Console** to all WiFi-capable RNodes. All such RNodes now contain a complete repository of information, software, guides and tools for replicating the RNode desing, and creating more RNodes. +- RNodes can now supply other RNodes with firmware images, with allows creating RNodes and bootstrapping communication networks, even if the Internet is unavailable. +- Improved RGB LED handling. +- Improved power management and charge status handling. +- Improved Bluetooth handling. -Here's a Python example: - -```python -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](https://github.com/markqvist/LoRaMon) for an easy to use LoRa packet sniffer. +You must have at least version `2.1.0` of `rnodeconf` installed to update the RNode Firmware to version `1.55`. Get it by updating the `rns` package to at least version `0.4.7`. ## 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: