Bonjour,
Le matériel que j'utilise en électronique est pour le moment rudimentaire:
-une carte ESP32
-un capteur d'humidité du sol Iduino ME110
-une led
Mon projet est de mettre au point un système d'arrosage pour des murs végétalisés avec récupération des eaux de pluies qui soit automatisé. Sur le long terme, je veux que le système d'arrosage soit optimisé avec les capteurs d'humidité au sol d'une part, et avec une API météo d'autre part. Pour le moment, j'ai travaillé sur un programme qui permet d'utiliser un capteur d'humidité, utilisant le port n°15 comme entrée analogique afin d'établir une tension entre 0 (humide) et 4095 (sec), puis convertissant en une valeur comprise entre 0 et 100 (pour plus de lisibilité des données).
Je n'en suis pas encore au stade de définir le seuil établissant le stress hydrique de la plante, j'ai donc choisi la valeur 35 au hasard, en dessous de quoi une led s'allume (afin de simuler l'activation de l'électrovanne pour procéder à l'arrosage du mur végétalisé). Comme tel, ça fonctionne bien. Cependant, quand je veux faire communiquer ma carte ESP32 avec la Gateway Dragino pour plus tard travailler sur Arduino, je me rends compte que la valeur de l'entrée analogique devient nulle (j'ai automatiquement 0 comme résultat). Cet aspect de côté, la connexion wifi se passe normalement et l'ensemble paraît bien tourner (même si j'ai encore des lacunes pour bien communiquer avec la Gateway, mais je m'efforce d'apprendre étape par étape).
J'ai recherché où je le pouvais des solutions. J'en ai trouvé une pour les capteurs de température DHT11, qui utilise "DHT dht(DHTYPE,DHTPIN)", se reposant à ce titre sur la librairie DHT sensor. Cependant, les librairies que j'ai trouvé pour les capteurs d'humidité au sol ne me semblent pas avoir quelque chose de comparable. Quelqu'un aurait-il la solution pour m'aider à dépasser ce blocage ?
Merci à vous !
#include <WiFi.h> // Utilisation de la librairie WiFi.h
#include <WiFiMulti.h>
#include <Arduino.h>
#include <HTTPClient.h>
#include "gravity_soil_moisture_sensor.h"
#define USE_SERIAL Serial
#define MSTYPE ME110 // Là, j'essaye d'imiter la librairie DHT sensor en mettant le type du "Moisture Sensor", mais je ne suis pas convaincu par l'utilisation
#define gravity_sensor_pin 15 // définition du port pour l'entrée analogique du capteur
GravitySoilMoistureSensor gravity_sensor;
WiFiMulti wifiMulti;
HTTPClient http; // va créer un objet qui s'appelle HTTPClient qui va permettre de lancer des requêtes en HTTP
const char* ssid = "ssid"; // Mettre votre SSID Wifi
const char* password = "mdp"; // Mettre votre mot de passe Wifi
int PinLed=2;
void setup() {
pinMode(PinLed,OUTPUT);
Serial.begin(115200);
uint8_t PinCap = 15;
if (!gravity_sensor.Setup(PinCap)) {
Serial.println("Le capteur d'humidité au sol n'a pas été détecté.");
while(1);
}
else {
Serial.println("Le capteur d'humidité au sol est opérationnel !");
}
Serial.println("\n");
WiFi.begin(ssid,password); // Initialisation avec WiFi.begin / ssid et password
Serial.print("Attente de connexion ..."); // Message d'attente de connexion
while(WiFi.status() != WL_CONNECTED) // Test connexion
{Serial.print("."); // Affiche des points .... tant que connexion n'est pas OK
delay(100);}
Serial.println("\n");
Serial.println("Connexion établie !"); // Affiche connexion établie
}
void loop() {
uint16_t value = gravity_sensor.Read(gravity_sensor_pin);
int a = 40.95;
int b = 100;
float sensorConvert = value / a;
float sensorConvert1 = b - sensorConvert; // conversion mathématique rudimentaire pour passer de 0/4095 à 0/100 => plus on est proche de 0, plus le pourcentage d'humidité est élevé
Serial.printf("Valeur de l'entrée analogique du capteur : %d\n", value);
Serial.print("Ce qui donne ");
Serial.print(sensorConvert1);
Serial.println("% d'humidité.");
if (sensorConvert1 < 35) {digitalWrite(PinLed,HIGH);} // si le pourcentage d'humidité est inférieure à 35%, la petite led s'allume (simulation de l'électrovanne qui s'active)
else {digitalWrite(PinLed,LOW);}
int h = sensorConvert1;
if ((wifiMulti.run() == WL_CONNECTED)) { // Si c'est connecté, ça fait ce qu'il y a en dessous
USE_SERIAL.println("[DEBG] " + String(h));
USE_SERIAL.print("[HTTP] begin...\n");
// configure traged server and url
//http.begin("https://www.howsmyssl.com/a/check", ca); //HTTPS
http.begin("https://adresseserveur/h/" + String(h)); //HTTP => démarre connexion vers le serveur mentionné
USE_SERIAL.print("[HTTP] GET...\n");
// start connection and send HTTP header
int httpCode = http.GET(); // soumet une requête de type "get", puis récupère résultat qui sera collée dans HTTP
// httpCode will be negative on error
if (httpCode > 0) { // si c'est supérieur à 0, il refait un test)
// HTTP header has been send and Server response header has been handled
USE_SERIAL.printf("[HTTP] GET... code: %d\n", httpCode);
// file found at server
if (httpCode == HTTP_CODE_OK) {
// Si ça s'est bien passé, il refait une variable où il met le getString puis affiche à l'écran
String payload = http.getString();
USE_SERIAL.println(payload);
if (payload == "ON") {
digitalWrite(4, HIGH);
}
if (payload == "OFF") {
digitalWrite(4, LOW);
}
}
}
else {
// sinon, il dit que ça ne fonctionne pas
USE_SERIAL.printf("[HTTP] GET... failed, error: %s\n", http.errorToString(httpCode).c_str());
}
http.end(); }
delay(5000);
}