Comme promis voici mes codes :
en premier le code du capteur avec :un nRF24L01+, un dht11 (humidité air + temperature, sonde humidité sol, luminosité et une tentative de sleep mais j'en reparle a la fin.
//***********************************************************************************************************/
// Programme du capteur BambooProbe Humidité du sol, humidité de l'air, température de l'air et Luminosité
//
// Code nRF24L01+ inspiré de http://geeklaboratories.com/408-comment-monitorer-le-climat-de-son-domicile-avec-arduino
//
// David M - plantesvertes.net
//***********************************************************************************************************/
// La library sleep mode
#include <Sleep_n0m1.h>
Sleep sleep;
unsigned long sleepTime; //how long you want the arduino to sleep
//Inclure la librairie de pilotage du capteur DHT11
#include <dht11.h>
dht11 DHT; //Instancier un capteur de type dht11
#define DHT11PIN 2 //Branché sur pin2 digital
//***********************************************
#include <SPI.h> //Bibliothèque gérant les connexions SPI
//Bibliothèques gérant les nRF24L01+
#include <Mirf.h>
#include <nRF24L01.h>
#include <MirfHardwareSpiDriver.h>
//***********************************************
//La dernière fois que l'on a envoyé des données via le nRF (en ms)
long lastSend = 0;
//Le delai entre chaque envois (en ms)
int sendDelay = 5*1000;//Ici 5sec
//L'identifiant de chaque sonde. Cette identifiant doit être propre à une sonde.
int probeId = 0;
// on declare le capteur sol
int PinAnalogiqueHumidite=0; //Broche Analogique de mesure d'humidité A0
int PinNumeriqueHumidite=6; //Broche Numérique mesure de l'humidité
int hsol; //Humidite su sol, mesure analogique
int secheresse; //0 ou 1 si seuil atteint
//**************************
// on declare le capteur lumière sur A1
const int sensorLightPin = A1;
int sensorLightValue = 0;
int lightValue = 0;
// on setup
void setup() {
Serial.begin(9600); //on ouvre un port pour tout le monde
sleepTime = 20000; //set sleep time in ms, max sleep time is 49.7 days
//On inialise MIRF pour pouvoir gérer nos nRFs
Mirf.spi = &MirfHardwareSpi;
Mirf.init();
Mirf.setRADDR((byte *)"prob1");//Le nom du capteur de la sonde
Mirf.payload = 12;//La longueur des paquets qui transiteront
Mirf.config();
Mirf.setTADDR((byte*)"serv0");//Le nom du serveur à qui on transmet nos données
Serial.println( "nRF24L01+ initialise!" );
//********************
pinMode(PinAnalogiqueHumidite, INPUT); //pin A0 en entrée analogique
pinMode(PinNumeriqueHumidite, INPUT); //pin 6 en entrée numérique
}
void loop() { //boucle principale
//Si on a atteint le délai entre deux envois de données
if(lastSend+sendDelay <= millis())
{
Serial.println("Sending...");
//Si on est en train d'envoyer, on attend que ce soit fini
while(Mirf.isSending()){
}
// on lit les données du capteur lumiere et on stock dans lightValue
lightValue = analogRead(sensorLightPin);
hsol = analogRead(PinAnalogiqueHumidite); // Lit la tension analogique du capteur sol
secheresse = digitalRead(PinNumeriqueHumidite);
//On actualise les valeurs du DHT11
DHT.read(DHT11PIN);
//On crée le paquet d'une longueur de 12 octets
byte packet[6];
//L'identifiant du capteur
packet[0] = probeId;
//La température
packet[1] = DHT.temperature;
//L'humidité
packet[2] = DHT.humidity;
//Le sol
packet[3] = (hsol/4);
//la lumiere
packet[4] = lightValue;
// la secherresse
packet[5] = secheresse;
//On envoit le paquet
Mirf.send(packet);
//On affiche les données du paquet pour le debug
Serial.print("Temp:");
Serial.println(packet[1]);
Serial.print("Humi:");
Serial.println(packet[2]);
Serial.print("hsol:");
Serial.println(packet[3]);
Serial.print((float)hsol);
Serial.print("lumiere:");
Serial.println(packet[4]);
Serial.print("secheresse:");
Serial.println(packet[5]);
//On actualise la "date" du dernier envoi de données
lastSend = millis();
}
delay(2000);
sleep.pwrDownMode(); //set sleep mode
sleep.sleepDelay(sleepTime); //sleep for: sleepTime
}