Kaffeemaschine mit dem NodeMCU verbessert
Retrofit , eine alte Kaffeemaschine mit einem NodeMCU umgebaut, das sie sich automatisch nach einer einstellbaren Zeit selbst ausschaltet, zusätzlich ist die Abschaltung auch temperaturüberwacht.
Weiterhin hat man die Möglichkeit die Kaffeemaschine mit einer App zu programmieren und den Status abfragen. Man wird benachrichtigt, wenn der Kaffee fertig ist und sieht auf dem Handy die Kaffeetemperatur mit Warmhaltefunktion.
Die Wlan Verbindung der Kaffeemaschine sorgt dafür, dass sie auch ferngeschaltet/überwacht werden kann. Die eingebaute Temperaturüberwachung sendet auch bei einem Brand in der Umgebung der Kaffeemaschine eine Benachrichtigung auf das Handy.
Die Technologie ist heute unter dem Namen IoT (Internet der Dinge) bekannt.

Der NodeMCU Controller ist der gleiche aus dem letzten Beitrag. Im letzten Beitrag wurde der NodeMCU mit einem Solarpaneel betireben:
Temperatur Anzeige via Wlan/WIFI auf das Handy

Hier der Code zum selbst probieren:
//nodeMCU v1.0 (black) with Arduino IDE
#include <ESP8266WiFi.h>
#include <ESP8266WiFiAP.h>
#include <ESP8266WiFiGeneric.h>
#include <ESP8266WiFiMulti.h>
#include <ESP8266WiFiScan.h>
#include <ESP8266WiFiSTA.h>
#include <ESP8266WiFiType.h>
#include <WiFiClient.h>
#include <WiFiClientSecure.h>
#include <WiFiServer.h>
#include <WiFiUdp.h>
#include <DallasTemperature.h>
#include <OneWire.h>
#define ONE_WIRE_BUS D1
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature DS18B20(&oneWire);
char temperatureString[6];
const char* ssid = "xxxxxxx";
const char* password = "1234";
int ledPin = 13; // GPIO13 oder D7 Physisch am Board
int ledPinAN_AUS = 4; // GPIO4 oder D2 Physisch am Board
int Relais = 14; // GPIO14 hier ist ein Relais angeschlossen
int buttonPin = 2; // GPIO2 oder D4 Physisch am Board
int buttonState = 0; // variable for reading the pushbutton status
int value = LOW;
long AusschaltZeit = 600;
long AusschaltZeit_Zaehler = 0;
WiFiServer server(80);
void setup(void){
Serial.begin(9600);
delay(10);
AusschaltZeit_Zaehler = 0;
pinMode(Relais, OUTPUT);
digitalWrite(Relais, LOW);
pinMode(buttonPin, INPUT);
// Connect to WiFi network
Serial.println();
Serial.println();
Serial.print("mit Router verbinden: ");
Serial.println(ssid);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.println("mit WiFi verbunden");
// Start the server
server.begin();
Serial.println("Server ist gestartet");
Serial.print("Lokale IP Adresse vom Router bekommen: ");
Serial.print("http://");
Serial.print(WiFi.localIP());
Serial.println("/");
pinMode(ledPin, OUTPUT);
digitalWrite(ledPin, HIGH); // man kann eine LED anschliessen, dann sieht man das das Gerät an ist
pinMode(ledPinAN_AUS, OUTPUT);
digitalWrite(ledPinAN_AUS, HIGH); //Diese LED Zeigt ob das Relais an oder aus ist
DS18B20.begin();
}
float getTemperature() {
float temp;
do {
DS18B20.requestTemperatures();
temp = DS18B20.getTempCByIndex(0);
delay(100);
} while (temp == 85.0 || temp == (-127.0));
return temp;
}
void loop() {
// read the state of the pushbutton value:
buttonState = digitalRead(buttonPin);
// check if the pushbutton is pressed.
// if it is, the buttonState is HIGH:
if (buttonState == HIGH) {
if (value == HIGH) {
value = LOW;
digitalWrite(ledPinAN_AUS, HIGH);
digitalWrite(Relais, LOW);
} else {
value = HIGH;
digitalWrite(ledPinAN_AUS, LOW);
digitalWrite(Relais, HIGH);
}
}
// Check if a client has connected
WiFiClient client = server.available();
if (!client) {
// wenn kein Client verbunden ist
AusschaltZeit_Zaehler++;
delay(1000);
if(AusschaltZeit_Zaehler >= AusschaltZeit) {
value = HIGH;
digitalWrite(Relais, HIGH);
}
return; //springe wieder zum Anfang der LOOP
}
float temperature = getTemperature();
dtostrf(temperature, 2, 1, temperatureString);
// ############################################ Button Teil beginn #######
delay(100);
// Read the first line of the request
String request = client.readStringUntil('\r');
Serial.println(request);
client.flush();
// Match the request
if (request.indexOf("/LED=OFF") != -1) {
digitalWrite(Relais, HIGH);
value = HIGH;
}
if (request.indexOf("/LED=ON") != -1) {
digitalWrite(Relais, LOW);
value = LOW;
}
// ############################################ Button Teil ende #######
client.println("HTTP/1.1 200 OK");
client.println("Content-Type: text/html");
client.println(""); // der darf nicht vergessen werden!
client.println("<!DOCTYPE HTML>");
client.println("<html>");
//Sagt dem Client, das er sich alle 5 sec. aktualisieren soll
client.print("<head><meta http-equiv=refresh content=\"5; URL=http://");
client.print(WiFi.localIP());
client.println("/\">");
client.println("<meta name=\"viewport\" content=\"width=device-width, inital-scale=1.0, maxium-scale=1.0, user-scalable=0\"/>");
client.println("<meta charset=\"utf-8\"/>");
client.println("</head>");
client.println("<body>");
client.print("<h1>");
client.print(temperatureString);
client.print(" °C");
client.print("</h1>");
// ############################################ Button Teil beginn #######
client.print("Kaffemaschine ist: ");
if(value == HIGH) {
digitalWrite(ledPinAN_AUS, LOW);
AusschaltZeit_Zaehler = 0;
client.print("<span style='color: #FF0000; font-weight: bold;'> AUS</span>");
} else {
digitalWrite(ledPinAN_AUS, HIGH);
if(AusschaltZeit_Zaehler >= AusschaltZeit) {
value = HIGH;
digitalWrite(Relais, HIGH);
client.print("<span style='color: #FF0000; font-weight: bold;'> AUS</span>");
} else {
client.print("<span style='color: #00FF00; font-weight: bold;'> AN</span>");
}
}
client.println("<br><br>");
if (AusschaltZeit_Zaehler != 0) {
client.print("Kaffeemaschine schaltet in ");
if((AusschaltZeit - AusschaltZeit_Zaehler) > 120) {
client.print((AusschaltZeit - AusschaltZeit_Zaehler) / 60);
client.println(" min aus");
} else {
client.print(AusschaltZeit - AusschaltZeit_Zaehler);
client.println(" sec aus");
}
}
client.println("<br><br>");
client.println("<a href=\"/LED=ON\"\"><button> Schalte EIN </button></a>");
client.println("<a href=\"/LED=OFF\"\"><button> Schalte AUS </button></a><br />");
// ############################################ Button Teil ende #######
client.println("</body>");
client.println("</html>");
AusschaltZeit_Zaehler++;
digitalWrite(ledPin, LOW); // Hier sieht man wenn der Browser einen Wert liest
delay(1000);
Serial.println(temperatureString);
digitalWrite(ledPin, HIGH);
}