#include #define I2C_ADDR 0x04 // I2C Communication (Taken from Groove sensor, hoping to use the same library on client side) #define CMD_ADC_NH3 1 // NH3 channel #define CMD_ADC_CO 2 // CO channel #define CMD_ADC_NO2 3 // NO2 channel #define CMD_ADC_ALL 4 // All channels #define CMD_CHANGE_I2C 5 // I2C address change #define CMD_READ_EEPROM 6 // Read stored data from EEPROM as unsigned int #define CMD_SET_R0_ADC 7 // Set R0 ADC value #define CMD_GET_R0_ADC 8 // Get R0 ADC value #define CMD_GET_R0_ADC_DEFAULT 9 // Get factory R0 ADC value #define CMD_CONTROL_LED 10 // Control LED (no LED on my board, but Groove supports is, so ... meh!) #define CMD_CONTROL_PWR 11 // Heater control // EEPROM Addresses (Match Groove addresses) #define EEPROM_INIT_DONE 0 #define EEPROM_DEFAULT_ADC_NH3 2 #define EEPROM_DEFAULT_ADC_CO 4 #define EEPROM_DEFAULT_ADC_NO2 6 #define EEPROM_ADC_NH3 8 #define EEPROM_ADC_CO 10 #define EEPROM_ADC_NO2 12 #define EEPROM_I2C_ADDR 20 void setup() { Serial.begin(115200); // Connect to sensor through wire lib directly Wire.begin(); // Check version Wire.beginTransmission(I2C_ADDR); Wire.write(CMD_READ_EEPROM); Wire.write(EEPROM_INIT_DONE); Wire.endTransmission(); uint8_t returned = Wire.requestFrom(I2C_ADDR, 2); if (returned == 2 && Wire.available() == 2) { uint8_t msb = Wire.read(); uint8_t lsb = Wire.read(); Serial.print("Init data: "); Serial.println((msb << 8) | lsb); } else { Serial.println("ERROR 1234: Unexpected data!"); } // Activate Heater Wire.beginTransmission(I2C_ADDR); Wire.write(CMD_CONTROL_PWR); Wire.write(1); Wire.endTransmission(); } void loop() { // Grab all data Wire.beginTransmission(I2C_ADDR); Wire.write(CMD_ADC_ALL); Wire.endTransmission(); delayMicroseconds(50); uint8_t ret = Wire.requestFrom(I2C_ADDR, 6); if (ret == 6 && Wire.available() == 6) { uint16_t data[3]; for (uint8_t i = 0; i < 3; ++i) { uint8_t msb = Wire.read(); uint8_t lsb = Wire.read(); data[i] = (msb << 8) | lsb; } Serial.print(data[0]); Serial.print("\t"); Serial.print(data[1]); Serial.print("\t"); Serial.println(data[2]); } else { Serial.print("Request error! - Returned bytes: "); Serial.println(ret); } delay(50); }