Problema con programacion varios nodos un master...

Moderador:
Por favor no repitas lo que otra persona te dice. Ya se lee en el post correspondiente.
Menciona a la persona por su nick y nada mas.
Usa quote (que es lo que eso cita para resaltar un párrafo, no todos y cada uno de los textos respondidos que corresponden a ese post.
Item 14 de las normas del foro, último párrafo, si quieres leer al respecto.
Ya edité tu hilo, no lo haré de nuevo!!.
Gracias.

Bueno, esto es otra cosa y ahora si hablamos el mismo idioma.
Por algo siempre digo, no coloquen códigos parciales, coloquen lo mismo con lo que estan trabajando.

#include <RF24Network.h>
#include <RF24.h>
#include <SPI.h>
#include <Wire.h>
#include <Ethernet.h>
float humidity;
float temperature;
RF24 radio(7, 8);
RF24Network network(radio);
const uint16_t this_node = 00;
const uint16_t node_01 = 01;
const uint16_t node_02 = 02;
const uint16_t node_03 = 03;

//Server ethernet
byte mac[] = {0xAA, 0xBB, 0xCC, 0x18, 0x01, 0x95};
EthernetServer server(8081);
//EthernetClient client;
IPAddress ip(192, 168, 0, 123);
boolean valuesHaveChanged = false;

#define SENSORES 3
struct payload_t
{
  byte senderID;
  float temp;
  float hume;
};

payload_t  payload[SENSORES];

void setup(void) {
  Serial.begin(9600);
  Serial.println("RF24 Network Rx-DS18B20");
  SPI.begin();
  radio.begin();
  network.begin(/*channel*/ 88, /*node address*/ this_node);
  radio.setPALevel(RF24_PA_LOW);
  Ethernet.begin(mac, ip);
  //server.begin();
  Serial.print("Direccion obtenida del servidor DHCP: ");
  Serial.println(Ethernet.localIP());
}



void loop(void) {
  EthernetClient client = server.available();
  network.update();
  while ( network.available()) {
    RF24NetworkHeader header;
    payload_t tmp;
    network.read(header, &tmp, sizeof(tmp));
    switch (tmp.senderID) {
      case 0: printSensor(tmp);
              payload[0] = tmp;
              valuesHaveChanged = true;
              break;
      case 1: printSensor(tmp);
              payload[1] = tmp;
              valuesHaveChanged = true;
              break;
      case 2: printSensor(tmp);
              payload[2] = tmp;
              valuesHaveChanged = true;
              break;
        // etc
    }
  }
  if (client) {
      Serial.println("Nuevo cliente");
      char c = client.read();
      Serial.print(c);
      boolean currentLineIsBlank = true;
  
      while (client.connected()) {
        if (client.available()) {
          char c = client.read();
          Serial.write(c);
          if (c == '\n' && currentLineIsBlank)   {
              //Responde a la petición con nuestros datos
              client.println("HTTP/1.1 200 OK");//Código 200 = Todo fue bien
              client.println("Content-Type: application/xml");//Especifica el MIME-TYPE que envía datos (XML)
              client.println("Connection: close");
              client.println();
              client.println("<?xml version=\"1.0\"?>");//Cabecera del documento XML
              client.println("<sensors>");
              
              for (int sensor = 1; sensor < 4; sensor++)  {
                  client.print("<sensor>");
                  client.print(sensor-1);//Id del sensor
                  client.println("\">");
                  client.print("<temperatura>");
                  if (valuesHaveChanged)
                      client.print(payload[sensor-1].temp);
                  client.print(" ");
                  client.println("</temperatura>");
                  client.print("<humedad>");
                  if (valuesHaveChanged)
                      client.print(payload[sensor-1].hume);
                  client.print(" ");
                  client.println("</humedad>");
                  client.println("</sensor>");
              }
              client.println("</sensors>");
              break;
          }
          if (c == '\n') {
            currentLineIsBlank = true;
          }
          else if (c != '\r') {
            currentLineIsBlank = false;
          }
        }
      }
      delay(1);
      client.stop();
      Serial.println("cliente desconectado");
  }
}

void printSensor(payload_t ptmp) {
  Serial.print("Sensor: ");
  Serial.print(ptmp.senderID);
  Serial.print(" ");
  Serial.print("Temp: ");
  Serial.print(ptmp.temp);
  Serial.print(" C");
  Serial.print("Hume: ");
  Serial.print(ptmp.hume);
  Serial.println(" %");
}

Un error que tienes y te lo dejo para resolver a ti.

valuesHaveChanged solo es falso en el momento en que lo defines y luego nunca deja de ser true.

Resuelvelo o modifica su uso.

La modificacion que hice al código no hace relevante tener algo que muestre si los datos cambiaron o no.
Esta versión no lo usa.

#include <RF24Network.h>
#include <RF24.h>
#include <SPI.h>
#include <Wire.h>
#include <Ethernet.h>
float humidity;
float temperature;
RF24 radio(7, 8);
RF24Network network(radio);
const uint16_t this_node = 00;
const uint16_t node_01 = 01;
const uint16_t node_02 = 02;
const uint16_t node_03 = 03;

//Server ethernet
byte mac[] = {0xAA, 0xBB, 0xCC, 0x18, 0x01, 0x95};
EthernetServer server(8081);
//EthernetClient client;
IPAddress ip(192, 168, 0, 123);

#define SENSORES 3
struct payload_t
{
  byte senderID;
  float temp;
  float hume;
};

payload_t  payload[SENSORES];

void setup(void) {
  Serial.begin(9600);
  Serial.println("RF24 Network Rx-DS18B20");
  SPI.begin();
  radio.begin();
  network.begin(/*channel*/ 88, /*node address*/ this_node);
  radio.setPALevel(RF24_PA_LOW);
  Ethernet.begin(mac, ip);
  //server.begin();
  Serial.print("Direccion obtenida del servidor DHCP: ");
  Serial.println(Ethernet.localIP());
}



void loop(void) {
  EthernetClient client = server.available();
  network.update();
  while ( network.available()) {
    RF24NetworkHeader header;
    payload_t tmp;
    network.read(header, &tmp, sizeof(tmp));
    switch (tmp.senderID) {
      case 0: printSensor(tmp);
              payload[0] = tmp;
              break;
      case 1: printSensor(tmp);
              payload[1] = tmp;
              break;
      case 2: printSensor(tmp);
              payload[2] = tmp;
              break;
        // etc
    }
  }
  if (client) {
      Serial.println("Nuevo cliente");
      char c = client.read();
      Serial.print(c);
      boolean currentLineIsBlank = true;
  
      while (client.connected()) {
        if (client.available()) {
          char c = client.read();
          Serial.write(c);
          if (c == '\n' && currentLineIsBlank)   {
              //Responde a la petición con nuestros datos
              client.println("HTTP/1.1 200 OK");//Código 200 = Todo fue bien
              client.println("Content-Type: application/xml");//Especifica el MIME-TYPE que envía datos (XML)
              client.println("Connection: close");
              client.println();
              client.println("<?xml version=\"1.0\"?>");//Cabecera del documento XML
              client.println("<sensors>");
              
              for (int sensor = 1; sensor < 4; sensor++)  {
                  client.print("<sensor>");
                  client.print(sensor-1);//Id del sensor
                  client.println("\">");
                  client.print("<temperatura>");
                  client.print(payload[sensor-1].temp);
                  client.print(" ");
                  client.println("</temperatura>");
                  client.print("<humedad>");
                  client.print(payload[sensor-1].hume);
                  client.print(" ");
                  client.println("</humedad>");
                  client.println("</sensor>");
              }
              client.println("</sensors>");
              break;
          }
          if (c == '\n') {
            currentLineIsBlank = true;
          }
          else if (c != '\r') {
            currentLineIsBlank = false;
          }
        }
      }
      delay(1);
      client.stop();
      Serial.println("cliente desconectado");
  }
}

void printSensor(payload_t ptmp) {
  Serial.print("Sensor: ");
  Serial.print(ptmp.senderID);
  Serial.print(" ");
  Serial.print("Temp: ");
  Serial.print(ptmp.temp);
  Serial.print(" C");
  Serial.print("Hume: ");
  Serial.print(ptmp.hume);
  Serial.println(" %");
}

Perfecto!!! ahora funciona muy bien , muchas gracias surByte y al compañero.

Pero me temo que no ha terminado todo aqui jejejee.

El caso que como he comentado unos post mas atras , me encuentro con el problema de que necesito una ip fija en mi PC para desde un script de PHP acceder al XML con los datos y subirlos a mi base de datos MYSQL.

No dispongo del servicio de ip fija y los redireccionamientos de DNS me dan mucho quebradero de cabeza (ya he probado varios gratuitos y fatal)

Asi que como comente, quizas la mejor opcion sea mandar los datos por peticion POST a la base de datos.

He conseguido mandar los datos de temperatura y humedad , pero conectando el DHT a la placa arduino UNO con el shield de ETHERNET, el codigo lo tengo funcionando y me sube perfectamente los datos.

Ahora cuando intento reescribir mi codigo, para poder subir los datos a MYSQL me da varios errores, ya que , en el primer ejemplo es facil sacar los valores temperatura y humedad y hacer el POST:

int t = 0;	
int h = 0;

y

h = (int) dht.getHumidity();
t = (int) dht.getTemperature(); 
data = "";

Con esto lo meto todo en data y envio por POST con estas lineas:

currentMillis = millis();
	if(currentMillis - previousMillis > interval) { // READ ONLY ONCE PER INTERVAL
		previousMillis = currentMillis;
		h = (int) dht.getHumidity();
		t = (int) dht.getTemperature();
	}

	data = String("temp1=") + t + String("&hum1=")+ h;

y

client.println("POST /datos.php HTTP/1.1");

El problema , que en el arduino base que tengo , esos valores no los tengo asi como tal y ya me he perdido.

Hombre, como algo como no-ip te puede dar dolor de cabeza, cada 30 días solo debes renovarlo.
El otro que uso es duckdns.org

Ya probe en el pasado , hoy he probado con una cuenta de no-ip y nada, supongo que mi compañia de fibra me capan de alguna manera este servicio y hablar con ellos es como habla con la pared.

Seguire por el camino de poder enviar a la base de datos los datos directamente con POST, he visto algunos ejemplos y lo veo factible.

Tengo que sacar y diferenciar los datos que me llegan al RX para poder mandarlos a la base de datos.

Tanto no-ip como duckdns.org requiren de la descarga y funcionamiento de un programa residente que informa a su servidor tu ip pública cada X minutos.
Seguiste esos pasos? Supongo que este comentario

supongo que mi compañia de fibra me capan de alguna manera este servicio y hablar con ellos es como habla con la pared.

Consulta. Puedes hacer port-forward en tu router o esta vedado (prohibido)?

Los dos sitios DDNS tienen programas que te informan del funcionamiento exitoso. Pudiste probarlos completamente?

Buenas surByte, he probado lo que me dices, pero nada ha funcionado, creo que algo tiene que ver el que sea una conexion de internet rural, que viene por wimax y de ahi que quizas el acceso al router principal y demas no pueda hacerlo, no se, me he tirado toda la mañana probando Nada, lo descarto esa opcion por no estar dentro de mis posibilidades.

Por otro lado , la tarde (que buenos son los Domingos para estos menesteres jejeje) la he dedicado a subir los datos directamente a la base de datos MYSQL de mi VPS, tras varias pruebas, leer, estudiar, mirar y comprobar, he llegado hasta este punto, ya de aqui no paso.

Ahora mismo mando los datos de cada TX al RX , este los recibe correctamente , pero al subirlos con GET a mi MYSQL , solo envia los datos de uno de los TX.

Codigo TX , es el TX2 , pero da igual , solo coge el del TX1:

#include <SPI.h>
#include <RF24Network.h>
#include <nRF24L01.h>
#include <RF24.h>
#include "DHT.h"
#include <Wire.h>
#define dnt_pin 2
DHT dht;
RF24 radio(7,8);
RF24Network network(radio);

int numbers[6];
float humedad;
float temperatura;
const uint16_t this_node = 02;
const uint16_t other_node = 00;
const unsigned long interval = 2000; //ms
unsigned long last_sent;
unsigned long packets_sent;

struct payload_t
{
  byte senderID;
  float a;
  float b;
  };

//int sensor[03];
//int datos[6];

void setup()
{
dht.setup(dnt_pin);
radio.begin();
SPI.begin();
network.begin(/*channel*/ 88, /*node address*/ this_node);
radio.setPALevel(RF24_PA_LOW);
}
void read_sensor(){        
  delay(dht.getMinimumSamplingPeriod());
  temperatura = dht.getTemperature();
  humedad = dht.getHumidity();
}
void loop(void)
{
read_sensor();
float sizeofpayload;
network.update();
unsigned long now = millis();

if ( now - last_sent >= interval )
{
last_sent = now;

byte senderID = 2;
payload_t payload = {senderID, temperatura, humedad};
RF24NetworkHeader header(/*to node*/ other_node);
bool ok1 = network.write(header, &payload, sizeof(payload));
}
}

Codigo RX:

#include <RF24Network.h>
#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>
#include <SPI.h>
#include <Ethernet.h>
#include <Wire.h>
#define INTERWAL 2000

float humedad;
float temperatura;
RF24 radio(7, 8);
RF24Network network(radio);
const uint16_t this_node = 00;
const uint16_t node_01 = 01;
const uint16_t node_02 = 02;
const uint16_t node_03 = 03;

byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
char server[] = "xxxxxxxxxxx.es";
EthernetClient client;
int wartosc;
unsigned long tiempo_conexion = 0;

#define SENSORES 3
struct payload_t
{
  byte senderID;
  float temp;
  float hume;
};  
payload_t payload[SENSORES];
void printSensor(payload_t ptmp);
void setup(void) {
Ethernet.begin(mac);
delay(1000);
Wire.begin();
delay(1000);
radio.begin();
network.begin(/*channel*/ 88, /*node address*/ this_node);
radio.setPALevel(RF24_PA_LOW);
}
void loop(void) {
network.update();

  while ( network.available() )
{
RF24NetworkHeader header;
payload_t tmp;
network.read(header, &tmp, sizeof(tmp));
switch (tmp.senderID) {
      case 1: printSensor(tmp);
              payload[0] = tmp;
              break;
      case 2: printSensor(tmp);
              payload[1] = tmp;
              break;
      case 3: printSensor(tmp);
              payload[2] = tmp;
              break;
      //case 4: printSensor(tmp);
        //      payload[2] = tmp;
          //    break;        
        // etc
    }
}
if (millis() - tiempo_conexion > INTERWAL) {
enviar_datos();
}
}
void enviar_datos() {
client.stop();
if (client.connect(server, 80)) {
  for (int sensor = 1; sensor < 3; sensor++) {
client.print("GET /insertar.php?datos=");
client.print("&sensor1=");
client.print(sensor-1);
client.print("&temperatura1=");
client.print(payload[sensor-1].temp);
client.print("&humedad1=");
client.print(payload[sensor-1].hume);
client.print("&sensor1=");
client.print(sensor-2);   
client.print("&temperatura2=");
client.print(payload[sensor-1].temp);
client.print("&humedad2=");
client.print(payload[sensor-1].hume);
client.print("&sensor1=");
client.print(sensor-3);   
//client.print("&sensor3=");
//client.print(datos[7]);
client.print("&temperatura3=");
client.print(payload[sensor-1].temp);
client.print("&humedad3=");
client.print(payload[sensor-1].hume);
client.println(" HTTP/1.1");
client.println("Host: xxxxxxxxxx.es");
client.println("Connection: close");
client.println();
tiempo_conexion = millis();


}
}
}
void printSensor(payload_t ptmp) {
  Serial.print("Sensor: ");
  Serial.print(ptmp.senderID);
  Serial.print(" ");
  Serial.print("Temp: ");
  Serial.print(ptmp.temp);
  Serial.print(" C");
  Serial.print("Hume: ");
  Serial.print(ptmp.hume);
  Serial.println(" %");
}

Si miro el log de mi MYSQL , muestra esto:

Vemos que siempre sale sensor1 y tanto en temperatura1 como temperatura 2 etc... sale el mismo valor.

Quizas una captura de la base de datos sirva tambien para velo mejor:

Creo que en los codigos de TX no hay problema, es en el RX , pero no doy con la tecla.

Ya he comentado varias veces que mi nivel es muy bajo, mi profesion es agricultor , esto es meramente un hobbie y que me gusta y le dedico el tiempo que tengo libre para aprender.

Tranquilo nada que explicar.
Eres agricultor pero manejas MySQL jajaja vamos hombre no te tires abajo.. estas mucho mas arriba de la media del foro.

Veamos esto.
Supongo has probado insertar valores sin problemas pero quien tiene los problemas es el arduino, estoy en lo correcto?

Mira mi experiencia con estas cosas esta en pequeños detalles, cosas que creemos salen de un modo y en realidad lo hacen de otro.
Entonces mi consejo es que en lugar de hacer esto

client.print("GET /insertar.php?datos=");
client.print("&sensor1=");
client.print(sensor-1);
client.print("&temperatura1=");
client.print(payload[sensor-1].temp);
client.print("&humedad1=");
client.print(payload[sensor-1].hume);
client.print("&sensor1=");
client.print(sensor-2);   
client.print("&temperatura2=");
client.print(payload[sensor-1].temp);
client.print("&humedad2=");
client.print(payload[sensor-1].hume);
client.print("&sensor1=");
client.print(sensor-3);   
//client.print("&sensor3=");
//client.print(datos[7]);
client.print("&temperatura3=");
client.print(payload[sensor-1].temp);
client.print("&humedad3=");
client.print(payload[sensor-1].hume);

has esto

String buffer ="";

buffer  = "GET /insertar.php?datos=&sensor1=";
buffer+= String(sensor-1);
buffer+= "&humedad1=";
buffer+= "&sensor1=";
buffer+= String(sensor-2);   
buffer+= "&temperatura2=";
buffer+= String(payload[sensor-1].temp);
buffer+= "&humedad2=";
buffer+= String(payload[sensor-1].hume);
buffer+= "&sensor1=";
buffer+= String(sensor-3);   
buffer+= "&temperatura3=";
buffer+= String(payload[sensor-1].temp);
buffer+= "&humedad3=";
buffer+= String(payload[sensor-1].hume);

bueno ahora puedes imprimirlo y ver si coincide con la forma que has probado seguramente para insertar datos

Voy a probar surByte y cometo.

Cambiando lo que me comentas mas arriba , no manda nada a la base de datos. Es como si no se ejecutara el GET, por que en el log no me aparece ninguna entrada ni nada.

Bueno , pues traigo dos codigos mas limpios y que por ahora me estan funcionando , a medias.

TX

#include <SPI.h>
#include "RF24.h"
#include "RF24Network.h"
#include "RF24Mesh.h"
#include "DHT.h"           
RF24 radio(7,8);
RF24Network network(radio);
RF24Mesh mesh(radio,network);
#define nodeID 2        
#define NOMESHMASTER
#define dnt_pin 2           
DHT dht;     

struct dataOut {
    uint32_t nid;        
    float temp;
    float hum;
};
uint32_t sendTimer = 0;             
uint32_t sendInterval = 6000;      
void setup() {
    Serial.begin(115200);
    dht.setup(dnt_pin);
    mesh.setNodeID(nodeID);
    mesh.begin(72,RF24_250KBPS,30000);
    radio.setPALevel(RF24_PA_LOW);
    radio.printDetails();
    
}

void loop() {
    if (millis() - sendTimer >= sendInterval) {
        sendData();
        sendTimer = millis();
    }
}

void sendData() {
    float t = dht.getTemperature();                
    float h = dht.getHumidity();                    
    
    dataOut payload = {
        nodeID,
        t,
        h,
     };

    
    mesh.update();

   
    if ( !mesh.write(&payload,1,sizeof(payload),0) ) {     
        Serial.println("Envio Fallido");
        if ( !mesh.checkConnection() ) {           
            Serial.println("Renovando la Direccion");
            mesh.renewAddress();              
        } else {
            Serial.println("Envio Fallido, test ok");
        }
    } else {                     
        delay(5);
        Serial.println("Envio Correcto!!");       
    }
}

Y aqui el RX:

#include <SPI.h>
#include "RF24.h"
#include "RF24Network.h"
#include "RF24Mesh.h"
#include <Ethernet.h>
#define INTERWAL 3000
RF24 radio(7,8);
RF24Network network(radio);
RF24Mesh mesh(radio,network);

byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
char server[] = "xxxxxxxxxx.es";
EthernetClient client;
unsigned long tiempo_conexion = 0;

struct nodoIn {            
    uint32_t nid;         
    float temp;
    float hum;
};

void setup() {
    Serial.begin(115200);
    mesh.setNodeID(0);
    mesh.begin(72,RF24_250KBPS,30000);
    radio.setPALevel(RF24_PA_LOW);
    radio.printDetails();
    Serial.println("Estacion Base Lista");
    Ethernet.begin(mac);
 }
 
 void loop() {
    mesh.update();             
    mesh.DHCP();               

    while (network.available()) {        
        RF24NetworkHeader header;        
        network.peek(header);            

        nodoIn nodoData;        
        
        switch(header.type) {         

            case 1:      
            case 2:
                
                network.read(header,&nodoData,sizeof(nodoData));
                
                Serial.print("sensor:");
                Serial.print(nodoData.nid);
                Serial.print("temperatura:");
                Serial.print(nodoData.temp);
                Serial.print("humedad:");
                Serial.print(nodoData.hum);
                Serial.println(" ");
            break;

            default:
                Serial.println("Mensaje no Definido");
            break;
        }             
    }           
if (millis() - tiempo_conexion > INTERWAL) {

}
nodoIn nodoData;
RF24NetworkHeader header;        
        network.peek(header); 
switch(header.type) {         

            case 1:      
            case 2:
                
                network.read(header,&nodoData,sizeof(nodoData));
client.stop();
if (client.connect(server, 80)) {
client.print("GET /insertar.php?");
client.print("&sensor1=");
client.print(nodoData.nid);
client.print("&temperatura1=");
client.print(nodoData.temp);
client.print("&humedad1=");
client.print(nodoData.hum);
client.print("&sensor2=");
client.print(nodoData.nid);
client.print("&temperatura2=");
client.print(nodoData.temp);
client.print("&humedad2=");
client.print(nodoData.hum);
client.println(" HTTP/1.1");
client.println("Host: xxxxxxx.es");
client.println("Connection: close");
client.println();
tiempo_conexion = millis();

}
}
}

Con estos codigo en el monitor serial , me aparece de este modo:

Me diferencia perfectamente el sensor 1 del TX1 y el sensor 2 del TX2 .

Cuando lo subo a mi base de datos , unas veces graba el TX1 en las dos lineas de sensores y otras veces el TX2

Como se puede observar, en sensor1=2(el TX2) pero en sensor2=2 , osea el mismo , despues de unas lineas entra el TX1 y asi , pero no los diferencia correctamente.

No se si es ya problema de mi codigo PHP o que leches, pero no doy con la tecla por mas que cambio y miro.

Diras que soy quisquiloso y lo soy @carcama pero no se lee nada de lo que ocurre en tu servidor.
No puedes capturar y pegar usando algo que sea mas legible?

Preguna al margen de mi pequeño reclamo, si usas un navegador puedes ingresar los valores en tu servidor?

No entiendo dónde discriminas los datos de cada sensor a la hora de guardarlos/imprimirlos
Creo que estás dando por sentado que los datos están disponibles y en el órden que tu esperas, y tal vez no sea correcto. Por eso te repite los datos, porque el código no discrimina de que sensor vienen (o yo no veo dónde).

Gracias chic@s por vuestra ayuda y paciencia, ya por fin consegui que suba a mi base de datos , cada sensor .

sensor 1 temperatura 22 humedad 40
sensor 2 temperatura 22.50 humedad 44
sensor 3 temperatura 21.40 humedad 43

Ahora ya viene la parte de , leer esos datos de mi MYSQL y dale un toque elegible con algunas graficas.

Esto ya lo ire mirando y si tengo dudas lo expondre en otro foro, ya que entiendo que aqui esos temas no se hablan.

Nuevamente, muchas gracias!!!

Muy buenas , de nuevo jejeje.

Pues resulta que, aunque todo esta correcto , a la hora de coger los datos de la base de datos no es viable para las graficas, el motivo principal es , que no puedo coger los datos de temperatura y humedad del sensor 1 , por ejemplo, ya que en la tabla lo que tengo son 4 entradas ( fecha, Sensor, temperatura, humedad) , pero el php que recoge los datos de la tabla , interpreta los valores como le da la gana.

Asi que , tengo que cambiar parte del codigo del receptor , para que envie los datos a la base de datos, como:

sensor1 temperatura1 humedad1
sensor2 temperatura2 humedad2
.....

aqui esta el codigo:

//Receiver Side Code for Arduino Nano
#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>
#include <Ethernet.h>
#include <Wire.h>
#define INTERWAL 1000
RF24 radio(7, 8);

float data[2];
unsigned long tiempo_conexion = 0;
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
char server[] = "xxxxxxxxxxxx.es";
EthernetClient client;

const uint64_t rAddress[] = {0xB00B1E50D2LL, 0xB00B1E50C3LL, 0xB00B1E50D3LL};  //Create pipe addresses for the 2 nodes to recieve data, the "LL" is for LongLong type
const uint64_t wAddress[] = {0xB00B1E50B1LL, 0xB00B1E50A4LL, 0xB00B1E50A3LL};  //Create pipe addresses for the 2 nodes to transmit data, the "LL" is for LongLong type

//const uint64_t pipe = 0xE8E8F0F0E1LL;// Radio pipe address for the 2 nodes to communicate.
//const byte address[][6] = {"00001","00002","00003","00004"};// = 0xE8E8F0F0E2LL;
void setup()
{
  Ethernet.begin(mac);
  delay(1000);
  Wire.begin();
  delay(1000);
  Serial.begin(9600);//initialize serial communication at 9600 bps
  radio.begin();// Setup and configure rf radio
  //radio.openReadingPipe(0, address[1]);
  radio.setPALevel(RF24_PA_MIN);
  radio.openReadingPipe(1, rAddress[0]);
  radio.openReadingPipe(2, rAddress[1]);
  radio.openReadingPipe(3, rAddress[2]);
  radio.openReadingPipe(4, rAddress[3]);
  radio.startListening();
  }

void loop(void)
{
  byte pipeNum = 0;
  //byte data = 0;
while (radio.available(&pipeNum))
{
//bool flag = false;
//while (!flag)
//{
radio.read(&data, sizeof(data));
//radio.read(data1, sizeof(data1));
delay(500);
Serial.print("Sensor= ");
Serial.println(pipeNum);
Serial.print("Temp");
Serial.println(data[0]);
delay(2000);
Serial.print("Hum");
Serial.println(data[1]);
delay(3000);
client.stop();
if (millis() - tiempo_conexion > INTERWAL) {
if (client.connect(server, 80)) {
client.print("GET /insertar.php?");
client.print("&Sensor=");
client.print(pipeNum);
client.print("&temperatura=");
client.print(data[0]);
client.print("&humedad=");
client.print(data[1]);
client.println(" HTTP/1.1");
client.println("Host: xxxxxxxxx.es");
client.println("Connection: close");
client.println();
czas_polaczenia = millis();
}
}
}
/*else
{
Serial.print("No Radio Found");
delay(1000);

}*/  
}

He pensado algo como, que , si los datos recibidos es del sensor 1 suba los datos de temperatura 1 humedad 1 , y asi sucesivamente..... Esto se podria hacer , no? es que no se por donde meterle mano ahora.

Si, puedes agregar el número de sensor tranquilamente, agrega el valor de pipeNum +1 al identificador de lo que imprimes/envias.
Ahora, como yo lo veo está leyendo siempre el mismo sensor porque pipeNum siempre vale 0, no veo su incremento por ningún lado.
Y por cierto, si no la declaras static, aunque la incrementes, siempre se va a poner a 0 así como está declarada.

gatul, gracias por responder, con tan solo poner esto, ha quedado perfecto:

client.print("GET /insertar.php?");
if (pipeNum == 1) {
client.print("&sensor1=");
client.print(pipeNum);
client.print("&temperatura1=");
client.print(data[0]);
client.print("&humedad1=");
client.print(data[1]);}
if (pipeNum == 2) {
client.print("&sensor2=");
client.print(pipeNum);
client.print("&temperatura2=");
client.print(data[0]);
client.print("&humedad2=");
client.print(data[1]);}
if (pipeNum == 3) {
client.print("&sensor3=");
client.print(pipeNum);
client.print("&temperatura3=");
client.print(data[0]);
client.print("&humedad3=");
client.print(data[1]);}
client.println(" HTTP/1.1");

Sigo ahora con las graficas, ya tengo tres tablas , llamadas sensor1, sensor2 .... ahora voy a mirar si ya si puedo conseguir hacer las graficas cogiendo los valores , de cada tabla.

Bueno , ya estoy por aqui otra vez, ya tengo el tema de las graficas terminado, ya puedo ver desde una app de android , los datos que estan enviando los nanos.

Como el proyecto continua , sigo por aqui para dar mas tormento, eso si , prometo subir al final del proecto , en su apartado correspondiente , todo los codigos, y pasos que he seguido para que en un futuro le pueda valer a otro compañero/a y por supuesto, a mi tambien .

Ahora mismo paso a meter los nanos+nrf24l01+DHT en cajas estancas y las cuales iran dentro del invernadero, espera.... y la corriente???

Pues ahi vengo ahora, vamos a aprovechar la luz solar para esto y como no, viviendo en la ciudad Europea con mas horas de luz al dia, es lo mejor.

Tengo que comprar 3 placas solares de 6V 1A y baterias.

El tema de las baterias , podria hacer funcionar cada nodo , con una 18650 ??
La placa solar seria suficiente con la de 6V 1A??

Otra cosa, ahora mismo los nanos envian los datos al receptor cada 1 sg , por miedo a tocar mas los codigos ya que fucniona todo bien, como puedo hacer, para que el nano, lea los datos del DHT cada x sg y luego los envie al receptor??

Saludos.

El tema de las baterias , podria hacer funcionar cada nodo , con una 18650 ??

Si, te aconsejo comprar cargador con protector.
Tp4056 con protector como éste.

La placa solar seria suficiente con la de 6V 1A??

Que alimentaría dicha placa, ese nano?

Tendria que alimentar , el nano junto el dht y nrf24l01

1A es mas que suficiente.

El Tp4056,cargador de la 18650, puede programarse (cambiando una R) para el régimen de carga que gustes.
Tengo 4 de estos funcionando hace meses en el mismo enfoque que tu y todo funciona perfecto... la bateria va de 4.2 a 3.X no recuerdo el valor (pero no baja de 3.2) y vuelve el ciclo. Luego te paso una imagen.