#include <ESP8266WiFi.h>
#include <PubSubClient.h>
/* WIFI */
#define wifi_ssid « Txxxxxxxxxxx8 » // votre ssid wifi
#define wifi_password « xxxxxxxxxxx » // votre mot de passe wifi
/* MQTT */
#define mqtt_server « 192.168.1.1xx »
#define mqtt_user « gladys » // username
#define mqtt_password « bxxxxxxxxxxxxxxx » // mot de passe MQTT
#define gladys_topic « gladys/master/device/mqtt:citerne1:capteur-ultrason/feature/mqtt:citerne1:capteur-ultrason:quantite/state »
#define mqtt_cuve « mqtt:citerne1:capteur-ultrason » //Topic capteur cuve
/* Buffer qui permet de décoder les messages MQTT reçus */
char message_buff[100];
long lastMsg = 0; //Horodatage du dernier message publié sur MQTT
long lastRecu = 0;
bool debug = false; //Affiche sur la console si True
/* Constantes pour les broches */
const byte TRIGGER_PIN = 7; // Broche TRIGGER
const byte ECHO_PIN = 6; // Broche ECHO
/* Constantes pour le timeout */
const unsigned long MEASURE_TIMEOUT = 25000UL; // 25ms = ~8m à 340m/s
/* Vitesse du son dans l’air en mm/us */
const float SOUND_SPEED = 340.0 / 1000;
//Création des objets
WiFiClient espClient;
PubSubClient client(espClient);
//Connexion au réseau WiFi
void setup() {
Serial.begin(115200); //Facultatif pour le debug
/* Initialise les broches */
//pinMode(TRIGGER_PIN, OUTPUT);
//digitalWrite(TRIGGER_PIN, LOW); // La broche TRIGGER doit être à LOW au repos
//pinMode(ECHO_PIN, INPUT);
setup_wifi(); //On se connecte au réseau wifi
client.setServer(mqtt_server, 1883); //Configuration de la connexion au serveur MQTT
}
void setup_wifi() {
delay(10);
Serial.println(« \r\n\r\nxxxxxxxxxxx START xxxxxxxxxxxxxxx »);
Serial.print(« Connexion à « );
Serial.println(wifi_ssid);
//WiFi.disconnect();
//WiFi.mode(WIFI_STA);
WiFi.begin(wifi_ssid, wifi_password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print( ». »);
}
Serial.println(« . »);
Serial.println("Connexion WiFi etablie « );
Serial.print( »=> Adresse IP : ");
Serial.print(WiFi.localIP());
}
//Reconnexion
void reconnect() {
Serial.println(" Test MQTT : ");
//Boucle jusqu’à obtenir une reconnexion
while (!client.connected()) {
Serial.print(« Connexion au serveur MQTT… »);
if (client.connect(« ESP8266Client », mqtt_user, mqtt_password)) {
Serial.println(« OK »);
} else {
Serial.print(« KO, erreur : « );
Serial.print(client.state());
Serial.println( » On attend 5 secondes avant de recommencer »);
delay(5000);
}
}
}
void loop() {
if (!client.connected()) {
reconnect();
}
client.loop();
long now = millis();
/Envoi d’un message par minute/
if (now - lastMsg > 1000 * 60) {
lastMsg = now;
/* 1. Lance une mesure de distance en envoyant une impulsion HIGH de 10µs sur la broche TRIGGER */
digitalWrite(TRIGGER_PIN, HIGH);
delayMicroseconds(10);
digitalWrite(TRIGGER_PIN, LOW);
/* 2. Mesure le temps entre l'envoi de l'impulsion ultrasonique et son écho (si il existe) */
long measure = pulseIn(ECHO_PIN, HIGH, MEASURE_TIMEOUT);
/* 3. Calcul la distance à partir du temps mesuré */
int distance_mm = measure / 2.0 * SOUND_SPEED;
float c = 20 - distance_mm; // TRES IMORTANT Remplacer 2000 par la hauteur de votre cuve
c = c / 20;
c = c * 100;
//Inutile d'aller plus loin si le capteur ne renvoi rien
if ( isnan(c)) {
Serial.println("Echec de lecture ! Verifiez votre capteur HRC-04");
return;
}
if ( debug ) {
Serial.print("Cuve : ");
Serial.print(c);
}
client.publish(gladys_topic, String(c).c_str(), true); //Publie le % de la cuve sur le topic dans gladys
}
}