

The RFM12B is a low-power, low-cost wireless transceiver module manufactured by HopeRF. It is designed for short-range communication in the 433 MHz, 868 MHz, and 915 MHz frequency bands. The module is highly versatile and supports both FSK (Frequency Shift Keying) and OOK (On-Off Keying) modulation schemes, making it suitable for a wide range of wireless applications.








The RFM12B is particularly popular in hobbyist and IoT projects due to its ease of use, low power consumption, and compatibility with microcontrollers like the Arduino.
| Parameter | Value |
|---|---|
| Frequency Range | 433 MHz, 868 MHz, 915 MHz |
| Modulation | FSK, OOK |
| Supply Voltage | 2.2V to 3.8V |
| Operating Current | 12 mA (typical, during transmission) |
| Sleep Current | < 1 µA |
| Data Rate | 0.6 kbps to 115.2 kbps |
| Output Power | -18 dBm to +13 dBm (programmable) |
| Sensitivity | -105 dBm (at 2.4 kbps, FSK) |
| Communication Interface | SPI |
| Operating Temperature | -40°C to +85°C |
| Dimensions | 16 mm x 16 mm x 3 mm |
The RFM12B module in the DIP package has 16 pins. Below is the pinout and description:
| Pin Number | Pin Name | Description |
|---|---|---|
| 1 | GND | Ground connection |
| 2 | VDD | Positive supply voltage (2.2V to 3.8V) |
| 3 | SDO | Serial Data Output (SPI interface) |
| 4 | SDI | Serial Data Input (SPI interface) |
| 5 | SCK | Serial Clock Input (SPI interface) |
| 6 | nSEL | Chip Select (active low) |
| 7 | nIRQ | Interrupt Request (active low, indicates data availability or status) |
| 8 | FSK/DATA | Data input/output for FSK or OOK modulation |
| 9 | GND | Ground connection |
| 10 | ANT | Antenna connection |
| 11 | GND | Ground connection |
| 12 | VDD | Positive supply voltage (2.2V to 3.8V) |
| 13 | CLK | Clock output (optional, can be used to drive external microcontroller) |
| 14 | nRES | Reset pin (active low, optional for manual reset) |
| 15 | GND | Ground connection |
| 16 | GND | Ground connection |
Below is an example of how to initialize and use the RFM12B module with an Arduino UNO:
#include <SPI.h>
// Define RFM12B pins
#define RFM12B_CS 10 // Chip Select pin
#define RFM12B_IRQ 2 // Interrupt pin
void setup() {
// Initialize SPI
SPI.begin();
pinMode(RFM12B_CS, OUTPUT);
pinMode(RFM12B_IRQ, INPUT);
// Set Chip Select high (inactive)
digitalWrite(RFM12B_CS, HIGH);
// Initialize Serial Monitor
Serial.begin(9600);
Serial.println("Initializing RFM12B...");
// Example: Send initialization commands to RFM12B
digitalWrite(RFM12B_CS, LOW); // Select the RFM12B module
SPI.transfer(0x80D7); // Enable configuration settings
SPI.transfer(0x82C8); // Enable receiver and baseband
SPI.transfer(0xA640); // Set frequency to 433 MHz
digitalWrite(RFM12B_CS, HIGH); // Deselect the module
Serial.println("RFM12B Initialized.");
}
void loop() {
// Example: Check for interrupt signal
if (digitalRead(RFM12B_IRQ) == LOW) {
Serial.println("Data available or status change detected.");
// Add code to handle data reception or transmission
}
}
No Communication with the Module
Poor Wireless Range
Module Not Responding
Data Corruption
Q: Can the RFM12B operate at 5V?
A: No, the RFM12B operates at a maximum voltage of 3.8V. Use a voltage regulator or level shifters when interfacing with 5V systems.
Q: What is the maximum range of the RFM12B?
A: The range depends on the antenna design, output power, and environmental conditions. Typically, it can achieve up to 300 meters in open space.
Q: Is the RFM12B compatible with the Arduino?
A: Yes, the RFM12B can be easily interfaced with Arduino boards using the SPI interface.
Q: Can I use multiple RFM12B modules in the same network?
A: Yes, the RFM12B supports addressing and can be configured for multi-node communication.
This concludes the documentation for the RFM12B Transceiver DIP Package.