Ra-02 LoRa

Ai-Thinker's 433 MHz LoRa radio module built on Semtech's SX1278, for kilometre-range links at low data rates over SPI.

  • Supply voltage2.5 V to 3.7 V, 3.3 V typical
  • Absolute maximum (SX1278)3.9 V on VDD
  • Current (433 MHz)TX 93 mA, RX 12.15 mA, standby 1.6 mA
  • Transmit power18 ± 1 dBm maximum
Ra-02 LoRa, Ai-Thinker's 433 MHz LoRa radio module built on Semtech's SX1278, for kilometre-range links at low data rates over SPI.
In short

The Ra-02 is Ai-Thinker's 433 MHz LoRa module: an SX1278 that transmits 18 ± 1 dBm, draws 93 mA in transmit and 12.15 mA in receive, and hears down to -141 dBm at spreading factor 12 (Ai-Thinker Ra-02 Specification V1.1, p. 2). It is a 3.3 V part only, specified to 2.5 V to 3.7 V, with the SX1278's absolute maximum at 3.9 V (Semtech SX1276/77/78/79 datasheet Rev. 4, p. 13). Wire it over SPI with NSS, RESET and DIO0, and drive it with the LoRa library.

LoRa trades speed for distance: by spreading each bit over a wide chirp, the SX1278 decodes signals far below the noise floor, so a pair of Ra-02 modules with simple antennas can talk across kilometres in open country. The Ra-02 packages the chip with its crystal, matching network and an IPEX antenna connector on a 17 × 16 mm stamp-hole board covering 410 MHz to 525 MHz (Ai-Thinker Ra-02 Specification V1.1, p. 2).

It is a raw radio, not a serial bridge. The microcontroller sets frequency, bandwidth, spreading factor and power over SPI, then writes packets of up to 256 bytes with CRC (p. 1). Higher spreading factors reach further but slow the link: at SF7 the module hears -125 dBm, at SF12 -141 dBm, both at 125 kHz bandwidth (p. 2). DIO0 signals "packet sent" and "packet received" so the code can react without polling.

Two practical points decide whether a Ra-02 project works. It is strictly 3.3 V, with no regulator or level shifting, so a 5 V board needs a 3.3 V supply of its own and shifted signals. And it must never transmit without an antenna on the IPEX connector or the antenna pad. The pads sit at 2 mm pitch, so most makers solder it to an adapter board with 2.54 mm pins.

Ra-02 LoRa pinout

tinkered.ai/components/sx1278-ra-02Ra-02 LoRa3.3VSupplyGNDGroundNSSSPI CS (active low)SCKSPI SCKMOSISPI MOSIMISOSPI MISORESETReset (active low)DIO0Interrupt: TX done / RX doneDIO1Interrupt: RX timeoutDIO2FSK data / interruptDIO3Interrupt: CAD doneDIO4InterruptDIO5Interrupt / clock out
PinFunctionType
3.3VSupply2.5 V to 3.7 Vpower in
GNDGroundpower in
NSSSPI CS (active low)3.3 V onlyinput
SCKSPI SCK3.3 V onlyinput
MOSISPI MOSI3.3 V onlyinput
MISOSPI MISO3.3 Voutput
RESETReset (active low)3.3 V onlyinput
DIO0Interrupt: TX done / RX done3.3 Voutput
DIO1Interrupt: RX timeoutoutput
DIO2FSK data / interruptoutput
DIO3Interrupt: CAD doneoutput
DIO4Interruptoutput
DIO5Interrupt / clock outoutput

How to wire the Ra-02 LoRa

Pin by pin, for the board you have.

Ra-02 LoRaArduino UnoNote
3.3V3.3 V regulator output (AMS1117-3.3 module fed from 5V)The Uno's own 3.3V pin gives 50 mA, short of the 93 mA transmit current; add 10 µF across 3.3V and GND at the module.
GNDGND (shared with the regulator)
NSSD10 through a level shifter (HV side to D10)
SCKD13 through a level shifter
MOSID11 through a level shifter
RESETD9 through a level shifter
MISOD12 (direct)
DIO0D2 (direct)
  • The SX1278 is a 3.3 V chip (absolute maximum 3.9 V): the Uno's 5 V outputs on NSS, SCK, MOSI and RESET need a 4-channel level shifter, with its LV side on the module's 3.3 V.
  • With a BSS138 level shifter, keep SPI slow: the sketch sets LoRa.setSPIFrequency(1E6).
