Contact Sales & After-Sales Service

Contact & Quotation

  • Inquire: Call 0086-755-23203480, or reach out via the form below/your sales contact to discuss our design, manufacturing, and assembly capabilities.
  • Quote: Email your PCB files to Sales@pcbsync.com (Preferred for large files) or submit online. We will contact you promptly. Please ensure your email is correct.
Drag & Drop Files, Choose Files to Upload You can upload up to 3 files.

Notes:
For PCB fabrication, we require PCB design file in Gerber RS-274X format (most preferred), *.PCB/DDB (Protel, inform your program version) format or *.BRD (Eagle) format. For PCB assembly, we require PCB design file in above mentioned format, drilling file and BOM. Click to download BOM template To avoid file missing, please include all files into one folder and compress it into .zip or .rar format.

Adafruit LoRa Radio Guide: RFM95W & RFM69 Long Range Wireless

When WiFi and Bluetooth won’t reach far enough, LoRa changes everything. I’ve deployed dozens of sensor networks using Adafruit LoRa modules, and the range still surprises me—over 2 kilometers with a simple wire antenna, and up to 20km with directional setups. That’s not marketing fluff; that’s real-world testing across open fields and through urban environments.

This guide covers the RFM95 (LoRa) and RFM69 (FSK packet radio) modules from Adafruit, including the popular LoRa Feather boards and standalone breakouts like the Adafruit RFM95W. Whether you’re building remote weather stations, asset trackers, or mesh networks, these radios provide reliable long-range communication without the complexity of cellular or the power demands of WiFi.

Understanding LoRa vs Traditional Packet Radio

Before diving into specific modules, it’s worth understanding why LoRa exists and when the simpler RFM69 makes more sense.

What Makes LoRa Different

LoRa (Long Range) uses Chirp Spread Spectrum (CSS) modulation—a technique where the signal frequency continuously increases or decreases over time. This allows receivers to decode signals up to 20dB below the noise floor, something traditional FSK modulation can’t achieve.

The tradeoff? Data rate. LoRa maxes out around 37.5 kbps in optimal conditions, and typical configurations run much slower to maximize range. You’re not streaming video with these radios—you’re sending sensor readings, GPS coordinates, or control commands.

When RFM69 Makes Sense

The RFM69 uses FSK (Frequency Shift Keying) modulation, which is faster but shorter range. At +20dBm output power, expect 200-500 meters with basic antennas, extending to 5km with careful antenna design and clear line of sight.

For applications where you need higher data throughput over moderate distances—like real-time sensor updates within a building or campus—the RFM69 often works better than LoRa. It’s also cheaper and uses slightly less power during transmission.

Adafruit RFM95W and RFM9X LoRa Specifications

The Adafruit RFM95W breakout board packages the Semtech SX1276 transceiver with essential support circuitry for easy integration.

SpecificationRFM95W (LoRa)RFM69HCW (FSK)
ModulationLoRa CSS + FSKFSK/GFSK/MSK/GMSK/OOK
Frequency868/915 MHz868/915 MHz
TX Power+5 to +20 dBm+13 to +20 dBm
Receiver Sensitivity-148 dBm-120 dBm
Range (wire antenna)~2 km~500 m
Range (directional)Up to 20 kmUp to 5 km
Max Packet Size252 bytes60 bytes
Current (TX +20dBm)~120 mA~150 mA
Current (RX)~12 mA~30 mA
Supply Voltage3.3V (with 5V tolerant I/O)3.3V (with 5V tolerant I/O)

The RFM9X designation covers the entire family: RFM95 (868/915 MHz), RFM96 (433 MHz), RFM97 (868/915 MHz low power), and RFM98 (433 MHz). The Adafruit RFM95W is specifically the 868/915 MHz high-power version that most projects use in the Americas and Europe.

Breakout Board Features

Adafruit’s breakout boards add several conveniences:

  • 3.3V voltage regulator (accepts 3-5V input)
  • Level shifters for 5V logic compatibility
  • Antenna pad with optional uFL or SMA footprints
  • Standard 0.1″ header spacing for breadboards
  • Castellated edges for direct PCB mounting

The board dimensions are compact at 29mm x 25mm x 4mm—small enough for most embedded projects but large enough to handle heat dissipation during extended transmissions.

Adafruit LoRa Feather Options

For projects needing an all-in-one solution, the LoRa Feather boards integrate the radio with a microcontroller and battery management.

BoardMCUFlashRAMRadioPrice Range
Feather 32u4 RFM95ATmega32u432KB2KBRFM95W LoRa~$35
Feather M0 RFM95SAMD21256KB32KBRFM95W LoRa~$35
Feather RP2040 RFM95RP20408MB264KBRFM95W LoRa~$20
Feather 32u4 RFM69ATmega32u432KB2KBRFM69HCW~$25
Feather M0 RFM69SAMD21256KB32KBRFM69HCW~$30
Feather RP2040 RFM69RP20408MB264KBRFM69HCW~$18

