Hallo Leute,
hab da so ein Problem. Vorweg möchte ich noch anmerken ich kennen mich mit Programmierungen nicht richtig aus.
Also: Ich habe eine NodeMCU Amica an dem zwei DS18B20 Temperaturfühler dran hängen.
Diese schicken die Daten an Blynk und somit auf mein Handy - soweit so gut.
Die Idee war nun, dass Blynk mich benachrichtigt wenn die Temp2 höher als die Temp1 ist.
Das habe ich mit folgenden Code geschaft:
#define BLYNK_PRINT Serial
#include <ESP8266WiFi.h>
#include <BlynkSimpleEsp8266.h>
#include <OneWire.h>
#include <DallasTemperature.h>
#define ONE_WIRE_BUS 2//D4
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
BlynkTimer timer;
char auth[] = "XXX";
char ssid[] = "xx";
char pass[] = "xx";
float temp1 = 0;
float temp2 = 0;
void setup()
{
Serial.begin(115200);
Blynk.begin(auth, ssid, pass);
sensors.begin();
// Setup a function to be called every second
timer.setInterval(3400L, sendTemps);
delay(500);
}
void sendTemps()
{
sensors.requestTemperatures(); //Call all sensors on one wire to start calculating the temperature readings
temp1=sensors.getTempCByIndex(0);
sensors.requestTemperatures();
temp1 = sensors.getTempCByIndex(0);
Serial.println(String("Sıcaklik=")+temp1+ String(" C"));
Blynk.virtualWrite(V1, temp1);
delay(500);
sensors.requestTemperatures(); //Call all sensors on one wire to start calculating the temperature readings
temp2=sensors.getTempCByIndex(1);
sensors.requestTemperatures();
temp2 = sensors.getTempCByIndex(1);
Serial.println(String("Sıcaklik=")+temp2+ String(" C"));
Blynk.virtualWrite(V2, temp2);
if(temp2 > temp1){
Blynk.notify("Pumpe an");
}
}
void loop()
{
Blynk.run();
timer.run();
delay(500);
}
Jetzt zum Problem: Bei jedem Durchlauf bekomme ich nun eine Benachrichtigung (ca. alle 2 Sek.). Es soll aber nur eine Meldung kommen wenn Temp2 den wert von temp1 übersteigt.
Hat da jemand eine Idee?
In Excel mit Vba hätte ich es so gelöst:
Sub iMeldung()
' Zulauf Pool
If Cells(2, 2) < Cells(2, 1) Then
Range("C1").Value = 0
End If
' Pool Zulauf
If Cells(2, 1) < Cells(2, 2) And Range("c1").Value = 0 Then
MsgBox "Pumpe start", vbOKOnly
Range("C1").Value = 1
End If
End Sub
Habe schon versucht es ins Arduino rein zu bekommen, aber es kommen immer Fehlermeldungen.
Denke ich bräuchte eine Globale Variable, leider kommt beim Prüfen dann immer der Fehler: exit status 1
'OneWire oneWire' previously declared here
Hier der Code dazu:
#define BLYNK_PRINT Serial
#include <ESP8266WiFi.h>
#include <BlynkSimpleEsp8266.h>
#include <OneWire.h>
#include <DallasTemperature.h>
#define ONE_WIRE_BUS 2//D4
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
BlynkTimer timer;
char auth[] = "xx";
char ssid[] = "xx";
char pass[] = "xx";
float temp1 = 0;
float temp2 = 0;
byte w = 0;
void setup()
{
Serial.begin(115200);
Blynk.begin(auth, ssid, pass);
sensors.begin();
// Setup a function to be called every second
timer.setInterval(3400L, sendTemps);
delay(500);
}
void sendTemps()
{
sensors.requestTemperatures(); //Call all sensors on one wire to start calculating the temperature readings
temp1=sensors.getTempCByIndex(0);
sensors.requestTemperatures();
temp1 = sensors.getTempCByIndex(0);
Serial.println(String("Sıcaklik=")+temp1+ String(" C"));
Blynk.virtualWrite(V1, temp1);
delay(500);
sensors.requestTemperatures(); //Call all sensors on one wire to start calculating the temperature readings
temp2=sensors.getTempCByIndex(1);
sensors.requestTemperatures();
temp2 = sensors.getTempCByIndex(1);
Serial.println(String("Sıcaklik=")+temp2+ String(" C"));
Blynk.virtualWrite(V2, temp2);
if (temp2 < temp1){
w = 0;
}
if(temp2 > temp1 && w==0){
Blynk.notify("Pumpe an");
w = 1;
}
}
void loop()
{
Blynk.run();
timer.run();
delay(500);
}
Vielleicht kann mir einer hierbei weiter helfen. Ist leider schwerer als gedacht
Danke euch im Voraus