5.6 KiB
Easy full-firmware update over LoRa
This guide shows the shortest manual path for sending a full firmware image from a computer to a MeshCore node over LoRa. It uses this temporary OTA channel:
| Setting | Value |
|---|---|
| Center frequency | 909.950 MHz |
| Bandwidth | 125 kHz |
| Spreading factor | SF5 |
| Example coding rate | CR5 |
| Example window | 120 minutes |
The copy/paste command is:
tempradio 909.950,125,5,5,120
The fourth value is the transmit coding rate. This example uses CR5, but LoRa OTA does not require CR5.
tempradio is not saved and the node returns to its normal radio settings when the window ends or the node
reboots. This frequency is intended for North American configurations. Confirm that it is permitted in your
location and change it when necessary.
Before you start
You need:
- A standard, non-logging Keymind OTA build on the source and destination nodes. Logging and MQTT builds do not include LoRa OTA. Use the WiFi or USB connection to update those.
- An OTA-capable destination. ESP32 boards use their A/B firmware slots. nRF52 nodes also need the MeshCore OTAFIX bootloader.
- The new, non-merged application firmware for the destination's exact board and role. Use
.binfor ESP32 or.hexfor nRF52; do not package an ESP32-merged.binfactory image. - A source node connected to the computer by USB serial.
- Overlapping
tempradiowindows on the source, destination, and every repeater needed between them.
LoRa OTA packets are generated, received, and relayed only while tempradio is active. If any required
window closes, the transfer stops making progress and can resume during a later overlapping window.
1. Install motatool
Install Rust if necessary, then install the standalone packaging and serving tool:
git clone https://github.com/vk496/motatool
cargo install --path ./motatool
2. Package the full firmware
Put the application firmware in a working directory, then build a full .mota container. For example:
mkdir -p ./motas
motatool build --fw ./Heltec_v3_repeater-v1.16.05.bin --out-dir ./motas
motatool verify ./motas/*.mota
Replace the example filename with the firmware for the destination's exact target. With no --base
argument, motatool build creates a full-image update. The firmware must contain its MeshCore EndF
identity trailer so motatool and the destination can verify the target, hardware, and version.
Do not continue if motatool verify reports a failure.
3. Start the temporary OTA channel
On the source node, destination node, and every intermediate repeater, run:
tempradio 909.950,125,5,5,120
All participating nodes must use the same frequency, bandwidth, and spreading factor. Their time windows must
overlap. Start with the farthest hop (the destination) and work back toward the source when using tempradio.
If you administer the destination over LoRa, the controller used to send later ota commands must also be
able to communicate on this temporary channel. For unattended nodes, use synchronized tempradioat entries
instead of manually starting the windows. Ensure the nodes' clocks are set before using tempradioat.
4. Serve the update from the computer
Close any serial terminal using the source node's USB port, find its device name, and start the server:
motatool serve --dir ./motas --serial /dev/ttyACM0 -v
Replace /dev/ttyACM0 with the source node's serial device. motatool attaches the folder to the source
node, and the source advertises the full update over LoRa while its temporary-radio window is active.
Leave this command running until the destination finishes downloading.
5. Find and download the update
On the destination node, check its state and ask for nearby updates:
ota status
ota ls
Discovery is asynchronous. Wait a few seconds and run ota ls again if the list is initially empty. Find
the entry marked [yours] and full, then use its displayed number. If it is entry 1, run:
ota pull 1 flash
Monitor the transfer:
ota status
The update is ready when the status says ready to install. OTA is deliberately the lowest-priority mesh
traffic, so a busy channel can make a full-image transfer take longer than the example window. If necessary,
start another overlapping tempradio window; the download resumes rather than starting over.
6. Verify and install
Once the destination reports ready to install, run:
ota install
The destination verifies the complete firmware again before approving it. If verification succeeds, it reboots and applies the update. If verification fails, it keeps the current firmware and reports an error.
After the node returns, reconnect on its normal radio channel and confirm:
ota status
Quick troubleshooting
- Nothing appears in
ota ls: confirm thatmotatool serveis still running and every required node has an activetempradio 909.950,125,5,5,120window. - The update is marked
[other hw]: it is for a different board or firmware role. Do not install it. - The download stalls: check the source, destination, and intermediate repeaters. Restart matching, overlapping temporary-radio windows if one expired.
- The serial port is busy: close the serial terminal before starting
motatool serve. - The destination rejects the package: verify that you used the non-merged application image with the
EndFtrailer and thatmotatool verifysucceeds.
For additional commands and safety details, see the full OTA user guide. For protocol and container internals, see the OTA protocol specification.