CO2-Ampel mit Server und Display

/* This program is distributed in the hope that it will be useful,
      but WITHOUT ANY WARRANTY; without even the implied warranty of
      MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
      GNU General Public License for more details. */
#include <ESP8266WiFi.h>
#include <MHZ19.h>
#include <SoftwareSerial.h>
#include <ESP8266WebServer.h>

#include <Wire.h>

#include <LiquidCrystal_I2C.h>

LiquidCrystal_I2C lcd1(0x27, 16, 2);

String matrixausgabe_text  = " "; // Ausgabetext als globale Variable

volatile int matrixausgabe_index = 0;// aktuelle Position in Matrix

IPAddress myOwnIP; // ownIP for mDNS 

int Temp = 0 ;
//Reading CO2, temperature from the MHZ19 By: Jonathan Dempsey

//https://github.com/WifWaf/MH-Z19

MHZ19 myMHZ19; // Objekt MHZ19 Umweltsensor
SoftwareSerial MHZSerial(12,14, false); // TX,RX

int CO2 = 0 ;
String CO2TEXT = "" ;
String TempTEXT = "" ;
int doCal=0;  // Kalibriermerker
void CO2_Kalibrierfunktion(){ // Kalibrierfunktion
// Forced Calibration MH-Z19
Serial.print("Start MH-Z19 calibration, please wait 20 s ...");delay(20000);
myMHZ19.setRange(2000);
myMHZ19.calibrateZero();
myMHZ19.setSpan(2000); 
myMHZ19.autoCalibration(false);
Serial.println(" done");
}


ESP8266WebServer server(80);
//------------------------------ Server Hompage html-Code
const char INDEX_HTML_START[] =
 "<!DOCTYPE HTML>"
  "<html>"
  "<META HTTP-EQUIV=\"refresh\" CONTENT=\"20\">"
   "<head>"
   "<meta name = \"viewport\" content = \"width = device-width, initial-scale = 1.0, maximum-scale = 1.0, user-scalable=0\">"
     "<title>IoT-Werkstatt Umwelt-Campus Birkenfeld</title>"
   "</head>"
    "<body>"
    "<CENTER>";

const char INDEX_HTML_SUBMIT[] =
     "<FORM action=\"/\" method=\"post\">"
     "<P>"
        "Password: "
        "<INPUT type=\"text\" name=\"message\">"
        "<INPUT type=\"submit\" value=\"Calibrate\">"
      "</P>"
     "</FORM>";

const char INDEX_HTML_END[] =
    "</CENTER>"
   "</body>"
  "</html>";
 
 String cal_passwort = "Kalibrieren"; // Kalibrierpasswort
 String cal_message  = "";      // Nachricht
 
//------------------------------ Server Ausgabe Messwerte in Form einer html-Tabelle

