Skip to the content
PCBKitNew board
2 layers50 × 60 mmRx rf, the printed circuit board in 3D

lora-telemetry-node

Size
50 × 60 mm
Copper layers
2
Thickness
1.6 mm
Parts
11
Nets
15
Pads
44
Tracks, vias
0, 0
Pours
1
Routed
Not yet
KiCad
KiCad 10.0 (file 20260206)
Created
18 Mar 2026
Updated
23 Jul 2026

Overview

Rx rf is an open-source printed circuit board by ard-plt, from the ard-plt/lora-telemetry-node repository on GitHub. It is a 2-layer board of 50 × 60 mm with 11 parts on 15 nets.

Its parts include 3 resistors and 3 connectors. It belongs with the radio and wireless boards of this library.

README

README.md

LoRa Telemetry Node

An end-to-end telemetry link that reads MAVLink 2 data from a Pixhawk over UART, packs it into a compact binary frame, encrypts it, and relays it over a long-range 868 MHz LoRa link to a ground station running QGroundControl.

text
[Pixhawk TELEM2] --UART MAVLink2--> [ESP32-S3 TX Node] --LoRa 868MHz--> [ESP32-S3 RX Node] --USB--> [QGroundControl]

The ESP32 does not read any sensors itself — Pixhawk is the only data source. The TX node parses MAVLink, serializes + encrypts a fixed-size packet, and transmits it over LoRa; the RX node decrypts and re-emits it as MAVLink 2 over USB so QGroundControl sees a normal telemetry stream.

LoRa Module

Both nodes use an EBYTE E22-900T30D (SX1262, 868 MHz, up to 30 dBm) LoRa transceiver module, talking to the ESP32 over UART in the module's Normal (transparent) mode.

ParameterValue
Frequency868.0 MHz
Spreading FactorSF9
Bandwidth125 kHz
Coding Rate4/5
TX Power30 dBm
Air Data Rateselectable, 0.3–62.5 kbps (see below)

Power warning: the E22-900T30D draws up to ~500 mA while transmitting. Do not power it from the ESP32's own 3.3 V regulator — use a dedicated AMS1117-3.3 LDO (1 A rated), with a shared ground between the ESP32 and the E22.

Bridge Mode + Air Data Rate

Each node can run in one of two modes, selected (along with the LoRa air data rate) from a web configuration panel rather than a physical switch:

  • BRIDGE_TRANSPARENT — the node becomes a transparent UART bridge so Mission Planner can reach the Pixhawk directly through the LoRa link for parameter/calibration/waypoint work.
  • BRIDGE_COMPRESSED — normal telemetry mode: TX parses → packs → encrypts → transmits; RX receives → decrypts → unpacks → re-emits MAVLink.
Air RateUART Baud
0.3 / 1.2 / 2.4 / 4.8 kbps9600
9.6 kbps19200
19.2 kbps38400
38.4 kbps57600
62.5 kbps115200

Holding the config button (GPIO9) for 3 seconds opens a WPA2-protected Wi-Fi access point (TUAV-TX-Config / TUAV-RX-Config) with a captive portal for selecting bridge mode, air rate, and Wi-Fi password. Changing the mode/rate from the RX node automatically re-synchronizes the TX node over the RF link itself — no need to configure both ends by hand. See CLAUDE.md for the full protocol details.

PCB

