Skip to content
Node module for interfacing with HopeRF RFM69 modules on a Raspberry Pi
Branch: master
Clone or download
losttime Get in-use lib committed
Better preparation of payload to be sent.
Better handling of received payload.
More reliable ACKing of messages
Latest commit 71906d3 Dec 16, 2016
Type Name Latest commit message Commit time
Failed to load latest commit information.
.editorconfig Add .editorconfig May 7, 2015
.gitignore Ignore PDFs Feb 9, 2016
.npmignore Added snippet about connecting up RFM69 to the PI Jun 2, 2015
index.js Give names to anonymous functions and expand logging Feb 6, 2016


Node module for interfacing with HopeRF RFM69 modules on a Raspberry Pi.

This module has only been tested on a Raspberry Pi Model B running NodeJS 0.10.28. The module will likely work with other Pis and version of NodeJS, but they have not been officially tested.

Support for other systems (e.g. BeagleBoard) will be considered.


npm install rfm69

If you haven't already enabled SPI on your Raspberry Pi, you'll need to enable the SPI kernel module.

You'll also need to run your Node project with sudo in order to have permission to access the SPI interface. You may be able to modify permissions on your Pi to eliminate the need for sudo, but that has not been tested (more info). Install all your npm packages without sudo (or however you normally do it). Just use sudo to run the project.


First connect following Raspberry PI GPIO pins to the RFM69 radio.

The Gadgetoid Pinout Tool shows the pins for the Raspberry PI. If you're using a RPI compatiable bord the pins will be the same, but you will need to override the interruptPin and resetPin with remapped GPIO pins for your device. This library requires all 8 pins to be connected.

Pin - RPI RFM69
17 - 3.3v 3.3v
18 - BCM24 RESET
20 - GND GND
22 - BCM25 DIO0
24 - CE0 NSS


var RFM69 = require('rfm69');

// configure a module
var rfm69 = new RFM69();

rfm69.onReady = function() {
	// module initialized
	rfm69.listen();  // can receive
rfm69.onMessage = function(buffer) {
	console.log('received message', buffer);

// start up the module

// clean up on shutdown
process.on('SIGINT', function() {


Create a new instance of an rfm69 module (you can have two wired up).

Optionally takes a configuration object with the following optional parameters:

  • encryptionKey string, used as key for encrypting messages. Omitting the encryption key disables encryption (default).
  • highPower boolean, whether or not module is a high power variant (e.g. rfm69HW) (default: false)
  • nodeAddress: int, unique identifier for this transceiver in the group (no default)
  • broadcastAddress int, signifies the group of RF transceivers this module belongs to (no default)
  • spiBus int, bus the RF module is wired to (default: 0 - only option on Pi Model B)
  • spiDevice int, which device the RF module is wired as on the SPI bus (default: 0)
  • interruptPin int, which GPIO pin is wired to DIO0 on the RF module (default: 25)
  • resetPin int, which GPIO pin is wired to RESET on the RF module (default: 24)
  • config string, which message profile to use. Can be default or lowPowerLab (default: default)
  • verbose boolean, extended logging (default: false)
var config = {
	encryptionKey: "sampleEncryptKey",
	highPower: true,
	nodeAddress: 1,
	broadcastAddress: 155,
	verbose: false,
	config: 'lowPowerLab'

var rfm69 = new RFM69(config)


Turn on the RF module and apply its configuration


Tell the module to notify you of incoming messages.

send(string, callback)

Send a series of characters over the RF module. Callback function will be called when the message has been sent. Callback will be passed an error argument if an error is encountered during the send.


Reapply the module's configuration according to the options provided at instantiation.


Disable the RF module and allow the interrupt and reset GPIO pins to be used for other purposes.

Message Profiles

Message profiles allow the RF module to communicate with other RF modules that follow specific message format standards.

The default profile sends exactly the outgoing message you specify and provides the full message body when an incoming message is received.

The lowPowerLab profile formats outgoing messages in accordance with the Arduino libraries provided by LowPowerLab, allowing the Raspberry Pi to communicate with the LowPowerLab Moteino and provide message filtering and message retries. Not yet configured to ACK messages from a Moteino.

Other profiles can be developed an added with a pull-request.

You can’t perform that action at this time.