Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Nächste Überarbeitung
Vorhergehende Überarbeitung
www-fuer-alle:co2 [2024/04/04 11:42] – angelegt bieblwww-fuer-alle:co2 [2024/04/07 17:30] (aktuell) – [Messung und Speicherung auf einer SD-Karte - ARDUINO-NANO] biebl
Zeile 1: Zeile 1:
-====== CO2 im Arbeitsreum ======+====== CO2 im Arbeitsraum ====== 
 +====== Messung über WLAN - D1-mini ====== 
 + 
 +===== Ergebnis ===== 
 + 
 + 
 +{{:www-fuer-alle:co2-klassenraum-2024-04-03-121-physik2-2024-04-04-08-42.png?800|}} 
 + 
 +  * 3 aktive Sensoren 
 +    * 2 Unterrichtsräume 
 +    * 1 Sammlungsraum 
 + 
 +{{:www-fuer-alle:co2-klassenraum-beispielmessung-1.png?400|}} 
 + 
 +  * deutliche Pausenzeiten 
 + 
 +===== Sensor ===== 
 + 
 +{{:www-fuer-alle:co2-nur-esp-03.jpg?400|}} 
 + 
 +===== WLAN ===== 
 + 
 +  * alte Fritzbox ohne Internet 
 +===== 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]] 
 + 
 +{{: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|}} 
  
-{{:www-fuer-alle:co2-klassenraum-2024-04-03-121-physik2-2024-04-04-08-42.png?400|}} 
QR-Code
QR-Code www-fuer-alle:co2 (erstellt für aktuelle Seite)