CO2 Messgerät ohne Wlan

Guten Tag, ich habe mir ein CO2 Messgerät Bausatz von Reichelt bestellt, jedoch funktioniert dieser nur mit Wlan (weil der Code so gedacht war). Ich würde das Messgerät jedoch gerne komplett ohne Wlan Verbindung benutzen können und habe im Zuge dessen versucht den für den Bausatz mitgelieferten Code umzuschreiben. Leider kenne ich mich so gut wie gar nicht mit der Arduino IDE aus und bekomme es deswegen nicht hin. Vielleicht weiß ja einer von Euch was ich anders machen muss. Danke im Vorraus :slight_smile:

Vorgefertigter Code:


#include "WiFi.h"
#include "ESPAsyncWebServer.h"
#include "MHZ19.h"                                        
#include "SoftwareSerial.h"                                    
#include "DHTesp.h"

const char*     ssid =  "...";
const char* password =  "...";
 

#define RX_PIN 33                                          // Rx pin which the MHZ19 Tx pin is attached tozh
#define TX_PIN 32                                          // Tx pin which the MHZ19 Rx pin is attached to
#define BAUDRATE 9600                                      // Device to MH-Z19 Serial baudrate (should not be changed)
#define LED_gruen 21
#define LED_gelb 19
#define LED_rot 18
#define dhtPin 4                                          // verbunden mit Data-Pin des DHT22

//#define test

AsyncWebServer server(80);                                 // http port 80
DHTesp dht;
MHZ19 myMHZ19;                                             // Constructor for library
SoftwareSerial mySerial(RX_PIN, TX_PIN);                   // create device to MH-Z19 serialh

void setup()
{
    Serial.begin(115200);                                   // Datenrate serieller Monitor
   
    dht.setup(dhtPin, DHTesp::DHT22);                       // am dhtPin ist ein DHT22 angeschlossen
    mySerial.begin(BAUDRATE);                               // (Uno example) device to MH-Z19 serial start   
    myMHZ19.begin(mySerial);                                // *Serial(Stream) refence must be passed to library begin(). 

    myMHZ19.autoCalibration(true);                              // Turn auto calibration ON (OFF autoCalibration(false))

    
  
    WiFi.begin(ssid, password);
    delay(1000);
    
  while (WiFi.status() != WL_CONNECTED){
   Serial.println("Mit dem Wlan verbinden...");
    Serial.println(WiFi.localIP());                          // Ausgabe der IP-Adr. über seriellen Monitor
  }
//Ausgänge definieren
 pinMode(LED_gruen,OUTPUT );
 pinMode(LED_gelb,OUTPUT );
 pinMode(LED_rot,OUTPUT );
 

  server.on("/temperature", HTTP_GET, [](AsyncWebServerRequest * request) { //temperature Route
    float temperature = dht.getTemperature();
    request->send(200, "text/plain", String(temperature) + " °C");
  });
 
  server.on("/humidity", HTTP_GET, [](AsyncWebServerRequest * request) {    //humidity Route
    float humidity = dht.getHumidity();
    request->send(200, "text/plain", String(humidity) + " %");
  });

  server.on("/co2", HTTP_GET, [](AsyncWebServerRequest * request) {         //co2 Route 
    int co2 = myMHZ19.getCO2();
    request->send(200, "text/plain", String(co2) + " ppm");
  });

  server.begin();                        // Start des Servers 

 } 

unsigned long getDataTimer = 0;
    
void loop()
{

  if (millis() - getDataTimer >= 1000)
    {
  float temperature = dht.getTemperature();
  float humidity = dht.getHumidity();
 // Serial.print("Temperatur: ");
  //Serial.print(temperature);
  //Serial.print(" °C  Feuchtigkeit: ");
  //Serial.println(humidity);
  int  CO2 = myMHZ19.getCO2();                             // Request CO2 (as ppm)
 
 // Serial.pri  nt("CO2 (ppm): ");                      
  Serial.println(CO2);Serial.println("\t");
  //Serial.print(" ");                                
  int8_t Temp = myMHZ19.getTemperature();                 // Request Temperature (as Celsius)
  //Serial.print("  Temperatur CO2Sens (°C): ");                  
  //  Serial.println(Temp);                         
  getDataTimer = millis();
    }

  if ( myMHZ19.getCO2() >= 1000)                              //über 2000 ppm
    {
   digitalWrite(LED_rot, HIGH);
    }
  else {
    digitalWrite(LED_rot, LOW);
    } 
    
 
  if (800 <= myMHZ19.getCO2() && 1000 > myMHZ19.getCO2() ) // über 1000 ppm
    {
   digitalWrite(LED_gelb, HIGH);
    }
  else {
   digitalWrite(LED_gelb, LOW); 
    }
   

  if (myMHZ19.getCO2() < 800 )                            // unter 1000 ppm
    {
   digitalWrite(LED_gruen, HIGH);
    }
  else {
   digitalWrite(LED_gruen, LOW);

  
    }
   
}

