乐鑫技术交流
直播中

杨秀英

7年用户 1414经验值
私信 关注
[问答]

ESP8266与CCS811 I2C错误问题求解

您好,
我目前正在做一个项目,试图确定 CO2 和 VOC。但是我总是收到这个错误:
18:36:18.319 -> setup: CCS811 begin FAILED
18:36:18.319 -> setup: hardware version: FFFFFFFF
18:36:18.319 -> setup: bootloader version: FFFFFFFF
18:36:18.319 -> setup: application version: FFFFFFFF
18:36:18.319 -> setup: CCS811 start FAILED
18:36:18.319 -> CCS811: I2C error
我将 3V3 连接到 VCC,GND 连接到 GND,D1 连接到 SCL,D2 连接到 SDA 和 D3和 WAKE
这是我使用的代码。它与来自 github CCS811 库的 Maarten Pennings 代码相同:
代码:全选#include  // I2C library
#include "ccs811.h" // CCS811 library

// Wiring for ESP8266 NodeMCU boards: VDD to 3V3, GND to GND, SDA to D2, SCL to D1, nWAKE to D3 (or GND)

CCS811 ccs811(D3); // nWAKE on D3

void setup() {
// Enable serial
Serial.begin(115200);
Serial.println("");
Serial.println("setup: Starting CCS811 basic demo");
Serial.print("setup: ccs811 lib version: "); Serial.println(CCS811_VERSION);

// Enable I2C
Wire.begin();

// Enable CCS811
ccs811.set_i2cdelay(50); // Needed for ESP8266 because it doesn't handle I2C clock stretch correctly
bool ok= ccs811.begin();
if( !ok ) Serial.println("setup: CCS811 begin FAILED");

// Print CCS811 versions
Serial.print("setup: hardware version: "); Serial.println(ccs811.hardware_version(),HEX);
Serial.print("setup: bootloader version: "); Serial.println(ccs811.bootloader_version(),HEX);
Serial.print("setup: application version: "); Serial.println(ccs811.application_version(),HEX);

// Start measuring
ok= ccs811.start(CCS811_MODE_1SEC);
if( !ok ) Serial.println("setup: CCS811 start FAILED");
}

void loop() {
// Read
uint16_t eco2, etvoc, errstat, raw;
ccs811.read(&eco2,&etvoc,&errstat,&raw);

// Print measurement results based on status
if( errstat==CCS811_ERRSTAT_OK ) {
Serial.print("CCS811: ");
Serial.print("eco2="); Serial.print(eco2); Serial.print(" ppm ");
Serial.print("etvoc="); Serial.print(etvoc); Serial.print(" ppb ");

Serial.println();
} else if( errstat==CCS811_ERRSTAT_OK_NODATA ) {
Serial.println("CCS811: waiting for (new) data");
} else if( errstat & CCS811_ERRSTAT_I2CFAIL ) {
Serial.println("CCS811: I2C error");
} else {
Serial.print("CCS811: errstat="); Serial.print(errstat,HEX);
Serial.print("="); Serial.println( ccs811.errstat_str(errstat) );
}

// Wait
delay(1000);
}


我还尝试切换 D3 和 GND,因此编辑了这一行:CCS811 ccs811(D3);
到 CCS811 ccs811(-1);
它也不起作用。

回帖(1)

1653339509.516700

2024-1-4 14:42:20
用的代码:

```
#include "Wire.h"
#include "Adafruit_CCS811.h"

#define CCS811_ADDR 0x5A //CCS811 device I2C address

Adafruit_CCS811 mySensor(CCS811_ADDR);

void setup() {

  Serial.begin(115200);

  // Wait for serial monitor to open
  while(!Serial);

  Serial.println("CCS811 VOC Sensor Test");

  Wire.begin(D2, D1); //SDA , SCL
  Wire.setClock(100000);

  if(mySensor.begin() == false){
    Serial.println("CCS811 begin FAILED");
    while(1);
  }

  mySensor.setDriveMode(CCS811_DRIVE_MODE_1SEC);
}

void loop() {
  
  if(mySensor.available()){
    if(!mySensor.readData()){
      Serial.print("CO2[ppm]: ");
      Serial.print(mySensor.geteCO2());
      Serial.print(", tVOC[ppb]: ");
      Serial.println(mySensor.getTVOC());
    }
    else{
      Serial.println("CCS811 readData FAILED");
    }
  }

  delay(1000);
}
```

这个错误可能是由于以下原因之一导致的:

1. CCS811供电不足或未连接。确保你的CCS811连接正确,并使用一个足够的电源将其供电。

2. I2C线路连接错误。检查你的I2C线路,确保SDA和SCL正确连接到ESP8266上。如果你有其他I2C设备,尝试使用它们来测试I2C线路是否正常工作。

3. CCS811设备有问题。有时CCS811设备可能存在问题,可以尝试更换另一个设备进行测试。

希望这些可以帮助您解决问题!
举报

更多回帖

发帖
×
20
完善资料,
赚取积分