From a5a798853283cd36f46b081fd1f2ec7627e17f0b Mon Sep 17 00:00:00 2001 From: peteakalad Date: Sat, 23 May 2020 21:47:04 +0100 Subject: [PATCH 1/3] Add Adafruit_SGP30_Sensor-1.2.0 --- .../Adafruit_SGP30.cpp | 306 ++++++++++++++++++ .../Adafruit_SGP30.h | 80 +++++ lib/Adafruit_SGP30_Sensor-1.2.0/README.md | 54 ++++ .../examples/sgp30test/sgp30test.ino | 69 ++++ .../library.properties | 10 + lib/Adafruit_SGP30_Sensor-1.2.0/license.txt | 26 ++ lib/Adafruit_SGP30_Sensor-1.2.0/travis.yml | 27 ++ 7 files changed, 572 insertions(+) create mode 100644 lib/Adafruit_SGP30_Sensor-1.2.0/Adafruit_SGP30.cpp create mode 100644 lib/Adafruit_SGP30_Sensor-1.2.0/Adafruit_SGP30.h create mode 100644 lib/Adafruit_SGP30_Sensor-1.2.0/README.md create mode 100644 lib/Adafruit_SGP30_Sensor-1.2.0/examples/sgp30test/sgp30test.ino create mode 100644 lib/Adafruit_SGP30_Sensor-1.2.0/library.properties create mode 100644 lib/Adafruit_SGP30_Sensor-1.2.0/license.txt create mode 100644 lib/Adafruit_SGP30_Sensor-1.2.0/travis.yml diff --git a/lib/Adafruit_SGP30_Sensor-1.2.0/Adafruit_SGP30.cpp b/lib/Adafruit_SGP30_Sensor-1.2.0/Adafruit_SGP30.cpp new file mode 100644 index 000000000..936561ede --- /dev/null +++ b/lib/Adafruit_SGP30_Sensor-1.2.0/Adafruit_SGP30.cpp @@ -0,0 +1,306 @@ +/*! + * @file Adafruit_SGP30.cpp + * + * @mainpage Adafruit SGP30 gas sensor driver + * + * @section intro_sec Introduction + * + * This is the documentation for Adafruit's SGP30 driver for the + * Arduino platform. It is designed specifically to work with the + * Adafruit SGP30 breakout: http://www.adafruit.com/products/3709 + * + * These sensors use I2C to communicate, 2 pins (SCL+SDA) are required + * to interface with the breakout. + * + * Adafruit invests time and resources providing this open source code, + * please support Adafruit and open-source hardware by purchasing + * products from Adafruit! + * + * + * @section author Author + * Written by Ladyada for Adafruit Industries. + * + * @section license License + * BSD license, all text here must be included in any redistribution. + * + */ + +#include "Arduino.h" + +#include "Adafruit_SGP30.h" +//#define I2C_DEBUG + +/*! + * @brief Instantiates a new SGP30 class + */ +Adafruit_SGP30::Adafruit_SGP30() {} + +/*! + * @brief Setups the hardware and detects a valid SGP30. Initializes I2C + * then reads the serialnumber and checks that we are talking to an + * SGP30 + * @param theWire + * Optional pointer to I2C interface, otherwise use Wire + * @param initSensor + * Optional pointer to prevent IAQinit to be called. Used for Deep + * Sleep. + * @return True if SGP30 found on I2C, False if something went wrong! + */ +boolean Adafruit_SGP30::begin(TwoWire *theWire, boolean initSensor) { + _i2caddr = SGP30_I2CADDR_DEFAULT; + _i2c = theWire; + + _i2c->begin(); + + uint8_t command[2]; + command[0] = 0x36; + command[1] = 0x82; + if (!readWordFromCommand(command, 2, 10, serialnumber, 3)) + return false; + + uint16_t featureset; + command[0] = 0x20; + command[1] = 0x2F; + if (!readWordFromCommand(command, 2, 10, &featureset, 1)) + return false; + // Serial.print("Featureset 0x"); Serial.println(featureset, HEX); + if ((featureset & 0xF0) != SGP30_FEATURESET) + return false; + if (initSensor) { + if (!IAQinit()) + return false; + } + + return true; +} + +/*! + * @brief Commands the sensor to perform a soft reset using the "General + * Call" mode. Take note that this is not sensor specific and all devices that + * support the General Call mode on the on the same I2C bus will perform this. + * + * @return True if command completed successfully, false if something went + * wrong! + */ +boolean Adafruit_SGP30::softReset(void) { + uint8_t command[2]; + command[0] = 0x00; + command[1] = 0x06; + return readWordFromCommand(command, 2, 10); +} + +/*! + * @brief Commands the sensor to begin the IAQ algorithm. Must be called + * after startup. + * @returns True if command completed successfully, false if something went + * wrong! + */ +boolean Adafruit_SGP30::IAQinit(void) { + uint8_t command[2]; + command[0] = 0x20; + command[1] = 0x03; + return readWordFromCommand(command, 2, 10); +} + +/*! + * @brief Commands the sensor to take a single eCO2/VOC measurement. Places + * results in {@link TVOC} and {@link eCO2} + * @return True if command completed successfully, false if something went + * wrong! + */ +boolean Adafruit_SGP30::IAQmeasure(void) { + uint8_t command[2]; + command[0] = 0x20; + command[1] = 0x08; + uint16_t reply[2]; + if (!readWordFromCommand(command, 2, 12, reply, 2)) + return false; + TVOC = reply[1]; + eCO2 = reply[0]; + return true; +} + +/*! + * @brief Commands the sensor to take a single H2/ethanol raw measurement. + * Places results in {@link rawH2} and {@link rawEthanol} + * @returns True if command completed successfully, false if something went + * wrong! + */ +boolean Adafruit_SGP30::IAQmeasureRaw(void) { + uint8_t command[2]; + command[0] = 0x20; + command[1] = 0x50; + uint16_t reply[2]; + if (!readWordFromCommand(command, 2, 25, reply, 2)) + return false; + rawEthanol = reply[1]; + rawH2 = reply[0]; + return true; +} + +/*! + * @brief Request baseline calibration values for both CO2 and TVOC IAQ + * calculations. Places results in parameter memory locaitons. + * @param eco2_base + * A pointer to a uint16_t which we will save the calibration + * value to + * @param tvoc_base + * A pointer to a uint16_t which we will save the calibration value to + * @return True if command completed successfully, false if something went + * wrong! + */ +boolean Adafruit_SGP30::getIAQBaseline(uint16_t *eco2_base, + uint16_t *tvoc_base) { + uint8_t command[2]; + command[0] = 0x20; + command[1] = 0x15; + uint16_t reply[2]; + if (!readWordFromCommand(command, 2, 10, reply, 2)) + return false; + *eco2_base = reply[0]; + *tvoc_base = reply[1]; + return true; +} + +/*! + * @brief Assign baseline calibration values for both CO2 and TVOC IAQ + * calculations. + * @param eco2_base + * A uint16_t which we will save the calibration value from + * @param tvoc_base + * A uint16_t which we will save the calibration value from + * @return True if command completed successfully, false if something went + * wrong! + */ +boolean Adafruit_SGP30::setIAQBaseline(uint16_t eco2_base, uint16_t tvoc_base) { + uint8_t command[8]; + command[0] = 0x20; + command[1] = 0x1e; + command[2] = tvoc_base >> 8; + command[3] = tvoc_base & 0xFF; + command[4] = generateCRC(command + 2, 2); + command[5] = eco2_base >> 8; + command[6] = eco2_base & 0xFF; + command[7] = generateCRC(command + 5, 2); + + return readWordFromCommand(command, 8, 10); +} + +/*! + * @brief Set the absolute humidity value [mg/m^3] for compensation to + * increase precision of TVOC and eCO2. + * @param absolute_humidity + * A uint32_t [mg/m^3] which we will be used for compensation. + * If the absolute humidity is set to zero, humidity compensation + * will be disabled. + * @return True if command completed successfully, false if something went + * wrong! + */ +boolean Adafruit_SGP30::setHumidity(uint32_t absolute_humidity) { + if (absolute_humidity > 256000) { + return false; + } + + uint16_t ah_scaled = + (uint16_t)(((uint64_t)absolute_humidity * 256 * 16777) >> 24); + uint8_t command[5]; + command[0] = 0x20; + command[1] = 0x61; + command[2] = ah_scaled >> 8; + command[3] = ah_scaled & 0xFF; + command[4] = generateCRC(command + 2, 2); + + return readWordFromCommand(command, 5, 10); +} + +/*! + * @brief I2C low level interfacing + */ + +boolean Adafruit_SGP30::readWordFromCommand(uint8_t command[], + uint8_t commandLength, + uint16_t delayms, + uint16_t *readdata, + uint8_t readlen) { + + _i2c->beginTransmission(_i2caddr); + +#ifdef I2C_DEBUG + Serial.print("\t\t-> "); +#endif + + for (uint8_t i = 0; i < commandLength; i++) { + _i2c->write(command[i]); +#ifdef I2C_DEBUG + Serial.print("0x"); + Serial.print(command[i], HEX); + Serial.print(", "); +#endif + } +#ifdef I2C_DEBUG + Serial.println(); +#endif + _i2c->endTransmission(); + + delay(delayms); + + if (readlen == 0) + return true; + + uint8_t replylen = readlen * (SGP30_WORD_LEN + 1); + if (_i2c->requestFrom(_i2caddr, replylen) != replylen) + return false; + uint8_t replybuffer[replylen]; +#ifdef I2C_DEBUG + Serial.print("\t\t<- "); +#endif + for (uint8_t i = 0; i < replylen; i++) { + replybuffer[i] = _i2c->read(); +#ifdef I2C_DEBUG + Serial.print("0x"); + Serial.print(replybuffer[i], HEX); + Serial.print(", "); +#endif + } + +#ifdef I2C_DEBUG + Serial.println(); +#endif + + for (uint8_t i = 0; i < readlen; i++) { + uint8_t crc = generateCRC(replybuffer + i * 3, 2); +#ifdef I2C_DEBUG + Serial.print("\t\tCRC calced: 0x"); + Serial.print(crc, HEX); + Serial.print(" vs. 0x"); + Serial.println(replybuffer[i * 3 + 2], HEX); +#endif + if (crc != replybuffer[i * 3 + 2]) + return false; + // success! store it + readdata[i] = replybuffer[i * 3]; + readdata[i] <<= 8; + readdata[i] |= replybuffer[i * 3 + 1]; +#ifdef I2C_DEBUG + Serial.print("\t\tRead: 0x"); + Serial.println(readdata[i], HEX); +#endif + } + return true; +} + +uint8_t Adafruit_SGP30::generateCRC(uint8_t *data, uint8_t datalen) { + // calculates 8-Bit checksum with given polynomial + uint8_t crc = SGP30_CRC8_INIT; + + for (uint8_t i = 0; i < datalen; i++) { + crc ^= data[i]; + for (uint8_t b = 0; b < 8; b++) { + if (crc & 0x80) + crc = (crc << 1) ^ SGP30_CRC8_POLYNOMIAL; + else + crc <<= 1; + } + } + return crc; +} diff --git a/lib/Adafruit_SGP30_Sensor-1.2.0/Adafruit_SGP30.h b/lib/Adafruit_SGP30_Sensor-1.2.0/Adafruit_SGP30.h new file mode 100644 index 000000000..d50099e9d --- /dev/null +++ b/lib/Adafruit_SGP30_Sensor-1.2.0/Adafruit_SGP30.h @@ -0,0 +1,80 @@ +/*! + * @file Adafruit_SGP30.h + * + * This is the documentation for Adafruit's SGP30 driver for the + * Arduino platform. It is designed specifically to work with the + * Adafruit SGP30 breakout: http://www.adafruit.com/products/3709 + * + * These sensors use I2C to communicate, 2 pins (SCL+SDA) are required + * to interface with the breakout. + * + * Adafruit invests time and resources providing this open source code, + * please support Adafruit and open-source hardware by purchasing + * products from Adafruit! + * + * Written by Ladyada for Adafruit Industries. + * + * BSD license, all text here must be included in any redistribution. + * + */ + +#include "Arduino.h" +#include + +// the i2c address +#define SGP30_I2CADDR_DEFAULT 0x58 ///< SGP30 has only one I2C address + +// commands and constants +#define SGP30_FEATURESET 0x0020 ///< The required set for this library +#define SGP30_CRC8_POLYNOMIAL 0x31 ///< Seed for SGP30's CRC polynomial +#define SGP30_CRC8_INIT 0xFF ///< Init value for CRC +#define SGP30_WORD_LEN 2 ///< 2 bytes per word + +/*! + * @brief Class that stores state and functions for interacting with + * SGP30 Gas Sensor + */ +class Adafruit_SGP30 { +public: + Adafruit_SGP30(); + boolean begin(TwoWire *theWire = &Wire, boolean initSensor = true); + boolean softReset(); + boolean IAQinit(); + boolean IAQmeasure(); + boolean IAQmeasureRaw(); + + boolean getIAQBaseline(uint16_t *eco2_base, uint16_t *tvoc_base); + boolean setIAQBaseline(uint16_t eco2_base, uint16_t tvoc_base); + boolean setHumidity(uint32_t absolute_humidity); + + /** The last measurement of the IAQ-calculated Total Volatile Organic + * Compounds in ppb. This value is set when you call {@link IAQmeasure()} **/ + uint16_t TVOC; + + /** The last measurement of the IAQ-calculated equivalent CO2 in ppm. This + * value is set when you call {@link IAQmeasure()} **/ + uint16_t eCO2; + + /** The last measurement of the IAQ-calculated equivalent CO2 in ppm. This + * value is set when you call {@link IAQmeasureRaw()} **/ + uint16_t rawH2; + + /** The last measurement of the IAQ-calculated equivalent CO2 in ppm. This + * value is set when you call {@link IAQmeasureRaw()} **/ + uint16_t rawEthanol; + + /** The 48-bit serial number, this value is set when you call {@link begin()} + * **/ + uint16_t serialnumber[3]; + +private: + TwoWire *_i2c; + uint8_t _i2caddr; + + void write(uint8_t address, uint8_t *data, uint8_t n); + void read(uint8_t address, uint8_t *data, uint8_t n); + boolean readWordFromCommand(uint8_t command[], uint8_t commandLength, + uint16_t delay, uint16_t *readdata = NULL, + uint8_t readlen = 0); + uint8_t generateCRC(uint8_t data[], uint8_t datalen); +}; diff --git a/lib/Adafruit_SGP30_Sensor-1.2.0/README.md b/lib/Adafruit_SGP30_Sensor-1.2.0/README.md new file mode 100644 index 000000000..f4d35eeaa --- /dev/null +++ b/lib/Adafruit_SGP30_Sensor-1.2.0/README.md @@ -0,0 +1,54 @@ +# Adafruit SGP30 Gas / Air Quality I2C sensor [[![Build Status](https://github.com/adafruit/Adafruit_SGP30/workflows/Arduino%20Library%20CI/badge.svg)](https://github.com/adafruit/Adafruit_SGP30/actions)[![Documentation](https://github.com/adafruit/ci-arduino/blob/master/assets/doxygen_badge.svg)](http://adafruit.github.io/Adafruit_SGP30/html/index.html) + + + +This is the Adafruit SGP30 Gas / Air Quality I2C sensor library + +Tested and works great with the Aadafruit SGP30 Breakout Board + * http://www.adafruit.com/products/3709 + +This chip uses I2C to communicate, 2 pins are required to interface + +Adafruit invests time and resources providing this open source code, please support Adafruit and open-source hardware by purchasing products from Adafruit! + +# Installation +To install, use the Arduino Library Manager and search for "Adafruit SGP30" and install the library. + +## Dependencies + * [Adafruit ILI9341](https://github.com/adafruit/Adafruit_ILI9341) + * [Adafruit GFX Library](https://github.com/adafruit/Adafruit-GFX-Library) + +# Contributing + +Contributions are welcome! Please read our [Code of Conduct](https://github.com/adafruit/Adafruit_SGP30/blob/master/CODE_OF_CONDUCT.md>) +before contributing to help this project stay welcoming. + +## Documentation and doxygen +Documentation is produced by doxygen. Contributions should include documentation for any new code added. + +Some examples of how to use doxygen can be found in these guide pages: + +https://learn.adafruit.com/the-well-automated-arduino-library/doxygen + +https://learn.adafruit.com/the-well-automated-arduino-library/doxygen-tips + +## Formatting and clang-format +This library uses [`clang-format`](https://releases.llvm.org/download.html) to standardize the formatting of `.cpp` and `.h` files. +Contributions should be formatted using `clang-format`: + +The `-i` flag will make the changes to the file. +```bash +clang-format -i *.cpp *.h +``` +If you prefer to make the changes yourself, running `clang-format` without the `-i` flag will print out a formatted version of the file. You can save this to a file and diff it against the original to see the changes. + +Note that the formatting output by `clang-format` is what the automated formatting checker will expect. Any diffs from this formatting will result in a failed build until they are addressed. Using the `-i` flag is highly recommended. + +### clang-format resources + * [Binary builds and source available on the LLVM downloads page](https://releases.llvm.org/download.html) + * [Documentation and IDE integration](https://clang.llvm.org/docs/ClangFormat.html) + +## About this Driver +Written by Limor Fried for Adafruit Industries. +BSD license, check license.txt for more information +All text above must be included in any redistribution diff --git a/lib/Adafruit_SGP30_Sensor-1.2.0/examples/sgp30test/sgp30test.ino b/lib/Adafruit_SGP30_Sensor-1.2.0/examples/sgp30test/sgp30test.ino new file mode 100644 index 000000000..fbfbf49d5 --- /dev/null +++ b/lib/Adafruit_SGP30_Sensor-1.2.0/examples/sgp30test/sgp30test.ino @@ -0,0 +1,69 @@ +#include +#include "Adafruit_SGP30.h" + +Adafruit_SGP30 sgp; + +/* return absolute humidity [mg/m^3] with approximation formula +* @param temperature [°C] +* @param humidity [%RH] +*/ +uint32_t getAbsoluteHumidity(float temperature, float humidity) { + // approximation formula from Sensirion SGP30 Driver Integration chapter 3.15 + const float absoluteHumidity = 216.7f * ((humidity / 100.0f) * 6.112f * exp((17.62f * temperature) / (243.12f + temperature)) / (273.15f + temperature)); // [g/m^3] + const uint32_t absoluteHumidityScaled = static_cast(1000.0f * absoluteHumidity); // [mg/m^3] + return absoluteHumidityScaled; +} + +void setup() { + Serial.begin(9600); + Serial.println("SGP30 test"); + + if (! sgp.begin()){ + Serial.println("Sensor not found :("); + while (1); + } + Serial.print("Found SGP30 serial #"); + Serial.print(sgp.serialnumber[0], HEX); + Serial.print(sgp.serialnumber[1], HEX); + Serial.println(sgp.serialnumber[2], HEX); + + // If you have a baseline measurement from before you can assign it to start, to 'self-calibrate' + //sgp.setIAQBaseline(0x8E68, 0x8F41); // Will vary for each sensor! +} + +int counter = 0; +void loop() { + // If you have a temperature / humidity sensor, you can set the absolute humidity to enable the humditiy compensation for the air quality signals + //float temperature = 22.1; // [°C] + //float humidity = 45.2; // [%RH] + //sgp.setHumidity(getAbsoluteHumidity(temperature, humidity)); + + if (! sgp.IAQmeasure()) { + Serial.println("Measurement failed"); + return; + } + Serial.print("TVOC "); Serial.print(sgp.TVOC); Serial.print(" ppb\t"); + Serial.print("eCO2 "); Serial.print(sgp.eCO2); Serial.println(" ppm"); + + if (! sgp.IAQmeasureRaw()) { + Serial.println("Raw Measurement failed"); + return; + } + Serial.print("Raw H2 "); Serial.print(sgp.rawH2); Serial.print(" \t"); + Serial.print("Raw Ethanol "); Serial.print(sgp.rawEthanol); Serial.println(""); + + delay(1000); + + counter++; + if (counter == 30) { + counter = 0; + + uint16_t TVOC_base, eCO2_base; + if (! sgp.getIAQBaseline(&eCO2_base, &TVOC_base)) { + Serial.println("Failed to get baseline readings"); + return; + } + Serial.print("****Baseline values: eCO2: 0x"); Serial.print(eCO2_base, HEX); + Serial.print(" & TVOC: 0x"); Serial.println(TVOC_base, HEX); + } +} diff --git a/lib/Adafruit_SGP30_Sensor-1.2.0/library.properties b/lib/Adafruit_SGP30_Sensor-1.2.0/library.properties new file mode 100644 index 000000000..5242ef25b --- /dev/null +++ b/lib/Adafruit_SGP30_Sensor-1.2.0/library.properties @@ -0,0 +1,10 @@ +name=Adafruit SGP30 Sensor +version=1.2.0 +author=Adafruit +maintainer=Adafruit +sentence=This is an Arduino library for the Adafruit SGP30 Gas / Air Quality Sensor +paragraph=This is an Arduino library for the Adafruit SGP30 Gas / Air Quality Sensor +category=Sensors +url=https://github.com/adafruit/Adafruit_SGP30 +architectures=* +depends=Adafruit ILI9341, Adafruit GFX Library diff --git a/lib/Adafruit_SGP30_Sensor-1.2.0/license.txt b/lib/Adafruit_SGP30_Sensor-1.2.0/license.txt new file mode 100644 index 000000000..f6a0f22b8 --- /dev/null +++ b/lib/Adafruit_SGP30_Sensor-1.2.0/license.txt @@ -0,0 +1,26 @@ +Software License Agreement (BSD License) + +Copyright (c) 2012, Adafruit Industries +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: +1. Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. +2. 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. +3. Neither the name of the copyright holders 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 ''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 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. diff --git a/lib/Adafruit_SGP30_Sensor-1.2.0/travis.yml b/lib/Adafruit_SGP30_Sensor-1.2.0/travis.yml new file mode 100644 index 000000000..428f3434e --- /dev/null +++ b/lib/Adafruit_SGP30_Sensor-1.2.0/travis.yml @@ -0,0 +1,27 @@ +language: c +sudo: false + +# Blacklist +branches: + except: + - gh-pages + +env: + global: + - PRETTYNAME="Adafruit SGP30 Arduino Library" +# Optional, will default to "$TRAVIS_BUILD_DIR/Doxyfile" +# - DOXYFILE: $TRAVIS_BUILD_DIR/Doxyfile + +before_install: + - source <(curl -SLs https://raw.githubusercontent.com/adafruit/travis-ci-arduino/master/install.sh) + +#install: +# - arduino --install-library "Adafruit ILI9341","Adafruit GFX Library" + +script: + - build_main_platforms + +# Generate and deploy documentation +after_success: + - source <(curl -SLs https://raw.githubusercontent.com/adafruit/travis-ci-arduino/master/library_check.sh) + - source <(curl -SLs https://raw.githubusercontent.com/adafruit/travis-ci-arduino/master/doxy_gen_and_deploy.sh) \ No newline at end of file From 615645e50e339a18eef574f92e5ac806091e1401 Mon Sep 17 00:00:00 2001 From: peteakalad Date: Sat, 23 May 2020 22:28:42 +0100 Subject: [PATCH 2/3] Fix for SPG30 Abs Humidity Not Shown on Web UI --- .../.github/ISSUE_TEMPLATE.md | 46 --- .../.github/PULL_REQUEST_TEMPLATE.md | 26 -- lib/Adafruit_SGP30-1.0.3/.gitignore | 4 - lib/Adafruit_SGP30-1.0.3/.travis.yml | 27 -- lib/Adafruit_SGP30-1.0.3/Adafruit_SGP30.cpp | 267 ------------------ lib/Adafruit_SGP30-1.0.3/Adafruit_SGP30.h | 69 ----- lib/Adafruit_SGP30-1.0.3/README.md | 18 -- .../examples/sgp30test/sgp30test.ino | 61 ---- lib/Adafruit_SGP30-1.0.3/library.properties | 9 - .../Adafruit_SGP30.cpp | 0 .../Adafruit_SGP30.h | 0 .../README.md | 0 .../examples/sgp30test/sgp30test.ino | 0 .../library.properties | 0 .../license.txt | 0 .../travis.yml | 0 lib/Adafruit_SGP30_Sensor-1.2.0/license.txt | 26 -- 17 files changed, 553 deletions(-) delete mode 100755 lib/Adafruit_SGP30-1.0.3/.github/ISSUE_TEMPLATE.md delete mode 100755 lib/Adafruit_SGP30-1.0.3/.github/PULL_REQUEST_TEMPLATE.md delete mode 100755 lib/Adafruit_SGP30-1.0.3/.gitignore delete mode 100755 lib/Adafruit_SGP30-1.0.3/.travis.yml delete mode 100755 lib/Adafruit_SGP30-1.0.3/Adafruit_SGP30.cpp delete mode 100755 lib/Adafruit_SGP30-1.0.3/Adafruit_SGP30.h delete mode 100755 lib/Adafruit_SGP30-1.0.3/README.md delete mode 100755 lib/Adafruit_SGP30-1.0.3/examples/sgp30test/sgp30test.ino delete mode 100755 lib/Adafruit_SGP30-1.0.3/library.properties rename lib/{Adafruit_SGP30_Sensor-1.2.0 => Adafruit_SGP30-1.2.0}/Adafruit_SGP30.cpp (100%) rename lib/{Adafruit_SGP30_Sensor-1.2.0 => Adafruit_SGP30-1.2.0}/Adafruit_SGP30.h (100%) rename lib/{Adafruit_SGP30_Sensor-1.2.0 => Adafruit_SGP30-1.2.0}/README.md (100%) rename lib/{Adafruit_SGP30_Sensor-1.2.0 => Adafruit_SGP30-1.2.0}/examples/sgp30test/sgp30test.ino (100%) rename lib/{Adafruit_SGP30_Sensor-1.2.0 => Adafruit_SGP30-1.2.0}/library.properties (100%) rename lib/{Adafruit_SGP30-1.0.3 => Adafruit_SGP30-1.2.0}/license.txt (100%) mode change 100755 => 100644 rename lib/{Adafruit_SGP30_Sensor-1.2.0 => Adafruit_SGP30-1.2.0}/travis.yml (100%) delete mode 100644 lib/Adafruit_SGP30_Sensor-1.2.0/license.txt diff --git a/lib/Adafruit_SGP30-1.0.3/.github/ISSUE_TEMPLATE.md b/lib/Adafruit_SGP30-1.0.3/.github/ISSUE_TEMPLATE.md deleted file mode 100755 index f0e26146f..000000000 --- a/lib/Adafruit_SGP30-1.0.3/.github/ISSUE_TEMPLATE.md +++ /dev/null @@ -1,46 +0,0 @@ -Thank you for opening an issue on an Adafruit Arduino library repository. To -improve the speed of resolution please review the following guidelines and -common troubleshooting steps below before creating the issue: - -- **Do not use GitHub issues for troubleshooting projects and issues.** Instead use - the forums at http://forums.adafruit.com to ask questions and troubleshoot why - something isn't working as expected. In many cases the problem is a common issue - that you will more quickly receive help from the forum community. GitHub issues - are meant for known defects in the code. If you don't know if there is a defect - in the code then start with troubleshooting on the forum first. - -- **If following a tutorial or guide be sure you didn't miss a step.** Carefully - check all of the steps and commands to run have been followed. Consult the - forum if you're unsure or have questions about steps in a guide/tutorial. - -- **For Arduino projects check these very common issues to ensure they don't apply**: - - - For uploading sketches or communicating with the board make sure you're using - a **USB data cable** and **not** a **USB charge-only cable**. It is sometimes - very hard to tell the difference between a data and charge cable! Try using the - cable with other devices or swapping to another cable to confirm it is not - the problem. - - - **Be sure you are supplying adequate power to the board.** Check the specs of - your board and plug in an external power supply. In many cases just - plugging a board into your computer is not enough to power it and other - peripherals. - - - **Double check all soldering joints and connections.** Flakey connections - cause many mysterious problems. See the [guide to excellent soldering](https://learn.adafruit.com/adafruit-guide-excellent-soldering/tools) for examples of good solder joints. - - - **Ensure you are using an official Arduino or Adafruit board.** We can't - guarantee a clone board will have the same functionality and work as expected - with this code and don't support them. - -If you're sure this issue is a defect in the code and checked the steps above -please fill in the following fields to provide enough troubleshooting information. -You may delete the guideline and text above to just leave the following details: - -- Arduino board: **INSERT ARDUINO BOARD NAME/TYPE HERE** - -- Arduino IDE version (found in Arduino -> About Arduino menu): **INSERT ARDUINO - VERSION HERE** - -- List the steps to reproduce the problem below (if possible attach a sketch or - copy the sketch code in too): **LIST REPRO STEPS BELOW** diff --git a/lib/Adafruit_SGP30-1.0.3/.github/PULL_REQUEST_TEMPLATE.md b/lib/Adafruit_SGP30-1.0.3/.github/PULL_REQUEST_TEMPLATE.md deleted file mode 100755 index 7b641eb86..000000000 --- a/lib/Adafruit_SGP30-1.0.3/.github/PULL_REQUEST_TEMPLATE.md +++ /dev/null @@ -1,26 +0,0 @@ -Thank you for creating a pull request to contribute to Adafruit's GitHub code! -Before you open the request please review the following guidelines and tips to -help it be more easily integrated: - -- **Describe the scope of your change--i.e. what the change does and what parts - of the code were modified.** This will help us understand any risks of integrating - the code. - -- **Describe any known limitations with your change.** For example if the change - doesn't apply to a supported platform of the library please mention it. - -- **Please run any tests or examples that can exercise your modified code.** We - strive to not break users of the code and running tests/examples helps with this - process. - -Thank you again for contributing! We will try to test and integrate the change -as soon as we can, but be aware we have many GitHub repositories to manage and -can't immediately respond to every request. There is no need to bump or check in -on a pull request (it will clutter the discussion of the request). - -Also don't be worried if the request is closed or not integrated--sometimes the -priorities of Adafruit's GitHub code (education, ease of use) might not match the -priorities of the pull request. Don't fret, the open source community thrives on -forks and GitHub makes it easy to keep your changes in a forked repo. - -After reviewing the guidelines above you can delete this text from the pull request. diff --git a/lib/Adafruit_SGP30-1.0.3/.gitignore b/lib/Adafruit_SGP30-1.0.3/.gitignore deleted file mode 100755 index 7f189125f..000000000 --- a/lib/Adafruit_SGP30-1.0.3/.gitignore +++ /dev/null @@ -1,4 +0,0 @@ -*~ -Doxyfile* -doxygen_sqlite3.db -html \ No newline at end of file diff --git a/lib/Adafruit_SGP30-1.0.3/.travis.yml b/lib/Adafruit_SGP30-1.0.3/.travis.yml deleted file mode 100755 index 428f3434e..000000000 --- a/lib/Adafruit_SGP30-1.0.3/.travis.yml +++ /dev/null @@ -1,27 +0,0 @@ -language: c -sudo: false - -# Blacklist -branches: - except: - - gh-pages - -env: - global: - - PRETTYNAME="Adafruit SGP30 Arduino Library" -# Optional, will default to "$TRAVIS_BUILD_DIR/Doxyfile" -# - DOXYFILE: $TRAVIS_BUILD_DIR/Doxyfile - -before_install: - - source <(curl -SLs https://raw.githubusercontent.com/adafruit/travis-ci-arduino/master/install.sh) - -#install: -# - arduino --install-library "Adafruit ILI9341","Adafruit GFX Library" - -script: - - build_main_platforms - -# Generate and deploy documentation -after_success: - - source <(curl -SLs https://raw.githubusercontent.com/adafruit/travis-ci-arduino/master/library_check.sh) - - source <(curl -SLs https://raw.githubusercontent.com/adafruit/travis-ci-arduino/master/doxy_gen_and_deploy.sh) \ No newline at end of file diff --git a/lib/Adafruit_SGP30-1.0.3/Adafruit_SGP30.cpp b/lib/Adafruit_SGP30-1.0.3/Adafruit_SGP30.cpp deleted file mode 100755 index ce6116863..000000000 --- a/lib/Adafruit_SGP30-1.0.3/Adafruit_SGP30.cpp +++ /dev/null @@ -1,267 +0,0 @@ -/*! - * @file Adafruit_SGP30.cpp - * - * @mainpage Adafruit SGP30 gas sensor driver - * - * @section intro_sec Introduction - * - * This is the documentation for Adafruit's SGP30 driver for the - * Arduino platform. It is designed specifically to work with the - * Adafruit SGP30 breakout: http://www.adafruit.com/products/3709 - * - * These sensors use I2C to communicate, 2 pins (SCL+SDA) are required - * to interface with the breakout. - * - * Adafruit invests time and resources providing this open source code, - * please support Adafruit and open-source hardware by purchasing - * products from Adafruit! - * - * - * @section author Author - * Written by Ladyada for Adafruit Industries. - * - * @section license License - * BSD license, all text here must be included in any redistribution. - * - */ - - -#if ARDUINO >= 100 - #include "Arduino.h" -#else - #include "WProgram.h" -#endif - -#include "Adafruit_SGP30.h" - -//#define I2C_DEBUG - -/**************************************************************************/ -/*! - @brief Instantiates a new SGP30 class -*/ -/**************************************************************************/ -Adafruit_SGP30::Adafruit_SGP30() { -} - -/**************************************************************************/ -/*! - @brief Setups the hardware and detects a valid SGP30. Initializes I2C - then reads the serialnumber and checks that we are talking to an SGP30 - @param theWire Optional pointer to I2C interface, otherwise use Wire - @returns True if SGP30 found on I2C, False if something went wrong! -*/ -/**************************************************************************/ -boolean Adafruit_SGP30::begin(TwoWire *theWire) { - _i2caddr = SGP30_I2CADDR_DEFAULT; - if (theWire == NULL) { - _i2c = &Wire; - } else { - _i2c = theWire; - } - -// assume i2c initialized already to avoid resetting clock stretching -// _i2c->begin(); - - - uint8_t command[2]; - command[0] = 0x36; - command[1] = 0x82; - if (! readWordFromCommand(command, 2, 10, serialnumber, 3)) - return false; - - uint16_t featureset; - command[0] = 0x20; - command[1] = 0x2F; - if (! readWordFromCommand(command, 2, 10, &featureset, 1)) - return false; - //Serial.print("Featureset 0x"); Serial.println(featureset, HEX); - if (featureset != SGP30_FEATURESET) - return false; - if (! IAQinit()) - return false; - - return true; -} - -/**************************************************************************/ -/*! - @brief Commands the sensor to begin the IAQ algorithm. Must be called after startup. - @returns True if command completed successfully, false if something went wrong! -*/ -/**************************************************************************/ -boolean Adafruit_SGP30::IAQinit(void) { - uint8_t command[2]; - command[0] = 0x20; - command[1] = 0x03; - return readWordFromCommand(command, 2, 10); -} - -/**************************************************************************/ -/*! - @brief Commands the sensor to take a single eCO2/VOC measurement. Places results in {@link TVOC} and {@link eCO2} - @returns True if command completed successfully, false if something went wrong! -*/ -/**************************************************************************/ -boolean Adafruit_SGP30::IAQmeasure(void) { - uint8_t command[2]; - command[0] = 0x20; - command[1] = 0x08; - uint16_t reply[2]; - if (! readWordFromCommand(command, 2, 12, reply, 2)) - return false; - TVOC = reply[1]; - eCO2 = reply[0]; - return true; -} - -/**************************************************************************/ -/*! - @brief Request baseline calibration values for both CO2 and TVOC IAQ calculations. Places results in parameter memory locaitons. - @param eco2_base A pointer to a uint16_t which we will save the calibration value to - @param tvoc_base A pointer to a uint16_t which we will save the calibration value to - @returns True if command completed successfully, false if something went wrong! -*/ -/**************************************************************************/ -boolean Adafruit_SGP30::getIAQBaseline(uint16_t *eco2_base, uint16_t *tvoc_base) { - uint8_t command[2]; - command[0] = 0x20; - command[1] = 0x15; - uint16_t reply[2]; - if (! readWordFromCommand(command, 2, 10, reply, 2)) - return false; - *eco2_base = reply[0]; - *tvoc_base = reply[1]; - return true; -} - -/**************************************************************************/ -/*! - @brief Assign baseline calibration values for both CO2 and TVOC IAQ calculations. - @param eco2_base A uint16_t which we will save the calibration value from - @param tvoc_base A uint16_t which we will save the calibration value from - @returns True if command completed successfully, false if something went wrong! -*/ -/**************************************************************************/ -boolean Adafruit_SGP30::setIAQBaseline(uint16_t eco2_base, uint16_t tvoc_base) { - uint8_t command[8]; - command[0] = 0x20; - command[1] = 0x1e; - command[2] = tvoc_base >> 8; - command[3] = tvoc_base & 0xFF; - command[4] = generateCRC(command+2, 2); - command[5] = eco2_base >> 8; - command[6] = eco2_base & 0xFF; - command[7] = generateCRC(command+5, 2); - - return readWordFromCommand(command, 8, 10); -} - -/**************************************************************************/ -/*! - @brief Set the absolute humidity value [mg/m^3] for compensation to increase precision of TVOC and eCO2. - @param absolute_humidity A uint32_t [mg/m^3] which we will be used for compensation. If the absolute humidity is set to zero, humidity compensation will be disabled. - @returns True if command completed successfully, false if something went wrong! -*/ -/**************************************************************************/ -boolean Adafruit_SGP30::setHumidity(uint32_t absolute_humidity) { - if (absolute_humidity > 256000) { - return false; - } - - uint16_t ah_scaled = (uint16_t)(((uint64_t)absolute_humidity * 256 * 16777) >> 24); - uint8_t command[5]; - command[0] = 0x20; - command[1] = 0x61; - command[2] = ah_scaled >> 8; - command[3] = ah_scaled & 0xFF; - command[4] = generateCRC(command+2, 2); - - return readWordFromCommand(command, 5, 10); -} - -/**************************************************************************/ -/*! - @brief I2C low level interfacing -*/ -/**************************************************************************/ - - -boolean Adafruit_SGP30::readWordFromCommand(uint8_t command[], uint8_t commandLength, uint16_t delayms, uint16_t *readdata, uint8_t readlen) -{ - uint8_t data; - - _i2c->beginTransmission(_i2caddr); - -#ifdef I2C_DEBUG - Serial.print("\t\t-> "); -#endif - - for (uint8_t i=0; iwrite(command[i]); -#ifdef I2C_DEBUG - Serial.print("0x"); Serial.print(command[i], HEX); Serial.print(", "); -#endif - } -#ifdef I2C_DEBUG - Serial.println(); -#endif - _i2c->endTransmission(); - - delay(delayms); - - if (readlen == 0) - return true; - - uint8_t replylen = readlen * (SGP30_WORD_LEN +1); - if (_i2c->requestFrom(_i2caddr, replylen) != replylen) - return false; - uint8_t replybuffer[replylen]; -#ifdef I2C_DEBUG - Serial.print("\t\t<- "); -#endif - for (uint8_t i=0; iread(); -#ifdef I2C_DEBUG - Serial.print("0x"); Serial.print(replybuffer[i], HEX); Serial.print(", "); -#endif - } - -#ifdef I2C_DEBUG - Serial.println(); -#endif - - for (uint8_t i=0; i - -// the i2c address -#define SGP30_I2CADDR_DEFAULT 0x58 ///< SGP30 has only one I2C address - -// commands and constants -#define SGP30_FEATURESET 0x0020 ///< The required set for this library -#define SGP30_CRC8_POLYNOMIAL 0x31 ///< Seed for SGP30's CRC polynomial -#define SGP30_CRC8_INIT 0xFF ///< Init value for CRC -#define SGP30_WORD_LEN 2 ///< 2 bytes per word - -/**************************************************************************/ -/*! Class that stores state and functions for interacting with SGP30 Gas Sensor */ -/**************************************************************************/ -class Adafruit_SGP30 { - public: - Adafruit_SGP30(); - boolean begin(TwoWire *theWire = NULL); - boolean IAQinit(void); - boolean IAQmeasure(void); - - boolean getIAQBaseline(uint16_t *eco2_base, uint16_t *tvoc_base); - boolean setIAQBaseline(uint16_t eco2_base, uint16_t tvoc_base); - boolean setHumidity(uint32_t absolute_humidity); - - /** - * The last measurement of the IAQ-calculated Total Volatile Organic Compounds in ppb. This value is set when you call {@link IAQmeasure()} - */ - uint16_t TVOC; - - /** - * The last measurement of the IAQ-calculated equivalent CO2 in ppm. This value is set when you call {@link IAQmeasure()} - */ - uint16_t eCO2; - - /** - * The 48-bit serial number, this value is set when you call {@link begin()} - */ - uint16_t serialnumber[3]; - private: - TwoWire *_i2c; - uint8_t _i2caddr; - - void write(uint8_t address, uint8_t *data, uint8_t n); - void read(uint8_t address, uint8_t *data, uint8_t n); - boolean readWordFromCommand(uint8_t command[], uint8_t commandLength, uint16_t delay, uint16_t *readdata = NULL, uint8_t readlen = 0); - uint8_t generateCRC(uint8_t data[], uint8_t datalen); -}; diff --git a/lib/Adafruit_SGP30-1.0.3/README.md b/lib/Adafruit_SGP30-1.0.3/README.md deleted file mode 100755 index 44056b5c8..000000000 --- a/lib/Adafruit_SGP30-1.0.3/README.md +++ /dev/null @@ -1,18 +0,0 @@ -Adafruit_SGP30 -================ - -This is the Adafruit SGP30 Gas / Air Quality I2C sensor library - -Tested and works great with the Aadafruit SGP30 Breakout Board - * http://www.adafruit.com/products/3709 - -This chip uses I2C to communicate, 2 pins are required to interface - -Adafruit invests time and resources providing this open source code, -please support Adafruit and open-source hardware by purchasing -products from Adafruit! - -Written by Limor Fried for Adafruit Industries. -BSD license, check license.txt for more information -All text above must be included in any redistribution - diff --git a/lib/Adafruit_SGP30-1.0.3/examples/sgp30test/sgp30test.ino b/lib/Adafruit_SGP30-1.0.3/examples/sgp30test/sgp30test.ino deleted file mode 100755 index b7ff8a70c..000000000 --- a/lib/Adafruit_SGP30-1.0.3/examples/sgp30test/sgp30test.ino +++ /dev/null @@ -1,61 +0,0 @@ -#include -#include "Adafruit_SGP30.h" - -Adafruit_SGP30 sgp; - -/* return absolute humidity [mg/m^3] with approximation formula -* @param temperature [°C] -* @param humidity [%RH] -*/ -uint32_t getAbsoluteHumidity(float temperature, float humidity) { - // approximation formula from Sensirion SGP30 Driver Integration chapter 3.15 - const float absoluteHumidity = 216.7f * ((humidity / 100.0f) * 6.112f * exp((17.62f * temperature) / (243.12f + temperature)) / (273.15f + temperature)); // [g/m^3] - const uint32_t absoluteHumidityScaled = static_cast(1000.0f * absoluteHumidity); // [mg/m^3] - return absoluteHumidityScaled; -} - -void setup() { - Serial.begin(9600); - Serial.println("SGP30 test"); - - if (! sgp.begin()){ - Serial.println("Sensor not found :("); - while (1); - } - Serial.print("Found SGP30 serial #"); - Serial.print(sgp.serialnumber[0], HEX); - Serial.print(sgp.serialnumber[1], HEX); - Serial.println(sgp.serialnumber[2], HEX); - - // If you have a baseline measurement from before you can assign it to start, to 'self-calibrate' - //sgp.setIAQBaseline(0x8E68, 0x8F41); // Will vary for each sensor! -} - -int counter = 0; -void loop() { - // If you have a temperature / humidity sensor, you can set the absolute humidity to enable the humditiy compensation for the air quality signals - //float temperature = 22.1; // [°C] - //float humidity = 45.2; // [%RH] - //sgp.setHumidity(getAbsoluteHumidity(temperature, humidity)); - - if (! sgp.IAQmeasure()) { - Serial.println("Measurement failed"); - return; - } - Serial.print("TVOC "); Serial.print(sgp.TVOC); Serial.print(" ppb\t"); - Serial.print("eCO2 "); Serial.print(sgp.eCO2); Serial.println(" ppm"); - delay(1000); - - counter++; - if (counter == 30) { - counter = 0; - - uint16_t TVOC_base, eCO2_base; - if (! sgp.getIAQBaseline(&eCO2_base, &TVOC_base)) { - Serial.println("Failed to get baseline readings"); - return; - } - Serial.print("****Baseline values: eCO2: 0x"); Serial.print(eCO2_base, HEX); - Serial.print(" & TVOC: 0x"); Serial.println(TVOC_base, HEX); - } -} \ No newline at end of file diff --git a/lib/Adafruit_SGP30-1.0.3/library.properties b/lib/Adafruit_SGP30-1.0.3/library.properties deleted file mode 100755 index 6c86464d1..000000000 --- a/lib/Adafruit_SGP30-1.0.3/library.properties +++ /dev/null @@ -1,9 +0,0 @@ -name=Adafruit SGP30 Sensor -version=1.0.3 -author=Adafruit -maintainer=Adafruit -sentence=This is an Arduino library for the Adafruit SGP30 Gas / Air Quality Sensor -paragraph=This is an Arduino library for the Adafruit SGP30 Gas / Air Quality Sensor -category=Sensors -url=https://github.com/adafruit/Adafruit_SGP30 -architectures=* diff --git a/lib/Adafruit_SGP30_Sensor-1.2.0/Adafruit_SGP30.cpp b/lib/Adafruit_SGP30-1.2.0/Adafruit_SGP30.cpp similarity index 100% rename from lib/Adafruit_SGP30_Sensor-1.2.0/Adafruit_SGP30.cpp rename to lib/Adafruit_SGP30-1.2.0/Adafruit_SGP30.cpp diff --git a/lib/Adafruit_SGP30_Sensor-1.2.0/Adafruit_SGP30.h b/lib/Adafruit_SGP30-1.2.0/Adafruit_SGP30.h similarity index 100% rename from lib/Adafruit_SGP30_Sensor-1.2.0/Adafruit_SGP30.h rename to lib/Adafruit_SGP30-1.2.0/Adafruit_SGP30.h diff --git a/lib/Adafruit_SGP30_Sensor-1.2.0/README.md b/lib/Adafruit_SGP30-1.2.0/README.md similarity index 100% rename from lib/Adafruit_SGP30_Sensor-1.2.0/README.md rename to lib/Adafruit_SGP30-1.2.0/README.md diff --git a/lib/Adafruit_SGP30_Sensor-1.2.0/examples/sgp30test/sgp30test.ino b/lib/Adafruit_SGP30-1.2.0/examples/sgp30test/sgp30test.ino similarity index 100% rename from lib/Adafruit_SGP30_Sensor-1.2.0/examples/sgp30test/sgp30test.ino rename to lib/Adafruit_SGP30-1.2.0/examples/sgp30test/sgp30test.ino diff --git a/lib/Adafruit_SGP30_Sensor-1.2.0/library.properties b/lib/Adafruit_SGP30-1.2.0/library.properties similarity index 100% rename from lib/Adafruit_SGP30_Sensor-1.2.0/library.properties rename to lib/Adafruit_SGP30-1.2.0/library.properties diff --git a/lib/Adafruit_SGP30-1.0.3/license.txt b/lib/Adafruit_SGP30-1.2.0/license.txt old mode 100755 new mode 100644 similarity index 100% rename from lib/Adafruit_SGP30-1.0.3/license.txt rename to lib/Adafruit_SGP30-1.2.0/license.txt diff --git a/lib/Adafruit_SGP30_Sensor-1.2.0/travis.yml b/lib/Adafruit_SGP30-1.2.0/travis.yml similarity index 100% rename from lib/Adafruit_SGP30_Sensor-1.2.0/travis.yml rename to lib/Adafruit_SGP30-1.2.0/travis.yml diff --git a/lib/Adafruit_SGP30_Sensor-1.2.0/license.txt b/lib/Adafruit_SGP30_Sensor-1.2.0/license.txt deleted file mode 100644 index f6a0f22b8..000000000 --- a/lib/Adafruit_SGP30_Sensor-1.2.0/license.txt +++ /dev/null @@ -1,26 +0,0 @@ -Software License Agreement (BSD License) - -Copyright (c) 2012, Adafruit Industries -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: -1. Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. -2. 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. -3. Neither the name of the copyright holders 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 ''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 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. From 11cb3e838c88c5e3c51813667353d3c9e3b26e59 Mon Sep 17 00:00:00 2001 From: peteakalad Date: Sat, 23 May 2020 22:41:50 +0100 Subject: [PATCH 3/3] Fix for SGP30 for Abs Humidity on Web UI --- tasmota/xsns_21_sgp30.ino | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/tasmota/xsns_21_sgp30.ino b/tasmota/xsns_21_sgp30.ino index e3aa2e9e8..ab417a8c3 100644 --- a/tasmota/xsns_21_sgp30.ino +++ b/tasmota/xsns_21_sgp30.ino @@ -118,12 +118,14 @@ void Sgp30Show(bool json) { if (sgp30_ready) { char abs_hum[33]; - + + if (global_update && global_humidity>0 && global_temperature!=9999) { + // has humidity + temperature + dtostrfd(sgp30_abshum,4,abs_hum); + } if (json) { ResponseAppend_P(PSTR(",\"SGP30\":{\"" D_JSON_ECO2 "\":%d,\"" D_JSON_TVOC "\":%d"), sgp.eCO2, sgp.TVOC); if (global_update && global_humidity>0 && global_temperature!=9999) { - // has humidity + temperature - dtostrfd(sgp30_abshum,4,abs_hum); ResponseAppend_P(PSTR(",\"" D_JSON_AHUM "\":%s"),abs_hum); } ResponseJsonEnd();