String messwertTabelle(){ 
  String unit1=" C";
  String unit2="";
  String unit3="";

  String nam1="Temperatur";
  String nam2="";
  String nam3="";

  float mess1=myMHZ19.getTemperature();
  float mess2=0;
  float mess3=0;
  //String html =  "<h2>Aktuelle Informationen:</h2>";
  String html = "<h2><table>";
  if (nam1.length()>0)
     html = html +  "<tr><td>" + nam1 + ":</td> <td>" + String(mess1) + "</td><td>"+ unit1 +" </td></tr>";
  if (nam2.length()>0)
     html = html +  "<tr><td>" + nam2 + ":</td> <td>" + String(mess2) + "</td><td>"+ unit2 +" </td></tr>";
  if (nam3.length()>0)
     html = html +  "<tr><td>" + nam3 + ":</td> <td>" + String(mess3) + "</td><td>"+ unit3 +" </td></tr>";
  html=html+"</table></h2>";
  return html;
}
//------------------------------ Server Ausgabe Bild in Abhängigkeit von Messert und Grenzen
void serverSendFigure(){ 
  String unit ="ppm";
  String nam  ="CO2";
  float mess=myMHZ19.getCO2();
  float limit1 = 1000;
  float limit2 = 1800;
  if (mess < limit1) // grün
     server.sendContent(F("<img src= 'data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEBLAEsAAD/2wBDAFk9Q05DOFlOSE5kXllphd6QhXp6hf/CzaHe////////////////////////////////////////////////////2wBDAV5kZIV1hf+QkP//////////////////////////////////////////////////////////////////////////wAARCAExASwDASIAAhEBAxEB/8QAGQABAAMBAQAAAAAAAAAAAAAAAAIDBAEF/8QAKhABAAIBAgYBBAMBAQEAAAAAAAECAxExBBIhQVFhcRMiMoFCkaFSsSP/xAAXAQEBAQEAAAAAAAAAAAAAAAAAAQID/8QAGxEBAQEBAAMBAAAAAAAAAAAAAAERAhIxUUH/2gAMAwEAAhEDEQA/ANYAAAAAAAAAAjfJTHGtrRDLk4yZ6Y409yDZMxEaz0U34rFX+Ws+mG97XnW1plEGq3Gz/GkftXbiss/y0+IUgJTlyTve39ozMzvMgAADsXtG1pj9pxnyxtef31VgNFeMyRvEStpxtJ/Ksx/rEA9SmWl/xtEpPJW4+JyU780eJB6Iox8XS/S32z72X7gAAAAAAAAAAAAAAAAAqzZ64o69bdoBZa0VjW06QyZuMmemLp7lRky2y21tP6QAmZtOszMz7BKuO1vUBuIuxWZ2hdXHWPfymmsXv4ojFM7zonGKveZlYDPlUYx1js7yx4h0E1zSPEGkeIdBEZpXxDk46z20TBdqqcPiUJx2jtr8NAavlWUaZrE7wrti/wCZNbnUVLMWe+L8Z6eJVzExOkwK09HDxFMvT8beJWvJacHFzX7cnWPPcG0ImLRExOsSAAAAAAAAAAAAy8TxHLrSk9e8+AS4jiYp9tOtu8+GGZmZ1mdZkAHa1m09EqY+brPSF0RERpCM3rEa44r7lMBzt0ARAAAAAAAAAAAAHJiJjSYVXxTHWvX0uFWWxlF96Rb1Ki0TWdJV1l1Zhz2xT0617w9DHeuSvNWdYeWniy2xW1rt3jyK9MRx5K5KRaqQAAAAAAAK8+WMVNe87QCvis/045Kz90/4wkzNpmZnWZAFmPH3t/Rjp/Kf0uRjrr8gAjmAAAAAAAAAAAAAAAAAAI2rFo0lIUZrVms6S40WrFo0lRas1nSVdeetTw5ZxX1jbvD0a2i9YtWdYl5S/hc307ct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'alt=''>"));
    else
     if (mess>limit2) // rot 
        server.sendContent(F("<img src='data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEBLAEsAAD/2wBDAFk9Q05DOFlOSE5kXllphd6QhXp6hf/CzaHe////////////////////////////////////////////////////2wBDAV5kZIV1hf+QkP//////////////////////////////////////////////////////////////////////////wAARCAExASwDASIAAhEBAxEB/8QAGQABAAMBAQAAAAAAAAAAAAAAAAECAwQF/8QAKhABAQABAwMDBAMAAwEAAAAAAAECAxExBCFREkFhIjJxgRNCoSORsVL/xAAYAQEBAQEBAAAAAAAAAAAAAAAAAgEDBP/EAB8RAQEBAQADAQEAAwAAAAAAAAABEQIDITFBURITMv/aAAwDAQACEQMRAD8A6wAAAAAAAAABXPUw05vnlI5dTrLxp47fNB2WyTe9mWfVaWP9t78ODPUzzu+WVqoOrLrb/XD/ALZ5dVq3+234jEBa6upec8v+1d7ebQAABMzynGVn7XmvqzjO/vuzAdGPWak5krXDrcL92Nx/1xAPUw1cM/tylWeS10+p1MPf1TxQeiMNPq8M+2X0354bgAAAAAAAAAAAAAAAAAy1tfHSnfvl4BpllMZvldo5NbrLe2l2+aw1NXLVy3yv6UAtuV3ttvyCZhaNkt+IJLeI0mEnysnXSeP+s5p33WmnFhm1c45iPTj4TtPEAVkNobTwDBHpniFwx8JGmRS6fiq3DKezUNRfHKxG1kvMUun4VqL47PijTS189L7b28VnZZyNc3o6PUYavbjLxWryXTodXcfp1O88g7QlmUll3lAAAAAAAAAAAAcvU9R6d8ML3974BbqOpmH04d8ve+HDbbd7d7QAJLeFscN+94aSbcMtdOeN91GOEnzUgl2kk+ADGgAAAAAAAAAAAFkvKmWHhcbqbzKxGuWMv5ZWWXuqXXDrm8tNHXy0r274+8ehp546mPqxu8eWvpauWllvj+55al6Yrp6mOphMsVgAAAAAAAZ6+rNLDf3vEBn1Wv6J6Mb9V/xwltyttu9oAvhh70wx96um1144/aAJdgAAAAAAAAAAAAAAAAAAslncBjGyy9xtZLNqxssu1XK4d8400dW6We84949HHKZ4zLG7yvKb9Lrfx5enK/Tf8ah3gAAAAAWyS29pHma2rdXU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' alt=''>"));
       else // gelb
        server.sendContent(F("<img src='data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEBLAEsAAD/2wBDAP//////////////////////////////////////////////////////////////////////////////////////2wBDAf//////////////////////////////////////////////////////////////////////////////////////wAARCAExASwDASIAAhEBAxEB/8QAGAABAQEBAQAAAAAAAAAAAAAAAAMCAQT/xAAlEAEBAAICAQQDAQEBAQAAAAAAAQIRMVEhEkFxkWGBsaEy0eH/xAAXAQEBAQEAAAAAAAAAAAAAAAAAAQID/8QAHREBAQEAAgMBAQAAAAAAAAAAAAERMVECEmEhQf/aAAwDAQACEQMRAD8AoAAAAAAAAAAOWycsXPr/AEFGbljPffwlbbzXAUufU+2fXl2yA7u937cAAADd7d9WXdcAb9d/Famc95pIBeWXiuvO1MrPz8gsMTOXnw2AAAAAAAAAAAAAAAAADNyk+ega4TufX2xbby4ADUxt/AMuyW8RSYyflpn2E5hffw76I2JtHPTOjU6joihqdADmp1HPTGg2jHo6rNxs/wDiou1EBayXlm4dNbBN2ZWf+FlnLii0yl/F6aedvHP2v2CoAAAAAAAAAAAAJ5Ze0/YO5Za8Tn+JAA7Jbw1jjvzeFOEtGZjJ+a0DCgAAAAAAAAAAAAAGt8p3Dr6UFlwQFbjL8p2WctS6juOVnx0rLL5iDstlUXHJZZuOgAAAAAAAzldT+A5llrxOf4kADeOPvfoxx97+lGbf5AAZUAAAAAAAAAAAAAAAAAAcsldARs04tZuaSs1dNy6hjdX+ry78vO3jlq69qoqAAAAAAhld3f03nfb7TAaxx359nJN3S0mvCWgAwoAAAAAAAAAAAAAAAAAAAAAA5ZuOgICmc9/tNuXUVwu/HvP42hLq7Wl3NqOgAOW6m3U877fsE7d3YO4zdBTGam+2gc1AAAAAAAAAAAAAAAAAAAAAAAAAAEcpq/xZnKbnwsuVElML7fSZLq7bHoCefIAhbu2rZXUqACuE8b7S5XZ8gAZUAAAAAAAAAAAAAAAAAAAAAAAAAAABGzVrimc4qbc4RXC+NdNo4XV+VlE87xE28+fiMA1hPPwqxhxa2xeQARQAAAAAAAAAAAAAAAAAAAAAAAAAAAHLNyoro3xa14o5w9DzrY/8xoSy5vy47eb8uArjxGnJxPh1zvKgAAAAAAAAAAAAAAAAAAAAAAAAAAAAACWXNVTz5/S+PKMK4Xx+0mpdRsZABacT4dcnE+HXNQAGMsrLpn138GfLLckxGvXfweu/hkMnQ167+FJ5kqK2PE+EsHQGVAAAAAAAAAAAAL4lqfrvUbvF+Ki1IjfrvUPXeowLk6G/Xeo7MrbJ4Tax/wCoWQVAYUTz5iiefMWcowA2O3m/LjuXN+XAWnE+HWceI053lQAHLjLy56cev9rQbRn049f7T049f7WhdvYz6cev9rQIAAAAAAAAAAAAAADmp1HQHNTqGp1HQHNTqGp1HQAABPPn9KJZc1fHlGWpNxlXCeP22M58sKZzipgphxW0sL5+VWLyACKAAAAAAAAAAAAAAAAAAAAAAAAAAAAI3zarbqVFrxQWx/5iL0NDOU3Ki9CFmrYDk8Xa6CuF3NdM+Q0AyoAAAAAAAAAAAAAAAAAAAAAAAAAAADGd4ibuV3XG5wjWE3fjysxhPG+21BPOcX9KOWbmgQaxuqzwAuM43c/Mac1AAAAAAHNzuO8s3CfC/g7udw3O4x6L256b0ZO0U3O4bncS1eq5qrn0W3O4bncRD1+i253Dc7iJq9Hr9FtzuG53EvTeq76KZOxTc7ju4xMO79NSScJ+K6AgAAAAM5XU+WksrurJtRknnwKYT3+mxSTU0AAACec9/tN6OULNXQEurtblBvHLXi8JYKAMKAAAAAAAAAAAAAAAAAAAAAAA5bqAzldeEzkbkxCTd0vJqaZwnv8ATagAAAAzlNz8+zQDziueO/M590gUxy9r+m0FMcva/bNn9g2AyoAAAAAAAAAAAAAAAAAADlsnIFuvNSt3S3bjcmINY47v4jkm7paTU1FHQAAAAAAAE8sfefuKAPOKZY+8+kwbxy9qog7LYzZ0LDksrrKgAAAAAAAAAAAAAAMXPr7XNGrlJ89JW28uDUmIOyW3UJLeFpJJqKEkk06AAAAAAAAAAADOWO/xWgELLOXF7JeU7hZx5/oMNzOznywAtMpXUHZlZ7s+vQsMTPufTvqnaZVaHNzuOoAAAOeqdg6MeufLlzvwuVFGLnPbynu3kX1HbbeXB2S3hocaxxt58RuYSc+a2DkkniOgAAAAAAAAAAAAAAAADNxl/wDWLhZx5/qoDzi9kvLNwnt4BIbuF/FZ9N6oOAAboAAO6vVBwa9OXTUw7v0CbslvEVmMnt9tAxMJ7+W+AAAAAAAAAAAAAAAAAAAAAAAAAAAByp0AYdgApi2AAAAAAAAAAAAAAAAAP//Z' alt=''>"));
     String val = String("<h1>")+String(nam)+String(": ")+String(mess)+String(" ")+unit+ String("</h1>");
     server.sendContent(val);
 }
