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…
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");
}
}
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.
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
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.
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?