Design this circuit on an Arduino Uno

Ra-02 LoRa code

Every example here compiles for its board.

Libraries: sandeepmistry/LoRa
// Ra-02 LoRa on Arduino Uno: wiring and a free simulation at https://www.tinkered.ai/components/sx1278-ra-02
// Ra-02 (SX1278, 433 MHz) on an Arduino Uno via a level shifter: NSS D10, RESET D9, DIO0 D2
// Flash one board with isSender = true and another with isSender = false.
#include <SPI.h>
#include <LoRa.h>

const int PIN_NSS = 10;
const int PIN_RESET = 9;
const int PIN_DIO0 = 2;
const bool isSender = true;
unsigned long counter = 0;

void setup() {
  Serial.begin(115200);
  LoRa.setPins(PIN_NSS, PIN_RESET, PIN_DIO0);
  LoRa.setSPIFrequency(1E6); // slow enough for a BSS138 level shifter
  if (!LoRa.begin(433E6)) {
    Serial.println(F("Ra-02 not found: check wiring, level shifter and 3.3 V supply"));
    while (true) {}
  }
  LoRa.setSpreadingFactor(9); // 7 to 12: higher reaches further, sends slower
  LoRa.setSyncWord(0x34);     // private network word, same on both ends
  Serial.println(isSender ? F("LoRa sender ready") : F("LoRa receiver ready"));
}

void loop() {
  if (isSender) {
    LoRa.beginPacket();
    LoRa.print("hello ");
    LoRa.print(counter);
    LoRa.endPacket();
    Serial.print(F("Sent packet "));
    Serial.println(counter++);
    delay(5000);
  } else {
    int size = LoRa.parsePacket();
    if (size > 0) {
      Serial.print(F("Received '"));
      while (LoRa.available()) Serial.print((char)LoRa.read());
      Serial.print(F("' RSSI "));
      Serial.print(LoRa.packetRssi());
      Serial.print(F(" dBm, SNR "));
      Serial.println(LoRa.packetSnr());
    }
  }
}
Compiled for arduino:avr:uno on 2026-10-30

Before you wire it

Do
  • Power it from 3.3 V: the module is specified to 2.5 V to 3.7 V (Ai-Thinker Ra-02 Specification V1.1, p. 2).
  • Attach a 433 MHz antenna to the IPEX connector before the first transmission.
  • Give it a supply that handles 93 mA transmit bursts (p. 2), with a 10 µF capacitor at the module.
  • Match frequency, spreading factor, bandwidth and sync word on both ends.
  • Follow your region's rules for the 433 MHz band: power, duty cycle and the allowed frequencies differ by country.
Don’t
  • Never connect 5 V to the 3.3V pin or to any signal pin: the SX1278's absolute maximum is 3.9 V (Semtech datasheet Rev. 4, p. 13).
  • Never feed it from the Uno's 3.3V pin, which supplies 50 mA against the module's 93 mA in transmit.
  • Never transmit without an antenna: the power has nowhere to go but back into the module.
  • The SX1278 reads a logic high from 0.8 × VDD (Semtech datasheet Rev. 4, p. 22), about 2.6 V at 3.3 V, so ESP32 and Pico outputs drive it directly and a 5 V board needs shifted signals.
  • DIO0 is the only interrupt line the LoRa library needs; DIO1 to DIO5 can stay unconnected.
  • The 2 mm pitch stamp holes do not fit a breadboard. Solder the module to an adapter board, or solder short wires straight to its pads.
  • A quarter-wave wire for 433 MHz is about 17 cm long, a simple antenna that beats the small spring coils for range.
  • Raising the spreading factor from 7 to 12 gains 16 dB of sensitivity (-125 to -141 dBm, Ra-02 Specification V1.1, p. 2) at the cost of a much longer time on air per packet.

Specifications