//------------------------------ Server Unterprogramm zur Bearbeitung der Anfragen
void serverHomepage() { 
 if (server.hasArg("message")) {// Wenn Kalibrierpasswort eingetroffen,
   String input = server.arg("message");     // dann Text vom Client einlesen
   if (input == cal_passwort){
      cal_message = "do calibration (20 s wait)";
      doCal = 1;
   } else
      cal_message = "wrong password";
 } else cal_message = "";
	 server.setContentLength(CONTENT_LENGTH_UNKNOWN);
 server.send ( 200, "text/html", INDEX_HTML_START);
 serverSendFigure();             // Ampel integrieren
 server.sendContent(F("<img src=' data:image/jpeg;base64,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' alt=''>"));
 server.sendContent(messwertTabelle());
 if (cal_passwort != "your password") {
  server.sendContent(INDEX_HTML_SUBMIT);
  server.sendContent(cal_message);
 }
 server.sendContent(INDEX_HTML_END);
}



void setup(){ // Einmalige Initialisierung
Serial.begin(115200);
MHZSerial.begin(9600);         // MHZ19 CO2-Sensor 9600 Baud
myMHZ19.begin(MHZSerial);
myMHZ19.autoCalibration(false);// keine Autokalibrierung

Serial.println();
pinMode( 0 , OUTPUT);
pinMode( 2 , OUTPUT);
pinMode( 13 , OUTPUT);
//------------ HTML-Server initialisieren
server.on("/", serverHomepage);
 server.begin();// Server starten



//------------ eigenen WLAN - Accespoint aufbauen 
WiFi.softAP("MeinOctiWLAN","12345678");
Serial.print("\nAccessPoint SSID:"); Serial.print("MeinOctiWLAN");
Serial.println ("  IP:"+ WiFi.softAPIP().toString());
myOwnIP = WiFi.softAPIP();
matrixausgabe_text = String("Mein Netz:") + String("MeinOctiWLAN") + String( " IP:") + WiFi.softAPIP().toString();
matrixausgabe_index=0;

lcd1.init();  lcd1.backlight();   start();

}

