nRF24L01+ RF Module has small size, which can be intergrated in IoT application. This PCB operates at 2.4GHz, comnunication by SPI protocol, and power is 3.3V
This article will show how to connect it to Arduino Pro mini, make communication between 2 boards.
Hardware needed:
1. Two PCB Arduino Pro mini https://amzn.to/3adqve0
2. Two PCB nRF24L01+ https://amzn.to/2TmFGKP
3. Power 3.3V https://amzn.to/3a4uycq
1. Arduino Pro Mini |
2. nRF24L01+ |
3. Power module 3.3V |
Hardware connection:
Make connection for both Server and Client board.
Software:
There are library call RadioHead which can be download here or here (google share)
After download the library, unzip it, and copy folder RadioHead to Arduino IDE root location (our case is D:\arduino\arduino-1.6.11\libraries\)
Open Arduino IDE, go to File > Examples > RadioHead > nrf24 > nrf24_server
Compile the project and download it to Server board
nrf24_server code
#include <SPI.h> #include <RH_NRF24.h> // Singleton instance of the radio driver RH_NRF24 nrf24; void setup() { Serial.begin(9600); 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 (nrf24.available()) { // Should be a message for us now uint8_t buf[RH_NRF24_MAX_MESSAGE_LEN]; uint8_t len = sizeof(buf); if (nrf24.recv(buf, &len)) { // NRF24::printBuffer("request: ", buf, len); Serial.print("got request: "); Serial.println((char*)buf); // Send a reply uint8_t data[] = "And hello back to you"; nrf24.send(data, sizeof(data)); nrf24.waitPacketSent(); Serial.println("Sent a reply"); } else { Serial.println("recv failed"); } } }
Do it again to open nrf24_client, compile and download for Client board
nrf24_client code
#include <SPI.h> #include <RH_NRF24.h> // Singleton instance of the radio driver RH_NRF24 nrf24; void setup() { Serial.begin(9600); 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() { Serial.println("Sending to nrf24_server"); // Send a message to nrf24_server uint8_t data[] = "Hello World!"; nrf24.send(data, sizeof(data)); nrf24.waitPacketSent(); // Now wait for a reply uint8_t buf[RH_NRF24_MAX_MESSAGE_LEN]; uint8_t len = sizeof(buf); if (nrf24.waitAvailableTimeout(500)) { // Should be a reply message for us now if (nrf24.recv(buf, &len)) { Serial.print("got reply: "); Serial.println((char*)buf); } else { Serial.println("recv failed"); } } else { Serial.println("No reply, is nrf24_server running?"); } delay(400); }
Let power both board (by 3.3V source!), using Serial monitor of Arduino IDE to view feed back. If everything normal, feed back should be as following picture:
atomic_block_start; error
ReplyDeleteHow long does this device work on battery?
ReplyDeleteit depends on battery capacity.
DeleteGreat Article
ReplyDeleteInternet of Things Final Year Project
Final Year Project Centers in Chennai