Go Down

Topic: Problema con programacion varios nodos un master... (Read 1 time) previous topic - next topic

gatul

Lo sugerí porque si llega a estar usando ArduinoDroid, por ej., te notifica errores si las funciones no están declaradas antes de llamarlas (con el encabezado alcanza, como lo indicas vos). 
De todos modos compila perfectamente pero esos "warnings" resultan confusos para quienes somos novatos.

surbyte

Por la misma razón yo pregunté si usaba PlatformIO porque en el todo lo que esta al final debe definirse como en un compilador común.
Solo el IDE tolera que una función o rutina este luego del loop sin quejarse, si se ve la precompilación, el mismo hace la tarea de definirlos previo al setup().

carama

Tengo que ponerlo antes del void setup, si no , no funciona, me sigue dando el error anterior comentado.

Aun asi seguimos lo mismo, en el XML que se genera , no aparecen ningun dato de los sensores.

surbyte

Yo creo que hay un problema de comunicación de tu parte, por eso siempre pido que se coloque todo el código.

En el código que veo hasta el post#14 no hay mención alguna de algo que genere XML.
Puedes agregar lo que esta faltando?

carama

#19
Nov 11, 2020, 11:03 pm Last Edit: Nov 12, 2020, 05:40 pm by surbyte Reason: No repitas lo que se lee arriba.
Cierto, no me di cuenta, el que subi tan solo muestra en el monitor serial , los valores de temp y hume junto a sus sensores correspondientes.

Este que pongo a continuacion es el que yo utilizo , no me da errores al compilar pero sin embargo , en el XML , no muestra ningun dato, sale todo a 0. En algunas variantes que he hecho, consegui que salieran los datos en el XML, pero tan solo de un sensor.

Code: [Select]
#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;

struct payload_t
{
  byte senderID;
  float temp;
  float hume;
};

void setup(void)
{
payload_t payload;
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)

{
//payload_t payload;
EthernetClient client = server.available();
network.update();
while ( network.available())
{

RF24NetworkHeader header;
payload_t payload;
{
network.read(header,&payload,sizeof(payload));
Serial.print("Sensor: ");
Serial.print(payload.senderID);
Serial.print(" ");
Serial.print("Temp: ");
Serial.print(payload.temp);
Serial.print(" C");
Serial.print("Hume: ");
Serial.print(payload.hume);
Serial.println(" %");}

valuesHaveChanged = true;


}
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>");
            struct payload_t
           {
            byte senderID;
            float temp;
            float hume;
           };
            payload_t  payload;
            for (int sensor = 1; sensor < 4; sensor++)
            {              
              client.print("<sensor>");
              client.print(sensor);//Id del sensor
              client.println("\">");
              client.print("<temperatura>");
              if (valuesHaveChanged)
              client.print(payload.temp);
              client.print(" ");
              client.println("</temperatura>");
              client.print("<humedad>");
              if (valuesHaveChanged)
              client.print(payload.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");
    }
}




surbyte

#20
Nov 12, 2020, 06:01 pm Last Edit: Nov 12, 2020, 07:14 pm by surbyte
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.

Code: [Select]
#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.

Code: [Select]
#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(" %");
}

carama

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:

Code: [Select]
int t = 0;
int h = 0;





Code: [Select]
h = (int) dht.getHumidity();
t = (int) dht.getTemperature();
data = "";


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

Code: [Select]
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;




Code: [Select]
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.

surbyte

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

carama

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. 

surbyte

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
Quote
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?

carama

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:

Code: [Select]
#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:

Code: [Select]
#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.

surbyte

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

Code: [Select]
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

Code: [Select]
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

carama


carama

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.

carama

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

TX
Code: [Select]
#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:
Code: [Select]
#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.


Go Up