Choosing the Right LoRa Feather

The Feather RP2040 RFM95 has become my default recommendation. The RP2040’s dual-core processor handles LoRa packet processing alongside application code without timing conflicts, and 8MB of flash provides plenty of room for CircuitPython libraries and data logging.

For battery-critical applications where every milliamp matters, the Feather M0 RFM95 draws less idle current than the RP2040 variant. The SAMD21 also has better deep sleep modes for duty-cycled sensor nodes.

The Feather 32u4 variants work fine for simple applications but struggle with memory constraints when running larger CircuitPython programs or complex Arduino sketches.

LoRa Featherwing for Existing Projects

If you already have a Feather board and want to add LoRa capability, the RadioFruit FeatherWing provides the radio module without duplicating the microcontroller.

FeatherWingRadioFrequencyNotes
RFM95W LoRa WingRFM95W868/915 MHzLoRa modulation
RFM96W LoRa WingRFM96W433 MHzLoRa modulation (EU)
RFM69HCW WingRFM69HCW868/915 MHzFSK packet radio

The FeatherWing approach lets you pair any Feather MCU with the radio—useful when you need WiFi connectivity (ESP32 Feather) plus long-range radio, or when prototyping with different processors before committing to an integrated solution.

Wiring the RFM95 and RFM69 Breakouts

Both RFM95 and RFM69 breakouts use SPI for communication, requiring the same basic connections to your microcontroller.

Arduino Uno/Mega Wiring

RFM Module PinArduino UnoArduino Mega
VIN5V5V
GNDGNDGND
SCKD13D52
MISOD12D50
MOSID11D51
CSD4 (configurable)D4 (configurable)
RSTD2 (configurable)D2 (configurable)
G0 (IRQ)D3 (configurable)D3 (configurable)

The CS, RST, and G0 pins can be reassigned in software—just update the pin definitions in your code. The interrupt pin (G0) is essential for efficient packet reception; without it, you’d need to poll the radio constantly.

Feather M0/RP2040 Wiring

For Feather boards with external RFM breakouts:

RFM Module PinFeather
VIN3V or USB
GNDGND
SCKSCK
MISOMI
MOSIMO
CSD10
RSTD11
G0D6

Antenna Considerations for Maximum Range

The antenna is the most critical—and most often neglected—component for LoRa range. A poor antenna can reduce your 2km range to 200 meters.

Wire Antenna Lengths

For a simple quarter-wave monopole antenna, cut a wire to these lengths:

FrequencyQuarter-Wave Length
433 MHz164.7 mm (6.5 inches)
868 MHz82.2 mm (3.2 inches)
915 MHz78.0 mm (3.1 inches)

Solid core wire works better than stranded—it maintains its shape and consistent electrical properties. I use 22 AWG hookup wire, soldered perpendicular to the board at the antenna pad.

Upgrading to External Antennas

For production deployments or range-critical applications, upgrade to a proper antenna:

uFL connector: Solder a uFL connector to the breakout’s alternate antenna pads, then connect a pigtail cable to your antenna. This works well for enclosures where the antenna mounts externally.

SMA edge-mount: For bench testing or semi-permanent installations, an SMA connector provides easy antenna swapping. The Adafruit RFM95W breakout has pads for edge-mount SMA connectors.

Antenna recommendations:

  • Rubber duck (2-3 dBi): Good general-purpose outdoor antenna
  • Fiberglass whip (5-6 dBi): Better gain, weatherproof
  • Yagi directional (8-12 dBi): Point-to-point links over several kilometers

Arduino Code Example for RFM95 LoRa

The RadioHead library provides reliable, well-tested code for both RFM95 and RFM69 modules.

Basic Transmitter

cpp

#include <SPI.h>#include <RH_RF95.h>#define RFM95_CS  4#define RFM95_RST 2#define RFM95_INT 3#define RF95_FREQ 915.0RH_RF95 rf95(RFM95_CS, RFM95_INT);void setup() {  pinMode(RFM95_RST, OUTPUT);  digitalWrite(RFM95_RST, HIGH);    Serial.begin(9600);  delay(100);    // Manual reset  digitalWrite(RFM95_RST, LOW);  delay(10);  digitalWrite(RFM95_RST, HIGH);  delay(10);    if (!rf95.init()) {    Serial.println(“LoRa init failed”);    while (1);  }    rf95.setFrequency(RF95_FREQ);  rf95.setTxPower(20, false); // +20 dBm}void loop() {  char msg[] = “Hello from LoRa!”;  rf95.send((uint8_t *)msg, sizeof(msg));  rf95.waitPacketSent();  Serial.println(“Sent!”);  delay(1000);}

Basic Receiver

cpp

