Bonsoir,
Je tente d'envoyer des températures d'une sonde a base de DS1820 via des nRF24L01+ sur un LCD 4x20.
Comme je désire utiliser plusieurs sonde, je les identifie via un "int", puis je créer un tableau pour avoir un
paquet via float qui contient l'ident de la sonde et la température. (pas de byte car je désire des virgule pour la température).
Problème je ne reçoit rien du coter du récepteur !
J'
code de la sonde:
#include <Mirf.h>
#include <nRF24L01.h>
#include <MirfHardwareSpiDriver.h>
#include <SPI.h>
#include <DallasTemperature.h>
#include <OneWire.h>
#include <VirtualWire.h>
#define ONE_WIRE_BUS 2 //bus 2 pour le DS18
#include <LiquidCrystal.h> //Affichage de la température sur un lcd 2x8
LiquidCrystal lcd(9, 6, 5, 4, 3, 10);
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
DeviceAddress SDB = { 0x28, 0xC0, 0x09, 0xBC, 0x05, 0x00, 0x00, 0xC4 }; //sonde salle de bain
float tSDB;
int probeId = 1; //identifiant du DS18
void setup()
{
Serial.begin(9600);
Serial.println("Demarrage");
lcd.begin(8, 2);
sensors.begin();
sensors.setResolution(SDB, 10);
Mirf.cePin = 8;
Mirf.csnPin = 7;
Mirf.spi = &MirfHardwareSpi;
Mirf.init();
Mirf.setRADDR((byte *)"sensor_2"); //Le nom du capteur de la sonde
Mirf.payload = 6; // paquet 6 octets
Mirf.channel = 0; // Canal 0
Mirf.config();
Mirf.setTADDR((byte*)"recepteur"); //Nom du recepteur
Serial.println( "nRF24L01+ initialisation ...." );
}
void loop()
{
senddata();
}
void senddata()
{
while(Mirf.isSending()){
}
sensors.requestTemperatures();
float tSDB = sensors.getTempC(SDB);
lcd.clear();
lcd.setCursor(2, 0);
lcd.print("Temp ");
lcd.setCursor(0, 1);
lcd.print(">");
lcd.setCursor(2, 1);
lcd.print(tSDB);
lcd.print("C");
float packet[6]; // paquet 6 octets
Serial.print("packet ");
Serial.println(packet[6]);
packet[1] = probeId; // identifiant sonde
Serial.print("probe ");
Serial.println(packet[1]);
packet[5] = tSDB; // valeur temp
Serial.print("temp ");
Serial.println(packet[5]);
Mirf.send((byte *) &packet); // envoie des données
while(Mirf.isSending());
delay(5000); // toute les 5 secondes
}
Code du recepteur:
#include <Wire.h>
#include <SPI.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27,20,4); // ecran lcd 4x20
#include <Mirf.h>
#include <nRF24L01.h>
#include <MirfHardwareSpiDriver.h>
void setup()
{
Serial.begin(9600);
Serial.println("Demarrage");
lcd.init(); // initialize the lcd
lcd.backlight();
Mirf.cePin = 8; // CE sur D8
Mirf.csnPin = 7; // CSN sur D7
Mirf.spi = &MirfHardwareSpi;
Mirf.init();
Mirf.setRADDR((byte *)"recepteur"); //Le nom du serveur
Mirf.payload = 6;
Mirf.channel = 0; // Canal 0
Mirf.config();
Serial.println( "nRF24L01+ initialisation ..." );
}
void loop()
{
//Si des données sont dispo
if(Mirf.dataReady())
{
float datas[6]; // on stocke les données
Mirf.getData((byte *) &datas);
//On affiche via le port série
Serial.print("Sonde =");
Serial.println(datas[1]);
Serial.print("Temp =");
Serial.println(datas[5]);
lcd.setCursor(0, 0); // affichage sur LCD
lcd.print("Sonde ");
lcd.print(datas[1]);
lcd.setCursor(0, 1);
lcd.print("Temp ");
lcd.print(datas[5]);
}
}