unsignedio/docs/hardware/Original_RNode.html
2025-12-22 19:09:59 +01:00

282 lines
15 KiB
HTML

<!doctype html>
<html>
<head>
<link rel="stylesheet" href="../css/water.css?v=19">
<link rel="shortcut icon" type="image/x-icon" href="../gfx/icon.png">
<meta charset="utf-8"/>
<title>unsigned.io</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta property="og:title" content="unsigned.io">
<meta name="description" content="unsigned.io">
<meta property="og:description" content="unsigned.io">
<meta property="og:image" content="https://unsigned.io/gfx/unsigned_logo.webp">
<meta property="og:url" content="https://unsigned.io/hardware/Original_RNode.html">
<meta property="og:title" content="unsigned.io">
<meta name="twitter:card" content="summary_large_image">
<meta property="twitter:domain" content="unsigned.io">
<meta property="twitter:url" content="https://unsigned.io/hardware/Original_RNode.html">
<meta name="twitter:title" content="unsigned.io">
<meta name="twitter:description" content="unsigned.io">
<meta name="twitter:image" content="https://unsigned.io/gfx/unsigned_logo.webp">
</head>
<body>
<div id="load_overlay" style="background-color:#2a2a2f; position:absolute; top:0px; left:0px; width:100%; height:100%; z-index:2000;"></div>
<span class="logo">unsigned.io</span>
<center>
<p><span class="menu"><a href="../index.html">Home</a> | <a href="../log.html">Log</a> | <a href="../guides.html">Guides</a> | <a href="../software/index.html">Software</a> | <a href="../hardware/index.html">Hardware</a> | <a href="https://github.com/markqvist/Reticulum/discussions">Discussions</a> | <a href="../shop.html">Shop</a> | <a href="../contact.html">Contact Me</a> | <a href="../donate.html">Donate</a></span></p>
</center><hr><h1>The First RNode Design</h1>
<p><em>This is an archived page detailing the original, first version of the RNode design. For the latest version, please see the <a href="../hardware/RNode.html">RNode</a> page.</em></p>
<p>An RNode is an integrated, long-range data-radio that uses raw LoRa modulation in a variety of frequency bands. You can think of it as a general-purpose LoRa-based network card for your computer or mobile device. It connects to a host via USB, UART serial, Bluetooth or WiFi. It can also be programmed for independent operation. In short: A swiss army-knife of a LoRa-based communication device.</p>
<p>You can <a href="https://unsigned.io/installing-rnode-firmware-on-supported-devices/">turn different kinds of LoRa development boards into an RNode</a>, <a href="https://unsigned.io/how-to-make-your-own-rnodes/">build one yourself</a>, or <a href="https://unsigned.io/shop/product/rnode/">buy a ready-to-use version</a> from my shop. Self-built versions, and RNodes repurposed from other LoRa dev boards will be functionally identical, but may come in many different shapes and sizes, and have different pin layouts. Most of the details on this page concern the original RNode design, but will also be applicable to any other type of RNode.</p>
<p><img src="../images/P1070329-1024x731.jpg"></p>
<p>An RNode can functions as a:</p>
<ul>
<li>Network interface adapter for <a href="https://reticulum.network/">Reticulum</a></li>
<li>LoRa development board</li>
<li><a href="https://unsigned.io/rnodeconf" target="_blank" rel="noopener noreferrer">LoRa-based KISS-compatible amateur radio TNC</a></li>
<li><a href="https://unsigned.io/loramon" target="_blank" rel="noopener noreferrer">Packet sniffer</a> for LoRa networks</li>
<li>flexible platform for experiementing with LoRa technology</li>
<li>LoRa interface for any device with a USB or serial port</li>
<li><a href="https://unsigned.io/ethernet-and-ip-over-packet-radio-tncs/" target="_blank" rel="noopener noreferrer">LoRA-based network interface</a> for Ethernet and IP over LoRa</li>
<li>General-purpose long-range data radio</li>
</ul>
<p>RNode is controlled by a powerful ATmega1284p MCU, and is fully Arduino compatible. You can use the included 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. The included firmware can also be edited and compiled directly from the Arduino IDE.</p>
<p>For adding RNode to your Arduino environment, please see <a title="Board support in Arduino IDE" href="https://unsigned.io/board-support-in-arduino-ide/" target="_blank" rel="noopener noreferrer">this post</a>.
For configuring an RNode, please have a look at the <a href="https://unsigned.io/rnodeconf" target="_blank" rel="noopener noreferrer">RNode Config Utility</a>.</p>
<h3>Specifications</h3>
<ul>
<li>High-quality LoRa module with genuine <b>Semtech SX1276 chip</b></li>
<li>Powered by an ATmega1284p MCU clocked at <b>16 MHz</b></li>
<li><b>128</b> kilobytes of <b>flash</b></li>
<li><b>16</b> kilobytes of <b>RAM</b></li>
<li>Large payloads with a packet <strong>MTU of 500 bytes</strong></li>
<li>Up to <b>17 dBm</b> continuous TX output in 820-1020 MHz</li>
<li>Up to <b>14 dBm</b> continuous TX output in 410-525 MHz</li>
<li>Sensitivity down to <b>-139 dBm</b></li>
<li>Data rates ranging from <strong>20 bps to 21.88 kbps</strong></li>
<li><b>Mini-USB</b> connector</li>
<li><b>SMA</b> antenna connector</li>
<li>Fully <strong>programmable</strong></li>
<li><strong>Arduino</strong> compatible</li>
<li><strong>Open source</strong> firmware and config util</li>
<li>17 <strong>multi-purpose IO ports</strong> available
<ul>
<li>All ports can be used as digital inputs or outputs</li>
<li>5 ports can be used as analog inputs</li>
<li>An extra UART serial port is available on two of the pins</li>
<li>I2C port</li>
<li>Two PWM outputs are available</li>
<li>JTAG port available</li>
</ul>
</li>
<li>Operating range: <strong>-20°C to 60°C</strong> (non-condensing)</li>
<li><strong>23.3 mA</strong> idle power consumption</li>
</ul>
<h3>Frequency Bands</h3>
<p>RNode can operate in the following two frequency bands:</p>
<ul>
<li>410 - 525 MHz</li>
<li>820 - 1020 MHz</li>
</ul>
<p>Custom made or RNodes made from repurposed boards may be able to utilise other frquency bands depending on their transceiver setups.</p>
<h3>Operating Modes</h3>
<p>RNode can operate in two modes, host-controlled (default) and TNC mode:</p>
<ul>
<li>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. In host-controlled mode, promiscuous mode can be activated to sniff any LoRa frames on the specified channel configuration.</li>
<li>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 configuration utility (the utility will guide you through the settings if you don't specify them directly). This is useful for using RNode as an amateur radio TNC with any legacy packet radio applications.</li>
</ul>
<h3>Resources and Downloads</h3>
<ul>
<li><a href="https://github.com/markqvist/RNode_Firmware/raw/master/Documentation/RNode_Manual.pdf" target="_blank" rel="noopener noreferrer">User manual</a></li>
<li><a href="https://unsigned.io/rnodeconf">Download configuration utility</a></li>
<li><a href="https://unsigned.io/rnodeconf" target="_blank" rel="noopener noreferrer">Configuration utility documentation and source</a></li>
<li><a href="https://unsigned.io/rnode_firmware" target="_blank" rel="noopener noreferrer">Firmware downloads and source code</a></li>
<li><a href="https://unsigned.io/loramon" target="_blank" rel="noopener noreferrer">LoRa packet sniffer program for RNode</a></li>
<li><a href="https://github.com/markqvist/RNode_Firmware/tree/master/Libraries" target="_blank" rel="noopener noreferrer">Programming examples</a></li>
<li><a href="https://github.com/markqvist/RNode_Firmware/tree/master/Schematics" target="_blank" rel="noopener noreferrer">Schematics and design files</a></li>
<li><a href="https://unsigned.io/board-support-in-arduino-ide/" target="_blank" rel="noopener noreferrer">Adding RNode to the Arduino IDE</a></li>
</ul>
<h3>Examples and Learning Resources</h3>
<p>If you want some inspiration to get started with RNode, have a look at the following examples. Most of them contain step-by-step instructions on how to do them yourself.</p>
<ul>
<li><a href="https://unsigned.io/using-an-rnode-with-amateur-radio-software/">Using RNodes With Amateur Radio Software</a></li>
<li><a title="15 kilometre LoRa SSH link with RNode" href="https://unsigned.io/15-kilometre-ssh-link-with-rnode/" target="_blank" rel="noopener noreferrer">Super long distance SSH link</a></li>
<li><a title="IP over LoRa: Using RNode as a wireless NIC" href="https://unsigned.io/using-rnode-as-a-lora-based-wireless-nic/" target="_blank" rel="noopener noreferrer">RNode as wireless network card</a></li>
<li><a title="APRS over LoRa with RNode" href="https://unsigned.io/aprs-over-lora-with-rnode/" target="_blank" rel="noopener noreferrer">APRS over LoRa</a></li>
<li><a href="https://unsigned.io/lora-packet-sniffing-with-rnode" target="_blank" rel="noopener noreferrer">LoRa packet sniffing</a></li>
</ul>
<h3>Pinout and Overview</h3>
<p><img src="../images/Pinout-1-1024x998.png"></p>
<h3>Programming Interface</h3>
<p>Using the <a href="https://github.com/markqvist/RNode_Firmware/tree/master/Libraries" target="_blank" rel="noopener noreferrer">included libraries</a>, it's easy to use RNode in your software. Here's a Python example:</p>
<pre><code class="language-python">from RNode import RNodeInterface
def gotPacket(data, rnode):
print &quot;Received a packet: &quot;+data
rnode = RNodeInterface(
callback = gotPacket,
name = &quot;My RNode&quot;,
port = &quot;/dev/ttyUSB0&quot;,
frequency = 868000000,
bandwidth = 125000,
txpower = 2,
sf = 7,
cr = 5,
loglevel = RNodeInterface.LOG_DEBUG)
rnode.send(&quot;Hello World!&quot;)
</code></pre>
<h3>USB and Serial Protocol</h3>
<p>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.</p>
<p>All communications to and from the board uses <a href="https://en.wikipedia.org/wiki/KISS_(TNC)" target="_blank" rel="noopener noreferrer">KISS framing</a> 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.</p>
<table>
<thead>
<tr>
<th>Command</th>
<th>Byte</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Data frame</td>
<td>0x00</td>
<td>A data packet to or from the device</td>
</tr>
<tr>
<td>Frequency</td>
<td>0x01</td>
<td>Sets or queries the frequency</td>
</tr>
<tr>
<td>Bandwidth</td>
<td>0x02</td>
<td>Sets or queries the bandwidth</td>
</tr>
<tr>
<td>TX Power</td>
<td>0x03</td>
<td>Sets or queries the TX power</td>
</tr>
<tr>
<td>Spreading Factor</td>
<td>0x04</td>
<td>Sets or queries the spreading factor</td>
</tr>
<tr>
<td>Coding Rate</td>
<td>0x05</td>
<td>Sets or queries the coding rate</td>
</tr>
<tr>
<td>Radio State</td>
<td>0x06</td>
<td>Sets or queries radio state</td>
</tr>
<tr>
<td>Radio Lock</td>
<td>0x07</td>
<td>Sets or queries the radio lock</td>
</tr>
<tr>
<td>Device Detect</td>
<td>0x08</td>
<td>Probe command for device detection</td>
</tr>
<tr>
<td>Promiscuous</td>
<td>0x0E</td>
<td>Sets or queries promiscuous mode</td>
</tr>
<tr>
<td>Ready</td>
<td>0x0F</td>
<td>Flow control command indicating ready for TX</td>
</tr>
<tr>
<td>RX Stats</td>
<td>0x21</td>
<td>Queries received bytes</td>
</tr>
<tr>
<td>TX Stats</td>
<td>0x22</td>
<td>Queries transmitted bytes</td>
</tr>
<tr>
<td>Last RSSI</td>
<td>0x23</td>
<td>Indicates RSSI of last packet received</td>
</tr>
<tr>
<td>Blink</td>
<td>0x30</td>
<td>Blinks LEDs</td>
</tr>
<tr>
<td>Random</td>
<td>0x40</td>
<td>Queries for a random number</td>
</tr>
<tr>
<td>Firmware Version</td>
<td>0x50</td>
<td>Queries for installed firmware version</td>
</tr>
<tr>
<td>ROM Read</td>
<td>0x51</td>
<td>Read EEPROM byte</td>
</tr>
<tr>
<td>ROM Write</td>
<td>0x52</td>
<td>Write EEPROM byte</td>
</tr>
<tr>
<td>TNC Mode</td>
<td>0x53</td>
<td>Enables TNC mode</td>
</tr>
<tr>
<td>Normal Mode</td>
<td>0x54</td>
<td>Enables host-controlled mode</td>
</tr>
<tr>
<td>ROM Erase</td>
<td>0x59</td>
<td>Completely erases EEPROM</td>
</tr>
<tr>
<td>Error</td>
<td>0x90</td>
<td>Indicates an error</td>
</tr>
</tbody>
</table>
<h3>A few notes on the EEPROM</h3>
<p>As a completely open device, RNode does not block you from modifying the EEPROM contents, which specifies things like radio parameters, serial number, manufacture date and similar. But please be aware that doing so might render the device inoperable or burn out the radio. Before making any modifications, please make sure to create a backup of the EEPROM.</p>
<p>RNode includes a cryptographic signature of the EEPROM contents, which validates all the information stored within it. You will not be able to re-create a valid signature if you erase it! Without this signature, the board will still function, but warranty will be void. If you upload your own programs or alternative firmwares to RNode, you should make sure that they don't write to the last 200 bytes of EEPROM. You can back up your EEPROM with the config utility.</p>
<h3>How do I get it?</h3>
<p>You can <a title="RNode" href="https://unsigned.io/shop/product/rnode/">buy one from my shop</a>, or make it yourself. Using the <a href="https://github.com/markqvist/RNode_Firmware/tree/master/Schematics" target="_blank" rel="noopener noreferrer">circuit design files</a>, it is possible to build a fully functional RNode on a breadboard. See the following articles for more info on how to easily make your own RNodes from common boards:</p>
<ul>
<li><a href="https://unsigned.io/rnode-with-anything/">RNode With Anything</a></li>
<li><a href="https://unsigned.io/installing-rnode-firmware-on-t-beam-and-lora32-devices/">Installing RNode Firmware on T-Beam and LoRa32 Devices</a></li>
<li><a href="https://unsigned.io/how-to-make-your-own-rnodes/">How To Make Your Own RNodes</a></li>
</ul>
<br/><hr/><span class="no_print"><center><br/><i>This website is running on a 100% solar powered server</i><br/><br/>☀️<br/><br/><i><small>Unless otherwise noted, everything here is put into the world under a <a href="../LICENSE.txt">CC BY-NC-SA 4.0</a> license.<br/>Feel free to share and remix, just remember the attribution.
</small></i></center></span>
<div class="print_only donation_block"><br/>
Contribute to keeping information on Free & Open Communications systems available for all.<br/>
You can donate directly to <b>unsigned.io</b> by using one of the following QR codes:<br/><br/>
<span class="donate_qr"><img src="../gfx/donate_xmr.png"/><br/>Monero</span>
<span class="donate_qr"><img src="../gfx/donate_btc.png"/><br/>Bitcoin</span>
<span class="donate_qr"><img src="../gfx/donate_eth.png"/><br/>Ethereum</span>
</div>
</body></html>