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); }