Sei sulla pagina 1di 12

let's make

Login | Sign Up
share what you make

 Featured:
 3D Printing Class
 Arduino
 Sewing

With Instructables you can share what you make with the world, and tap into an ever-growing
community of creative experts.

Arduino + nRF24L01: Simple bidirectional


wireless communication
by DanielK82 in arduino
With this project I wanted to establish bidirectional communication between two circuits. To do
so, I used the nRF24L01, which is ultra low power transciever that operates at about 2,4 GHz.

The circuits are very simple and will only do two thigs:

1. turn on a green LED when the circuit is sending a message.


2. turn on a red LED when a message has been received.

This can be used as base for a more complex project. For example, it could easily be expanded to
send complex data streams.

Step 1: Required hardware


Per circuit, you will be needing following elements:

 Arduino board, I will be using an Arduino Nano with the ATmega328 chip.
 nRF24L01 transmitter.
 2 LEDs, one green and one red.
 A button.
 3 Resistors (depends on your LEDs, but probably about 200-1000 Ohm).
 (Optional, but very helpful) Breadboard.

Step 2: Connection
IMPORTANT: You can use the normal 5V digital pins for the input pins of the nRF24L01,
but you must use the 3.3V pin as input power source. If you use 5V instead, you will
probably burn the chip, since 5V is outside of its 1.9 to 3.6V supply range.

The Arduino nano to nRF24L01 pin connection is as follows (note that you may need to connect
it differently if you use a different arduino board, refer to the RadioHead library):

 VCC - 3.3V
 GND - GND
 CE - D8
 CSN - D10
 SCK - D13
 MOSI - D11
 MISO - D12
 IRQ - Not connected

Further, I use D5 for the button, D4 for the red LED and D3 for the green one, each connected
with a 220 Ohm resistor.

To power the arduino boards, you can connect them to a USB port or to a 9V battery (Battery
negative to GND and positive to VIN).

Step 3: Code
Download the RadioHead Library and install it.

Upload this code to each of the arduino boards:

#include <SPI.h>

#include <RH_NRF24.h>

// Singleton instance of the radio driver

RH_NRF24 nrf24;

int greenLed = 3;

int redLed = 4;

int button = 5;

void setup()

Serial.begin(9600);
pinMode(greenLed, OUTPUT);

pinMode(redLed, OUTPUT);

pinMode(button, INPUT);

while (!Serial)

; // wait for serial port to connect. Needed for Leonardo only

if (!nrf24.init())

Serial.println("init failed");

// Defaults after init are 2.402 GHz (channel 2), 2Mbps, 0dBm

if (!nrf24.setChannel(1))

Serial.println("setChannel failed");

if (!nrf24.setRF(RH_NRF24::DataRate2Mbps, RH_NRF24::TransmitPower0dBm))

Serial.println("setRF failed");

void loop()

if (digitalRead(button)) {

//button is pressed, message should be sent, turn the green LED on

digitalWrite(greenLed, HIGH);

// Send a message

uint8_t data[] = "Aloha";

nrf24.send(data, sizeof(data));

nrf24.waitPacketSent();

digitalWrite(greenLed, LOW);

} else {

// Wait for a message

uint8_t buf[RH_NRF24_MAX_MESSAGE_LEN];
uint8_t len = sizeof(buf);

while (nrf24.waitAvailableTimeout(200) && nrf24.recv(buf, &len))

//something was received, turn the right LED on

digitalWrite(redLed, HIGH);

digitalWrite(redLed, LOW);

Step 4: Result

We have a be nice comment policy.


Please be positive and constructive.

CliffordLeeBurton 2 months ago


Hello, thank you for sharing your work. It was very helpful!
How do I read the message in receiver? Tried "Serial.println(buf)" in the while loop but it gives
"call of overloaded println(uint8_t [28]) is ambiguous" ...I want to read and check (compare) the
message on receiver.
Thank you again

MinhT34 6 months ago

can you show me how to read your library?, i want to use another Microcontrollers, thanks
GurielV 7 months ago

can you send me the Library Thanks :)

GurielV GurielV 7 months ago

can't download it sorry

Gyalu1 made it! 10 months ago

Hi, thank you for this instructable.

I made it and learned a lot.

PeterP101 made it! 11 months ago


Great :) thanks

ZipDriveRT 11 months ago

how can we just have open terminal to send any strings? rather than just sending set var strings.
DanielK82 (author) ZipDriveRT 11 months ago

Use the read function ( https://www.arduino.cc/en/Serial/Read) and use the result instead of the
`"aloha"` string. Then, above the line with `//something was received, turn the right LED on`
write `Serial.println(buf)` to print the received data

Dav22 11 months ago


good tut.....thanx

About This Instructable

15,804views

75favorites

License:
Public Domain

DanielK826

More by DanielK82:
FEATURED CHANNELS

Woodworking

Paper

Kitchen Hacks

Puzzles

Laser Cutting

Space

Homesteading

3D Printing

Sewing
Newsletter

Join 2 million + to receive instant DIY inspiration in your inbox.

About Us

 Who We Are
 Advertise
 Contact
 Jobs
 Help

Find Us

 Facebook
 Youtube
 Twitter
 Pinterest
 Google+

Resources

 For Teachers
 Artists in Residence
 Gift Premium Account
 Forums
 Answers
 Sitemap

 Terms of Service|
 Privacy Statement|
 Legal Notices & Trademarks|
 Mobile Site

© 2016 Autodesk, Inc.

Check out our new classes! >>

Potrebbero piacerti anche