Mein Versuch :


#include "MHZ19.h"                                        
#include "SoftwareSerial.h"                                    


#define RX_PIN 33                                          // Rx pin which the MHZ19 Tx pin is attached tozh
#define TX_PIN 32                                          // Tx pin which the MHZ19 Rx pin is attached to
#define BAUDRATE 9600                                      // Device to MH-Z19 Serial baudrate (should not be changed)
#define LED_gruen 21
#define LED_gelb 19
#define LED_rot 18
#define dhtPin 4                                          // verbunden mit Data-Pin des DHT22



                              // http port 80

MHZ19 myMHZ19;                                             // Constructor for library
SoftwareSerial mySerial(RX_PIN, TX_PIN);                   // create device to MH-Z19 serialh

void setup()
{
    Serial.begin(115200);                                   // Datenrate serieller Monitor
   
    mySerial.begin(BAUDRATE);                               // (Uno example) device to MH-Z19 serial start   
    myMHZ19.begin(mySerial);                                // *Serial(Stream) refence must be passed to library begin(). 

    myMHZ19.autoCalibration(true);                              // Turn auto calibration ON (OFF autoCalibration(false))
            // Ausgabe der IP-Adr. über seriellen Monitor
  }
//Ausgänge definieren
 pinMode(LED_gruen,OUTPUT );
 pinMode(LED_gelb,OUTPUT );
 pinMode(LED_rot,OUTPUT );

unsigned long getDataTimer = 0;
    
void loop()
{

  if (millis() - getDataTimer >= 1000)
    {
  int  CO2 = myMHZ19.getCO2();                             // Request CO2 (as ppm)
  Serial.pri  nt("CO2 (ppm): ");                      
  Serial.println(CO2);Serial.println("\t");                                                       
  getDataTimer = millis();
    }

  if ( myMHZ19.getCO2() >= 1000)                              //über 2000 ppm
    {
   digitalWrite(LED_rot, HIGH);
    }
  else {
    digitalWrite(LED_rot, LOW);
    } 
    
 
  if (800 <= myMHZ19.getCO2() && 1000 > myMHZ19.getCO2() ) // über 1000 ppm
    {
   digitalWrite(LED_gelb, HIGH);
    }
  else {
   digitalWrite(LED_gelb, LOW); 
    }
   

  if (myMHZ19.getCO2() < 800 )                            // unter 1000 ppm
    {
   digitalWrite(LED_gruen, HIGH);
    }
  else {
   digitalWrite(LED_gruen, LOW);

  
    }

Das sieht doch erst mal nicht schlecht aus.
In

Serial.pri  nt("CO2 (ppm): "); 

ist ein Blank in print rein gerutscht.
Ansonsten nochmal anfangen und zuerst diese beiden Zeilen raus werfen

#include "WiFi.h"
#include "ESPAsyncWebServer.h"

Und dann schrittweise von oben anfangen und alle Zeilen raus werfen, wo der Compiler meint, dass er das nicht kennt.

Gruß Tommy

1 Like

Vielen Dank:)
Das Programm läuft jetzt. Aber hast du auch einen Tipp, was mit den Zeilen falsch war?

Gibt es dafür einen besseren Weg?

Die sehen eigentlich normal aus. In solchen Fällen immer die Fehlermeldung mit liefern.

Gruß Tommy

Oh sorry:

ohne_Wlan:33:9: error: expected constructor, destructor, or type conversion before '(' token
ohne_Wlan:34:9: error: expected constructor, destructor, or type conversion before '(' token
ohne_Wlan:35:9: error: expected constructor, destructor, or type conversion before '(' token
exit status 1
expected constructor, destructor, or type conversion before '(' token

Dein Pinmode befindet sich nicht mehr im Setup.
Du hast die "}" zu früh gesetzt.

1 Like

Vielen Dank.
Hat das Problem gelöst