I’m working on a project which uses arduino pro mini and Nodemcu. Actualy Arduino Pro Mini is sending two values to Nodemcu and in return Nodemcu is sending 1 value back to Arduino Pro Mini using NRF24L01. and then Nodemcu updating the status on server. A pressure sensor is also connected to the Nodemcu.
NodeMcu acts as receiver and Arduino Pro Mini acts as transmitter.
the communication continues only for 5 minutes and then it breaks until i disconnected arduino pro mini from power and plug it again. but I need to be connected until they are in range.
Here is the connection of these modules
Arduino Mini Arduino UNO
Tx Tx
Rx Rx
5v VCC
GND GND
Reset Reset NRF 24L01
9 CE
10 CSN
11 MOSI
12 MISO
13 SCK
VCC 3.3V
GND GND
Code For Arduino Mini
// MasterSwapRoles
#include "Arduino.h"
#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#define CE_PIN 9
#define CSN_PIN 10
int button_pin = A0;
Adafruit_SSD1306 display(-1);
const byte slaveAddress[5] = {'R','x','A','A','A'};
const byte masterAddress[5] = {'T','X','a','a','a'};
RF24 radio(CE_PIN, CSN_PIN); // Create a Radio
struct dataStruct {
short int seat;
short int Button_State;
} myData;
int dataReceived;
bool newData = false;
unsigned long currentMillis;
unsigned long prevMillis;
unsigned long txIntervalMillis = 10; // send once per second
//============
void setup() {
Serial.begin(115200);
// initialize with the I2C addr 0x3C
display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
//display.setCursor(0,0);
// Clear the buffer.
display.clearDisplay();
// Scroll part of the screen
display.setCursor(0,0);
display.setTextSize(1);
display.setTextColor(WHITE);
display.println("AWALAN FOR DESIGN AND ");
// display.setTextColor(WHITE);
display.setCursor(28,14);
display.setTextSize(1);
display.println("PROGRAMMING");
Serial.println("MasterSwapRoles Starting");
pinMode(button_pin, INPUT);
radio.begin();
radio.setChannel(108);
radio.setDataRate( RF24_2MBPS );
radio.setPALevel(RF24_PA_MIN);
radio.openWritingPipe(slaveAddress);
radio.openReadingPipe(1, masterAddress);
radio.setRetries(3,5); // delay, count
send(); // to get things started
prevMillis = millis(); // set clock
}
//=============
void loop() {
currentMillis = millis();
if (currentMillis - prevMillis >= txIntervalMillis) {
send();
prevMillis = millis();
}
getData();
showData();
}
//====================
void send() {
radio.stopListening();
myData.Button_State = digitalRead(button_pin);
//myData.seat = "999";
myData.seat = 1;
bool rslt;
rslt = radio.write( &myData, sizeof(myData) );
radio.startListening();
Serial.print("Data Sent ");
Serial.print(myData.Button_State);
Serial.print(", ");
Serial.println(myData.seat);
if (rslt) {
Serial.println(" Acknowledge received");
updateMessage();
// delay(2000);
}
else {
Serial.println(" Tx failed");
delay(2000);
/* digitalWrite(segA, HIGH);
digitalWrite(segB, HIGH);
digitalWrite(segC, HIGH);
digitalWrite(segD, HIGH);
digitalWrite(segE, HIGH);
digitalWrite(segF, HIGH);
digitalWrite(segG, LOW); */
// Serial.println();
// Serial.println("Seat Searching ");
// Serial.println();
display.setCursor(0,28);
display.setTextSize(1);
display.setTextColor(WHITE, BLACK);
//display.setTextColor(WHITE);
display.println("Please.....");
display.setCursor(0,42);
display.setTextSize(2);
display.println("..Search..");
display.display();
}
}
//================
void getData() {
if ( radio.available() ) {
radio.read( &dataReceived, sizeof(dataReceived) );
newData = true;
}
else {
Serial.println();
newData = false;
}
}
//================
void showData() {
if (newData == true) {
Serial.print("Data received ");
Serial.print(dataReceived);
//Serial.print(", ");
// Serial.println(dataReceived);
Serial.println();
if (dataReceived == 1) {
display.setCursor(0,28);
display.setTextSize(1);
display.setTextColor(WHITE, BLACK);
//display.setTextColor(WHITE);
display.println("Reached at");
display.setCursor(0,42);
display.setTextSize(2);
display.println("..Seat 1..");
display.display();
}
else if (dataReceived == 2)
{
display.setCursor(0,28);
display.setTextSize(1);
display.setTextColor(WHITE, BLACK);
// display.setTextColor(WHITE);
display.println("Reached at");
display.setCursor(0,42);
display.setTextSize(2);
display.println("..Seat 2..");
display.display();
}
else if (dataReceived == 3)
{
display.setCursor(0,28);
display.setTextSize(1);
display.setTextColor(WHITE, BLACK);
//display.setTextColor(WHITE);
display.println("Reached at");
display.setCursor(0,42);
display.setTextSize(2);
display.println("..Seat 3..");
display.display();
}
else if (dataReceived == 4)
{
display.setCursor(0,28);
display.setTextSize(1);
display.setTextColor(WHITE, BLACK);
display.println("Reached at");
display.setCursor(0,42);
display.setTextSize(2);
display.println("..Seat 4..");
display.display();
}
else if (dataReceived == 5)
{
display.setCursor(0,28);
display.setTextSize(1);
display.setTextColor(WHITE, BLACK);
display.println("Reached at");
display.setCursor(0,42);
display.setTextSize(2);
display.println("..Seat 5..");
display.display();
}
else if (dataReceived == 6)
{
display.setCursor(0,28);
display.setTextSize(1);
display.println("Reached at");
display.setCursor(0,42);
display.setTextSize(2);
display.println("..Seat 6..");
display.display();
}
else if (dataReceived == 7)
{
display.setCursor(0,28);
display.setTextSize(1);
display.setTextColor(WHITE, BLACK);
display.println("Reached at");
display.setCursor(0,42);
display.setTextSize(2);
display.println("..Seat 7..");
display.display();
}
else if (dataReceived == 8)
{
display.setCursor(0,28);
display.setTextSize(1);
display.setTextColor(WHITE, BLACK);
display.println("Reached at");
display.setCursor(0,42);
display.setTextSize(2);
display.println("..Seat 8..");
display.display();
}
else if (dataReceived == 9)
{
display.setCursor(0,28);
display.setTextSize(1);
display.setTextColor(WHITE, BLACK);
display.println("Reached at");
display.setCursor(0,42);
display.setTextSize(2);
display.println("..Seat 9..");
display.display();
}
else {
display.setCursor(0,28);
display.setTextSize(1);
display.setTextColor(WHITE, BLACK);
display.println("Wait.....");
display.setCursor(0,42);
display.setTextSize(2);
display.println("Searching...");
display.display();
}
// newData = false;
}
delay(1000);
}
//================
void updateMessage() {
}