ESP8266 + MQTT + JSN-SR04T

Hallo,

Ich versuche, das Gleiche mit einem ESP8266 + MQTT + JSN-SR04T-Ultraschallsensor zu machen, um die Kapazität meines Regenwassertanks zu messen.

Mein Programm scheint ohne Anschluss zu funktionieren. Sobald ich jedoch den Sensor anschließe, funktioniert nichts mehr.

Die Frage, die ich mir stelle, an welchen Pin muss ich ihn anschließen? 5V oder 3,3V?

Ein bisschen Hilfe für einen Anfänger wäre willkommen :sweat_smile:

Danke :stuck_out_tongue_winking_eye:

Hallo, nach diesem Plan würde ich auf 5V tippen.

Allerdings ist HC-SR04P 3,3V, aber HC-SR04 5V.

Eigentlich habe ich ein Problem, glaube ich, aufgrund der verschiedenen Anschlüsse. Ich habe diese Meldung in der Arduino-IDE: Hard resetting via RTS pin…

Ich suche im Netz, wie ich das machen kann.

Das ist eine normale Meldung, wenn du deinen Code hochlädst :slight_smile:

Guten Abend,
hast du dieses Modul? https://fr.aliexpress.com/item/1005001442055224.html?spm=a2g0o.detail.1000014.1.55474e2dLM75V8&gps-id=pcDetailBottomMoreOtherSeller&scm=1007.13338.183346.0&scm_id=1007.13338.183346.0&scm-url=1007.13338.183346.0&pvid=2a0eed97-d9e0-4469-8a54-2b8ca98b7325&_t=gps-id:pcDetailBottomMoreOtherSeller,scm-url:1007.13338.183346.0,pvid:2a0eed97-d9e0-4469-8a54-2b8ca98b7325,tpp_buckets:668%230%23131923%230_668%23888%233325%2310_3338%230%23183346%230_3338%233142%239889%231_668%232846%238110%23330_668%232717%237558%23183_668%231000022185%231000066058%230_668%233422%2315392%23770

Nicht ganz, aber ich habe diesen hier

https://fr.aliexpress.com/item/4000057298353.html?spm=a2g0o.productlist.0.0.63022c1083N6TC&algo_pvid=2327528f-bb6e-4a37-8ee9-8c5a6dd6bdd1&algo_expid=2327528f-bb6e-4a37-8ee9-8c5a6dd6bdd1-0&btsid=2100bb4716084074630347670e2bed&ws_ab_test=searchweb0_0,searchweb201602_,searchweb201603_

Hier ist mein Programm, das vor dem Anschließen funktioniert hat.

Ich erkläre: Als ich den Wemos anschloss, zeigte der Serielle Monitor an, dass die WiFi-Verbindung erfolgreich war sowie die MQTT-Verbindung.

Seit ich versucht habe, meinen Sensor an den Wemos anzuschließen, habe ich nur noch Symbole im Serielle Monitor.

Ideen?

#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"            // Benutzername
#define mqtt_password "****************"        // Passwort
#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 Sensor Tank

/* Buffer, der die empfangenen MQTT-Nachrichten decodiert */

char message_buff[100];

long lastMsg = 0;   // Zeitstempel der letzten auf MQTT veröffentlichten Nachricht
long lastRecu = 0;
bool debug = false;  // Zeigt auf der Konsole an, wenn True

/* Konstanten für die Pins */

const byte TRIGGER_PIN = 7; // TRIGGER-Pin
const byte ECHO_PIN = 6;    // ECHO-Pin

/* Konstanten für den Timeout */

const unsigned long MEASURE_TIMEOUT = 25000UL; // 25ms = ~8m bei 340m/s

/* Schallgeschwindigkeit in der Luft in mm/us */

const float SOUND_SPEED = 340.0 / 1000;

//Erstellung der Objekte

WiFiClient espClient;
PubSubClient client(espClient);

void setup() {

  /* Initialisiert den seriellen Port */

  Serial.begin(9600);     // Optional für Debugging

  /* Initialisiert die Pins */

  pinMode(TRIGGER_PIN, OUTPUT);
  digitalWrite(TRIGGER_PIN, LOW); // Der TRIGGER-Pin muss im Ruhezustand auf LOW sein
  pinMode(ECHO_PIN, INPUT);

  setup_wifi();           // Verbindung zum WiFi-Netzwerk herstellen
  client.setServer(mqtt_server, 1883);    // Konfiguration der Verbindung zum MQTT-Server
}

//Verbindung zum WiFi-Netzwerk
void setup_wifi() {
  delay(10);
  Serial.println();
  Serial.print("Verbindung zu ");
  Serial.println(wifi_ssid);

  WiFi.begin(wifi_ssid, wifi_password);

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

  Serial.println("");
  Serial.println("WiFi-Verbindung hergestellt ");
  Serial.print("=> IP-Adresse: ");
  Serial.print(WiFi.localIP());
}

//Wiederverbindung
void reconnect() {
  //Schleife bis eine Wiederverbindung erreicht wird
  while (!client.connected()) {
    Serial.print("Verbindung zum MQTT-Server...");
    if (client.connect("ESP8266Client", mqtt_user, mqtt_password)) {
      Serial.println("OK");
    } else {
      Serial.print("FEHLER, Fehler: ");
      Serial.print(client.state());
      Serial.println(" Warten Sie 5 Sekunden bevor Sie es erneut versuchen");
      delay(5000);
    }
  }
}

