/* * * ESP32 MiniKit LP and CozIR-LP * made by chiptron.cz (4/2020) * * Modification: 15.04.2020 - first release * 17.04.2020 - Added calibration on fresh air (after reboot, * press the IO0 button for 1s) */ #include #include "cozir.h" #define RXD2 16 #define TXD2 17 #define LED 2 #define BUTTON 0 #define WakeUpMinutes 5 #define CalibPhaseEnable 1 COZIR czr(Serial2); /* Wi-Fi settings */ const char* ssid = "XXXX"; const char* password = "XXXX"; /* TMEP.eu(cz) hostname */ const char* host = "XXXX.tmep.cz"; char count=0; void setup() { Serial.begin(9600); Serial2.begin(9600, SERIAL_8N1, RXD2, TXD2); pinMode(LED, OUTPUT); pinMode(BUTTON, INPUT); czr.SetOperatingMode(CZR_POLLING); //send value based on request /* Calibration phase */ if(1 == CalibPhaseEnable) { int co2Array[11] = {0}; int co2Average = 0; digitalWrite(LED, LOW); delay(500); digitalWrite(LED, HIGH); if(LOW == digitalRead(BUTTON)) { Serial.println("Calibration - fresh air"); czr.CalibrateFreshAir(); delay(1000); for(int i=0; i <= 10; i++) { co2Array[i] = czr.CO2(); Serial.print("CO2 value: "); Serial.println(co2Array[i]); delay(1000); } co2Average = (co2Array[7]+co2Array[8]+co2Array[9])/3; Serial.print("CO2 average: "); Serial.println(co2Average); Serial.print("CO2 10th sample: "); Serial.println(co2Array[10]); if((co2Average > (co2Array[10]-10)) && (co2Average < (co2Array[10]+10))) { digitalWrite(LED, LOW); delay(1000); digitalWrite(LED, HIGH); Serial.println("Calibration done - OK"); } else { digitalWrite(LED, LOW); delay(200); digitalWrite(LED, HIGH); Serial.println("Calibration done - Repeat"); } } } /* Wi-Fi*/ Serial.print("Connecting to "); Serial.println(ssid); WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); count++; if(count >= 10) { Serial.flush(); Serial2.flush(); esp_sleep_enable_timer_wakeup(WakeUpMinutes*60*1000000); esp_deep_sleep_start(); } } Serial.println(""); Serial.println("WiFi connected"); Serial.println("IP address: "); Serial.println(WiFi.localIP()); /*end Wi-Fi*/ } void loop() { digitalWrite(2, LOW); Serial.flush(); Serial2.flush(); int c = czr.CO2(); delay(5000); Serial.print("CO2 : ");Serial.println(c); /*Seding value to TMEP.eu(cz)*/ WiFiClient client; const int httpPort = 80; if (!client.connect(host, httpPort)) { Serial.println("connection failed"); return; } // Create a URI for the request String url = "/"; url += "?CO2="; // defined in tmep.eu(cz); GUID value url += c; delay(1000); 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"); unsigned long timeout = millis(); while (client.available() == 0) { if (millis() - timeout > 5000) { Serial.println(">>> Client Timeout !"); client.stop(); return; } } // Read all the lines of the reply from server and print them to Serial while (client.available()) { String line = client.readStringUntil('\r'); Serial.print(line); } /*end of sending value*/ digitalWrite(2, HIGH); Serial.flush(); Serial2.flush(); esp_sleep_enable_timer_wakeup(WakeUpMinutes*60*1000000); esp_deep_sleep_start(); }