Micron Document
ScotMesh RNS Network
How to flash

The steps are the same for every board; each board page has the exact commands with the right file names, offsets and codes filled in. Back to the board list

1. What you need
• The firmware zip for your board (from its board page).
• The tools: Tools. Linux and macOS: the Python wheelhouses. Windows: the standalone esptool.exe or adafruit-nrfutil.exe, plus Python for rnodeconf.
• A USB cable that carries data, not just power.
• Drivers: some boards need the CP210x or CH340 USB serial driver on Windows or older macOS. They are not on this node.

2. Find the serial port
Plug the board in, then:

Linux: the board shows up as /dev/ttyUSB0 (boards with a USB serial chip) or /dev/ttyACM0 (ESP32-S3 and nRF52 boards with native USB).

ls /dev/ttyUSB* /dev/ttyACM*
sudo dmesg | tail
If you get permission denied, add yourself to the dialout group (uucp on Arch) and log in again:

sudo usermod -aG dialout $USER
macOS: use the /dev/cu. name, not /dev/tty.

ls /dev/cu.*
Windows: open Device Manager and look under Ports (COM & LPT) for something like COM3. Or in Command Prompt:

mode
With pyserial installed, this lists ports on any system:

python3 -m serial.tools.list_ports -v
3. Bootloader mode
ESP32 boards: esptool normally puts the board into its bootloader by itself. If it says Failed to connect, hold the BOOT (or PRG) button, press and release RESET, then let go of BOOT, and run the command again. On ESP32-S3 boards with native USB (T3S3, T-Beam Supreme, T-Deck, XIAO, Wireless Tracker) you can also hold BOOT while you plug the cable in. The port name can change; check it again.

nRF52 boards (RAK4631, T-Echo, T114, SenseCAP P1): adafruit-nrfutil asks the board to restart into its bootloader (the -t 1200 in the command). If that does not work, double-tap the reset button quickly. The board then shows up as a USB drive and a new serial port; use the new port. The SenseCAP P1 always needs the double-tap: its LED breathes slowly while the bootloader is active.

4. Install the tools offline
Everything is on the Tools page, with the install commands. In short, on Linux and macOS: unzip the wheelhouses into one place, make a venv, pip install from the wheels folder with --no-index, then activate it. On Windows unzip the standalone program next to your firmware.

5. Flash
Run the commands from your board's page. ESP32 zips are unzipped first, and the esptool.py inside them does the writing. nRF52 zips are sent as they are.

6. Set it up (provisioning)
An RNode keeps a small EEPROM with what board it is: the product, the model (which also says the band), the hardware revision and a serial number, signed with a key on your computer. It also keeps the hash of the firmware that should be running. At every start the firmware compares its own hash with the stored one. If the EEPROM is empty or the hash does not match, it will not start the radio (a ScotMesh node logs device init failed). So after every flash the hash has to be written again, and a new board needs its EEPROM written once.

RNode firmware: rnodeconf autoinstall, offline
rnodeconf normally downloads the firmware from GitHub. It can use a local copy instead: put the firmware zip and a small file with the version and hash from the release's release.json into rnodeconf's update folder, then tell it not to check online. The board pages have these lines ready to paste; in general:

mkdir -p ~/.config/rnodeconf/update/1.86
cp rnode_firmware_BOARD.zip ~/.config/rnodeconf/update/1.86/
echo "1.86 HASH" > ~/.config/rnodeconf/update/1.86/rnode_firmware_BOARD.zip.version
rnodeconf /dev/ttyUSB0 --autoinstall --nocheck --fw-version 1.86
HASH is the SHA-256 of the zip, the same as the hash for that zip in release.json. rnodeconf checks the zip against it, asks which board and band you have, flashes, writes the EEPROM and sets the firmware hash. For ESP32 boards it uses the esptool.py from the zip; for nRF52 boards adafruit-nrfutil must be installed. On Windows the folder is %USERPROFILE%.configrnodeconfupdate1.86; make the .version file in Command Prompt, as the board pages show (not in PowerShell, which writes a different text encoding).

By hand: rnodeconf provisioning
After flashing with esptool or adafruit-nrfutil yourself:

rnodeconf -k
rnodeconf /dev/ttyUSB0 -r --product PP --model MM --hwrev 1
rnodeconf /dev/ttyUSB0 -H FIRMWAREHASH
• rnodeconf -k makes the signing key (in ~/.config/rnodeconf/firmware/). Once per computer; -r stops with No signing key found without it.
• -r (--rom) writes product, model and hardware revision. PP and MM are two hex digits each, from the board page. It refuses to touch an EEPROM that is already valid, so skip it when you reflash a board that was set up before.
• -H (--firmware-hash) stores the firmware hash. This is the hash of the firmware image itself, not of the zip: on ESP32 the SHA-256 at the end of the application .bin, on nRF52 the SHA-256 of the .bin inside the package. The board pages list it. Only set it after the flash has worked, and wait 5 seconds before resetting or the write can be lost.
• rnodeconf /dev/ttyUSB0 --info shows what the board has stored.

ScotMesh microReticulum firmware
Its version (v1.86-scotmesh.6) is not a plain number, and rnodeconf's --fw-version only accepts numbers, so autoinstall cannot be used for it. Flash it with the esptool or adafruit-nrfutil command from the board page, then do the three provisioning lines above with the board's codes and hash. The ESP32 commands leave the console image out on purpose: the node keeps its own data there.

Then the node needs its radio settings. Once you are online, rnode.scotmesh.net (Reconfigure) or the RNode Console can set everything, including the node's name and admins. Offline, rnodeconf can store the radio settings and switch it into transport mode, as each board page shows:

rnodeconf /dev/ttyUSB0 -T --freq 869462500 --bw 125000 --txp 22 --sf 9 --cr 5
Over 17 dBm, rnodeconf asks for the TX power again; type the same number.
Updating a node that is already running keeps its identity and settings: flash, then only the -H line.

RNode radios
An RNode for Sideband, NomadNet, MeshChatX or rnsd needs nothing more: the program that uses it sets the frequency and the rest when it connects.

7. If something goes wrong
• Failed to connect (ESP32): bootloader mode by hand (step 3), or try --baud 115200.
• Permission denied on Linux: the dialout group (step 2).
• No port at all: another cable, or the USB serial driver (see Tools).
• device init failed, or the radio will not start after flashing: set the firmware hash again (-H) and wait 5 seconds before resetting.
• nRF52 not in DFU mode: double-tap reset and use the port that appears.