| .. | ||
| src | ||
| platformio.ini | ||
| README.md | ||
Exercise: LoRa Transmission Validation (SX1262)
Overview
This exercise validates raw LoRa packet transmission from the LILYGO T-Beam SUPREME V3.0 using the onboard SX1262 radio.
The objective is to:
-
Transmit deterministic LoRa packets at known parameters.
-
Confirm successful reception using:
- A second T-Beam
- A Waveshare SX1303 concentrator sniffer
- Or any SDR/LoRa receiver configured with identical PHY settings
-
Verify correct alignment of frequency, spreading factor, bandwidth, and coding rate.
This is a PHY-layer validation exercise, not LoRaWAN.
Hardware
Transmitter
- Board: LILYGO T-Beam SUPREME V3.0
- MCU: ESP32-S3
- Radio: SX1262
- Antenna: 915 MHz tuned antenna
- Power: USB-C or 18650 battery
Receiver / Sniffer
Any device capable of raw LoRa reception with manual PHY configuration:
- Second T-Beam (SX1262)
- Waveshare SX1303 +
lora_pkt_fwd - SDR with LoRa demodulator
LoRa Radio Specifications
The sniffer must match these parameters exactly.
| Parameter | Value |
|---|---|
| Radio Chip | SX1262 |
| Frequency | 915.000 MHz |
| Modulation | LoRa |
| Bandwidth | 125 kHz |
| Spreading Factor | SF8 |
| Coding Rate | 4/5 |
| Preamble Length | 8 symbols |
| Sync Word | 0x12 (Public LoRa) |
| CRC | Enabled |
| IQ Inversion | Disabled |
| Output Power | 14 dBm (default) |
Important Notes for Sniffer Operators
1. Frequency
Ensure your sniffer JSON or configuration file contains:
"freq": 915000000
If using SX130x HAL:
915000000
No offset. No channel hopping.
2. Spreading Factor
Must be:
SF8
If the sniffer is set to multi-SF mode, confirm that SF8 is enabled.
3. Bandwidth
125000 Hz
Not 250 kHz. Not 500 kHz.
4. Coding Rate
4/5
Some interfaces represent this as:
CR = 1
5. Sync Word
If your sniffer filters on sync word:
0x12
This is the public LoRa sync word (not LoRaWAN private).
Expected Packet Behavior
The transmitter:
- Sends a short ASCII payload
- Repeats at a fixed interval
- Does not use LoRaWAN
- Does not use encryption
- Does not use MAC layer framing
Sniffer output should display:
- RSSI
- SNR
- SF8
- BW125
- Payload length matching transmitter
Confirming Correct Alignment
A properly aligned sniffer will show:
- Stable RSSI
- Correct SF detection (SF8)
- Clean CRC pass
- No excessive packet loss at short range
If you see:
- No packets → Check frequency mismatch first.
- Packets but CRC fail → Check bandwidth mismatch.
- Packets only intermittently → Check spreading factor.
SX1262 SPI Mapping (T-Beam SUPREME)
For reference, the radio is connected as follows:
| Signal | ESP32-S3 Pin |
|---|---|
| SCK | 12 |
| MISO | 13 |
| MOSI | 11 |
| CS | 10 |
| RESET | 5 |
| BUSY | 4 |
| DIO1 | 1 |
These match the board’s hardware routing.
Build & Flash
PlatformIO
- Open project folder
- Select correct environment
- Compile
- Upload via USB-C
- Monitor serial output
Arduino IDE
- Board: ESP32S3 Dev Module
- Flash: 8MB
- PSRAM: QSPI
- Upload speed: 921600
- USB Mode: CDC and JTAG
Purpose of This Exercise
This exercise verifies:
- SPI communication with SX1262
- Radio configuration correctness
- Antenna functionality
- Sniffer alignment
- Baseline RF performance
It is intended as the foundational RF validation step before:
- Reticulum interface integration
- microReticulum radio abstraction
- LoRa time-synchronized experiments
- Multi-node field testing
If You Cannot See Packets
Work through this checklist:
- Confirm antenna attached.
- Confirm sniffer at 915 MHz.
- Confirm SF8.
- Confirm BW125.
- Reduce distance to < 2 meters.
- Increase TX power to 17–20 dBm for testing.
- Confirm no regional regulatory lock mismatch.
Relationship to main.cpp
This README corresponds to the current exercise implementation in:
main.cpp
See source for definitive parameter values
If you modify radio parameters in code, update this README accordingly.