#include <SPI.h>#include <RH_RF95.h>#define RFM95_CS  4#define RFM95_RST 2#define RFM95_INT 3#define RF95_FREQ 915.0RH_RF95 rf95(RFM95_CS, RFM95_INT);void setup() {  pinMode(RFM95_RST, OUTPUT);  digitalWrite(RFM95_RST, HIGH);    Serial.begin(9600);  delay(100);    digitalWrite(RFM95_RST, LOW);  delay(10);  digitalWrite(RFM95_RST, HIGH);  delay(10);    if (!rf95.init()) {    Serial.println(“LoRa init failed”);    while (1);  }    rf95.setFrequency(RF95_FREQ);}void loop() {  if (rf95.available()) {    uint8_t buf[RH_RF95_MAX_MESSAGE_LEN];    uint8_t len = sizeof(buf);        if (rf95.recv(buf, &len)) {      Serial.print(“Received: “);      Serial.println((char*)buf);      Serial.print(“RSSI: “);      Serial.println(rf95.lastRssi(), DEC);    }  }}

CircuitPython for RFM9X LoRa

CircuitPython makes Adafruit LoRa development even simpler, especially on Feather boards with built-in radios.

python

import boardimport busioimport digitalioimport adafruit_rfm9x# Setup SPIspi = busio.SPI(board.SCK, MOSI=board.MOSI, MISO=board.MISO)# Setup radio pinscs = digitalio.DigitalInOut(board.RFM9X_CS)reset = digitalio.DigitalInOut(board.RFM9X_RST)# Initialize radiorfm9x = adafruit_rfm9x.RFM9x(spi, cs, reset, 915.0)rfm9x.tx_power = 20# Send a messagerfm9x.send(bytes(“Hello LoRa!”, “utf-8”))# Receive with timeoutpacket = rfm9x.receive(timeout=5.0)if packet is not None:    print(“Received:”, str(packet, “utf-8”))    print(“RSSI:”, rfm9x.last_rssi)

Note that CircuitPython’s RFM9X library has some limitations compared to Arduino: no interrupt support means you must poll for packets, and maximum packet size is 252 bytes. For most sensor applications, these limitations don’t matter.

Practical Applications

Remote Weather Station

A solar-powered weather station with BME280 sensor sends temperature, humidity, and pressure readings every 15 minutes. The LoRa Feather sleeps between transmissions, drawing under 100µA. With a 2000mAh battery and small solar panel, it runs indefinitely.

Agricultural Sensor Network

Soil moisture sensors scattered across fields report to a central gateway. Each node uses an RFM95 module with a 6dBi fiberglass antenna, achieving reliable communication over 1.5km through crops and vegetation.

Asset Tracking

GPS trackers with RFM69 radios report vehicle positions within a warehouse complex. The shorter range isn’t a problem, and the faster data rate allows more frequent updates without collision issues.

LoRaWAN Integration

For internet connectivity, Adafruit LoRa modules work with The Things Network and other LoRaWAN providers. The Feather RP2040 RFM95 has enough processing power to run the full LoRaWAN stack, enabling cloud integration for IoT projects.

Essential Resources and Downloads

ResourceURLDescription
RadioHead Libraryairspayce.com/mikem/arduino/RadioHeadArduino library for RFM95/RFM69
CircuitPython RFM9xgithub.com/adafruit/Adafruit_CircuitPython_RFM9xPython library for LoRa
CircuitPython RFM69github.com/adafruit/Adafruit_CircuitPython_RFM69Python library for packet radio
SX127x Datasheetsemtech.com/products/wireless-rf/lora-connect/sx1276LoRa chip specifications
RFM95W Datasheethoperf.com/modules/lora/RFM95.htmlModule specifications
Adafruit Learn Guidelearn.adafruit.com/adafruit-rfm69hcw-and-rfm96-rfm95-rfm98-lora-packet-padio-breakoutsOfficial tutorial
The Things Networkthethingsnetwork.orgLoRaWAN network provider

Troubleshooting Common Issues

Radio Initialization Fails

  • Check SPI wiring—MISO and MOSI are frequently swapped
  • Verify CS pin is correctly defined in code
  • Ensure 3.3V power is stable (measure with multimeter)
  • Try a manual reset before init()

No Communication Between Modules

  • Both radios must use identical frequency settings
  • RFM95 and RFM69 cannot communicate with each other
  • Check antenna connections—transmitting without antenna can damage the module
  • Start with both radios close together, then increase distance

Poor Range

  • Antenna length must match frequency (use calculations above)
  • Keep antenna vertical and away from metal objects
  • Increase TX power in code (up to +20 dBm)
  • Try reducing bandwidth for longer range (slower data rate)

CircuitPython Misses Packets

  • Increase polling frequency in receive loop
  • Use longer timeout values
  • Consider switching to Arduino if packet loss is critical

