[TUTORIAL] Den verbleibenden Speicherinhalt des Regenwassertanks ermitteln

hallo.
vielen dank für dieses tutorial, aber nach der umsetzung funktioniert nichts
das seriellen monitor zeigt nur fragezeichen
vielen dank an denjenigen, der sich die zeit nimmt, darauf zu antworten

Hallo @oli

Ist dein Upload gut gelaufen? Bist du bei 9600 Baud in deinem seriellen Monitor? Siehst du nur Fragezeichen oder viele verschiedene Zeichen?

hallo @jerome
hier ist mein Upload
. Variablen und Konstanten im RAM (global, statisch), verwendet 28728 / 80192 Bytes (35%)
║ SEGMENT BYTES BESCHREIBUNG
╠══ DATA 1496 initialisierte Variablen
╠══ RODATA 1312 Konstanten
╚══ BSS 25920 nullgesetzte Variablen
. Anweisungs-RAM (IRAM_ATTR, ICACHE_RAM_ATTR), verwendet 60363 / 65536 Bytes (92%)
║ SEGMENT BYTES BESCHREIBUNG
╠══ ICACHE 32768 reservierter Speicherplatz für Flash-Anweisungs-Cache
╚══ IRAM 27595 Code im IRAM
. Code im Flash (Standard, ICACHE_FLASH_ATTR), verwendet 250036 / 1048576 Bytes (23%)
║ SEGMENT BYTES BESCHREIBUNG
╚══ IROM 250036 Code im Flash
esptool.py v3.0
Serieller Port COM3
Verbinde…
Chip ist ESP8266EX
Funktionen: WiFi
Kristall ist 26MHz
MAC: 34:94:54:8e:17:ce
Uploading stub…
Running stub…
Stub läuft…
Ändere die Baudrate auf 460800
Geändert.
Konfiguriere die Flash-Größe…
Automatisch erfasste Flash-Größe: 4MB
Komprimiert 284592 Bytes auf 208993…
Schreibe an 0x00000000… (7 %)
Schreibe an 0x00004000… (15 %)
Schreibe an 0x00008000… (23 %)
Schreibe an 0x0000c000… (30 %)
Schreibe an 0x00010000… (38 %)
Schreibe an 0x00014000… (46 %)
Schreibe an 0x00018000… (53 %)
Schreibe an 0x0001c000… (61 %)
Schreibe an 0x00020000… (69 %)
Schreibe an 0x00024000… (76 %)
Schreibe an 0x00028000… (84 %)
Schreibe an 0x0002c000… (92 %)
Schreibe an 0x00030000… (100 %)
Wrote 284592 bytes (208993 compressed) at 0x00000000 in 4.9 seconds (effective 461.9 kbit/s)…
Hash der Daten wurde überprüft.

Verlasse…
Hard-Reset über RTS-Pin…

hallo @jerome
ich bin auf 9600 Baud hier sind die Nachrichten
image

hallo @jerome
hier ist mein Code, ich habe den SSID und das WLAN-Passwort sowie Gladys ersetzt
Ich habe nur das esp8266wifi nicht in der Bibliothek gefunden
Also habe ich installiert

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

/* WIFI */

#define wifi_ssid « … » // Ihr WLAN-SSID
#define wifi_password « … » // Ihr WLAN-Passwort

/* MQTT */

#define mqtt_server « 192.168.0.10 »
#define mqtt_user «  » // Benutzername
#define mqtt_password «  » // MQTT-Passwort
#define gladys_topic « gladys/master/device/mqtt:garage:capteur-ultrason/feature/mqtt: garage:capteur-ultrason:quantite/state »
#define mqtt_cuve « mqtt:garage:capteur-ultrason » //Topic Sensor Tank

/* Puffer, 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 = 6; // TRIGGER-Pin
const byte ECHO_PIN = 7; // ECHO-Pin

/* Konstanten für den Timeout */

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

/* Schallgeschwindigkeit in der Luft in mm/µs */

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 WLAN-Netzwerk herstellen
client.setServer(mqtt_server, 1883); // Konfiguration der Verbindung zum MQTT-Server
}

//Verbindung zum WLAN-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("WLAN-Verbindung hergestellt « );
Serial.print( »=> IP-Adresse: ");
Serial.print(WiFi.localIP());
}

//Wiederverbindung herstellen
void reconnect() {
//Schleife bis eine Wiederverbindung hergestellt ist
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();

/Senden einer Nachricht pro Minute/

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

/* 1. Startet eine Entfernungsmessung, indem ein HIGH-Impuls von 10µs auf den TRIGGER-Pin gesendet wird */

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

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

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

/* 3. Berechnet die Entfernung aus der gemessenen Zeit */

int distance_mm = measure / 2.0 * SOUND_SPEED;
float c = 1750 - distance_mm; // SEHR WICHTIG Ersetzen Sie 2000 durch die Höhe Ihres Tanks
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 den % des Tanks im Topic in Gladys

}
}

Ich glaube, das Problem liegt tatsächlich an der Bibliothek.

Laut Google ist das Problem offensichtlich bekannt.

Allerdings bin ich kein großer Arduino-Experte und ich denke, der Code sollte neu konfiguriert werden. Andernfalls muss man den ZIP-Ordner der Bibliothek suchen, um sie direkt zu integrieren.

Hallo @pierre-gilles

Gibt es in der Community Leute, die gut mit Arduino-Code umgehen können und den ursprünglichen Code möglicherweise ändern oder weiterentwickeln könnten? Meine Fähigkeiten sind zu begrenzt.


Und wie ist es damit?
Ich wollte mich ohnehin damit beschäftigen, da der Arduino, den ich für diese Funktion verwendet habe, nass geworden ist und da ich ihn ohnehin ersetzen muss, wollte ich einen Wemos einsetzen. Ich könnte mich damit beschäftigen…
Allerdings, wenn ich mir die Freiheit nehmen darf, Tasmota verwaltet diesen Typ von Sensor nativ auf einem Wemos, gibt aber nur einen Wert in cm und nicht in % aus:

Das ermöglicht es, die Schaltung selbst einfach zu testen

Durch Hinzufügen einer Regel könnte man den % über den MQTT-Broker bei Bedarf angeben

vielen Dank für deine Antwort.
Ich werde dem Newsfeed folgen, für mich sind meine Fähigkeiten auch zu begrenzt, um deinen Code zu ändern.