A useful first Meshtastic test is a repeatable exchange between two nodes: both boot correctly, both use matching radio and channel settings, and messages arrive in both directions. This guide walks through that process with an ESP32-S3 and SX1262, then explains how to add telemetry or MQTT after the radio link works.
1. Understand the hardware and firmware roles
The ESP32-S3 runs Meshtastic, manages messages and peripherals, and provides the phone or computer connection. The SX1262 handles sub-GHz LoRa transmission and reception. They communicate over SPI; Meshtastic supplies the mesh protocol and routing behavior.
Two component examples are:
XIAO ESP32S3: A compact ESP32-S3 development board with a dual-core processor up to 240 MHz, 8 MB Flash, 8 MB PSRAM, Wi-Fi, BLE and USB-C.
- DigiKey part number: 1597-113991114-ND. Manufacturer part number: 113991114.
Wio-SX1262 for XIAO: An SX1262-based LoRa expansion board with an SPI interface and an 862-930 MHz RF implementation.
- DigiKey part number: 1597-113010003-ND. Manufacturer part number: 113010003.
Match the firmware board definition to the actual assembly. The standalone Wio-SX1262 expansion board and the radio board supplied in the XIAO ESP32S3 kit have different connection arrangements. For a separately assembled node, verify the schematic and GPIO assignments; for the matching ESP32-S3 kit, use its documented firmware target.
2. Check the hardware before flashing
Start with two compatible nodes, band-matched LoRa antennas, a USB data cable and stable USB power. Attach each LoRa antenna before transmitting. Use the appropriate Wi-Fi/BLE antenna connection for the ESP32-S3 board as well.
For custom wiring, check these signals against the firmware definition:
| 第 1 列 | 第 2 列 |
|---|---|
| Signal | What to verify |
| SCK, MOSI, MISO | SPI signals connect to the GPIOs selected by the board definition. |
| NSS / CS | The radio chip-select pin matches the firmware assignment. |
| BUSY | The firmware can read the SX1262 busy state before issuing commands. |
| DIO1 | The radio interrupt is connected to the expected GPIO. |
| NRESET | The radio reset line is connected and controlled correctly. |
| Supply and ground | Logic levels, supply voltage and common ground match the hardware specifications. |
A successful ESP32 boot confirms the processor is running. Check the startup log separately for successful radio initialization.
3. Flash the correct Meshtastic build
- Connect the node with a USB data cable and open the Meshtastic Web Flasher in Chrome or Edge.
- For the documented XIAO ESP32S3 and Wio-SX1262 kit, select Seeed XIAO S3. Its firmware filename begins with firmware-seeed-xiao-s3-. For a custom assembly, use a build with matching radio GPIO definitions.
- Install the same firmware release on both test nodes. When replacing a different application, use Full Erase and Install, then configure the node again.
- If the device does not appear, close other applications using its serial port. Hold BOOT while connecting USB to enter the download mode described in the board instructions, then select the port again.
- After flashing, restart the node and check the startup log. Resolve radio initialization errors before attempting range tests.
4. Establish one matching configuration
Connect through the Meshtastic app using Bluetooth. On a screenless node, obtain the pairing information through the serial output. Use the configured pairing PIN; the Seeed kit guide documents 123456 for its default setup.
Apply the following baseline to both nodes:
| 第 1 列 | 第 2 列 |
|---|---|
| Setting | Initial configuration |
| Device role | CLIENT, which supports app connections and normal packet forwarding. |
| LoRa region | The same region appropriate to the deployment country and hardware band. |
| Modem preset | LONG_FAST on both nodes for an initial matched test. |
| Frequency slot | The same effective slot; retain matching defaults for the first test. |
| Message channel | The same channel name and pre-shared key, imported from one shared channel configuration. |
| Hop limit | Keep the default during the first test. |
| MQTT | Disabled while validating the local radio link. |
| Power saving | Disabled during initial debugging to keep the nodes accessible. |
Set the region explicitly. A node with an unset region does not transmit. Let the firmware apply the region-specific limits and keep its duty-cycle enforcement enabled.
Radio settings and message channels control different things. Region, preset and frequency slot determine the radio link. Channel name and key determine which message group a node can use. Importing the same channel configuration reduces typing errors, but still verify the radio settings.
The primary channel name also influences the automatically selected frequency slot. If you give the nodes different primary channel names, set an explicit matching slot. For a private group, generate a random channel key once and share that same configuration with the participating nodes.
5. Verify a two-node link
Place the nodes several metres apart with a clear path and similar antenna orientation. Give them distinct names, such as Bench-A and Bench-B.
- Send a short message from A on the shared channel and confirm its contents appear at B.
- Send a reply from B and confirm it appears at A.
- Repeat with numbered messages, leaving enough time between transmissions for delivery.
- Record the number sent and received, plus RSSI and SNR where available.
- Restart both nodes and repeat to confirm the settings persist.
Confirm reception on the destination device rather than relying only on the sender’s status icon. For a repeatable check, send 20 numbered messages in each direction and calculate received messages divided by sent messages.
6. Tune the link with controlled changes
After the bench test, move one node along the intended route. Keep the firmware, payload, antenna and radio settings fixed while recording reception, RSSI and SNR at each location.
Change one variable at a time. Raising the antenna or clearing an obstruction can improve the path without changing the modem settings. If evaluating another preset, apply it to both nodes and repeat the same route.
Higher spreading factors generally improve sensitivity while increasing packet airtime. Wider bandwidth generally shortens airtime while reducing sensitivity. Use a preset suited to the required link and message volume, then evaluate delivery under those settings. Add a third node only after establishing the direct-link baseline; use traceroute to examine the path when testing mesh forwarding.
7. Add sensors or MQTT after the baseline passes
Environmental telemetry
Connect a firmware-supported I2C sensor, such as a BME280, to the board’s documented SDA and SCL pins. Check its supply voltage and I2C address, restart the node, and confirm sensor detection before enabling environment telemetry.
Set a reporting interval appropriate to how quickly the measurement changes. Environmental readings belong in the Telemetry module. The Detection Sensor module monitors GPIO states for event alerts. Validate the reading locally, then confirm the same measurement reaches the receiving node.
MQTT over Wi-Fi
For an internet-connected node, configure its Wi-Fi SSID and password, enable MQTT, and enter the broker address, credentials and root topic. Enable uplink on the channel whose packets should reach the broker. Enable downlink when broker-to-mesh traffic is part of the application.
Confirm that the node joins Wi-Fi first, then inspect broker traffic while sending one known message over LoRa. This separates radio delivery from broker configuration. Use USB serial or a Wi-Fi client to manage the node after switching from Bluetooth.
8. Validate power behavior in the intended role
Measure the complete assembly during receive, transmit, Wi-Fi operation and the configured sleep cycle. Include sensors, displays and regulators in the measurement.
For periodic sensing, align telemetry intervals and power-saving settings with the sampling task. For a node intended to forward traffic continuously, validate its receiving availability as well as current consumption. These measurements provide a useful basis for battery sizing and supply design.
9. Use Wio-S3 for an integrated design
Wio-S3 combines the ESP32-S3R8 processor and SX1262 radio in one module, integrating the processing and LoRa functions provided by the separate ESP32-S3 and Wio-SX1262 arrangement. With 16 MB Flash, 8 MB PSRAM and integrated RF circuitry, it is a practical hardware foundation for custom Meshtastic nodes. Use a Meshtastic board definition matching its internal radio connections and the carrier board’s peripherals when preparing the firmware build.
At the time of writing, DigiKey had not yet listed the Wio-S3 module.
