Bonjour,
C'est ma première demande et je vais essayer de respecter les règles d'utilisation du forum afin que ma demande déjà compliqué soit facile à comprendre.
Je me présente Dimitri, 27 ans, technicien.
J'ai pour projet de faire communiquer des compteurs d'eau à impulsions à un serveur central pour faire du suivi d'information en temps réel.
Aussi j'ai décidé d'utiliser :
-
ARDUINO MEGA 2560 R3 ELEGOO
-
Shield ETHERNET HanRun HR911105A
-
Module NRF24L01 + 2.4 Ghz** Suite à un problème de portée changement de choix** -
Shield Dragino Lora Shield v1.4 Lien du shield
-
Heltec Carte de Dev Wifi LoRa Esp 32 Lien du module
Je vous présente maintenant les codes initiaux pour l’émission et la récéption sous NRF24 L01 :
EMISSION :
/**
* Exemple de code pour la bibliothèque Mirf – Client d'envoi de variable
*/
#include <SPI.h> // Pour la communication via le port SPI
#include <Mirf.h> // Pour la gestion de la communication
#include <nRF24L01.h> // Pour les définitions des registres du nRF24L01
#include <MirfHardwareSpiDriver.h> // Pour la communication SPI
float valeur = 0;
float eau = 2;
void setup() {
Serial.begin(9600);
Mirf.cePin = 9; // Broche CE sur D9
Mirf.csnPin = 10; // Broche CSN sur D10
Mirf.spi = &MirfHardwareSpi; // On veut utiliser le port SPI hardware
Mirf.init(); // Initialise la bibliothèque
Mirf.channel = 1; // Choix du canal de communication (128 canaux disponibles, de 0 à 127)
Mirf.payload = sizeof(float); // Taille d'un message (maximum 32 octets)
Mirf.config(); // Sauvegarde la configuration dans le module radio
Mirf.setTADDR((byte *) "nrf02"); // Adresse de transmission
Mirf.setRADDR((byte *) "nrf01"); // Adresse de réception
Serial.println("Go !");
}
void loop() {
valeur=valeur+eau;
delay(1000);
Mirf.send((byte *) &valeur); // On envoie le message
while(Mirf.isSending()); // On attend la fin de l'envoi
}
RECEPTION :
#include <SPI.h> //bibliothèqe pour SPI
#include <Ethernet.h> //bibliothèque pour Ethernet
#include <SPI.h> // Pour la communication via le port SPI
#include <Mirf.h> // Pour la gestion de la communication
#include <nRF24L01.h> // Pour les définitions des registres du nRF24L01
#include <MirfHardwareSpiDriver.h> // Pour la communication SPI
byte mac[] = {xxxxxxxxxxxxxxxxxxxxxxxxxxxx}; //adresse mac de votre carte
byte ip[] = {xxxxxxxxxxxxxxxxx}; //adresse IP
EthernetServer serveur(80); // déclare l'objet serveur au port d'écoute 80
float valeur;
void setup() {
//setup ETHERNET
Serial.begin (9600); //initialisation de communication série
Ethernet.begin (mac, ip); //initialisatio de la communication Ethernet
Serial.print("\nLe serveur est sur l'adresse : ");
Serial.println(Ethernet.localIP()); //on affiche l'adresse IP de la connexion
//setup sansfil
Mirf.cePin = 2; // Broche CE sur D2
Mirf.csnPin = 3; // Broche CSN sur D3
Mirf.spi = &MirfHardwareSpi; // On veut utiliser le port SPI hardware
Mirf.init(); // Initialise la bibliothèque
Mirf.channel = 1; // Choix du canal de communication (128 canaux disponibles, de 0 à 127)
Mirf.payload = sizeof(float); // Taille d'un message (maximum 32 octets)
Mirf.config(); // Sauvegarde la configuration dans le module radio
Mirf.setTADDR((byte *) "nrf01"); // Adresse de transmission
Mirf.setRADDR((byte *) "nrf02"); // Adresse de réception
Serial.println("Go !");
}
void loop() {
//void clign();
float valeur;
if(Mirf.dataReady()){
Mirf.getData((byte *) &valeur); // Réception du paquet
Serial.println(valeur); // Affiche le message
}
EthernetClient client = serveur.available(); //on écoute le port
if (client) { //si client connecté
Serial.println("Client en ligne\n"); //on le dit...
if (client.connected()) { // si le client est en connecté
while (client.available()) { // tant qu'il a des infos à transmettre
char c=client.read(); // on lit le caractère
Serial.write(c);// on l'écrit sur le moniteur série
delay(1); //délai de lecture
}
//réponse au client
client.println("<!DOCTYPE HTML>"); // informe le navigateur du type de document à afficher
client.println("<html>Compteur d'eau brute deferisee
</html>"); //code html
client.println(valeur);
client.println("m3");
client.stop(); //on déconnecte le client
Serial.println("Fin de communication avec le client");
}
}
}
Jusqu'à là, pas de soucis. Ces deux programmes marchent correctement et me permettent de me connecter n'importe où dans le monde pour avoir un accès à mon information valeur.
La difficulté : :
Et oui sinon je serais pas là
La portée de ce projet est de plus de 300 m et après des essais sur site j'ai du revoir mon mode de communication pour du LoRa.
Le problème c'est que je n'y connais rien, et que je n'arrive pas à adapter mes deux programmes pour du LoRa.
Trop de nouvelles bibliothèques, trop de configuration, et mon anglais est un poil léger pour le peu de vidéo qu'il y a sur Youtube.
Alors je souhaiterais savoir ...
Quelqu'un à déjà travaillé avec ma configuration matériel ?
Quelqu'un à des idées ?
Je vous remercie par avance d'avoir pris le temps de lire ce long premier post