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(" %");
}