| Beide Seiten der vorigen RevisionVorhergehende ÜberarbeitungNächste Überarbeitung | Vorhergehende Überarbeitung |
| www-fuer-alle:co2 [2024/04/07 10:47] – [Sensor] biebl | www-fuer-alle:co2 [2024/07/26 21:09] (aktuell) – [CO2 im Arbeitsraum] biebl |
|---|
| ====== CO2 im Arbeitsraum ====== | ====== CO2 im Arbeitsraum ====== |
| | |
| | |
| | ====== Messung über WLAN - D1-mini ====== |
| |
| ===== Ergebnis ===== | ===== Ergebnis ===== |
| |
| * alte Fritzbox ohne Internet | * alte Fritzbox ohne Internet |
| ===== Sorftware ===== | ===== Software - Client ===== |
| | |
| | * |
| | |
| | |
| | |
| | <code> |
| | /***************************************************************************************************************************************************************************** |
| | * * |
| | * Spannungsmessung an ZWEI Stellen muss der D1-mini fuer EmonCMS EINDEUTIG identifiziert werden 1) IP-Adresse 2) CLIENT-Name * |
| | * Der Messwert wird immer in der Variablen Messwert uebergeben * |
| | * * |
| | ****************************************************************************************************************************************************************************/ |
| | |
| | // ----------------------------------------- Bibliotheken -------------------------------------------------------------------------------------------------------------------- |
| | /***************************************************************************************************************************************************************************** |
| | * Including the Libraries for WiFi Connection, HTTP Send and Sensor |
| | *********************************************************************************************/ |
| | |
| | #include <ESP8266WiFi.h> |
| | #include <ESP8266HTTPClient.h> |
| | #include <WiFiClient.h> |
| | // ----------------------------------------- Variablendeklaration------------------------------------------------------------------------------------------------------------- |
| | /***************************************************************************************************************************************************************************** |
| | * |
| | * Replace with your network details |
| | * |
| | *********************************************************************************************/ |
| | const char* ssid = "...."; |
| | const char* password = "...."; |
| | |
| | /***************************************************************************************************************************************************************************** |
| | * +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
| | * Provide IP Adresse, Gateway, Subnet and DNS matching your network - Hier muss die feste EINDEUTIGE IP fuer den Sensor eingetragen werden. |
| | * +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
| | *********************************************************************************************/ |
| | IPAddress ip(192,168,...,...); // I use fixed IP-Adress - muss für jedes Geraet angepasst werden - LISTE im DOKUWIKI |
| | IPAddress gateway(192,168,...,...); // gateway = Weg ins Internet, also Router |
| | IPAddress subnet(255, 255, 255, 0); // set subnet mask to match your |
| | IPAddress dns(192,168,...,...); // DNS Server = Router IP |
| | |
| | /***************************************************************************************************************************************************************************** |
| | * fuer den Sensor MHZ19B * |
| | *********************************************************************************************/ |
| | const int pwmpin = 16; // Der Sensor hängt NICHT an D4, sondern an D0, damit die LED nicht blinkt |
| | const int range = 5000; // Der eingestellte Messbereich (0-5000ppm) |
| | int ppm_pwm = 0; |
| | |
| | /***************************************************************************************************************************************************************************** |
| | * ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
| | * server settings, change node ID for every node Hier muss der EINDEUTIGE CLIENT-Name eingetragen werden, unter diesem Namen taucht der Mersswert in EmonCMS auf. |
| | * ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
| | *********************************************************************************************/ |
| | const char* host = "192.168......."; // feste IP für den Apache |
| | const char* CLIENT = "Co2-107"; // Der Name muss mit dem Device übereinstimmen !!!!!!!!!!!!!!!!!!!!!!!!! der Eintrag für NODE muss eindeutig sein |
| | const char* apikey = "..."; // Emoncms apikey zum Lesen und Schreiben fuer alle Sensoren gleich |
| | const int httpPort = 80; |
| | const int sleepTimeInSec = 5; //Seconds to deep sleep 30 = 0,5 Min |
| | |
| | // ------------------------------------------ Setup - einmaliger Ablauf ------------------------------------------------------------------------------------------------------ |
| | void setup() { |
| | /***************************************************************************************************************************************************************************** |
| | * für den Betrieb eines Sensors * |
| | ******************************************/ |
| | pinMode(pwmpin, INPUT); // PWM-Pin auf Eingang setzen |
| | |
| | /***************************************************************************************************************************************************************************** |
| | * Initializing serial port for debugging purposes |
| | *********************************************************************************************/ |
| | Serial.begin(115200); // diese Einstellung muss im seriellen Monitor übernommen werden |
| | Serial.println("2022-10-14 - CO2 Messung in ppm "); |
| | |
| | /***************************************************************************************************************************************************************************** |
| | * Connect WiFi |
| | * Fix https://github.com/esp8266/Arduino/issues/2186 |
| | *********************************************************************************************/ |
| | WiFi.config(ip, gateway, subnet, dns); |
| | delay(100); |
| | WiFi.persistent(false); |
| | WiFi.mode(WIFI_OFF); |
| | WiFi.mode(WIFI_STA); |
| | WiFi.begin(ssid, password); |
| | while (WiFi.status() != WL_CONNECTED) { |
| | delay(500); |
| | } |
| | } |
| | |
| | // ---------------------------------------- Hauptprogeramm - Endlosschleife - loop -------------------------------------------------------------------------------------------- |
| | |
| | void loop(void) { |
| | ppm_pwm = readCO2PWM(); // Messung der PWM-Länge mittels einer eigenen Funktion |
| | Serial.print(ppm_pwm); // Wert am seriellen Monitor |
| | Serial.println(" ppm CO2"); |
| | sendData(ppm_pwm); //Send data to emoncms |
| | delay(sleepTimeInSec * 1000); |
| | } |
| | |
| | // ---------------------------------------- Unterprogramme und Funktionen ---------------------------------------------------------------------------------------------------- |
| | |
| | /********************************************************************************************************** |
| | * |
| | * Funktionen zum PWM-Auslese des CO2-Wertes |
| | * |
| | ***********************************************************************************************************/ |
| | |
| | int readCO2PWM() { |
| | unsigned long th; |
| | int ppm_pwm = 0; |
| | float pulsepercent; |
| | do { |
| | th = pulseIn(pwmpin, HIGH, 1004000) / 1000; |
| | pulsepercent = th / 1004.0; // Pulslänge in Prozent (%) |
| | ppm_pwm = range * pulsepercent; // PPM-Werte bei gegebenem Range |
| | } while (th == 0); // Der gemessene Wert wird an die loop()-Funktion zurückgegeben, |
| | return ppm_pwm; // wo er dann ausgegeben wird. |
| | } |
| | |
| | /***************************************************************************************************************************************************************************** |
| | * |
| | * Zusammenbau der zu sendenden Textdatei fuer EmonCMS |
| | * Der Messwert wird in der Variable "CLIENT" und "Messwert" uebergeben und dann von EnonCMS eingerichtet |
| | * |
| | *********************************************************************************************/ |
| | void sendData(float t) { |
| | |
| | /***************************************************************************************************************************************************************************** |
| | * Send data to REST server |
| | *********************************************************************************************/ |
| | WiFiClient client; |
| | HTTPClient http; |
| | Serial.print("[HTTP] begin...\n"); |
| | |
| | /***************************************************************************************************************************************************************************** |
| | * configure traged server and url |
| | *********************************************************************************************/ |
| | String url = "http://"; |
| | url += host; |
| | url += ":"; |
| | url += httpPort; |
| | url += "/emoncms/input/post.json"; |
| | |
| | /***************************************************************************************************************************************************************************** |
| | * http.begin(client, url); |
| | *********************************************************************************************/ |
| | String ausgabe; |
| | ausgabe = url + "?"; |
| | ausgabe += "node="; |
| | ausgabe += CLIENT; |
| | ausgabe += "&json={Messwert:"; |
| | ausgabe += String(t, 1); |
| | ausgabe += "}"; |
| | http.begin(client, ausgabe); |
| | Serial.print("[HTTP] POST..."+url+"\n"); |
| | Serial.println(ausgabe); |
| | |
| | /***************************************************************************************************************************************************************************** |
| | * start connection and send HTTP header |
| | *********************************************************************************************/ |
| | http.addHeader("Content-Type","application/json"); |
| | http.addHeader("Authorization","Bearer 8b494fa8b58b82471c0f397bbeda611f"); |
| | int httpCode = http.GET(); |
| | if (httpCode > 0) { // httpCode will be negative on error |
| | Serial.printf("[HTTP] POST... code: %d\n", httpCode); // HTTP header has been send and Server response header has been handled |
| | if (httpCode == HTTP_CODE_OK) { // file found at server |
| | String payload = http.getString(); |
| | Serial.println(payload); |
| | } |
| | } else { |
| | Serial.printf("[HTTP] POST... failed, error: %s\n", http.errorToString(httpCode).c_str()); |
| | } |
| | http.end(); |
| | } |
| | </code> |
| | |
| | |
| | ===== Software - SERVER ===== |
| |
| * [[https://github.com/emoncms/emoncms]] | * [[https://github.com/emoncms/emoncms]] |
| |
| {{:www-fuer-alle:emoncms-software.png?600|}} | {{:www-fuer-alle:emoncms-software.png?600|}} |
| | |
| | ====== Messung über PHYPHOX - ESP32 ====== |
| | |
| | ===== ESP-32 ===== |
| | |
| | {{:www-fuer-alle:2024-03-19-phyphox-co2-anzeige-03.jpg?600|}} |
| | |
| | ===== PHYPHOX-App ===== |
| | * [[https://phyphox.org/]] |
| | |
| | {{:www-fuer-alle:2024-03-19-phyphox-co2-anzeige-02.png?600|}} |
| | |
| | ====== Messung und Speicherung auf einer SD-Karte - ARDUINO-NANO ====== |
| | |
| | {{:www-fuer-alle:nw-co2-handmessgeraet.png?600|}} |
| | |
| | {{:www-fuer-alle:co2-2023-10-17-diagramm-in-calc.png?600|}} |
| | |
| | |