User Tools

Site Tools


digispark:tutorials:pronrf

This is an old revision of the document!


The nRF shield allows the Digispark Pro to communicate with the popular RF24 modules. The shield includes a 3.3 Volt regulator to power the module and passes through the Digispark Pro's SPI pins to command the radio. The module also includes filtering capacitors to make sure that the radio sees a consistent 3.3 V while operating.

Pins:

Assembled:

Stacked Up and Ready to Go:

Dependencies:

Use the RF24 library to control the module. You can download the latest version here. Copy the contents of the zip to your libraries directory.

Sketches:

You'll need two Digispark Pros with nRF modules to execute these sketches. Select one Digispark to be the sender and load this code:

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

RF24 radio(9,12);
const int LED = 1;

const uint64_t pipes[2] = { 0xF0F0F0F0E1LL, 0xF0F0F0F0D2LL };

// The various roles supported by this sketch
typedef enum { role_ping_out = 1, role_pong_back } role_e;

// The role of the current running sketch
role_e role = role_pong_back;

void setup() {
  // put your setup code here, to run once:
  pinMode(LED, OUTPUT);
  
  digitalWrite(LED, LOW);
  radio.begin();
  radio.setRetries(15, 15);
  radio.openWritingPipe(pipes[1]);
  digitalWrite(LED, HIGH);
}

void loop() {
  unsigned long value = 2000;
  bool ok = radio.write(&value, sizeof(unsigned long));
  
  if(ok) {
    digitalWrite(LED, LOW);
    delay(2000);
    digitalWrite(LED, HIGH);
  }
}

The other Digispark should be the receiver. Upload this code:

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

RF24 radio(9,12);
const int LED = 1;

const uint64_t pipes[2] = { 0xF0F0F0F0E1LL, 0xF0F0F0F0D2LL };

// The various roles supported by this sketch
typedef enum { role_ping_out = 1, role_pong_back } role_e;

// The role of the current running sketch
role_e role = role_pong_back;

void setup() {
  // put your setup code here, to run once:
  pinMode(LED, OUTPUT);
  
  digitalWrite(LED, LOW);
  radio.begin();
  radio.setRetries(15, 15);
  radio.openReadingPipe(1, pipes[1]);
  radio.startListening();
  digitalWrite(LED, HIGH);
}

void loop() {
  if(radio.available()) {
    unsigned long value;
    bool done = false;
    while(!done) {
      done = radio.read(&value, sizeof(unsigned long));
      delay(20);
    }
    
    digitalWrite(LED, LOW);
    delay(1000);
    digitalWrite(LED, HIGH);
  }
}

Now, when both units are powered up the LEDs on both should start blinking. If either is unplugged then the LED on the other will revert to solid on.

digispark/tutorials/pronrf.1416945144.txt.gz · Last modified: 2014/11/25 11:52 by netguy204