Bonjour à tous
J’ai un petit projet avec mon arduino uno qui doit mesure une profondeur de ma citerne a eau de pluie avec le capteur aj-sr04m une fois cette valeur créer je voudrais l’envoyer sur mon serveur home assistant via un serveur mqtt .
Bonne nouvelle j’ai deux script qui fonctionne parfaitement l’un pour envoyer la valeur sur mon serveur home assistant et l’autre pour mesurer la profondeur .
Mais lorsque j’essaie de les « fusionné » je ne reçois plus la valeur de profondeur
Voici mon code qui envoie vers le serveur home assitant :
#include <SPI.h>
#include <Ethernet.h>
#include <PubSubClient.h>
//code correcta la connection mqtt a ne pas modifier sauf ip arduino
// Ethernet Shield configuration
byte mac[] = {0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED}; // Replace with your Ethernet shield MAC address
IPAddress ip(192, 168, 1, 17); // Replace with your Ethernet shield IP address
IPAddress server(192, 168, 0, 5); // Replace with your MQTT server IP address
// MQTT client configuration
void callback(char* topic, byte* payload, unsigned int length) {
// Handle incoming messages
}
EthernetClient ethClient;
PubSubClient mqttClient(ethClient);
void setup() {
// Start serial communication
Serial.begin(9600);
// Initialize Ethernet Shield
Ethernet.begin(mac, ip);
Serial.print("Connecting to Ethernet...");
// Wait for Ethernet connection
delay(1000); // Wait for Ethernet Shield to initialize
Serial.println("Ethernet Shield initialized");
// Initialize MQTT client
mqttClient.setServer(server, 1883);
mqttClient.setCallback(callback);
// Connect to MQTT broker
while (!mqttClient.connected()) {
Serial.println("Connecting to MQTT broker...");
if (mqttClient.connect("arduino-client", "niveaueau", "test")) {
Serial.println("MQTT broker connected");
} else {
Serial.print("MQTT connection failed, rc=");
Serial.print(mqttClient.state());
Serial.println(" retrying in 5 seconds");
delay(5000);
}
}
}
void loop() {
//config message
float value = 10.5;
char message[10];
sprintf(message, "%.1f", value); // Convert float to string with one decimal place
// Publish message to MQTT broker
mqttClient.loop();
mqttClient.publish("my/topic", "150");
mqttClient.publish("my/pooltemp", "21");
// Wait before publishing next message
delay(10000);
}
Voici mon code qui mesure la profondeur :
#include <NewPing.h>
// Définir les broches pour les connexions du capteur
#define PIN_TRIG 11
#define PIN_ECHO 10
// Initialiser l'objet NewPing avec les broches appropriées
NewPing sonar(PIN_TRIG, PIN_ECHO);
void setup() {
// Démarrer la communication série
Serial.begin(9600);
}
void loop() {
// Mesurer la distance en centimètres avec le capteur
unsigned int distance = sonar.ping_cm();
// Vérifier si la mesure est valide (distance non nulle)
if (distance != 0) {
// Afficher la distance mesurée sur le moniteur série
Serial.print("Distance : ");
Serial.print(distance);
Serial.println(" cm");
} else {
// Si la mesure est invalide, afficher un message d'erreur
Serial.println("Erreur de mesure. Vérifier les connexions du capteur.");
}
// Attendre une courte période avant de mesurer à nouveau
delay(500);
}
Voici mon code « fusionné » :
#include <NewPing.h>
#include <SPI.h>
#include <Ethernet.h>
#include <PubSubClient.h>
// Définir les broches pour les connexions du capteur
#define PIN_TRIG 11
#define PIN_ECHO 10
// Initialiser l'objet NewPing avec les broches appropriées
NewPing sonar(PIN_TRIG, PIN_ECHO);
// Ethernet Shield configuration
byte mac[] = {0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED}; // Remplacez par l'adresse MAC de votre shield Ethernet
IPAddress ip(192, 168, 1, 17); // Remplacez par l'adresse IP de votre shield Ethernet
IPAddress server(192, 168, 0, 5); // Remplacez par l'adresse IP de votre serveur MQTT
// MQTT client configuration
void callback(char* topic, byte* payload, unsigned int length) {
// Handle incoming messages
}
EthernetClient ethClient;
PubSubClient mqttClient(ethClient);
void setup() {
// Démarrer la communication série
Serial.begin(9600);
// Initialize Ethernet Shield
Ethernet.begin(mac, ip);
Serial.print("Connecting to Ethernet...");
// Wait for Ethernet connection
delay(100);
Serial.println("Ethernet Shield connected");
// Initialize MQTT client
mqttClient.setServer(server, 1883);
mqttClient.setCallback(callback);
// Se connecter au serveur MQTT avec mot de passe
if (mqttClient.connect("arduino-client", "niveaueau", "test")) {
Serial.println("Connected to MQTT server");
} else {
Serial.println("Failed to connect to MQTT server");
while (1); // Bloquer l'exécution si la connexion MQTT échoue
}
}
void loop() {
// Mesurer la distance en centimètres avec le capteur
unsigned int distance = sonar.ping_cm();
// Vérifier si la mesure est valide (distance non nulle)
if (distance != 0) {
// Afficher la distance mesurée sur le moniteur série
Serial.print("Distance : ");
Serial.print(distance);
Serial.println(" cm");
// Convertir la distance en chaîne de caractères
String payload = String(distance);
// Publier la distance sur un sujet MQTT
mqttClient.publish("capteur/sonar/distance", payload.c_str());
} else {
// Si la mesure est invalide, afficher un message d'erreur
Serial.println("Erreur de mesure. Vérifier les connexions du capteur.");
}
// Attendre une courte période avant de mesurer à nouveau
delay(500);
}
Lors de mes test pour le debug quand je retire cette ligne Ethernet.begin(mac, ip) ma mesure revient dans le moniteur
Avez vous une idée de mon erreur ?
Merci