Further to my previous post I’ve moved onto using the Raspberry Pi as the receiver.

There’s a lot of incorrect documentation, and even incorrect comments in the libraries, so I thought I’d better note down what I’ve done.

First we need to get the Pi version of the RF24 library from GitHub, so on the Pi:

git clone https://github.com/stanleyseow/RF24.git
cd RF24
cd librf24-rpi/librf24
sudo make install

I couldn’t get the hardware SPI version to work, so stick with librf24 not librf24-bcm.

I then made the following C++ program for the Pi receiver:

#include <cstdlib>
#include <iostream>
#include "../RF24.h"

using namespace std;

// spi device, spi speed, ce gpio pin
RF24 radio("/dev/spidev0.0",8000000,25);

void setup(void)
    // init radio for reading

void loop(void)
    // 32 byte character array is max payload
    char receivePayload[32];
    while (radio.available())
        // read from radio until payload size is reached
        uint8_t len = radio.getDynamicPayloadSize();
        radio.read(receivePayload, len);

        // display payload
        cout << receivePayload << endl;

int main(int argc, char** argv) 

    return 0;

And compile using:

g++ -Wall -Ofast -mfpu=vfp -mfloat-abi=hard -march=armv6zk -mtune=arm1176jzf-s -L../librf24/  -lrf24 pi_rf24ping_rx.cpp -o pi_rf24ping_rx```

Use the following code (slightly modified from last time) on the Arduino transmitter:

#include <SPI.h>
#include <RF24.h>

// ce,csn pins
RF24 radio(9,10);

// init counter
unsigned long count = 0;

void setup(void)
    // init radio for writing on channel 76

void loop(void)
    // 32 bytes is maximum payload
    char outBuffer[32]= "";

    // pad numbers and convert to string

    // transmit and increment the counter
    radio.write(outBuffer, strlen(outBuffer));

    // pause a second

Wire the Pi (rev2) up like this - note the CE pin has to go to GPIO 25, not 22 and not CSN as stated elsewhere:

radio 7 (miso) to gpio9/bcm21
radio 6 (mosi) to gpio10/bcm19
radio 5 (sck)  to gpio11/bcm23
radio 4 (csn)  to gpio8/bcm24
radio 3 (ce)   to gpio25/bcm22
radio 2 (3.3v) to 3.3v
radio 1 (gnd)  to gnd

And on the Arduino (tested on an ATmega328P and Mega2560) like this:

radio 7 (miso) to uno d12 (pin 18) or mega d50
radio 6 (mosi) to uno d11 (pin 17) or mega d51
radio 5 (sck)  to uno d13 (pin 19) or mega d52
radio 4 (csn)  to uno d10 (pin 16) or mega d48
radio 3 (ce)   to uno d9  (pin 15) or mega d49
radio 2 (3.3v) to uno/mega 3.3v
radio 1 (gnd)  to uno/mega gnd

It seems to have the same, or maybe slightly less range than the two Arduino’s, i.e. across the house (through 2 walls) and no further, which is why I’m thinking of buying a couple of these modules with a power amplifier and noise suppression circuit (PA+LNA) and an external 2dB antenna, as apparently they increase the range by up to five times - still 1km is bullshit, but apparently 250m is achievable.

I really wish my USBasp would hurry up and arrive as I’m having real problems uploading sketches to the 3.3v Boarduino with the CP2102A, even with caps+crystals.

Next I need to experiment with 3-4 AA batteries powering the ATmega328P, DS18B20, DHT11, BMP085 and nRF24L01+. 3x AA rechargeables should give about 3.6v, which I could drop to around 3v for the Vcc pin on the RF24 using a 1N4001 diode, the rest are 3.0-5.5v tolerant. The alternative is using 4x AA to give 4.8v with a LM1117T regulator to give the whole circuit a steady 3.3v