void loop() { // Kontinuierliche Wiederholung 
Temp = myMHZ19.getTemperature() ;
CO2 = myMHZ19.getCO2() ;
CO2TEXT = "CO2 ppm="+String(String(myMHZ19.getCO2())) ;
TempTEXT = "Temp C="+String(String(myMHZ19.getTemperature())) ;
Serial.print(CO2TEXT);
Serial.println();
Serial.print(TempTEXT);
Serial.println();
lcd1.clear(); lcd1.setCursor(0,0); lcd1.print(String(String(CO2))+"ppm CO2"+" "+String(Temp)+"\xDF"+"C");
if (( ( CO2 ) > ( 1800 ) ))
{
digitalWrite( 0 , HIGH );
digitalWrite( 2 , LOW );
digitalWrite( 13 , LOW );
lcd1.setCursor(0,1);
lcd1.print("Jetzt l\xF5");
lcd1.print("ften!");
	delay( 20000 );
}
else
{
if (( ( CO2 ) > ( 1000 ) ))
{
digitalWrite( 0 , LOW );
digitalWrite( 2 , HIGH );
digitalWrite( 13 , LOW );
lcd1.setCursor(0,1); lcd1.print("L\xF5");
lcd1.print("ften geraten");
}
else
{
digitalWrite( 0 , LOW );
digitalWrite( 2 , LOW );
digitalWrite( 13 , HIGH );
lcd1.setCursor(0,1); lcd1.print("Luft OK");
}
	delay( 20000 );
}
//Block------------------------------ HTML-Server
server.handleClient(); //Homepageanfragen versorgen
delay(1);
if (doCal) {
   CO2_Kalibrierfunktion(); // Kalibrierfunktion aufrufen 
   doCal=0; 
}}

void start()
{
lcd1.clear();   lcd1.setCursor(0,0);   lcd1.print("   CO2-Ampel");   lcd1.setCursor(0,1);   lcd1.print("Naturbez Bildung");
lcd1.backlight();   delay(2000);   lcd1.noBacklight();    delay(1000);   lcd1.backlight();    delay(2000);   lcd1.noBacklight();
delay(1000);   lcd1.backlight();      delay(2000);   lcd1.noBacklight();     delay(1000);   lcd1.backlight();     delay(1000);
}