76 lines
1.8 KiB
C++
76 lines
1.8 KiB
C++
#include <Wire.h>
|
|
#include "Adafruit_CCS811.h"
|
|
|
|
// Reiner CCS811-Test (CJMCU-811) ohne LCD und DHT11. Ausgabe im Serial Monitor (9600 Baud).
|
|
// I2C: SDA = A4, SCL = A5 (Arduino Uno). WAK und ADD des Moduls an GND -> Adresse 0x5A.
|
|
// Mit ADD an VCC lautet die Adresse 0x5B.
|
|
|
|
Adafruit_CCS811 ccs;
|
|
bool ccsOk = false;
|
|
|
|
// Sucht alle Geräte am I2C-Bus. Der CCS811 muss bei 0x5A oder 0x5B auftauchen.
|
|
void scanneI2C() {
|
|
Serial.println(F("I2C-Scan..."));
|
|
uint8_t gefunden = 0;
|
|
for (uint8_t adr = 1; adr < 127; adr++) {
|
|
Wire.beginTransmission(adr);
|
|
if (Wire.endTransmission() == 0) {
|
|
Serial.print(F(" Geraet bei 0x"));
|
|
Serial.println(adr, HEX);
|
|
gefunden++;
|
|
}
|
|
}
|
|
if (gefunden == 0) {
|
|
Serial.println(F(" KEIN Geraet gefunden -> SDA/SCL, GND, VCC, WAK, Loetstellen pruefen"));
|
|
}
|
|
}
|
|
|
|
void setup() {
|
|
Serial.begin(9600);
|
|
Serial.println(F("--- CCS811-Test ---"));
|
|
|
|
Wire.begin();
|
|
scanneI2C();
|
|
|
|
// Erst 0x5A (ADD an GND), dann 0x5B (ADD an VCC)
|
|
uint8_t adresse = 0x5A;
|
|
ccsOk = ccs.begin(0x5A);
|
|
if (!ccsOk) {
|
|
adresse = 0x5B;
|
|
ccsOk = ccs.begin(0x5B);
|
|
}
|
|
|
|
if (ccsOk) {
|
|
Serial.print(F("CCS811 OK bei 0x"));
|
|
Serial.println(adresse, HEX);
|
|
Serial.println(F("Aufwaermphase: die ersten Werte sind oft 400 ppm / 0 ppb."));
|
|
} else {
|
|
Serial.println(F("CCS811 begin() fehlgeschlagen (0x5A und 0x5B)"));
|
|
}
|
|
}
|
|
|
|
void loop() {
|
|
delay(1000);
|
|
|
|
if (!ccsOk) {
|
|
Serial.println(F("CCS811: nicht initialisiert"));
|
|
return;
|
|
}
|
|
|
|
if (!ccs.available()) {
|
|
Serial.println(F("CCS811: noch keine neuen Daten"));
|
|
return;
|
|
}
|
|
|
|
if (ccs.readData()) {
|
|
Serial.println(F("CCS811: Lesefehler"));
|
|
return;
|
|
}
|
|
|
|
Serial.print(F("eCO2: "));
|
|
Serial.print(ccs.geteCO2());
|
|
Serial.print(F(" ppm TVOC: "));
|
|
Serial.print(ccs.getTVOC());
|
|
Serial.println(F(" ppb"));
|
|
}
|