CCS811 airquality sensor

`I wrote program but it does not work. And I dont really know why it is like that. Can someone help me please. I have registered myself for the first time on the Arduino forum, so if there is something to complain about, please give me a sign. Furthermore I am a German guy, so my English is not perfect and I am not a professional, i try to work with Arduino since 3 weeks maybe.

My hardware: Arduino Mega or Mega 2560 and CJMCU-811 sensor
Sketch:

#include "Adafruit_CCS811.h"
 
Adafruit_CCS811 ccs;
void setup ()
{
  Serial.begin(9600);
Serial.println("Aktiviert CCS811");
 
ccs.begin();
while(!ccs.available())
{
Serial.print(".");
delay (1000);
}
Serial.println("CCS811 Arbeitet!");
}
void loop ()
{
  ccs.readData();
 
int co2 = ccs.geteCO2();
int tvoc = ccs.getTVOC();
 
Serial.print("CO2: ");
Serial.print(co2);
Serial.print(" ppm \tTVOC: ");
Serial.print(tvoc);
Serial.println(" ppb");
delay(500);
}

How can you believe the screenshot is useful... a picture of text...?

Do yourself a favour and please read How to get the best out of this forum and modify your first post accordingly (including code tags and necessary documentation for your ask).

Dann fühlst Du Dich in International/Deutsch vielleicht wohler. Dort läuft auch seit längerem schon ein Thread über Luftqualität.

"Does not work" is not a question, so what?

Have you already tried the example code coming with the library?

Ja Deutsch ist definitiv besser. Das Problem hierbei ist einfach, dass der Sketch nicht funktioniert. Ich habe die Adafruit CCS811 Library installiert. Ich hab mir bestimmt schon 100 Videos dazu angeschaut, aber ich kriege es einfach nicht auf die Reihe. Immer wenn ich dann mal auf den seriellen Monitor gehe um zu prüfen, steht da: CCS811 test
Und das war’s, seit Stunden nur das. Und ich weiß einfach nicht warum das so ist. Ich will natürlich auch nicht, dass mir jemand eine Sofort-Lösung gibt, ich will da schon selber noch irgendwie draufkommen aber ich komm nicht weiter, hab nicht mal einen Ansatz.

Then let's move this to the German section.

--
Sie sollten erklären, wie der Sensor verdrahtet ist

Ja vielen Dank erstmal!
Also ich folgendermaßen gesteckt:

3.3V (Mega) an VCC (CCS811)
GND (Mega) an GND (CCS811)
GND (Mega) an WAK (CCS811)
SCL (Mega) an SCL (CCS811)
SDA (Mega) an SDA (CCS811)

hier die Skizze dazu (ich hoffe, dass sie ausreicht):

Können Sie einen Link zu Ihrem Modul teilen?

Das passt nicht zu Deinem Sketch in #1 sondern zum Example:
https://github.com/adafruit/Adafruit_CCS811/blob/master/examples/CCS811_test/CCS811_test.ino

Mach mal bitte ein Foto vom Aufbau.

Ich hoffe du hast das mit Aufbau gemeint...



Ja,
damit ist ein Verdrahtungsfehler ausgeschlossen, erklärt aber nicht die Ausgabe.
Mach mal bitte folgenden Sketch auf den MEGA:

#include<Wire.h>

void setup(){
  Wire.begin();
  Serial.begin(115200);
  Serial.println("I2C Scanner ist bereit.");
  Serial.println();
}

void loop() {
  scanI2C(100000);
  scanI2C(400000);
//  scanI2C(1000000); // nur aktivieren, wenn der Microcontroller diese Frequenz unterstützt
//  scanI2C(3400000); // nur aktivieren, wenn der Microcontroller diese Frequenz unterstützt
//  scanI2C(5000000); // nur aktivieren, wenn der Microcontroller diese Frequenz unterstützt
  
  Serial.println("****************************");
  Serial.println();
  delay(3000);
}

void scanI2C(long frequency){
  String normal = "standard mode (100 kHz):";
  String fast = "fast mode (400 kHz):";
  String fastPlus = "fast mode plus (1 MHz):";
  String highSpeed = "high speed mode (3.4 MHz):";
  String ultraSpeed = "ultra fast mode (5.0 MHz):";
  String defaultStr = " !!!!! Unzulässige Frequenz !!!!!";
  bool error = true;
  bool addressFound = false;

  Serial.print("Scanne im ");
  switch(frequency){
    case 100000:
      Serial.println(normal);
      break;
    case 400000:
      Serial.println(fast);
      break;
    case 1000000:
      Serial.println(fastPlus);
      break;
    case 3400000:
      Serial.println(highSpeed);
      break;
    case 5000000:
      Serial.println(ultraSpeed);
      break;
    default:
      Serial.println(defaultStr);
      break;
  }
  
  Wire.setClock(frequency);
  for(int i=1; i<128; i++){
    Wire.beginTransmission(i);
    error = Wire.endTransmission();
    if(error == 0){
      addressFound = true;
      Serial.print("0x");
      Serial.println(i,HEX);
    }
  }
  if(!addressFound){
    Serial.println("Keine Adresse erkannt");
  }
  Serial.println();
}

Drauf achten: der Serielle Monitor ist auf 115200 eingestellt.
Was bekommst Du als Ausgabe?

Entschuldigung. Da steht " Aktiviert CCS811"

das zeigt er mir im seriellen Monitor jetzt an:

Ausgaben vom SerMon bitte nicht als Foto...
Das ist aber unvollständig.

12:40:12.783 -> I2C Scanner ist bereit.
12:40:12.783 -> 
12:40:12.783 -> Scanne im standard mode (100 kHz):
12:40:12.816 -> Keine Adresse erkannt
12:40:12.816 -> 
12:40:12.816 -> Scanne im fast mode (400 kHz):
12:40:12.816 -> Keine Adresse erkannt
12:40:12.816 -> 
12:40:12.816 -> ****************************
12:40:12.816 -> 
12:40:15.798 -> Scanne im standard mode (100 kHz):
12:40:15.831 -> 0x27
12:40:15.831 -> 
12:40:15.831 -> Scanne im fast mode (400 kHz):
12:40:15.831 -> 0x27
12:40:15.831 -> 
12:40:15.831 -> ****************************
12:40:15.831 -> 

Bei mir sieht das so aus. - erst war kein Sensor dran, dann einer.
Zieh mal bitte SDA/SCL ab vom Mega und starte den Sketch nochmal.
Dann muss die Sensorausgabe wenigstens einmal vollständig keinen Sensor erkennen.

ein Proplem könnten die Pullups an SDA/SCL gegen +5V auf dem MEGA2560-Board sein, denn der Sensor wird ja mit 3,3V betrieben und hat (ziemlich sicher) auch Pullup Widerstände an SDA/SCL gegen VCC und damit auf 3,3V. das gibt einen Konflikt mit der Betriebsspannung des Sensors, da diese nun höher als 3,3V liegen wird. Es kann so u.U. zwar funktionieren (hatte schon 3,3 V Displays, die das mitgemacht haben), aber es muss nicht funktionieren. Ein I2C-Levelshifter zwischen Mega und Sensor wäre hier von Vorteil. Denn die Entfernung der 10k Pullups auf dem MEGA2560-Board würde ich nicht empfehlen.

das hier kam raus, als ich scl und sda aus dem mega gezogen habe.

12:51:32.539 -> I2C ScI2C Scanner ist bereit.
12:51:32.539 -> 
12:51:32.539 -> Scanne im standard mode (100 kHz):
12:51:42.172 -> Keine Adresse erkannt
12:51:42.172 -> 
12:51:42.218 -> Scanne im fast mode (400 kHz):
12:51:42.218 -> Keine Adresse erkannt
12:51:42.218 -> 
12:51:42.218 -> ****************************
12:51:42.218 ->

Hm...
Ich hab nen BME 280 mit 3,3V am Mega dran, der tuts...

Ach schau. Da ist kein Sensor zu finden.
Also musst Du suchen.
Alle Kabel tauschen.
Drauf hoffen, das der Sensor nicht schon mal mit 5V gefüttert wurde.

Du musst eine Ausgabe bekommen:

12:40:15.798 -> Scanne im standard mode (100 kHz):
12:40:15.831 -> 0x5A

Ja, wie gesagt, ich hatte auch schon 3,3V Displays am MEGA , die das hingenommen haben, jedoch ist die Betriebsspannung am Sensor, durch die Pullups gegen 5V auf dem MEGA, sicher höher als 3,3V. Ich denke, die Sensoren überleben das grösstenteils deshalb, weil die Pullups auf den Sensoren oft ebenfalls 10 k haben. dadurch fliesst dann eben ein recht kleiner Strom, der den Sensor überleben lässt. Dass aber JEDER Sensor so auch problemlos funktioniert, dafür gibt es natürlich keine Garantie.

Ich hab gerade versucht den Sketch nochmal hochzuladen um es mit den Jumpern zu prüfen und dann hat er mir im Terminal das angezeigt. Und jetzt kann ich nicht mal mehr meinen seriellen Monit. aufrufen...

avrdude: stk500v2_ReceiveMessage(): timeout
avrdude: stk500v2_getsync(): timeout communicating with programmer
Beim Hochladen des Sketches ist ein Fehler aufgetreten

Einmal den MEGA vom USB abziehen.
Die IDE einmal zu machen.
Den MEGA wieder antackern,
Die IDE wieder starten.
Nachschauen, das unter WERKZEUGE - PORT der Mega wieder dran ist.
Code aufspielen.