2024-02-03 10:46:26 +07:00
|
|
|
#ifndef _AIR_GRADIENT_H_
|
|
|
|
|
#define _AIR_GRADIENT_H_
|
|
|
|
|
|
2024-02-17 13:17:45 +07:00
|
|
|
#include "Display/Display.h"
|
|
|
|
|
#include "Main/BoardDef.h"
|
|
|
|
|
#include "Main/HardwareWatchdog.h"
|
|
|
|
|
#include "Main/LedBar.h"
|
|
|
|
|
#include "Main/PushButton.h"
|
|
|
|
|
#include "Main/StatusLed.h"
|
|
|
|
|
#include "PMS/PMS5003.h"
|
|
|
|
|
#include "PMS/PMS5003T.h"
|
|
|
|
|
#include "S8/S8.h"
|
|
|
|
|
#include "Sgp41/Sgp41.h"
|
|
|
|
|
#include "Sht/Sht.h"
|
2024-07-24 09:05:57 +07:00
|
|
|
#include "Main/utils.h"
|
2024-02-03 10:46:26 +07:00
|
|
|
|
2024-04-24 20:27:45 +07:00
|
|
|
#ifndef GIT_VERSION
|
2025-06-18 14:25:14 +07:00
|
|
|
#define GIT_VERSION "3.3.9-snap"
|
2024-04-24 20:27:45 +07:00
|
|
|
#endif
|
|
|
|
|
|
2025-03-26 21:38:21 +07:00
|
|
|
|
2024-11-30 04:13:25 +07:00
|
|
|
#ifndef ESP8266
|
2024-11-30 04:33:58 +07:00
|
|
|
// Airgradient server root ca certificate
|
|
|
|
|
const char *const AG_SERVER_ROOT_CA =
|
2024-11-30 04:13:25 +07:00
|
|
|
"-----BEGIN CERTIFICATE-----\n"
|
|
|
|
|
"MIIF4jCCA8oCCQD7MgvcaVWxkTANBgkqhkiG9w0BAQsFADCBsjELMAkGA1UEBhMC\n"
|
|
|
|
|
"VEgxEzARBgNVBAgMCkNoaWFuZyBNYWkxEDAOBgNVBAcMB01hZSBSaW0xGTAXBgNV\n"
|
|
|
|
|
"BAoMEEFpckdyYWRpZW50IEx0ZC4xFDASBgNVBAsMC1NlbnNvciBMYWJzMSgwJgYD\n"
|
|
|
|
|
"VQQDDB9BaXJHcmFkaWVudCBTZW5zb3IgTGFicyBSb290IENBMSEwHwYJKoZIhvcN\n"
|
|
|
|
|
"AQkBFhJjYUBhaXJncmFkaWVudC5jb20wHhcNMjEwOTE3MTE0NDE3WhcNNDEwOTEy\n"
|
|
|
|
|
"MTE0NDE3WjCBsjELMAkGA1UEBhMCVEgxEzARBgNVBAgMCkNoaWFuZyBNYWkxEDAO\n"
|
|
|
|
|
"BgNVBAcMB01hZSBSaW0xGTAXBgNVBAoMEEFpckdyYWRpZW50IEx0ZC4xFDASBgNV\n"
|
|
|
|
|
"BAsMC1NlbnNvciBMYWJzMSgwJgYDVQQDDB9BaXJHcmFkaWVudCBTZW5zb3IgTGFi\n"
|
|
|
|
|
"cyBSb290IENBMSEwHwYJKoZIhvcNAQkBFhJjYUBhaXJncmFkaWVudC5jb20wggIi\n"
|
|
|
|
|
"MA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQC6XkVQ4O9d5GcUjPYRgF/uaY6O\n"
|
|
|
|
|
"5ry1xCGvotxkEeKkBk99lB1oNUUfNsP5bwuDci4XKfY9Ro6/jmkfHSVcPAwUnjAt\n"
|
|
|
|
|
"BcHqZtA/cMXykaynf9yXPxPQN7XLu/Rk32RIfb90sIGS318xgNziCYvzWZmlxpxc\n"
|
|
|
|
|
"3gUcAgGtamlgZ6wD3yOHVo8B9aFNvmP16QwkUm8fKDHunJG+iX2Bxa4ka5FJovhG\n"
|
|
|
|
|
"TnUwtso6Vrn0JaWF9qWcPZE0JZMjFW8PYRriyJmHwr/nAXfPPKphD1oRO+oA7/jq\n"
|
|
|
|
|
"dYkrJw6+OHfFXnPB1xkeh4OPBzcCZHT5XWNfwBYazYpjcJa9ngGFSmg8lX1ac23C\n"
|
|
|
|
|
"zea1XJmSrPwbZbWxoQznnf7Y78mRjruYKgSP8rf74KYvBe/HGPL5NQyXQ3l6kwmu\n"
|
|
|
|
|
"CCUqfcC0wCWEtWESxwSdFE2qQii8CZ12kQExzvR2PrOIyKQYSdkGx9/RBZtAVPXP\n"
|
|
|
|
|
"hmLuRBQYHrF5Cxf1oIbBK8OMoNVgBm6ftt15t9Sq9dH5Aup2YR6WEJkVaYkYzZzK\n"
|
|
|
|
|
"X7M+SQcdbXp+hAO8PFpABJxkaDAO2kiB5Ov7pDYPAcmNFqnJT48AY0TZJeVeCa5W\n"
|
|
|
|
|
"sIv3lPvB/XcFjP0+aZxxNSEEwpGPUYgvKUYUUmb0NammlYQwZHKaShPEmZ3UZ0bp\n"
|
|
|
|
|
"VNt4p6374nzO376sSwIDAQABMA0GCSqGSIb3DQEBCwUAA4ICAQB/LfBPgTx7xKQB\n"
|
|
|
|
|
"JNMUhah17AFAn050NiviGJOHdPQely6u3DmJGg+ijEVlPWO1FEW3it+LOuNP5zOu\n"
|
|
|
|
|
"bhq8paTYIxPxtALIxw5ksykX9woDuX3H6FF9mPdQIbL7ft+3ZtZ4FWPui9dUtaPe\n"
|
|
|
|
|
"ZBmDFDi4U29nhWZK68JSp5QkWjfaYLV/vtag7120eVyGEPFZ0UAuTUNqpw+stOt9\n"
|
|
|
|
|
"gJ2ZxNx13xJ8ZnLK7qz1crPe8/8IVAdxbVLoY7JaWPLc//+VF+ceKicy8+4gV7zN\n"
|
|
|
|
|
"Gnq2IyM+CHFz8VYMLbW+3eVp4iJjTa72vae116kozboEIUVN9rgLqIKyVqQXiuoN\n"
|
|
|
|
|
"g3xY+yfncPB2+H/+lfyy6mepPIfgksd3+KeNxFADSc5EVY2JKEdorRodnAh7a8K6\n"
|
|
|
|
|
"WjTYgq+GjWXU2uQW2SyPt6Tu33OT8nBnu3NB80eT8WXgdVCkgsuyCuLvNRf1Xmze\n"
|
|
|
|
|
"igvurpU6JmQ1GlLgLJo8omJHTh1zIbkR9injPYne2v9ciHCoP6+LDEqe+rOsvPCB\n"
|
|
|
|
|
"C/o/iZ4svmYX4fWGuU7GgqZE8hhrC3+GdOTf2ADC752cYCZxBidXGtkrGNoHQKmQ\n"
|
|
|
|
|
"KCOMFBxZIvWteB3tUo3BKYz1D2CvKWz1wV4moc5JHkOgS+jqxhvOkQ/vfQBQ1pUY\n"
|
|
|
|
|
"TMui9BSwU7B1G2XjdLbfF3Dc67zaSg==\n"
|
|
|
|
|
"-----END CERTIFICATE-----\n";
|
|
|
|
|
#endif
|
|
|
|
|
|
2024-02-04 15:04:38 +07:00
|
|
|
/**
|
|
|
|
|
* @brief Class with define all the sensor has supported by Airgradient. Each
|
|
|
|
|
* sensor usage must be init before use.
|
|
|
|
|
*/
|
2024-02-03 10:46:26 +07:00
|
|
|
class AirGradient {
|
|
|
|
|
public:
|
|
|
|
|
AirGradient(BoardType type);
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* @brief Plantower PMS5003 sensor
|
|
|
|
|
*/
|
|
|
|
|
PMS5003 pms5003;
|
2024-02-04 15:04:38 +07:00
|
|
|
/**
|
2024-02-04 15:22:06 +07:00
|
|
|
* @brief Plantower PMS5003T sensor: connect to PM1 connector on
|
|
|
|
|
* OPEN_AIR_OUTDOOR.
|
2024-02-04 15:04:38 +07:00
|
|
|
*/
|
2024-02-03 10:46:26 +07:00
|
|
|
PMS5003T pms5003t_1;
|
2024-02-04 15:04:38 +07:00
|
|
|
/**
|
2024-02-04 15:22:06 +07:00
|
|
|
* @brief Plantower PMS5003T sensor: connect to PM2 connector on
|
|
|
|
|
* OPEN_AIR_OUTDOOR.
|
2024-02-04 15:04:38 +07:00
|
|
|
*/
|
2024-02-03 10:46:26 +07:00
|
|
|
PMS5003T pms5003t_2;
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* @brief SenseAirS8 CO2 sensor
|
|
|
|
|
*/
|
|
|
|
|
S8 s8;
|
|
|
|
|
|
|
|
|
|
/**
|
2024-02-10 21:14:27 +07:00
|
|
|
* @brief Temperature and humidity sensor supported SHT3x and SHT4x
|
|
|
|
|
*
|
2024-02-06 09:38:37 +07:00
|
|
|
*/
|
2024-02-10 21:14:27 +07:00
|
|
|
Sht sht;
|
2024-02-03 10:46:26 +07:00
|
|
|
|
|
|
|
|
/**
|
2024-02-04 15:04:38 +07:00
|
|
|
* @brief SGP41 TVOC and NOx sensor
|
2024-02-03 10:46:26 +07:00
|
|
|
*
|
|
|
|
|
*/
|
|
|
|
|
Sgp41 sgp41;
|
|
|
|
|
|
|
|
|
|
/**
|
2024-02-04 15:04:38 +07:00
|
|
|
* @brief OLED Display
|
2024-02-03 10:46:26 +07:00
|
|
|
*
|
|
|
|
|
*/
|
|
|
|
|
Display display;
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* @brief Push Button
|
|
|
|
|
*/
|
|
|
|
|
PushButton button;
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* @brief LED
|
|
|
|
|
*/
|
|
|
|
|
StatusLed statusLed;
|
2024-02-04 15:04:38 +07:00
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* @brief RGB LED array
|
2024-02-04 15:22:06 +07:00
|
|
|
*
|
2024-02-04 15:04:38 +07:00
|
|
|
*/
|
2024-02-03 10:46:26 +07:00
|
|
|
LedBar ledBar;
|
|
|
|
|
|
|
|
|
|
/**
|
2024-02-04 15:04:38 +07:00
|
|
|
* @brief External hardware watchdog
|
2024-02-03 10:46:26 +07:00
|
|
|
*/
|
|
|
|
|
HardwareWatchdog watchdog;
|
|
|
|
|
|
2024-02-04 15:04:38 +07:00
|
|
|
/**
|
|
|
|
|
* @brief Get I2C SDA pin has of board supported
|
2024-02-04 15:22:06 +07:00
|
|
|
*
|
2024-02-04 15:04:38 +07:00
|
|
|
* @return int Pin number if -1 invalid
|
|
|
|
|
*/
|
2024-02-03 10:46:26 +07:00
|
|
|
int getI2cSdaPin(void);
|
2024-02-04 15:04:38 +07:00
|
|
|
/**
|
|
|
|
|
* @brief Get I2C SCL pin has of board supported
|
2024-02-04 15:22:06 +07:00
|
|
|
*
|
2024-02-04 15:04:38 +07:00
|
|
|
* @return int Pin number if -1 invalid
|
|
|
|
|
*/
|
2024-02-03 10:46:26 +07:00
|
|
|
int getI2cSclPin(void);
|
|
|
|
|
|
2024-02-04 15:04:38 +07:00
|
|
|
/**
|
|
|
|
|
* @brief Get the Board Type
|
2024-02-04 15:22:06 +07:00
|
|
|
*
|
2024-02-04 15:04:38 +07:00
|
|
|
* @return BoardType @ref BoardType
|
|
|
|
|
*/
|
2024-02-03 10:46:26 +07:00
|
|
|
BoardType getBoardType(void);
|
|
|
|
|
|
2024-02-04 15:04:38 +07:00
|
|
|
/**
|
|
|
|
|
* @brief Get the library version string
|
2024-02-04 15:22:06 +07:00
|
|
|
*
|
|
|
|
|
* @return String
|
2024-02-04 15:04:38 +07:00
|
|
|
*/
|
2024-02-03 10:46:26 +07:00
|
|
|
String getVersion(void);
|
|
|
|
|
|
2024-02-29 10:22:05 +07:00
|
|
|
/**
|
|
|
|
|
* @brief Get the Board Name object
|
2024-03-30 19:33:03 +07:00
|
|
|
*
|
|
|
|
|
* @return String
|
2024-02-29 10:22:05 +07:00
|
|
|
*/
|
|
|
|
|
String getBoardName(void);
|
|
|
|
|
|
2024-02-17 12:47:51 +07:00
|
|
|
/**
|
|
|
|
|
* @brief Round double value with for 2 decimal
|
2024-03-30 19:33:03 +07:00
|
|
|
*
|
2024-02-17 12:47:51 +07:00
|
|
|
* @param valuem Round value
|
2024-03-30 19:33:03 +07:00
|
|
|
* @return double
|
2024-02-17 12:47:51 +07:00
|
|
|
*/
|
|
|
|
|
double round2(double value);
|
|
|
|
|
|
2024-04-03 21:26:04 +07:00
|
|
|
/**
|
|
|
|
|
* @brief Check that Airgradient object is ONE_INDOOR
|
|
|
|
|
*
|
|
|
|
|
* @return true Yes
|
|
|
|
|
* @return false No
|
|
|
|
|
*/
|
2024-04-07 16:39:01 +07:00
|
|
|
bool isOne(void);
|
2024-04-03 21:26:04 +07:00
|
|
|
|
2024-09-01 20:19:18 +07:00
|
|
|
/**
|
|
|
|
|
* @brief Check that Airgradient object is OPEN_AIR
|
|
|
|
|
*
|
|
|
|
|
* @return true
|
|
|
|
|
* @return false
|
|
|
|
|
*/
|
|
|
|
|
bool isOpenAir(void);
|
|
|
|
|
|
2024-06-19 15:17:48 +07:00
|
|
|
/**
|
|
|
|
|
* @brief Check that Airgradient object is DIY_PRO 4.2 indoor
|
|
|
|
|
*
|
|
|
|
|
* @return true Yes
|
|
|
|
|
* @return false No
|
|
|
|
|
*/
|
|
|
|
|
bool isPro4_2(void);
|
2024-06-20 11:34:23 +07:00
|
|
|
/**
|
|
|
|
|
* @brief Check that Airgradient object is DIY_PRO 3.7 indoor
|
|
|
|
|
*
|
|
|
|
|
* @return true Yes
|
|
|
|
|
* @return false No
|
|
|
|
|
*/
|
2024-06-25 16:43:50 +07:00
|
|
|
bool isPro3_3(void);
|
2024-06-19 15:17:48 +07:00
|
|
|
|
2024-06-24 18:34:24 +07:00
|
|
|
/**
|
|
|
|
|
* @brief Check that Airgradient object is DIY_BASIC
|
|
|
|
|
*
|
|
|
|
|
* @return true Yes
|
|
|
|
|
* @return false No
|
|
|
|
|
*/
|
|
|
|
|
bool isBasic(void);
|
|
|
|
|
|
2024-04-03 21:26:04 +07:00
|
|
|
/**
|
|
|
|
|
* @brief Get device Id
|
|
|
|
|
*
|
|
|
|
|
* @return String
|
|
|
|
|
*/
|
|
|
|
|
String deviceId(void);
|
|
|
|
|
|
2024-02-03 10:46:26 +07:00
|
|
|
private:
|
|
|
|
|
BoardType boardType;
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
#endif /** _AIR_GRADIENT_H_ */
|