Hallo zusammen, möchte jemand hohe Temperaturen messen?
Ist ja ganz schön Lang geworden seit ich das letzte mal hier war
Auf jeden fall habe ich um die Abgastemperatur meines Kaminofens messen
zu können einen Sensor gesucht der mehr verträgt als die üblichen Sensoren.. NTC, ds18b20 usw..
Deswegen habe ich mir einen Scetch
abgeändert um ein
MAX6675 Modul mit Passendem K Typ Sensor verwenden zu können.
Mein gewählter Sensor ist angegeben bis 800C°
optimal,, weil ich mir schon 2 teure ntc bis 280 Weggebruzelt hatte in der Anzünd fase
Da das gerät bei mir am Dachboden baumelt übertrage ich die Empfangs stärke gleich mit...
Das hab ich mittlerweile bei fast allen nachgerüstet...
wie sonst auch ..
messung einstellbar alle XX sec.
Delta einstellbar für beide Werte ( egal welches auslöst, es werden beide werte übertragen )
Zwangsübermittlung einstellbar alle XXX sec.
Name der Variablen auf der CCU einstellbar..
Da es für den Wemos keine Passende Lib gibt muss die von Adafruit etwas verändert werden..
die Datei max6675.cpp mit zb. Nodepad++ öffnen
und von
auf das ändern,, bzw, auskommentieren,, mehr ist es nicht..
Vielleicht kann das ja noch jemand brauchen,
viel Spaß damit
mfg. Flo
Code: Alles auswählen
/*
* WeMos MAX6675 Ofen Abgastemp messen
*
* verbindet sich mit dem vorhandenen WLAN als Server
* und bei Bedarf mit der CCU als Client
*
* Steuerung über HTTP-Befehle:
* "<IP-Adresse>" gibt eine Status- und Befehlsübersicht aus
* "<IP-Adresse>/temp" gibt die zuletzt gemessene Temperatur aus (Grad Celsius)
* "<IP-Adresse>/feucht" gibt die zuletzt gemessene Luftfeuchtigkeit aus (in Prozent)
* "<IP-Adresse>/zeit" gibt den CCU-Zeitstempel aus, an dem die letzte Meldung an die CCU erfolgte
* "<IP-Adresse>/temp?delta=<wert>" setzt den Temperatur-Differenzwert, der eine CCU-Meldung ausloest
* "<IP-Adresse>/temp?korr=<wert>" setzt den Korrekturwert fuer die Temperaturmessung
* "<IP-Adresse>/feucht?delta=<wert>" setzt den Feuchtigkeits-Differenzwert, der eine CCU-Meldung ausloest
* "<IP-Adresse>/feucht?korr=<wert>" setzt den Korrekturwert fuer die Feuchtigkeitsmessung
* "<IP-Adresse>/zeit?delta=<wert>" setzt die Zeitspanne (in Sekunden), nach der spaetestens eine CCU-Meldung erfolgt
* "<IP-Adresse>/zeit?mess=<wert>" definiert das Messintervall (in Sekunden)
*
* Getesteter Aufbau:
* WeMos D1 mini
* MAX6675 Sensormodul mit passendem Sensor bis 800C
* */
#include <ESP8266WiFi.h>
#include <WiFiClient.h>
#include <ESP8266WebServer.h>
#include "max6675.h" // MAX6675
// ******* Netzwerkeinstellungen, bitte anpassen! *******
const char* ssid = "xxxxxxxxxxxxx"; // SSID des vorhandenen WLANs
const char* password = "xxxxxxxxxxx"; // Passwort für das vorhandene WLAN
//IPAddress gateway(xxx,xxx,xxx,xxx); // IP-Adresse des WLAN-Gateways
IPAddress subnet(255,255,255,0); // Subnetzmaske
//IPAddress ip(xxx,xxx,xxx,xxx); // feste IP-Adresse für den WeMos
const char* host = "xxxxxxxxxxxxxxx"; // IP-Adresse der CCU
ESP8266WebServer server(80); // Webserver initialisieren auf Port 80
unsigned long deltaMessungSekunden = 15; //Zeitintervall (Sekunden) nach dem eine Messung erfolgt
//**********************************************************************
// MAX6675 MAX6675,
// hier sind einzutragen welche Pins für den MAX Verwendet werden sollen
int thermoDO = 12; //ist D5 - SCK --> auf MAX6675
int thermoCS = 13; //ist D6 - SO --> auf MAX6675
int thermoCLK = 14; //ist D7 - CS --> auf MAX6675
//*********************************************************************************************
// ******* Einstellungen fuer Meldungen an die CCU, bitte anpassen! *******
String max1 = "W5max6675" ; // Name der Var. auf der ccu Temperatur des MAX6675
String rssi1 = "W5rssi" ; // Name der Var. auf der ccu WLAN Signal dBm
unsigned long deltaMeldungSekunden = 300; // Zeitintervall (Sekunden) nach dem eine CCU-Meldung erfolgt (0 bedeutet nie)
float deltaMax = 1; // max6675 aenderung) bei der eine CCU-Meldung erfolgt (0 bedeutet nie) //---eingefügt
float deltaRSSI = 1; // rssi aenderung
float thermo_C = 0, maxWert = 0, rssiWert = 0, rssi = 0;
unsigned long jetztMillis = 0;
unsigned long deltaMessungMillis = deltaMessungSekunden * 1000, letzteMessungMillis = 0;
unsigned long deltaMeldungMillis = deltaMeldungSekunden * 1000, letzteMeldungMillis = 0;
String antwort = "", meldung = "",letzteMeldungCCUzeit = "";
String zeitstempel() { // Betriebszeit als Stunde:Minute:Sekunde
char stempel[10];
int lfdStunden = millis()/3600000;
int lfdMinuten = millis()/60000-lfdStunden*60;
int lfdSekunden = millis()/1000-lfdStunden*3600-lfdMinuten*60;
sprintf (stempel,"%03d:%02d:%02d", lfdStunden, lfdMinuten, lfdSekunden);
return stempel;
}
//******************************************************************************
void messung()
{
// Sensoren abfragen
//*****************************************************************
//MAX6675
MAX6675 thermocouple(thermoCLK, thermoCS, thermoDO);
thermo_C = thermocouple.readCelsius() -0.1 ; // Sensor Lesen und Korrekturwert
letzteMessungMillis = jetztMillis;
Serial.print(" Temperatur = ");
Serial.print(thermo_C);
Serial.println(" C ");
{
rssi = WiFi.RSSI();
// letzteMessungMillis = jetztMillis;
Serial.print(" Signalstärke = ");
Serial.print(rssi);
Serial.println(" dBm ");
}
}
//***************************************************************************************************
void melde_CCU() { // Werte an die CCU melden
WiFiClient client;
const int httpPort = 8181;
if (!client.connect(host, httpPort)) {
return;
}
String
url = "/xy.exe?antwort1=dom.GetObject('" + max1 + "').State('" + thermo_C + "')"
"&antwort2=dom.GetObject('" + rssi1 + "').State('" + rssi + "')";
Serial.print("Requesting URL: ");
Serial.println(url);
// This will send the request to the server
client.print(String("GET ") + url + " HTTP/1.1\r\n" +
"Host: " + host + "\r\n" +
"Connection: close\r\n\r\n");
delay(100);
// Read all the lines of the reply from server and print them to Serial
while (client.available()) {
String line = client.readStringUntil('\r');
}
//****************************************************************************************************
//****************************************************************************************************
Serial.println("Werte an CCU gemeldet, " + letzteMeldungCCUzeit);
letzteMeldungMillis = jetztMillis; // gemeldete Daten merken
rssiWert = rssi;
maxWert = thermo_C;
}
void melde_zeit() { // bei Aufruf von ".../zeit"
String delta = server.arg("delta");
String mess = server.arg("mess");
if (delta != "") {
deltaMeldungSekunden = delta.toInt();
deltaMeldungMillis = deltaMeldungSekunden * 1000;
server.send(200, "text/plain", "Zeitintervall fuer CCU-Meldungen auf " + delta + " Sekunden gesetzt.");
delay(100);
Serial.println(zeitstempel() + " Zeitintervall fuer CCU-Meldungen ueber HTTP geaendert: " + delta + " Sekunden");
}
else if (mess != "") {
deltaMessungMillis = mess.toInt() * 1000;
server.send(200, "text/plain", "Zeitintervall fuer Sensorabfrage auf " + mess + " Sekunden gesetzt.");
delay(100);
Serial.println(zeitstempel() + " Zeitintervall fuer Sensorabfrage ueber HTTP geaendert: " + mess + " Sekunden");
}
else {
server.send(200, "text/plain", "Letzte Aktualisierung der CCU\n" + letzteMeldungCCUzeit);
delay(100);
Serial.println(zeitstempel() + " Letzte Aktualisierung der CCU ueber HTTP Status gemeldet");
}
}
void setup() {
// dht.begin(); // Sensor initialisieren
// Seriellen Monitor für Kontrollausgaben öffnen
Serial.begin(115200);
Serial.println("");
Serial.println("WeMos MAX6675 Sensor");
// WLAN-Verbindung herstellen
// WiFi.config(ip, gateway, subnet); // auskommentieren, falls eine dynamische IP bezogen werden soll
WiFi.mode(WIFI_STA); // eingefügt
WiFi.begin(ssid, password);
Serial.print("Verbindungsaufbau");
// Verbindungsaufbau abwarten
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println(" erfolgreich!");
Serial.println("");
Serial.print("Verbunden mit: ");
Serial.println(ssid);
Serial.print("Signalstaerke: ");
int rssi = WiFi.RSSI();
Serial.print(rssi);
Serial.println(" dBm");
Serial.print("IP-Adresse: ");
Serial.println(WiFi.localIP());
Serial.println("");
// HTTP-Anfragen bearbeiten
server.on("/zeit", melde_zeit);
// HTTP-Server starten
server.begin();
Serial.println(zeitstempel() + " HTTP-Server gestartet");
// Startwerte fuer Zeittrigger
letzteMessungMillis = millis();
letzteMeldungMillis = millis();
}
void loop() {
// auf HTTP-Anfragen warten
server.handleClient();
jetztMillis = millis();
// neue Messung falls Zeitintervall erreicht
if(jetztMillis - letzteMessungMillis > deltaMessungMillis) {
messung();
}
// neue Meldung an die CCU falls Zeitintervall erreicht
if(!deltaMeldungMillis == 0 && jetztMillis - letzteMeldungMillis > deltaMeldungMillis) {
Serial.print(zeitstempel() + " Zeitintervall erreicht: ");
melde_CCU();
}
// neue Meldung an die CCU falls rssi aenderung den Schwellwert erreicht
if(!deltaRSSI == 0 && abs(rssi - rssiWert) >= deltaRSSI) { // Neue Meldung wg. Analog aenderung?
Serial.print(zeitstempel() + " RSSI aenderung: ");
melde_CCU();
}
// neue Meldung an die CCU falls MAX6675 aenderung den Schwellwert erreicht
if(!deltaMax == 0 && abs(thermo_C - maxWert) >= deltaMax) { // Neue Meldung wg. MAX6675 aenderung?
Serial.print(zeitstempel() + " MAX6675 aenderung: ");
melde_CCU();
}
}