Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen RevisionVorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
www-fuer-alle:co2 [2024/04/04 11:42] 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|}} {{: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|}}
 +
 +
QR-Code
QR-Code www-fuer-alle:co2 (erstellt für aktuelle Seite)