46 lines
1.8 KiB
C
46 lines
1.8 KiB
C
#include "ccs811.h"
|
|
|
|
#define CONFIG_FREERTOS_HZ 100
|
|
|
|
i2c_device_config_t CCS811_DEV_CFG = {
|
|
.dev_addr_length = I2C_ADDR_BIT_LEN_7,
|
|
.device_address = 0x5A,
|
|
.scl_speed_hz = 100000,
|
|
};
|
|
|
|
i2c_master_dev_handle_t CCS811_DEV_HANDLE;
|
|
|
|
void ccs811_init()
|
|
{
|
|
ESP_ERROR_CHECK(i2c_master_bus_add_device(i2c0_bus_hdl, &CCS811_DEV_CFG, &CCS811_DEV_HANDLE));
|
|
mcp23018_set_pin(MCP23018_DEV_HANDLE, MCP_CCS811_WAKE, 0);
|
|
mcp23018_set_pin(MCP23018_DEV_HANDLE, MCP_CCS811_POWER, 1);
|
|
vTaskDelay(10 / portTICK_PERIOD_MS);
|
|
uint8_t reset_seq[4] = {0x11, 0xE5, 0x72, 0x8A};
|
|
i2c_write_register(CCS811_DEV_HANDLE, 0xFF, reset_seq, sizeof(reset_seq)); //Reset
|
|
vTaskDelay(10 / portTICK_PERIOD_MS);
|
|
uint8_t status;
|
|
uint16_t version;
|
|
i2c_read_register_8(CCS811_DEV_HANDLE, 0x00, &status);
|
|
i2c_read_register_16(CCS811_DEV_HANDLE, 0x24, &version);
|
|
ESP_LOGW(TAG_CCS, "CCS811 status: %d, version: %d", status, version);
|
|
i2c_write_register(CCS811_DEV_HANDLE, 0xF4, NULL, 0); //start
|
|
vTaskDelay(10 / portTICK_PERIOD_MS);
|
|
i2c_write_register_8(CCS811_DEV_HANDLE, 0x10, 0x0001); // MODE 1 interrupts vypnuté
|
|
i2c_read_register_8(CCS811_DEV_HANDLE, 0x00, &status);
|
|
i2c_read_register_16(CCS811_DEV_HANDLE, 0x24, &version);
|
|
ESP_LOGW(TAG_CCS, "CCS811 status: %d, version: %d", status, version);
|
|
}
|
|
|
|
esp_err_t ccs811_get_data(uint16_t * eCO2, uint16_t * tvoc)
|
|
{
|
|
uint8_t ccsResult[8];
|
|
esp_err_t ret = i2c_read_register(CCS811_DEV_HANDLE, 0x05, ccsResult, 8);
|
|
if (ret == ESP_OK)
|
|
{
|
|
*eCO2 = (((uint16_t)(ccsResult[0] & 0xFF)) << 8) | (ccsResult[1] & 0xFF);
|
|
*tvoc = (((uint16_t)(ccsResult[2] & 0xFF)) << 8) | (ccsResult[3] & 0xFF);
|
|
ESP_LOGI(TAG_CCS, "CCS Status: %d, Error %d", ccsResult[4], ccsResult[5]);
|
|
}
|
|
return ret;
|
|
} |