Esp8266 + mqtt + jsn-sr04t

Bonjour,

Je cherche à faire la même chose avec un ESP8266 + MQTT + JSN-SR04T capteur ultrason pour mesurer la capacité de ma cuve eau de pluie.

Mon programme semble fonctionnel hors branchement. Par contre dès que je connecte le capteur plus rien.

La question que je me pose, sur quelle broche je dois le brancher ? 5v ou 3.3V ?

Un peu d’aide pour un débutant serait la bienvenue :sweat_smile:

Merci :stuck_out_tongue_winking_eye:

Salut, d’après ce plan, je dirais sur 5v.

https://tasmota.github.io/docs/HC-SR04/

Quoi que, HC-SR04P est 3.3v, mais HC-SR04 5v.

En faite j’ai un souci je pense suite aux différents branchement j’ai ce message sur l’ide arduino : Hard resetting via RTS pin…

Je cherche comment faire sur le net.

c’est un message normal quand tu téléverse ton code :slight_smile:

bonsoir ,
c’est ce module que tu as? Module de télémétrie ultrasonique étanche, module à double sonde/JSN SR04T/0 pour éviter les angles morts | AliExpress

Pas tout a fait j’ai celui-ci

Voici mon programme qui fonctionnait avant branchement.

Je m’explique quand je branchais le wemos, le moniteur de serie affichait bien que la connexion wifi était réussie ainsi que la connexion MQTT.

Depuis que j’ai essayé de brancher mon capteur à mon wemos je n’ai plus que des symbole dans le moniteur de serie.

Une idée ???

#include <ESP8266WiFi.h>
#include <PubSubClient.h>

/* WIFI */

#define wifi_ssid "******box"
#define wifi_password "****************"

/* MQTT */

#define mqtt_server "192.168.0.7"
#define mqtt_user "gladys"            // username
#define mqtt_password "****************"        // password
#define gladys_topic "gladys/master/device/mqtt:jardin:capteur-ultrason/feature/mqtt: jardin:capteur-ultrason:quantite/state"
#define mqtt_cuve "mqtt:jardin: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);

void setup() {

  /* Initialise le port serie */

  Serial.begin(9600);     //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
}

//Connexion au réseau WiFi
void setup_wifi() {
  delay(10);
  Serial.println();
  Serial.print("Connexion a ");
  Serial.println(wifi_ssid);

  WiFi.begin(wifi_ssid, wifi_password);

  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }

  Serial.println("");
  Serial.println("Connexion WiFi etablie ");
  Serial.print("=> Addresse IP : ");
  Serial.print(WiFi.localIP());
}

//Reconnexion
void reconnect() {
  //Boucle jusqu'à obtenur 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 = 2000 - distance_mm;
    c = c / 2000;
    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 la température sur le topic temperature_topic
  }
  if (now - lastRecu > 100 ) {
    lastRecu = now;
    client.subscribe("homeassistant/switch1");
  }
}

Bonsoir Jerome,
Sur quelle tension tu alimentes ton capteur?

Ouai ça sent le problème d’alim , la tension n’est probablement pas suffisante. Ou le baudrate qui est incorrect

Si tu alimentes ton capteur en 5v, il te faut un adaptateur de tension 5v vers 3.3v sur chaque entrée utilisée , car les entrées et sorties du wemos ne supportent que le 3.3v. Deuxieme piste dans ton programme tu utilises les pins 6 et 7;. je pense que tu dois mettre D6 et D7, car si tu ne mets pas le “D” le wemos comprends GPIO 6 et Gpio 7 qui correspondent aux pins de gestion de la mémoire Flash. voila

Salut @Psoy

J’ai modifié le programme en rajoutant les D

J’ai acheté ça comme adaptateur

Au niveau du branchement je raccorde le GND sur GND et les autres ports à partir du wemos sur LOW LV : 3.3, LV1 : D6, LV2 : D7 et coté capteur sur HV : 5V HV1 : Echo et HV2 : trigger

C’est bien çà ?

Problème résolu le “D” change tout.

Adaptateur pas nécessaire.

Programme fonctionnel et retour dans Gladys ok. Il me reste plus qu’à l’installer dans ma cuve maintenant.

Merci @Psoy

1 « J'aime »

Super, :+1:
mais vérifies la doc de ton Wemos voir si il accepte le 5v sur ses entrées, car à la longue, elles peuvent bruler
bonne continuation,

Ça aurait été bien de faire ton propre sujet sur ton soucis, même si c’est en rapport avec l’article de @pierre-gilles.

@VonOx, le pro du scindage si tu passe par là ^^

Le capteur que t’utilise a l’air bien cool, ca va me servir pour cet été je pense.

C’est fait, je te ferai un petit tuto

1 « J'aime »

T’as bien compris que je voulais pas foutre le bordel :joy:

1 « J'aime »

Pour en revenir au sujet, j’ai testé tamosta avec un sr04 et un esp12e , bah clairement je m’embête plus à écrire du code, c’est sans prise de tête. ( PR en cours pour gérer les capteurs de distance)

1 « J'aime »

Je pense qu’il faut prévenir que tu n’utilises pas la version actuelle de Gladys, mais une évolution, qui intègre correctement le SR04.

Juste un petit retour pour vous dire que tout est bien opérationnel par contre j’ai une question dans l’api MQTT j’ai du choisir la fonctionnalité “Humidité - pourcentage”


qui se rapproche le plus de ce que je souhaitais mais serait-il possible d’avoir un libellé spécifique à mon besoin style “capacité cuve - pourcentage” ou sinon d’avoir une jauge qui serait vraiment top

image

Les unités pour capteurs de distance arrivent ( cm pour commencer mais en pourcentage ça peut être bien aussi)

La jauge c’est un autre sujet, j’en ai besoin aussi :wink: ( c’est dans ma to-do list)