SlideShare a Scribd company logo
1 / 51
Local Connectivity
nRF24L01+
Eueung Mulyana
https://eueung.github.io/012017/nrf24
CodeLabs | Attribution-ShareAlike CC BY-SA
Outline
Introduction
Getting Started - Preparation
Getting Started - Code & Play
Simple Remote Control
Gateway
2 / 51
3 / 51
Introduction
4 / 51
5 / 51
nRF24L01+
nRF24L01+ is a highly integrated, ultra
low power (ULP) 2Mbps RF
transceiver IC for the 2.4GHz ISM
(Industrial, Scienti c and Medical)
band 2.400 - 2.4835GHz.
The Nordic nRF24L01+ integrates a complete 2.4GHz RF
transceiver, RF synthesizer, and baseband logic including the
hardware protocol accelerator (Enhanced ShockBurst)
supporting a high-speed SPI interface for the application
controller.
With peak RX/TX currents lower than 14mA, a sub uA power
down mode, advanced power management, and a 1.9 to 3.6V
supply range, the nRF24L01+ provides a true ULP solution
enabling months to years of battery life from coin cell or AA/AAA
batteries.
Ref: Nordic Semiconductor
6 / 51
nRF24L01+
1. ISM Frequency Band at 2.400 - 2.4835 GHz (Spacing at 1 or
2 MHz, GFSK)
2. 126 RF Channels
3. Air Data Rate Con gurable to 2 Mbps (Options: 250 kbps, 1
Mbps)
4. 4-Pin Hardware SPI
5. 5V Tolerant Inputs
6. 6 Data Pipe MultiCeiver for 1:6 star networks
Notes: Power still at 3.3V!
Pin Map
7 / 51
Important Notes
Radio is sensitive to Noises! Make sure that the circuit (wire,
solder, etc.) is stable.
Anything uxtuates is bad!
8 / 51
Preparation
Getting Started
9 / 51
This setup is for demo purpose only. Can be any MCUs.
10 / 51
Getting
Started
Arduino IDE, NodeMCU &
Nano
1. Install RF24 Library
2. Prepare the First Node - NodeMCU
3. Prepare the Second Node - Arduino Nano
RF24 Library
11 / 51
RF24 Library
12 / 51
First Node - NodeMCU
13 / 51
First Node - NodeMCU 14 / 51
Second Node - Nano
15 / 51
Second Node - Nano 16 / 51
Code & Play
Getting Started
17 / 51
Simple Transmit & Receive
NodeMCU - Transmit | Nano - Receive
Ref: Example Sketches
18 / 51
#include <SPI.h>
#include "nRF24L01.h"
#include "RF24.h"
RF24 myRadio (2, 15);
byte addresses[][6] = {"1Node"};
int dataTransmitted;
void setup()
{
Serial.begin(115200);
delay(1000);
Serial.println(F("RF24/Simple Transmit data Test"));
dataTransmitted = 100;
myRadio.begin();
myRadio.setChannel(108);
myRadio.setPALevel(RF24_PA_MIN);
myRadio.openWritingPipe( addresses[0]);
delay(1000);
}
void loop()
{
myRadio.write( &dataTransmitted, sizeof(dataTransmitted) );
Serial.print(F("Data Transmitted = "));
Serial.print(dataTransmitted);
Serial.println(F(" No Acknowledge expected"));
dataTransmitted = dataTransmitted + 1;
delay(500);
}
19 / 51
NodeMCU
20 / 51
NodeMCU
Serial
1384, room 16
tail 8
chksum
Data Transmitted = 100 No Acknowledge expected
Data Transmitted = 101 No Acknowledge expected
Data Transmitted = 102 No Acknowledge expected
Data Transmitted = 103 No Acknowledge expected
Data Transmitted = 104 No Acknowledge expected
Data Transmitted = 105 No Acknowledge expected
...
#include <SPI.h>
#include "nRF24L01.h"
#include "RF24.h"
RF24 myRadio (7, 8);
byte addresses[][6] = {"1Node"};
int dataReceived;
void setup()
{
Serial.begin(115200);
delay(1000);
Serial.println(F("RF24/Simple Receive data Test"));
myRadio.begin();
myRadio.setChannel(108);
myRadio.setPALevel(RF24_PA_MIN);
myRadio.openReadingPipe(1, addresses[0]);
myRadio.startListening();
}
void loop()
{
if (myRadio.available())
{
while (myRadio.available())
{
myRadio.read( &dataReceived, sizeof(dataReceived) );
}
Serial.print("Data received = ");
Serial.println(dataReceived);
}
}
21 / 51
Nano
22 / 51
Nano
Serial
RF24/Simple Receive data Test
Data received = 100
Data received = 101
Data received = 102
Data received = 103
Data received = 104
Data received = 105
...
RF24 Sample Code
23 / 51
RF24 Sample Code - GettingStarted
24 / 51
#include <SPI.h>
#include "nRF24L01.h"
#include "RF24.h"
byte addresses[][6] = {"1Node","2Node"};
RF24 radio(2,15);
bool radioNumber = 0;
bool role = 1;
/**********************************************************/
void setup() {
Serial.begin(115200);
Serial.println(F("RF24/examples/GettingStarted"));
Serial.println(F("*** PRESS 'R' to begin receiving from the other node"));
radio.begin();
radio.setChannel(108);
radio.setPALevel(RF24_PA_MIN);
if(radioNumber){
radio.openWritingPipe(addresses[1]);
radio.openReadingPipe(1,addresses[0]);
}else{
radio.openWritingPipe(addresses[0]);
radio.openReadingPipe(1,addresses[1]);
}
radio.startListening();
}
void loop() {
/****************** Ping Out Role ***************************/
if (role == 1) {
radio.stopListening();
Serial.println(F("Now sending"));
unsigned long start_time = micros();
//radio.write( &start_time, sizeof(unsigned long));
if (!radio.write( &start_time, sizeof(unsigned long) )){
Serial.println(F("failed")); 25 / 51
NodeMCU
26 / 51
NodeMCU
Serial
^$#%$#@*&%)# Why??
Nevermind for now!
Unplug NodeMCU, Plug-In Nano ..
Now sending
failed
Failed, response timed out.
Now sending
failed
Failed, response timed out.
Now sending
failed
Failed, response timed out.
Now sending
failed
Failed, response timed out.
Now sending
failed
Failed, response timed out.
Now sending
failed
Failed, response timed out.
...
#include <SPI.h>
#include "nRF24L01.h"
#include "RF24.h"
byte addresses[][6] = {"1Node","2Node"};
RF24 radio(7,8);
bool radioNumber = 1;
bool role = 0;
/**********************************************************/
void setup() {
Serial.begin(115200);
Serial.println(F("RF24/examples/GettingStarted"));
Serial.println(F("*** PRESS 'T' to begin transmitting to the other node"));
radio.begin();
radio.setChannel(108);
radio.setPALevel(RF24_PA_MIN);
if(radioNumber){
radio.openWritingPipe(addresses[1]);
radio.openReadingPipe(1,addresses[0]);
}else{
radio.openWritingPipe(addresses[0]);
radio.openReadingPipe(1,addresses[1]);
}
radio.startListening();
}
void loop() {
...
...
}
27 / 51
Nano
28 / 51
Nano
Serial
Get Back to NodeMCU, Switch It On!
RF24/examples/GettingStarted
** PRESS 'T' to begin transmitting to the other node
# After NodeMCU Switched ON
Sent response 9284083
Sent response 10286475
Sent response 11288847
Sent response 12291268
Sent response 13293653
...
29 / 51
NodeMCU
Serial - Take 2
Find Another Serial Console..
Now It Looks Good.. Explain!
Now sending
Sent 18612291, Got response 18612291, Round-trip delay 1828 microseconds
Now sending
Sent 19614686, Got response 19614686, Round-trip delay 1840 microseconds
Now sending
Sent 20617552, Got response 20617552, Round-trip delay 1803 microseconds
Now sending
Sent 21619866, Got response 21619866, Round-trip delay 1800 microseconds
Now sending
Sent 22622153, Got response 22622153, Round-trip delay 1806 microseconds
Now sending
Sent 23624535, Got response 23624535, Round-trip delay 1840 microseconds
...
Simple Remote Control
30 / 51
NodeMCU - Remote Controller 31 / 51
Nano - Local Controller 32 / 51
Simple Remote Control
33 / 51
#include <SPI.h>
#include "nRF24L01.h"
#include "RF24.h"
RF24 myRadio (2, 15);
const int SW1 = 5;
byte addresses[][6] = {"1Node"};
int dataTransmitted;
int button;
void setup()
{
pinMode(SW1, INPUT);
dataTransmitted = 10;
button = 0;
Serial.begin(115200);
delay(1000);
myRadio.begin();
myRadio.setChannel(108);
myRadio.setPALevel(RF24_PA_MIN);
myRadio.openWritingPipe( addresses[0]);
delay(1000);
}
void loop()
{
int newButton = digitalRead(SW1);
if (newButton != button) {
button = newButton;
if (button == HIGH){
dataTransmitted = 20;
}
else {
dataTransmitted = 10;
}
myRadio.write( &dataTransmitted, sizeof(dataTransmitted) );
Serial.print(F("Data Transmitted = "));
Serial.println(dataTransmitted);
} 34 / 51
NodeMCU
35 / 51
NodeMCU
Serial
After Some ON-OFFs
1384, room 16
tail 8
chksum
Data Transmitted = 20
Data Transmitted = 10
Data Transmitted = 20
Data Transmitted = 10
Data Transmitted = 20
Data Transmitted = 10
Data Transmitted = 20
#include <SPI.h>
#include "nRF24L01.h"
#include "RF24.h"
RF24 myRadio (7, 8);
const int LED = 2;
byte addresses[][6] = {"1Node"};
int dataReceived;
void setup()
{
pinMode(LED, OUTPUT);
Serial.begin(115200);
delay(1000);
myRadio.begin();
myRadio.setChannel(108);
myRadio.setPALevel(RF24_PA_MIN);
myRadio.openReadingPipe(1, addresses[0]);
myRadio.startListening();
}
void loop()
{
if (myRadio.available())
{
while (myRadio.available())
{
myRadio.read( &dataReceived, sizeof(dataReceived) );
}
Serial.print("Data received = ");
Serial.println(dataReceived);
if (dataReceived == 10) {
digitalWrite(LED, LOW);
} else {
digitalWrite(LED, HIGH);
}
}
} 36 / 51
Nano
37 / 51
Nano
Serial
After Some ON-OFFs
Data received = 20
Data received = 10
Data received = 20
Data received = 10
Data received = 20
Data received = 10
Data received = 20
Data received = 10
Data received = 20
Data received = 10
Simple Remote Control
38 / 51
Nano - Attach a Device 39 / 51
Nano - Attach a Device
40 / 51
Connecting to Blynk Cloud
Gateway
41 / 51
Notes
This is only an example of integration of local-connected sensors
and actuators to other (cloud-based) services. This is applicable
not only for Blynk or Firebase, but also for other services.
42 / 51
#include <SPI.h>
#include "nRF24L01.h"
#include "RF24.h"
#include <ESP8266WiFi.h>
#include <BlynkSimpleEsp8266.h>
RF24 myRadio (2, 15);
const int SW1 = 5;
byte addresses[][6] = {"1Node"};
int dataTransmitted;
int button;
char auth[] = "c5d0dea217cd49539d7bed14d1234567";
char ssid[] = "emAP-01";
char pass[] = "1010101010";
BLYNK_WRITE(V1)
{
int pinValue = param.asInt();
if (pinValue == HIGH){
dataTransmitted = 20;
}
else {
dataTransmitted = 10;
}
myRadio.write( &dataTransmitted, sizeof(dataTransmitted) );
Serial.print(F("pinValue = "));
Serial.println(pinValue);
Serial.print(F("Data Transmitted = "));
Serial.println(dataTransmitted);
}
void setup()
{
Serial.begin(115200);
Blynk.begin(auth, ssid, pass);
delay(1000);
pinMode(SW1, INPUT); 43 / 51
NodeMCU
Blynk Button with Virtual Pin V1 44 / 51
45 / 51
NodeMCU
Serial
After Some ON-OFFs via Physical
Button and Blynk Virtual Button
1384, room 16
Data Transmitted = 20
Data Transmitted = 10
pinValue = 1
Data Transmitted = 20
pinValue = 0
Data Transmitted = 10
pinValue = 1
Data Transmitted = 20
pinValue = 0
Data Transmitted = 10
pinValue = 1
Data Transmitted = 20
pinValue = 0
Data Transmitted = 10
pinValue = 1
Data Transmitted = 20
Data Transmitted = 20
Data Transmitted = 10
pinValue = 0
Data Transmitted = 10
Data Transmitted = 20
pinValue = 1
Data Transmitted = 20
pinValue = 0
Data Transmitted = 10
Data Transmitted = 10
Refs/Resources
46 / 51
Refs/Resources
1. Nordic Semiconductor
2. Example Sketches @arduino-info
3. Connecting the Radio | MySensors
4. nRF24/RF24: Optimized fork of nRF24L01 for Arduino & Raspberry Pi/Linux Devices
47 / 51
NodeMCU V1.0 Pin Map
48 / 51
Nano V3.0 Pin Map
49 / 51
Nano V3.0 Pin Map (?) 50 / 51
51 / 51
ENDEueung Mulyana
https://eueung.github.io/012017/nrf24
CodeLabs | Attribution-ShareAlike CC BY-SA

More Related Content

What's hot (20)

PPT
W10: Interrupts
Daniel Roggen
 
PPTX
Lcd module interface with xilinx software using verilog
sumedh23
 
PDF
LinuxCNC 入門簡介
roboard
 
PPT
Audio led bargraph equalizer
douglaslyon
 
PPT
SAS (Secure Active Switch)
Security Date
 
PDF
Digital system design lab manual
Santhosh Poralu
 
PDF
Mobile Development For Arduino 201 - ConnectTech
stable|kernel
 
PDF
IT6712 lab manual
Madhu Amarnath
 
ODP
FPGA Tutorial - LCD Interface
Politeknik Elektronika Negeri Surabaya
 
PPTX
37471656 interrupts
tt_aljobory
 
DOC
FINISHED_CODE
Jeremy Forczyk
 
DOCX
Standard cells library design
Bharat Biyani
 
PPT
B tech Final Year Projects & Embedded Systems Training
Technogroovy India
 
PDF
Dsd lab Practical File
Soumya Behera
 
PDF
8051
janice_tyl
 
DOCX
codings related to avr micro controller
Syed Ghufran Hassan
 
PPTX
Cisco IOS shellcode: All-in-one
DefconRussia
 
DOC
Network security Lab manual
Vivek Kumar Sinha
 
PDF
A meta model supporting both hardware and smalltalk-based execution of FPGA c...
ESUG
 
W10: Interrupts
Daniel Roggen
 
Lcd module interface with xilinx software using verilog
sumedh23
 
LinuxCNC 入門簡介
roboard
 
Audio led bargraph equalizer
douglaslyon
 
SAS (Secure Active Switch)
Security Date
 
Digital system design lab manual
Santhosh Poralu
 
Mobile Development For Arduino 201 - ConnectTech
stable|kernel
 
IT6712 lab manual
Madhu Amarnath
 
FPGA Tutorial - LCD Interface
Politeknik Elektronika Negeri Surabaya
 
37471656 interrupts
tt_aljobory
 
FINISHED_CODE
Jeremy Forczyk
 
Standard cells library design
Bharat Biyani
 
B tech Final Year Projects & Embedded Systems Training
Technogroovy India
 
Dsd lab Practical File
Soumya Behera
 
codings related to avr micro controller
Syed Ghufran Hassan
 
Cisco IOS shellcode: All-in-one
DefconRussia
 
Network security Lab manual
Vivek Kumar Sinha
 
A meta model supporting both hardware and smalltalk-based execution of FPGA c...
ESUG
 

Similar to Connectivity for Local Sensors and Actuators Using nRF24L01+ (20)

PDF
Design and build a wireless transceiver using nrf24l01p single chip 2.4g hz
Ehsan Izadi
 
PPTX
Introduction to Node MCU
Amarjeetsingh Thakur
 
PDF
NodeMCU 0.9 Manual using Arduino IDE
Subhadra Sundar Chakraborty
 
PDF
NodeMCU with Blynk and Firebase
Eueung Mulyana
 
PPT
Arduino Meetup with Sonar and 433Mhz Radios
roadster43
 
PDF
IOT REPORT a Report on subject of IOT under VTU curriculum
sauravstudy20
 
PPTX
Hand gesture controlled robot with arduino
AnindyaAdhikary3
 
PDF
6. TinyOS_2.pdf
Jesus Cordero
 
PDF
How to use nRF24L01 module with Arduino
CircuitDigest
 
PDF
Hardware hacking for software people
Dobrica Pavlinušić
 
PDF
Nrf24l01 tutorial 0
Khanh Le
 
PPTX
Final Presentation - Edan&Itzik
itzik cohen
 
PDF
Kamery, światło, akcja!
Matthias Hryniszak
 
PDF
Esp8266 v12
handson28
 
PPTX
Earthquake_Early_warning_system.pptx
JohanJai
 
PDF
NodeMCU ESP8266 workshop 1
Andy Gelme
 
PPTX
Advanced Arduino Programming for Communications.pptx
fizarcse
 
PDF
Webshield internet of things
Raghav Shetty
 
PPTX
Attendance System using ESP8266(Wi-Fi) with MySQL
Sanjay Kumar
 
PDF
Gaztea Tech Robotica 2016
Svet Ivantchev
 
Design and build a wireless transceiver using nrf24l01p single chip 2.4g hz
Ehsan Izadi
 
Introduction to Node MCU
Amarjeetsingh Thakur
 
NodeMCU 0.9 Manual using Arduino IDE
Subhadra Sundar Chakraborty
 
NodeMCU with Blynk and Firebase
Eueung Mulyana
 
Arduino Meetup with Sonar and 433Mhz Radios
roadster43
 
IOT REPORT a Report on subject of IOT under VTU curriculum
sauravstudy20
 
Hand gesture controlled robot with arduino
AnindyaAdhikary3
 
6. TinyOS_2.pdf
Jesus Cordero
 
How to use nRF24L01 module with Arduino
CircuitDigest
 
Hardware hacking for software people
Dobrica Pavlinušić
 
Nrf24l01 tutorial 0
Khanh Le
 
Final Presentation - Edan&Itzik
itzik cohen
 
Kamery, światło, akcja!
Matthias Hryniszak
 
Esp8266 v12
handson28
 
Earthquake_Early_warning_system.pptx
JohanJai
 
NodeMCU ESP8266 workshop 1
Andy Gelme
 
Advanced Arduino Programming for Communications.pptx
fizarcse
 
Webshield internet of things
Raghav Shetty
 
Attendance System using ESP8266(Wi-Fi) with MySQL
Sanjay Kumar
 
Gaztea Tech Robotica 2016
Svet Ivantchev
 
Ad

More from Eueung Mulyana (20)

PDF
FGD Big Data
Eueung Mulyana
 
PDF
Hyper-Connectivity and Data Proliferation - Ecosystem Perspective
Eueung Mulyana
 
PDF
Industry 4.0 And Beyond The A.I* For Surviving A Tech-Accelerated World
Eueung Mulyana
 
PDF
Blockchain Introduction
Eueung Mulyana
 
PDF
Bringing Automation to the Classroom: A ChatOps-Based Approach
Eueung Mulyana
 
PDF
FinTech & Cryptocurrency Introduction
Eueung Mulyana
 
PDF
Open Source Networking Overview
Eueung Mulyana
 
PDF
ONOS SDN Controller - Clustering Tests & Experiments
Eueung Mulyana
 
PDF
Open stack pike-devstack-tutorial
Eueung Mulyana
 
PDF
Basic onos-tutorial
Eueung Mulyana
 
PDF
ONOS SDN Controller - Introduction
Eueung Mulyana
 
PDF
OpenDaylight SDN Controller - Introduction
Eueung Mulyana
 
PDF
Mininet Basics
Eueung Mulyana
 
PDF
Android Programming Basics
Eueung Mulyana
 
PDF
Cloud Computing: Overview and Examples
Eueung Mulyana
 
PDF
Connected Things, IoT and 5G
Eueung Mulyana
 
PDF
Trends and Enablers - Connected Services and Cloud Computing
Eueung Mulyana
 
PDF
Digital Ecosystems - Connected Services and Cloud Computing
Eueung Mulyana
 
PDF
Services Convergence - Connected Services and Cloud Computing
Eueung Mulyana
 
PDF
Models and Architecture - Connected Services and Cloud Computing
Eueung Mulyana
 
FGD Big Data
Eueung Mulyana
 
Hyper-Connectivity and Data Proliferation - Ecosystem Perspective
Eueung Mulyana
 
Industry 4.0 And Beyond The A.I* For Surviving A Tech-Accelerated World
Eueung Mulyana
 
Blockchain Introduction
Eueung Mulyana
 
Bringing Automation to the Classroom: A ChatOps-Based Approach
Eueung Mulyana
 
FinTech & Cryptocurrency Introduction
Eueung Mulyana
 
Open Source Networking Overview
Eueung Mulyana
 
ONOS SDN Controller - Clustering Tests & Experiments
Eueung Mulyana
 
Open stack pike-devstack-tutorial
Eueung Mulyana
 
Basic onos-tutorial
Eueung Mulyana
 
ONOS SDN Controller - Introduction
Eueung Mulyana
 
OpenDaylight SDN Controller - Introduction
Eueung Mulyana
 
Mininet Basics
Eueung Mulyana
 
Android Programming Basics
Eueung Mulyana
 
Cloud Computing: Overview and Examples
Eueung Mulyana
 
Connected Things, IoT and 5G
Eueung Mulyana
 
Trends and Enablers - Connected Services and Cloud Computing
Eueung Mulyana
 
Digital Ecosystems - Connected Services and Cloud Computing
Eueung Mulyana
 
Services Convergence - Connected Services and Cloud Computing
Eueung Mulyana
 
Models and Architecture - Connected Services and Cloud Computing
Eueung Mulyana
 
Ad

Recently uploaded (20)

PDF
Smart Trailers 2025 Update with History and Overview
Paul Menig
 
PDF
Empower Inclusion Through Accessible Java Applications
Ana-Maria Mihalceanu
 
PPTX
✨Unleashing Collaboration: Salesforce Channels & Community Power in Patna!✨
SanjeetMishra29
 
PDF
Log-Based Anomaly Detection: Enhancing System Reliability with Machine Learning
Mohammed BEKKOUCHE
 
PPT
Interview paper part 3, It is based on Interview Prep
SoumyadeepGhosh39
 
PDF
CIFDAQ Market Insights for July 7th 2025
CIFDAQ
 
PDF
Exolore The Essential AI Tools in 2025.pdf
Srinivasan M
 
PDF
Using FME to Develop Self-Service CAD Applications for a Major UK Police Force
Safe Software
 
PDF
Newgen Beyond Frankenstein_Build vs Buy_Digital_version.pdf
darshakparmar
 
PDF
Building Real-Time Digital Twins with IBM Maximo & ArcGIS Indoors
Safe Software
 
PDF
Fl Studio 24.2.2 Build 4597 Crack for Windows Free Download 2025
faizk77g
 
PDF
CIFDAQ Token Spotlight for 9th July 2025
CIFDAQ
 
PDF
Windsurf Meetup Ottawa 2025-07-12 - Planning Mode at Reliza.pdf
Pavel Shukhman
 
PDF
Chris Elwell Woburn, MA - Passionate About IT Innovation
Chris Elwell Woburn, MA
 
PDF
Python basic programing language for automation
DanialHabibi2
 
PDF
Transcript: New from BookNet Canada for 2025: BNC BiblioShare - Tech Forum 2025
BookNet Canada
 
PDF
HubSpot Main Hub: A Unified Growth Platform
Jaswinder Singh
 
PDF
DevBcn - Building 10x Organizations Using Modern Productivity Metrics
Justin Reock
 
PPTX
OpenID AuthZEN - Analyst Briefing July 2025
David Brossard
 
PDF
How Startups Are Growing Faster with App Developers in Australia.pdf
India App Developer
 
Smart Trailers 2025 Update with History and Overview
Paul Menig
 
Empower Inclusion Through Accessible Java Applications
Ana-Maria Mihalceanu
 
✨Unleashing Collaboration: Salesforce Channels & Community Power in Patna!✨
SanjeetMishra29
 
Log-Based Anomaly Detection: Enhancing System Reliability with Machine Learning
Mohammed BEKKOUCHE
 
Interview paper part 3, It is based on Interview Prep
SoumyadeepGhosh39
 
CIFDAQ Market Insights for July 7th 2025
CIFDAQ
 
Exolore The Essential AI Tools in 2025.pdf
Srinivasan M
 
Using FME to Develop Self-Service CAD Applications for a Major UK Police Force
Safe Software
 
Newgen Beyond Frankenstein_Build vs Buy_Digital_version.pdf
darshakparmar
 
Building Real-Time Digital Twins with IBM Maximo & ArcGIS Indoors
Safe Software
 
Fl Studio 24.2.2 Build 4597 Crack for Windows Free Download 2025
faizk77g
 
CIFDAQ Token Spotlight for 9th July 2025
CIFDAQ
 
Windsurf Meetup Ottawa 2025-07-12 - Planning Mode at Reliza.pdf
Pavel Shukhman
 
Chris Elwell Woburn, MA - Passionate About IT Innovation
Chris Elwell Woburn, MA
 
Python basic programing language for automation
DanialHabibi2
 
Transcript: New from BookNet Canada for 2025: BNC BiblioShare - Tech Forum 2025
BookNet Canada
 
HubSpot Main Hub: A Unified Growth Platform
Jaswinder Singh
 
DevBcn - Building 10x Organizations Using Modern Productivity Metrics
Justin Reock
 
OpenID AuthZEN - Analyst Briefing July 2025
David Brossard
 
How Startups Are Growing Faster with App Developers in Australia.pdf
India App Developer
 

Connectivity for Local Sensors and Actuators Using nRF24L01+

  • 1. 1 / 51 Local Connectivity nRF24L01+ Eueung Mulyana https://eueung.github.io/012017/nrf24 CodeLabs | Attribution-ShareAlike CC BY-SA
  • 2. Outline Introduction Getting Started - Preparation Getting Started - Code & Play Simple Remote Control Gateway 2 / 51
  • 5. 5 / 51 nRF24L01+ nRF24L01+ is a highly integrated, ultra low power (ULP) 2Mbps RF transceiver IC for the 2.4GHz ISM (Industrial, Scienti c and Medical) band 2.400 - 2.4835GHz. The Nordic nRF24L01+ integrates a complete 2.4GHz RF transceiver, RF synthesizer, and baseband logic including the hardware protocol accelerator (Enhanced ShockBurst) supporting a high-speed SPI interface for the application controller. With peak RX/TX currents lower than 14mA, a sub uA power down mode, advanced power management, and a 1.9 to 3.6V supply range, the nRF24L01+ provides a true ULP solution enabling months to years of battery life from coin cell or AA/AAA batteries. Ref: Nordic Semiconductor
  • 6. 6 / 51 nRF24L01+ 1. ISM Frequency Band at 2.400 - 2.4835 GHz (Spacing at 1 or 2 MHz, GFSK) 2. 126 RF Channels 3. Air Data Rate Con gurable to 2 Mbps (Options: 250 kbps, 1 Mbps) 4. 4-Pin Hardware SPI 5. 5V Tolerant Inputs 6. 6 Data Pipe MultiCeiver for 1:6 star networks Notes: Power still at 3.3V!
  • 8. Important Notes Radio is sensitive to Noises! Make sure that the circuit (wire, solder, etc.) is stable. Anything uxtuates is bad! 8 / 51
  • 10. This setup is for demo purpose only. Can be any MCUs. 10 / 51 Getting Started Arduino IDE, NodeMCU & Nano 1. Install RF24 Library 2. Prepare the First Node - NodeMCU 3. Prepare the Second Node - Arduino Nano
  • 13. First Node - NodeMCU 13 / 51
  • 14. First Node - NodeMCU 14 / 51
  • 15. Second Node - Nano 15 / 51
  • 16. Second Node - Nano 16 / 51
  • 17. Code & Play Getting Started 17 / 51
  • 18. Simple Transmit & Receive NodeMCU - Transmit | Nano - Receive Ref: Example Sketches 18 / 51
  • 19. #include <SPI.h> #include "nRF24L01.h" #include "RF24.h" RF24 myRadio (2, 15); byte addresses[][6] = {"1Node"}; int dataTransmitted; void setup() { Serial.begin(115200); delay(1000); Serial.println(F("RF24/Simple Transmit data Test")); dataTransmitted = 100; myRadio.begin(); myRadio.setChannel(108); myRadio.setPALevel(RF24_PA_MIN); myRadio.openWritingPipe( addresses[0]); delay(1000); } void loop() { myRadio.write( &dataTransmitted, sizeof(dataTransmitted) ); Serial.print(F("Data Transmitted = ")); Serial.print(dataTransmitted); Serial.println(F(" No Acknowledge expected")); dataTransmitted = dataTransmitted + 1; delay(500); } 19 / 51 NodeMCU
  • 20. 20 / 51 NodeMCU Serial 1384, room 16 tail 8 chksum Data Transmitted = 100 No Acknowledge expected Data Transmitted = 101 No Acknowledge expected Data Transmitted = 102 No Acknowledge expected Data Transmitted = 103 No Acknowledge expected Data Transmitted = 104 No Acknowledge expected Data Transmitted = 105 No Acknowledge expected ...
  • 21. #include <SPI.h> #include "nRF24L01.h" #include "RF24.h" RF24 myRadio (7, 8); byte addresses[][6] = {"1Node"}; int dataReceived; void setup() { Serial.begin(115200); delay(1000); Serial.println(F("RF24/Simple Receive data Test")); myRadio.begin(); myRadio.setChannel(108); myRadio.setPALevel(RF24_PA_MIN); myRadio.openReadingPipe(1, addresses[0]); myRadio.startListening(); } void loop() { if (myRadio.available()) { while (myRadio.available()) { myRadio.read( &dataReceived, sizeof(dataReceived) ); } Serial.print("Data received = "); Serial.println(dataReceived); } } 21 / 51 Nano
  • 22. 22 / 51 Nano Serial RF24/Simple Receive data Test Data received = 100 Data received = 101 Data received = 102 Data received = 103 Data received = 104 Data received = 105 ...
  • 24. RF24 Sample Code - GettingStarted 24 / 51
  • 25. #include <SPI.h> #include "nRF24L01.h" #include "RF24.h" byte addresses[][6] = {"1Node","2Node"}; RF24 radio(2,15); bool radioNumber = 0; bool role = 1; /**********************************************************/ void setup() { Serial.begin(115200); Serial.println(F("RF24/examples/GettingStarted")); Serial.println(F("*** PRESS 'R' to begin receiving from the other node")); radio.begin(); radio.setChannel(108); radio.setPALevel(RF24_PA_MIN); if(radioNumber){ radio.openWritingPipe(addresses[1]); radio.openReadingPipe(1,addresses[0]); }else{ radio.openWritingPipe(addresses[0]); radio.openReadingPipe(1,addresses[1]); } radio.startListening(); } void loop() { /****************** Ping Out Role ***************************/ if (role == 1) { radio.stopListening(); Serial.println(F("Now sending")); unsigned long start_time = micros(); //radio.write( &start_time, sizeof(unsigned long)); if (!radio.write( &start_time, sizeof(unsigned long) )){ Serial.println(F("failed")); 25 / 51 NodeMCU
  • 26. 26 / 51 NodeMCU Serial ^$#%$#@*&%)# Why?? Nevermind for now! Unplug NodeMCU, Plug-In Nano .. Now sending failed Failed, response timed out. Now sending failed Failed, response timed out. Now sending failed Failed, response timed out. Now sending failed Failed, response timed out. Now sending failed Failed, response timed out. Now sending failed Failed, response timed out. ...
  • 27. #include <SPI.h> #include "nRF24L01.h" #include "RF24.h" byte addresses[][6] = {"1Node","2Node"}; RF24 radio(7,8); bool radioNumber = 1; bool role = 0; /**********************************************************/ void setup() { Serial.begin(115200); Serial.println(F("RF24/examples/GettingStarted")); Serial.println(F("*** PRESS 'T' to begin transmitting to the other node")); radio.begin(); radio.setChannel(108); radio.setPALevel(RF24_PA_MIN); if(radioNumber){ radio.openWritingPipe(addresses[1]); radio.openReadingPipe(1,addresses[0]); }else{ radio.openWritingPipe(addresses[0]); radio.openReadingPipe(1,addresses[1]); } radio.startListening(); } void loop() { ... ... } 27 / 51 Nano
  • 28. 28 / 51 Nano Serial Get Back to NodeMCU, Switch It On! RF24/examples/GettingStarted ** PRESS 'T' to begin transmitting to the other node # After NodeMCU Switched ON Sent response 9284083 Sent response 10286475 Sent response 11288847 Sent response 12291268 Sent response 13293653 ...
  • 29. 29 / 51 NodeMCU Serial - Take 2 Find Another Serial Console.. Now It Looks Good.. Explain! Now sending Sent 18612291, Got response 18612291, Round-trip delay 1828 microseconds Now sending Sent 19614686, Got response 19614686, Round-trip delay 1840 microseconds Now sending Sent 20617552, Got response 20617552, Round-trip delay 1803 microseconds Now sending Sent 21619866, Got response 21619866, Round-trip delay 1800 microseconds Now sending Sent 22622153, Got response 22622153, Round-trip delay 1806 microseconds Now sending Sent 23624535, Got response 23624535, Round-trip delay 1840 microseconds ...
  • 31. NodeMCU - Remote Controller 31 / 51
  • 32. Nano - Local Controller 32 / 51
  • 34. #include <SPI.h> #include "nRF24L01.h" #include "RF24.h" RF24 myRadio (2, 15); const int SW1 = 5; byte addresses[][6] = {"1Node"}; int dataTransmitted; int button; void setup() { pinMode(SW1, INPUT); dataTransmitted = 10; button = 0; Serial.begin(115200); delay(1000); myRadio.begin(); myRadio.setChannel(108); myRadio.setPALevel(RF24_PA_MIN); myRadio.openWritingPipe( addresses[0]); delay(1000); } void loop() { int newButton = digitalRead(SW1); if (newButton != button) { button = newButton; if (button == HIGH){ dataTransmitted = 20; } else { dataTransmitted = 10; } myRadio.write( &dataTransmitted, sizeof(dataTransmitted) ); Serial.print(F("Data Transmitted = ")); Serial.println(dataTransmitted); } 34 / 51 NodeMCU
  • 35. 35 / 51 NodeMCU Serial After Some ON-OFFs 1384, room 16 tail 8 chksum Data Transmitted = 20 Data Transmitted = 10 Data Transmitted = 20 Data Transmitted = 10 Data Transmitted = 20 Data Transmitted = 10 Data Transmitted = 20
  • 36. #include <SPI.h> #include "nRF24L01.h" #include "RF24.h" RF24 myRadio (7, 8); const int LED = 2; byte addresses[][6] = {"1Node"}; int dataReceived; void setup() { pinMode(LED, OUTPUT); Serial.begin(115200); delay(1000); myRadio.begin(); myRadio.setChannel(108); myRadio.setPALevel(RF24_PA_MIN); myRadio.openReadingPipe(1, addresses[0]); myRadio.startListening(); } void loop() { if (myRadio.available()) { while (myRadio.available()) { myRadio.read( &dataReceived, sizeof(dataReceived) ); } Serial.print("Data received = "); Serial.println(dataReceived); if (dataReceived == 10) { digitalWrite(LED, LOW); } else { digitalWrite(LED, HIGH); } } } 36 / 51 Nano
  • 37. 37 / 51 Nano Serial After Some ON-OFFs Data received = 20 Data received = 10 Data received = 20 Data received = 10 Data received = 20 Data received = 10 Data received = 20 Data received = 10 Data received = 20 Data received = 10
  • 39. Nano - Attach a Device 39 / 51
  • 40. Nano - Attach a Device 40 / 51
  • 41. Connecting to Blynk Cloud Gateway 41 / 51
  • 42. Notes This is only an example of integration of local-connected sensors and actuators to other (cloud-based) services. This is applicable not only for Blynk or Firebase, but also for other services. 42 / 51
  • 43. #include <SPI.h> #include "nRF24L01.h" #include "RF24.h" #include <ESP8266WiFi.h> #include <BlynkSimpleEsp8266.h> RF24 myRadio (2, 15); const int SW1 = 5; byte addresses[][6] = {"1Node"}; int dataTransmitted; int button; char auth[] = "c5d0dea217cd49539d7bed14d1234567"; char ssid[] = "emAP-01"; char pass[] = "1010101010"; BLYNK_WRITE(V1) { int pinValue = param.asInt(); if (pinValue == HIGH){ dataTransmitted = 20; } else { dataTransmitted = 10; } myRadio.write( &dataTransmitted, sizeof(dataTransmitted) ); Serial.print(F("pinValue = ")); Serial.println(pinValue); Serial.print(F("Data Transmitted = ")); Serial.println(dataTransmitted); } void setup() { Serial.begin(115200); Blynk.begin(auth, ssid, pass); delay(1000); pinMode(SW1, INPUT); 43 / 51 NodeMCU
  • 44. Blynk Button with Virtual Pin V1 44 / 51
  • 45. 45 / 51 NodeMCU Serial After Some ON-OFFs via Physical Button and Blynk Virtual Button 1384, room 16 Data Transmitted = 20 Data Transmitted = 10 pinValue = 1 Data Transmitted = 20 pinValue = 0 Data Transmitted = 10 pinValue = 1 Data Transmitted = 20 pinValue = 0 Data Transmitted = 10 pinValue = 1 Data Transmitted = 20 pinValue = 0 Data Transmitted = 10 pinValue = 1 Data Transmitted = 20 Data Transmitted = 20 Data Transmitted = 10 pinValue = 0 Data Transmitted = 10 Data Transmitted = 20 pinValue = 1 Data Transmitted = 20 pinValue = 0 Data Transmitted = 10 Data Transmitted = 10
  • 47. Refs/Resources 1. Nordic Semiconductor 2. Example Sketches @arduino-info 3. Connecting the Radio | MySensors 4. nRF24/RF24: Optimized fork of nRF24L01 for Arduino & Raspberry Pi/Linux Devices 47 / 51
  • 48. NodeMCU V1.0 Pin Map 48 / 51
  • 49. Nano V3.0 Pin Map 49 / 51
  • 50. Nano V3.0 Pin Map (?) 50 / 51
  • 51. 51 / 51 ENDEueung Mulyana https://eueung.github.io/012017/nrf24 CodeLabs | Attribution-ShareAlike CC BY-SA