void loop() {
  if (!client.connected()) {
    reconnect();
  }
  client.loop();

  long now = millis();

  /*Sende eine Nachricht pro Minute*/

  if (now - lastMsg > 1000 * 60) {
    lastMsg = now;

    /* 1. Starte eine Entfernungsmessung, indem du einen HIGH-Impuls von 10µs auf den TRIGGER-Pin sendest */

    digitalWrite(TRIGGER_PIN, HIGH);
    delayMicroseconds(10);
    digitalWrite(TRIGGER_PIN, LOW);

    /* 2. Messen Sie die Zeit zwischen dem Senden des Ultraschallimpulses und seinem Echo (falls vorhanden) */

    long measure = pulseIn(ECHO_PIN, HIGH, MEASURE_TIMEOUT);

    /* 3. Berechnen Sie den Abstand aus der gemessenen Zeit */

    int distance_mm = measure / 2.0 * SOUND_SPEED;
    float c = 2000 - distance_mm;
    c = c / 2000;
    c = c * 100;

    //Es ist nicht nötig, weiterzumachen, wenn der Sensor nichts zurückgibt
    if ( isnan(c)) {
      Serial.println("Lesefehler! Überprüfen Sie Ihren HRC-04-Sensor");
      return;
    }

    if ( debug ) {
      Serial.print("Tank: ");
      Serial.print(c);
    }
    client.publish(gladys_topic, String(c).c_str(), true);   //Veröffentlicht die Temperatur auf dem temperature_topic
  }
  if (now - lastRecu > 100 ) {
    lastRecu = now;
    client.subscribe("homeassistant/switch1");
  }
}

Guten Abend Jerome,
Unter welcher Spannung versorgst du deinen Sensor?

Ja, das riecht nach einem Problem mit der Stromversorgung, die Spannung ist wahrscheinlich nicht ausreichend. Oder der Baudrate ist falsch.

Wenn du deinen Sensor mit 5V versorgst, benötigst du einen Spannungswandler von 5V auf 3,3V an jedem verwendeten Eingang, da die Eingänge und Ausgänge des Wemos nur 3,3V unterstützen. Zweiter Hinweis in deinem Programm: Du verwendest die Pins 6 und 7. Ich denke, du solltest D6 und D7 verwenden, denn wenn du das « D » weglässt, versteht der Wemos GPIO 6 und GPIO 7, die den Pins für das Flash-Speicher-Management entsprechen. Das ist alles.

Hallo @Psoy

Ich habe das Programm geändert, indem ich die D hinzugefügt habe

Ich habe das als Adapter gekauft

https://fr.aliexpress.com/item/32848861724.html?spm=a2g0s.9042311.0.0.27426c37Ebeija

Beim Anschließen verbinde ich den GND mit GND und die anderen Anschlüsse ab dem Wemos auf LOW LV: 3.3, LV1: D6, LV2: D7 und auf der Sensorseite HV: 5V, HV1: Echo und HV2: Trigger

Ist das richtig so?

Problem gelöst, das « D » ändert alles.

Adapter nicht nötig.

Programm funktioniert und Rückmeldung in Gladys ok. Jetzt muss ich es nur noch in meinen Tank installieren.

Danke @Psoy

Super, :+1:
aber überprüfe die Dokumentation deines Wemos, ob er 5V an seinen Eingängen akzeptiert, denn langfristig können diese durchbrennen
viel Erfolg,

Es wäre gut gewesen, wenn du dein eigenes Thema zu deinem Problem erstellt hättest, auch wenn es mit dem Artikel von @pierre-gilles in Verbindung steht.

@VonOx, der Aufteilungsexperte, falls du vorbeikommst ^^

Der Sensor, den du verwendest, sieht richtig cool aus, das wird mir diesen Sommer sicher nützlich sein.

Das ist erledigt, ich mach dir ein kleines Tutorial

Du hast schon verstanden, dass ich nicht vorhatte, Chaos zu stiften :joy:

Zum Thema zurück: Ich habe tamosta mit einem SR04 und einem ESP12E getestet, also ehrlich gesagt, ich habe keine Lust mehr, Code zu schreiben, das ist stressfrei. (PR läuft, um die Entfernungsmesser zu verwalten)

Ich denke, man sollte darauf hinweisen, dass du nicht die aktuelle Version von Gladys verwendest, sondern eine Weiterentwicklung, die den SR04 korrekt integriert.

Nur eine kurze Rückmeldung, um Ihnen mitzuteilen, dass alles gut funktioniert. Allerdings habe ich eine Frage zur MQTT-API. Ich musste die Funktion „Feuchtigkeit - Prozentsatz“ auswählen.

Die kommt dem, was ich wollte, am nächsten. Wäre es möglich, eine spezifische Bezeichnung für meinen Bedarf wie „Tankkapazität - Prozentsatz“ zu haben oder alternativ eine Anzeige, die wirklich toll wäre?

Die Abstandssensoren kommen (cm zunächst, aber in Prozent wäre auch gut)

Das Messgerät ist ein anderes Thema, ich brauche es auch :wink: (es steht auf meiner To-do-Liste)