CCS811 dumb library
Dependents: Mt05_MtSense02 embernet-sensor-test
CCS811.cpp
00001 #include "CCS811.h" 00002 00003 CCS811::CCS811(I2C& i2c, Serial& pc) : m_i2c(i2c), m_pc(pc) { 00004 00005 } 00006 00007 /** 00008 ** Initial CCS811 need write MODE register and should Write APP START register to begin measurement. 00009 **/ 00010 void CCS811::init() { 00011 char send[2]; 00012 00013 if (!checkHW()) { 00014 return; 00015 }else { 00016 m_pc.printf("CCS811 is confirm!\r\n"); 00017 } 00018 00019 send[0] = CCS811_REG_APP_START; 00020 send[1] = 0x00; 00021 00022 m_i2c.write(CCS811_I2C_ADDR, send, 2); 00023 00024 send[0] = CCS811_REG_MEAS_MODE; 00025 send[1] = CCS811_MEASUREMENT_MODE1; 00026 00027 m_i2c.write(CCS811_I2C_ADDR, send, 2); 00028 00029 } 00030 00031 int CCS811::setMeasureMode(char mode) { 00032 00033 char send[2]; 00034 00035 send[0] = CCS811_MEASUREMENT_MODE1; 00036 send[1] = mode; 00037 00038 m_i2c.write(CCS811_I2C_ADDR, send, 2); 00039 00040 send[0] = CCS811_REG_APP_START; 00041 send[1] = 0x00; 00042 00043 m_i2c.write(CCS811_I2C_ADDR, send, 2); 00044 00045 return 0; 00046 } 00047 00048 /** 00049 ** Here is that you can read CCS811 with co2 ppm and tvoc bbm is unsigned value 00050 **/ 00051 int CCS811::readData(uint16_t *ECO2, uint16_t *TVOC) { 00052 00053 char recv[8]; 00054 00055 00056 00057 recv[0] = CCS811_REG_ALG_RESULT_DATA; 00058 m_i2c.write(CCS811_I2C_ADDR, recv, 1); 00059 m_i2c.read( CCS811_I2C_ADDR, recv, 8); 00060 00061 // m_pc.printf("%X %X\r\n", recv[0], recv[1]); 00062 // m_pc.printf("%X %X\r\n", recv[2], recv[3]); 00063 // m_pc.printf("%X %X\r\n", recv[4], recv[5]); 00064 // m_pc.printf("%X %X\r\n", recv[6], recv[7]); 00065 00066 *ECO2 = (uint16_t) (recv[0] <<8) + recv[1]; 00067 *TVOC = (uint16_t) (recv[2] <<8) + recv[3]; 00068 00069 return 0; 00070 00071 } 00072 00073 /** 00074 ** Here for check is CCS811 hardware from i2c bus 00075 **/ 00076 bool CCS811::checkHW() { 00077 00078 char read[1]; 00079 char hid[1]; 00080 00081 read[0] = CCS811_REG_HW_ID; 00082 00083 m_i2c.write(CCS811_I2C_ADDR, read, 1, false); 00084 m_i2c.read(CCS811_I2C_ADDR, hid, 1, false); 00085 00086 // m_pc.printf("%X\r\n", hid[0]); 00087 00088 if (hid[0] == 0x81) { 00089 return true; 00090 } else { 00091 return false; 00092 } 00093 00094 } 00095 00096 /** 00097 ** Here is provide you soft reset CCS811 module 00098 **/ 00099 bool CCS811::softRest() { 00100 00101 char rstCMD[5] = {CCS811_REG_SW_RESET, 0x11,0xE5,0x72,0x8A}; 00102 00103 m_i2c.write(CCS811_I2C_ADDR, rstCMD, 5); 00104 00105 return false; 00106 00107 } 00108
Generated on Wed Jul 20 2022 09:29:17 by
1.7.2
MtM+