A complete KiCad 10 PCB design lives under hardware/pcb/, covering both nodes as a two-board stack:

  • main — ESP32-S3-DevKitC-1 socket + power section (UBEC input → PTC fuse → reverse-polarity protection → a dedicated buck regulator that isolates the E22's transmit current pulses from the ESP32 rail). Identical design for both TX and RX; fabricate two copies.
  • tx_rf / rx_rf — the E22-900T30D module plus node-specific connectors (TX: Pixhawk TELEM2 JST-GH; RX: SSD1306 OLED header), on a small board that plugs directly onto main via a 16-pin header/socket (J4), stacked so the assembly stays compact.

Each project folder includes the schematic, PCB layout, custom footprint/ symbol libraries, and ready-to-fabricate Gerber + drill files (gerbers/). Signal-net routing is left for completion in the KiCad GUI; net assignments are DRC-verified and the ratsnest will guide it.

BoardSize
main50 × 71 mm
tx_rf / rx_rf50 × 60 mm

Hardware Overview

ComponentModel
MCUESP32-S3-WROOM-1 (via ESP32-S3-DevKitC-1), ×2
LoRa moduleEBYTE E22-900T30D (SX1262, 868 MHz, 30 dBm)
Pixhawk linkTELEM2 → ESP32 UART2, MAVLink 2, 57600 baud
Ground station linkRX node's native USB (USB-OTG), 57600 baud — no FT232 needed
OLED (RX only)SSD1306 128×64, I2C

Pin Mapping

TX Node (air)

SignalESP32 Pin
E22 TXDGPIO4 (UART1 RX)
E22 RXDGPIO5 (UART1 TX)
E22 AUXGPIO6
E22 M0GPIO7
E22 M1GPIO8
Config buttonGPIO9
Pixhawk TELEM2 TXGPIO16 (UART2 RX)
Pixhawk TELEM2 RXGPIO17 (UART2 TX)

RX Node (ground)

SignalESP32 Pin
E22 TXDGPIO4 (UART1 RX)
E22 RXDGPIO5 (UART1 TX)
E22 AUXGPIO6
E22 M0GPIO7
E22 M1GPIO8
Config buttonGPIO9
OLED SDAGPIO11
OLED SCLGPIO12

E22 M0=LOW, M1=LOW selects Normal TX/RX mode (set automatically at boot). The E22↔ESP32 UART baud follows the selected air data rate (see table above); the Pixhawk and ground-station links stay fixed at 57600 baud regardless of LoRa mode.

Packet Format (40 bytes, plaintext)

OffsetLenTypeField
01uint8header (fixed 0xAD)
11uint8seq_id
24int32latitude (degE7)
64int32longitude (degE7)
104int32altitude_mm (MSL)
142int16relative_alt_cm
162int16groundspeed_cms
182int16airspeed_cms
202int16heading_cd
222int16roll_cd
242int16pitch_cd
262int16yaw_cd
282int16climb_rate_cms
302uint16vbat_mv
322int16current_da
342uint16lidar_cm (0xFFFF = invalid)
361uint8battery_pct
371uint8flight_mode
381uint8armed
391uint8checksum (XOR of bytes 0–38)

Encryption

Telemetry is encrypted with AES-128-CTR (ESP32 hardware AES accelerator via mbedTLS) before transmission: 40-byte plaintext → 40-byte ciphertext, plus an 8-byte nonce (seq_id + low bytes of millis()) sent alongside it. The key lives in common/aes_config.h as AES_KEY — the checked-in value is a placeholder, change it before any real deployment, and flash both nodes with the same key.

Separately, copy common/secrets.h.example to common/secrets.h and fill in your own WEB_CONFIG_SALT (generate one with openssl rand -hex 32). This salt authenticates the HMAC on the RX→TX mode/rate sync command over the RF link; secrets.h is gitignored and must never be committed.

Build & Flash

bash
pip install platformio

# TX node
cd tx-node && pio run --target upload

# RX node
cd rx-node && pio run --target upload

QGroundControl Setup

Application Settings → Comm Links → Add:

  • Type: Serial
  • Port: the RX node's COM / ttyACM port
  • Baud rate: 57600

See docs/qgc_setup.md for details and docs/breadboard_wiring.md for a breadboard wiring guide (or use the PCB design above instead).

License

MIT

Parts

11
QtyValueFootprintReferences
4MH1, MH2, MH3, MH4
24.7kR_0603_1608MetricR5, R6
1330RR_0603_1608MetricR7
1BTN_LED_REMOTESolderWire-0.25sqmm_1x03_P4.2mm_D0.65mm_OD1.7mmJ5
1E22-900T30DE22-900T30DE1
1OLED_SSD1306PinHeader_1x04_P2.54mm_VerticalJ3
1STACK_TO_MAINPinHeader_2x08_P2.54mm_VerticalJ4

Questions

How big is the Rx rf PCB?

It measures 50 × 60 mm and has 2 copper layers, 1.6 mm thick.

What parts does the Rx rf use?

11 parts. The full list of its parts is on this page, with links to each part's symbol and footprint where PCBKit's library has them.

Where can I download the Rx rf KiCad files?

From the ard-plt/lora-telemetry-node repository on GitHub, at the commit this page was made from: the board is hardware/pcb/rx_rf/rx_rf.kicad_pcb and its schematic hardware/pcb/common/e22_rf.kicad_sch. PCBKit opens the board in the browser, with nothing to install.

Can I use the Rx rf design in my own project?

Its repository states no licence, so its author keeps all rights: ask ard-plt before reusing the design.

More from ard-plt/lora-telemetry-node

2
  • 2 layers50 × 60 mmTx rf, the printed circuit board in 3D

    Tx rf

    ard-plt/lora-telemetry-node

    lora-telemetry-node

    9 parts

Similar boards

  • 2 layers60 × 30 mmController, the printed circuit board in 3D

    Controller

    google/mozc-devices

    Circuit diagrams and firmware source code for Gboard DIY keyboards

    11 parts3kApache-2.0
  • 2 layers103 × 30.5 mmTS Front Endcap, the printed circuit board in 3D

    TS Front Endcap

    EEVengers/ThunderScope

    ThunderScope GitHub Repo

    11 parts1.3kMIT
  • 2 layers26 × 30 mmExpansion Card, the printed circuit board in 3D

    Expansion Card

    FrameworkComputer/ExpansionCards

    Reference designs and documentation to create Expansion Cards for the Framework Laptop

    11 parts1.1kCC-BY-4.0
  • 2 layers53.9 × 23.2 mmBuffer, the printed circuit board in 3D

    Buffer

    hoglet67/RGBtoHDMI

    Bare-metal Raspberry Pi project that provides pixel-perfect sampling of Retro Computer RGB/YUV video and conversion to HDMI

    11 parts1kGPL-3.0
  • 2 layers10 × 20 mm2 connector Sensor Board, the printed circuit board in 3D

    2 connector Sensor Board

    hackclub/OnBoard

    💡 Join 1,000 teenagers and make your first PCB with a $100 grant!

    11 parts915
  • 2 layersFet module, the printed circuit board in 3D

    Fet module

    ByteWelder/Decktility

    A handheld PC

    11 parts855CC-BY-SA-4.0
  • 2 layers47 × 33 mmSevensegment led display module, the printed circuit board in 3D

    Sevensegment led display module

    tardate/LittleArduinoProjects

    a collection of "Little Electronic & Arduino Projects", most involving electronics or an Arduino in one way or another!

    11 parts803MIT
  • 2 layers42.5 × 36.8 mmDevboard, the printed circuit board in 3D

    Devboard

    basilfx/TRADFRI-Hacking

    Hacking IKEA TRÅDFRI products, such as light bulbs, window blinds and other accessories.

    11 parts743CC-BY-4.0