Muy buenas, estoy intentando ampliar los clientes a una conexion que tengo ya hecha con los nrf24l01+, pero no se que tengo que añadir mas a mis codigos tanto al emisor como el recpetor, os dejo los codigos a ver si podeis echarme una mano , gracias.
EMISOR
#include <SPI.h>
#include <Mirf.h>
#include <nRF24L01.h>
#include <MirfHardwareSpiDriver.h>
#include <dht.h>
// Pin donde va conectado los datos
#define dht_pin 2
//#define DHTPIN 2
#define DHTTYPE DHT21
//Sonda de temperatura
//DHT dht(DHTPIN, DHTTYPE);
dht DHT;
//La última vez que envía datos a través de la NRF (en ms)
long lastSend = 0;
//El retardo entre cada envío (en ms)
int sendDelay = 5*1000;//Aqui 5sec
//El identificador de cada sonda. Este identificador debe ser único a una sonda.
int probeId = 0;
//float packet;
void setup()
{
Serial.begin(9600);
Serial.println("Inicio del sensor.");
//dht.begin();
Mirf.cePin = 9;
Mirf.csnPin = 10;
//Se incializa Mirf , para gestioner el rf24
Mirf.spi = &MirfHardwareSpi;
Mirf.init();
Mirf.setRADDR((byte *)"prob1");//El nombre de la sonda del sensor
Mirf.payload = 5;//La longitud del paquete que transitará
Mirf.config();
Mirf.configRegister(RF_SETUP,0x06);
Mirf.setTADDR((byte*)"serv0");//El nombre del servidor al que transmite nuestros dato
Serial.println( "nRF24L01+ inicializando!" );
DHT.read21(dht_pin);
Serial.println(DHT.temperature);
Serial.println(DHT.humidity);
}
void loop()
{
//Si, durante el tiempo entre las transferencias de datos
if(lastSend+sendDelay <= millis())
{
Serial.println("Enviando...");
//Si uno se está enviando, esperamos que se acabe
while(Mirf.isSending()){
}
//Actualiza los valores de DHT21 (IMPORTANTE, poner en readdhtxx el que corresponda a tu sensor)
DHT.read21(dht_pin);
//El paquete se crea con una longitud de tres bytes
byte packet[5];
//El ID del sensor
packet[0] = (float) probeId;
//La temperatura
packet[1] = DHT.temperature;
packet[2] = (DHT.temperature-packet[1])*100;
//La humedad
packet[3] = DHT.humidity;
packet[4] = (DHT.humidity-packet[3])*100;
//Enviamos el paquete
Mirf.send(packet);
//Muestra los datos del paquete de depuración
Serial.print("Temp:");
Serial.print(packet[1]);
Serial.print(".");
Serial.println(packet[2]);
Serial.print("Humi:");
Serial.print(packet[3]);
Serial.print(".");
Serial.println(packet[4]);
//Actualiza la "fecha" de la transmisión de datos reciente
lastSend = millis();
}
}
#include <SPI.h>
#include <Mirf.h>
#include <nRF24L01.h>
#include <MirfHardwareSpiDriver.h>
#include <Ethernet.h>
#include <SFE_BMP180.h>
#include <Wire.h>
//Se declara la instancia de la libreria
SFE_BMP180 pressure;
double PresionBase;
double Presion = 0;
double Altura = 0;
double TemperaturaInterior = 0;
char status;
//La direccion MAC del shield ethernet
byte mac[] = {0xAA, 0xBB, 0xCC, 0x18, 0x01, 0x95};
//Puerto de escucha xx
EthernetServer server(8081);
//Ip fija
IPAddress ip(192,168,1,123);
//Ultimos datos del sensor DHT21
int lastTemp = 0;
int lastTemp2 = 0;
int lastHumi = 0;
int lastHumi2 = 0;
//Los valores cambia desde los ultimos enviado desde el ethernet
boolean valuesHaveChanged = false;
void setup()
{
//Se inicia la conexion serial
Serial.begin(9600);
/*
* Se inicia el nrf24L01
*/
Mirf.cePin = 9;
Mirf.csnPin = 8;
Mirf.spi = &MirfHardwareSpi;
Mirf.init();
Mirf.setRADDR((byte *)"serv0");//El nombre del servidor/receptor nrf24l01
Mirf.payload = 5;//Longitud del paquete en bytes
Mirf.config();
////Mirf.configRegister(RF_SETUP,0x06);
Serial.println( "nRF24L01+ inicializando!" );
Serial.println("Inicio de la captura del sensor.");
SensorStart();
//Se inicia el servidor , dando una ip y la mac.
Ethernet.begin(mac, ip);
server.begin();
//Muestra la Ip , para comprobar que todo este bien
Serial.print("Direccion obtenida del servidor DHCP: ");
Serial.println(Ethernet.localIP());
}
void loop()
{
//Recuperacion del servidor si entra un cliente
EthernetClient client = server.available();
//Si esta disponible los datos (nrf24L01+)
if(Mirf.dataReady())
{
//Creamos la tabla que contendrá los datos
byte datas[8];
datas[0];
//Se recupera y coloca los datos en la tabla
Mirf.getData(datas);
ReadSensor();
//Se muestra los datos mediante el puerto serie para la depuración
Serial.print("Temp:");
Serial.print(datas[1]);
Serial.print(".");
Serial.println(datas[2]);
Serial.print("Humi:");
Serial.print(datas[3]);
Serial.print(".");
Serial.println(datas[4]);
Serial.print("Presion:");
Serial.println(Presion);
Serial.print("Altura:");
Serial.println(Altura);
Serial.print("TemperaturaInterior:");
Serial.println(TemperaturaInterior);
//Almacena los ultimos datos
lastTemp = datas[1];
lastTemp2 = datas[2];
lastHumi = datas[3];
lastHumi2 = datas[4];
Presion = Presion;
Altura = Altura;
TemperaturaInterior = TemperaturaInterior;
//Se le dice al programa que los valores han cambiado y por lo que hay cosas que se devuelvan
valuesHaveChanged = true;
}
//Si un cliente entra, se recupera el servidor
if (client)
{
Serial.println("Nuevo cliente");
boolean currentLineIsBlank = true;
//Mientras el cliente está conectado
while (client.connected())
{
//Hasta que haya terminado de leer su petición
if (client.available())
{
//Lee la peticion del cliente , y muestra lo del serial
char c = client.read();
Serial.write(c);
//Si nos encontramos con un salto de línea y la línea actual ya está vacía
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
//El elemento raíz del documento XML
client.println("<sensors>");
for (int i = 0; i < 1; i++)
{
//Se crea un elemento para cada sensor
client.print("<sensor name=\"sns");
client.print(i);//Id del sensor
client.println("\">");
//Se crea un elemento secundario que contiene los valores de temperatura
client.print("<temperatura>");
//Si los valores del sensor han cambiado, se envia
if(valuesHaveChanged)
client.print(lastTemp);
client.print(".");
client.print(lastTemp2);
client.println("</temperatura>");
//Se crea un elemento secundario que contiene valores de humedad
client.print("<humedad>");
//Si los valores del sensor han cambiado, se envia
if(valuesHaveChanged)
client.print(lastHumi);
client.print(".");
client.print(lastHumi2);
client.println("</humedad>");
//Se crea un elemento secundario que contiene el valor de la presion
client.print("<Presion>");
if(valuesHaveChanged)
client.print(Presion);
client.println("</Presion>");
//Se crea un elemento secundario que contiene el valor de la temperatura interior
client.print("<TemperaturaInterior>");
if(valuesHaveChanged)
client.print(TemperaturaInterior);
client.println("</TemperaturaInterior>");
client.println("</sensor>");
}
//El elemento raíz sera cerrada
client.println("</sensors>");
break;
}
//Si se salta una línea
if (c == '\n')
{
//Es que comienza una nueva línea
currentLineIsBlank = true;
}
else if (c != '\r')
{
//Un caracter en la linea actual , no esta vacia
currentLineIsBlank = false;
}
}
}
//Se deja a la vez el navegador del cliente para recuperar datos
delay(1);
//Desconexión del cliente
client.stop();
Serial.println("cliente desconectado");
}
}
void SensorStart() {
if (pressure.begin())
Serial.println("BMP180 init success");
else
{
Serial.println("BMP180 init fail (disconnected?)\n\n");
while (1);
}
status = pressure.startTemperature();
if (status != 0) {
delay(status);
status = pressure.getTemperature(TemperaturaInterior);
if (status != 0) {
status = pressure.startPressure(3);
if (status != 0) {
delay(status);
status = pressure.getPressure(PresionBase, TemperaturaInterior);
}
}
}
}
void ReadSensor () {
status = pressure.startTemperature();
if (status != 0)
{
delay(status);
status = pressure.getTemperature(TemperaturaInterior);
if (status != 0)
{
status =pressure.startPressure(3);
if (status != 0)
{
delay(status);
status = pressure.getPressure(Presion, TemperaturaInterior);
if (status != 0)
{
Altura = pressure.altitude(Presion, TemperaturaInterior);
if (status != 0)
{
Altura = pressure.altitude(Presion, PresionBase);
}
else Serial.println("error en la lectura de presion\n");
}
else Serial.println("error iniciando la lectura de presion\n");
}
else Serial.println("error en la lectura de temperatura\n");
}
else Serial.println("error iniciando la lectura de temperatura\n");
}
}