Frequently Asked Questions

Can RFM95 LoRa radios communicate with RFM69 packet radios?

No. The RFM95 uses LoRa modulation while the RFM69 uses FSK modulation—they’re fundamentally incompatible. Both radios must be the same type (both LoRa or both FSK) and operate on the same frequency. An RFM95 at 915 MHz can only talk to another RFM95/96/97/98 at 915 MHz with matching LoRa settings.

What’s the maximum range I can achieve with Adafruit LoRa modules?

With the Adafruit RFM95W at +20dBm and simple wire antennas, expect 1.5-2km line-of-sight. With high-gain directional antennas (Yagi or parabolic), 15-20km is achievable in ideal conditions. Urban environments with buildings and interference typically reduce range by 50-75%. The RFM69 achieves roughly half the range of LoRa under similar conditions.

Do I need a license to use these radios?

In the Americas, 915 MHz is license-free under FCC Part 15 rules (limited to 1 watt EIRP). In Europe, 868 MHz is license-free under ETSI regulations (limited to 25mW in most sub-bands). The 433 MHz band has more restrictions varying by region. Always verify local regulations before deployment, especially for commercial applications.

How do I choose between 433 MHz and 915 MHz modules?

Choose based on your region’s regulations and propagation needs. 433 MHz penetrates obstacles better and travels slightly farther at equivalent power, but has a longer antenna and more interference from other devices. 915 MHz offers more bandwidth and shorter antennas. In the Americas, 915 MHz is the practical choice; in Europe, both 433 MHz and 868 MHz are options.

Can I use Adafruit LoRa modules with LoRaWAN networks like The Things Network?

Yes, but with caveats. The RFM95 and RFM9X modules support the LoRa physical layer that LoRaWAN requires. However, you’ll need a LoRaWAN software stack (LMIC library for Arduino, or TinyLoRa for CircuitPython). The Feather RP2040 RFM95 handles LoRaWAN well; smaller MCUs like the ATmega32u4 struggle with the protocol’s memory requirements.

Power Consumption and Battery Life

Understanding power draw helps you design battery-powered LoRa nodes that last months or years on a single charge.

StateRFM95W CurrentRFM69HCW Current
Sleep0.2 µA0.1 µA
Idle/Standby1.5 µA1.25 µA
Receive12 mA30 mA
Transmit (+13 dBm)28 mA45 mA
Transmit (+20 dBm)120 mA150 mA

For a typical sensor node transmitting once per hour, the radio spends most of its time in sleep mode. A 2000mAh battery could theoretically last over a year with proper duty cycling. The key is minimizing time in receive mode—if you’re just sending data one-way, skip the receive window entirely.

The RFM9X series actually draws less current in receive mode than the RFM69, making it more efficient for applications requiring bidirectional communication or listening for incoming commands.

Building Reliable Networks

Single point-to-point links are straightforward, but scaling to multiple nodes requires planning.

Star topology: One central receiver, multiple transmitters. Simple but limited by central node’s range. Works well for sensor networks reporting to a single gateway.

Mesh networking: Nodes relay messages for each other, extending range beyond any single link. More complex software (RadioHead supports basic mesh), but more resilient to node failures.

Time division: Schedule each node to transmit at specific intervals, avoiding collisions. Essential when many nodes share the same frequency.

For most Adafruit LoRa projects, start with star topology. A Raspberry Pi with a LoRa Bonnet makes an excellent central receiver, logging data to a database or forwarding to cloud services.

Final Thoughts

After years of working with various wireless technologies, Adafruit LoRa modules remain my go-to solution for long-range, low-power communication. The RFM95 handles remote monitoring projects effortlessly, while the RFM69 fills the gap for shorter-range applications needing faster updates.

The combination of solid hardware, excellent documentation, and mature software libraries makes these radios accessible to beginners while remaining capable enough for production deployments. Start with a pair of breakout boards, get basic communication working, then scale up to LoRa Feather boards and custom PCBs as your project demands.

Leave a Reply

Your email address will not be published. Required fields are marked *

Contact Sales & After-Sales Service

Contact & Quotation

  • Inquire: Call 0086-755-23203480, or reach out via the form below/your sales contact to discuss our design, manufacturing, and assembly capabilities.

  • Quote: Email your PCB files to Sales@pcbsync.com (Preferred for large files) or submit online. We will contact you promptly. Please ensure your email is correct.

Drag & Drop Files, Choose Files to Upload You can upload up to 3 files.

Notes:
For PCB fabrication, we require PCB design file in Gerber RS-274X format (most preferred), *.PCB/DDB (Protel, inform your program version) format or *.BRD (Eagle) format. For PCB assembly, we require PCB design file in above mentioned format, drilling file and BOM. Click to download BOM template To avoid file missing, please include all files into one folder and compress it into .zip or .rar format.