The Ra-01 is one of the cheapest ways to get long-range wireless communication into your project. For a few dollars you get a module based on the Semtech SX1278 chip that can send data over several kilometers in open air. Sounds great on paper.
In practice, getting it to actually work is where most people get stuck. This guide covers everything from wiring to antenna selection based on real experience building LoRa communication boards.
What Is the Ra-01
The Ra-01 is a small RF module made by AI-Thinker. It uses the SX1278 chip from Semtech, which supports LoRa modulation in the 433 MHz band. It communicates over SPI and runs on 3.3V.
It is cheap, widely available, and powerful — but it is not beginner-friendly out of the box. There are a few things that will silently break your project if you do not know about them.
The First Thing That Will Break You — Voltage Levels
The Ra-01 runs on 3.3V. All of its pins are 3.3V logic. If you connect it directly to a 5V Arduino without level shifting, you will damage the module. It might still seem to work at first, then stop randomly, or it might die immediately.
Use a logic level shifter on every SPI line between a 5V Arduino and the Ra-01: MOSI, SCK, NSS, and RESET. MISO is an output from the module so it is safe going into a 5V Arduino input.
If you are using a 3.3V board like an ESP32, STM32, or a 3.3V Arduino variant, you have no problem and no level shifting needed.
Wiring
The Ra-01 has a standard SPI interface. Here is the connection for an Arduino Uno with a level shifter:
| Ra-01 Pin | Arduino Pin | Notes |
|---|---|---|
| VCC | 3.3V | Do NOT use 5V |
| GND | GND | |
| SCK | Pin 13 | Through level shifter |
| MOSI | Pin 11 | Through level shifter |
| MISO | Pin 12 | Direct, no shifter needed |
| NSS | Pin 10 | Through level shifter |
| RESET | Pin 9 | Through level shifter |
| DIO0 | Pin 2 | For interrupt-based receive |
Leave DIO1, DIO2, DIO3, DIO4, DIO5 unconnected for basic use.
The Antenna Problem
The Ra-01 has a U.FL connector on board. It does not come with an antenna. This is the second thing that catches people out.
You have two options:
Option 1 — U.FL to SMA adapter + antenna Buy a U.FL to SMA pigtail and attach a 433 MHz antenna. This gives the best performance and is what you want for any real deployment.
Option 2 — Wire antenna Cut a wire to exactly 164mm (quarter wavelength at 433 MHz) and solder it to the U.FL center pin. This works surprisingly well for testing and short-range use.
Never power the module without an antenna connected. Transmitting into an open antenna port reflects power back into the PA and can damage the chip.
Library Setup
The most reliable library for the SX1278 is RadioLib by Jan Gromeš. It is actively maintained, well documented, and supports both basic LoRa and the full LoRaWAN stack.
Install it through the Arduino Library Manager — search for RadioLib.
Basic transmitter example:
#include <RadioLib.h>
// NSS, DIO0, RESET, DIO1
SX1278 radio = new Module(10, 2, 9, 3);
void setup() {
Serial.begin(9600);
int state = radio.begin(433.0); // frequency in MHz
if (state == RADIOLIB_ERR_NONE) {
Serial.println("Radio initialized");
} else {
Serial.print("Failed, code: ");
Serial.println(state);
}
}
void loop() {
int state = radio.transmit("Hello from SolderBit");
if (state == RADIOLIB_ERR_NONE) {
Serial.println("Sent");
}
delay(2000);
}
Basic receiver example:
#include <RadioLib.h>
SX1278 radio = new Module(10, 2, 9, 3);
void setup() {
Serial.begin(9600);
radio.begin(433.0);
}
void loop() {
String received = "";
int state = radio.receive(received);
if (state == RADIOLIB_ERR_NONE) {
Serial.print("Received: ");
Serial.println(received);
Serial.print("RSSI: ");
Serial.println(radio.getRSSI());
}
}
Both modules must use the same frequency, bandwidth, spreading factor, and coding rate. If any of these differ, they will not hear each other.
Key Parameters and What They Do
Spreading Factor (SF) — ranges from 6 to 12. Higher SF means longer range but slower data rate. SF7 is fast and short range. SF12 is very slow but reaches the furthest. Start with SF7 for testing.
Bandwidth — common values are 125 kHz, 250 kHz, 500 kHz. Narrower bandwidth means better sensitivity and more range but slower speed. 125 kHz is the most common choice.
Coding Rate — adds error correction. 4/5 is the least overhead. 4/8 is maximum protection. Start with 4/5.
Transmit Power — the SX1278 can go up to 17 dBm on the PA_BOOST pin. Higher power drains more current. For battery projects, tune this to the minimum that gives you reliable communication.
Real Range Numbers
In open air with a proper 433 MHz antenna on both ends, SF12, 125 kHz bandwidth:
- Urban environment: 1–2 km
- Suburban: 3–5 km
- Open field: 5–10 km
These numbers drop dramatically indoors. Concrete walls kill 433 MHz signal fast. Keep this in mind if your application involves indoor use.
Common Problems and Fixes
Module not detected (SPI returns 0x00 or 0xFF) Almost always a wiring issue. Check your level shifter connections and make sure VCC is actually 3.3V. Measure it with a multimeter — some 3.3V pins on Arduino clones are poorly regulated.
Transmitting but receiver gets nothing Check that both modules are on the same frequency. Even 0.1 MHz difference prevents communication. Also check that you have an antenna on both ends.
Short range despite good settings Check antenna length. A wire cut to anything other than 164mm will be inefficient. Also check that the antenna is vertical — horizontal antennas lose significant signal to a vertical receiver.
Intermittent connection Usually a cold solder joint on the U.FL connector or on the module pins. The U.FL connector is tiny and easy to under-solder.
Summary
The Ra-01 is a capable module that rewards attention to detail. The main things to get right are: 3.3V power and logic levels, a proper antenna, matching parameters on both ends, and a solid library like RadioLib. Get those four things right and it just works.