mirror of https://github.com/arendst/Tasmota.git
125 lines
3.9 KiB
Arduino
125 lines
3.9 KiB
Arduino
|
/*
|
||
|
* I2C-Generator: 0.3.0
|
||
|
* Yaml Version: 0.1.0
|
||
|
* Template Version: 0.7.0-62-g3d691f9
|
||
|
*/
|
||
|
/*
|
||
|
* Copyright (c) 2021, Sensirion AG
|
||
|
* All rights reserved.
|
||
|
*
|
||
|
* Redistribution and use in source and binary forms, with or without
|
||
|
* modification, are permitted provided that the following conditions are met:
|
||
|
*
|
||
|
* * Redistributions of source code must retain the above copyright notice, this
|
||
|
* list of conditions and the following disclaimer.
|
||
|
*
|
||
|
* * Redistributions in binary form must reproduce the above copyright notice,
|
||
|
* this list of conditions and the following disclaimer in the documentation
|
||
|
* and/or other materials provided with the distribution.
|
||
|
*
|
||
|
* * Neither the name of Sensirion AG nor the names of its
|
||
|
* contributors may be used to endorse or promote products derived from
|
||
|
* this software without specific prior written permission.
|
||
|
*
|
||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||
|
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||
|
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||
|
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
|
||
|
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||
|
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||
|
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||
|
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||
|
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||
|
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||
|
* POSSIBILITY OF SUCH DAMAGE.
|
||
|
*/
|
||
|
|
||
|
#include <Arduino.h>
|
||
|
#include <SensirionI2CSgp41.h>
|
||
|
#include <Wire.h>
|
||
|
|
||
|
SensirionI2CSgp41 sgp41;
|
||
|
|
||
|
// time in seconds needed for NOx conditioning
|
||
|
uint16_t conditioning_s = 10;
|
||
|
|
||
|
void setup() {
|
||
|
|
||
|
Serial.begin(115200);
|
||
|
while (!Serial) {
|
||
|
delay(100);
|
||
|
}
|
||
|
|
||
|
Wire.begin();
|
||
|
|
||
|
uint16_t error;
|
||
|
char errorMessage[256];
|
||
|
|
||
|
sgp41.begin(Wire);
|
||
|
|
||
|
uint16_t serialNumber[3];
|
||
|
uint8_t serialNumberSize = 3;
|
||
|
|
||
|
error = sgp41.getSerialNumber(serialNumber, serialNumberSize);
|
||
|
|
||
|
if (error) {
|
||
|
Serial.print("Error trying to execute getSerialNumber(): ");
|
||
|
errorToString(error, errorMessage, 256);
|
||
|
Serial.println(errorMessage);
|
||
|
} else {
|
||
|
Serial.print("SerialNumber:");
|
||
|
Serial.print("0x");
|
||
|
for (size_t i = 0; i < serialNumberSize; i++) {
|
||
|
uint16_t value = serialNumber[i];
|
||
|
Serial.print(value < 4096 ? "0" : "");
|
||
|
Serial.print(value < 256 ? "0" : "");
|
||
|
Serial.print(value < 16 ? "0" : "");
|
||
|
Serial.print(value, HEX);
|
||
|
}
|
||
|
Serial.println();
|
||
|
}
|
||
|
|
||
|
uint16_t testResult;
|
||
|
error = sgp41.executeSelfTest(testResult);
|
||
|
if (error) {
|
||
|
Serial.print("Error trying to execute executeSelfTest(): ");
|
||
|
errorToString(error, errorMessage, 256);
|
||
|
Serial.println(errorMessage);
|
||
|
} else if (testResult != 0xD400) {
|
||
|
Serial.print("executeSelfTest failed with error: ");
|
||
|
Serial.println(testResult);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void loop() {
|
||
|
uint16_t error;
|
||
|
char errorMessage[256];
|
||
|
uint16_t defaultRh = 0x8000;
|
||
|
uint16_t defaultT = 0x6666;
|
||
|
uint16_t srawVoc = 0;
|
||
|
uint16_t srawNox = 0;
|
||
|
|
||
|
delay(1000);
|
||
|
|
||
|
if (conditioning_s > 0) {
|
||
|
// During NOx conditioning (10s) SRAW NOx will remain 0
|
||
|
error = sgp41.executeConditioning(defaultRh, defaultT, srawVoc);
|
||
|
conditioning_s--;
|
||
|
} else {
|
||
|
// Read Measurement
|
||
|
error = sgp41.measureRawSignals(defaultRh, defaultT, srawVoc, srawNox);
|
||
|
}
|
||
|
|
||
|
if (error) {
|
||
|
Serial.print("Error trying to execute measureRawSignals(): ");
|
||
|
errorToString(error, errorMessage, 256);
|
||
|
Serial.println(errorMessage);
|
||
|
} else {
|
||
|
Serial.print("SRAW_VOC:");
|
||
|
Serial.print(srawVoc);
|
||
|
Serial.print("\t");
|
||
|
Serial.print("SRAW_NOx:");
|
||
|
Serial.println(srawNox);
|
||
|
}
|
||
|
}
|