Supply voltage
2.5 V to 3.7 V, 3.3 V typicalAi-Thinker Ra-02 Specification V1.1, p. 2
Absolute maximum (SX1278)
3.9 V on VDDSemtech SX1276/77/78/79 datasheet Rev. 4, Table 3, p. 13
Current (433 MHz)
TX 93 mA, RX 12.15 mA, standby 1.6 mAAi-Thinker Ra-02 Specification V1.1, p. 2
Transmit power
18 ± 1 dBm maximumAi-Thinker Ra-02 Specification V1.1, p. 2
Receiver sensitivity (433 MHz, 125 kHz)
-125 dBm at SF7, -134 dBm at SF10, -141 dBm at SF12Ai-Thinker Ra-02 Specification V1.1, p. 2
Frequency range
410 MHz to 525 MHzAi-Thinker Ra-02 Specification V1.1, p. 2
Interface
SPI, SCK up to 10 MHz; digital input high at 0.8 × VDDSemtech SX1276/77/78/79 datasheet Rev. 4, p. 22
Packets
Up to 256 bytes with CRC; LoRa, FSK, GFSK, MSK, GMSK and OOKAi-Thinker Ra-02 Specification V1.1, p. 1
Package
SMD-16 stamp holes, 17 × 16 × 3.2 mm, IPEX antenna connectorAi-Thinker Ra-02 Specification V1.1, p. 2

From the Ai-Thinker Ra-02 LoRa Product Specification V1.1, published by Semtech (SX1278), module by Ai-Thinker.

Common mistakes

  1. Wiring it straight to a 5 V Arduino

    Many tutorials connect the SPI lines directly to an Uno. The SX1278's absolute maximum is 3.9 V (Semtech datasheet Rev. 4, p. 13), so 5 V signals stress or kill it. Use a level shifter on NSS, SCK, MOSI and RESET.

  2. Powering it from the Uno's 3.3V pin

    Transmitting draws 93 mA (Ra-02 Specification V1.1, p. 2), nearly twice what the Uno's 3.3V pin supplies. Brown-outs show up as begin() failing or packets that never arrive; use a separate 3.3 V regulator.

  3. Wrong frequency in begin()

    The Ra-02 covers 410 MHz to 525 MHz (p. 2). Code copied from an 868 or 915 MHz project calls LoRa.begin(915E6), which the module cannot tune to. Use 433E6 on both ends.

  4. Mismatched radio settings

    Spreading factor, bandwidth, coding rate and sync word must be identical on both modules. One end on SF7 and the other on SF9 never hear each other although both report a working radio.

Ra-02 LoRa questions

Is the Ra-02 5 V tolerant?

No. It runs from 2.5 V to 3.7 V (Ai-Thinker Ra-02 Specification V1.1, p. 2) and the SX1278's absolute maximum is 3.9 V (Semtech datasheet Rev. 4, p. 13). On a 5 V board, give it its own 3.3 V supply and pass NSS, SCK, MOSI and RESET through a level shifter.

What range can the Ra-02 reach?

With 18 dBm out and -141 dBm sensitivity at SF12 (p. 2), line-of-sight links of several kilometres are common with decent antennas. In towns and indoors, buildings cut that to a few hundred metres to a kilometre or two.

Which library works with the Ra-02?

The LoRa library by Sandeep Mistry (sandeepmistry/LoRa) is the simplest for point-to-point links: set the pins with LoRa.setPins(), then LoRa.begin(433E6). RadioLib supports the SX1278 too and adds LoRaWAN and other modulations.

Ra-02 or RFM95W?

Both are Semtech LoRa radios. The Ra-02 uses the SX1278 for the 433 MHz band (410 MHz to 525 MHz), while the RFM95W uses the SX1276 for 868 MHz and 915 MHz, which LoRaWAN networks in Europe and North America use. Pick the band your region and network allow.

Can the Ra-02 join The Things Network?

Only where a LoRaWAN plan uses 433 MHz, which few gateways serve. For TTN in Europe or North America, use an 868 MHz or 915 MHz module such as the RFM95W. The Ra-02 is best for your own point-to-point links.

Build something with the Ra-02 LoRa

  • Remote weather station

    A battery node in the field sends temperature, humidity and pressure every few minutes over LoRa.

    Build this
  • Mailbox notifier

    A reed switch in the mailbox sends a LoRa ping to the house.

    Build this
For AI assistants

This page as plain Markdown, for ChatGPT, Claude or your own agent. /components/sx1278-ra-02.md

What will you build with it?