Compare commits

...

1 Commits

Author SHA1 Message Date
coelner
a7c23852cc interstate of BUND hackair sensor 2019-12-29 20:06:22 +01:00
4 changed files with 758 additions and 529 deletions

View File

@ -2,18 +2,27 @@
#define SERIAL_DEBUG #define SERIAL_DEBUG
//#define OLED_OUTPUT //#define OLED_OUTPUT
//#define BATTERY_USE //#define BATTERY_USE
#define BME2_USE //#define BME2_USE
//#define BME6_USE //#define BME6_USE
#define BH_USE //#define BH_USE
//#define SHT_USE //#define SHT_USE
//#define VEML_USE //#define VEML_USE
//#define CCS_USE //#define CCS_USE
#define SGP30_USE //#define SGP30_USE
#define SDS011_USE
#define SI7021_USE
const bool metric = true; const bool metric = true;
/************************* generic libs *********************************/ /************************* generic libs *********************************/
#if defined(ESP8266)
#include <ESP8266WiFi.h> #include <ESP8266WiFi.h>
#include <ESP8266HTTPClient.h> #include <ESP8266HTTPClient.h>
#include <ESP8266httpUpdate.h> #include <ESP8266httpUpdate.h>
#endif
#if defined(ESP32)
#include <WiFi.h>
#endif
#include <Wire.h> #include <Wire.h>
#include <MQTTClient.h> #include <MQTTClient.h>
#include <IPAddress.h> #include <IPAddress.h>
@ -85,51 +94,64 @@ const int WIFI_CONNECT_TIMEOUT = 10; // seconds - max time for wifi connect to r
//ToDo Legacy IPv4 //ToDo Legacy IPv4
/*
IPAddress ip(10, 0, 4, 14); IPAddress ip(10, 0, 4, 14);
IPAddress gateway(10, 0, 4, 1); IPAddress gateway(10, 0, 4, 1);
IPAddress subnet(255, 255, 255, 240); IPAddress subnet(255, 255, 255, 240);
IPAddress dns(10, 0, 4, 1); IPAddress dns(10, 0, 4, 1);
*/
IPAddress mqttBroker(10, 0, 4, 1); //failsafe IPAddress mqttBroker(10, 0, 4, 1); //failsafe
/********************* Firmware update **************************************/ /********************* Firmware update **************************************/
const int FW_VERSION = 10; const int FW_VERSION = 10;
const char* fwUrlBase = "http://10.0.4.2/fota/"; const char* fwUrlBase = "";
/************************* MQTT Broker Setup *********************************/ /************************* MQTT Broker Setup *********************************/
#define name "test" #define name "bund"
//see secrets.h //see secrets.h
char MQTT_CLIENTID[10]; char MQTT_CLIENTID[10];
const char MQTT_WILL_TOPIC[] = "test/sys/will"; const int MQTT_PORT = 1883;
const char MQTT_SERVER[] = "mqtt.koelner.dynvpn.de";
const char MQTT_USERNAME[] = mqttUser;
const char MQTT_PASSWORD[] = mqttPass;
const char MQTT_WILL_TOPIC[] = "unsafe/sys/will";
const int MQTT_WILL_QOS = 0; const int MQTT_WILL_QOS = 0;
const int MQTT_WILL_RETAIN = 0; const int MQTT_WILL_RETAIN = 0;
const char MQTT_WILL_MESSAGE[] = "Finally died..."; const char MQTT_WILL_MESSAGE[] = "Look out of the window!";
/****************************** Feeds ***************************************/ /****************************** Feeds ***************************************/
//ToDo: generate feed from CLIENTID and determine the ClientID from the ChipID //ToDo: generate feed from CLIENTID and determine the ClientID from the ChipID
#if defined(BME2_USE) || defined(BME6_USE) #if defined(BME2_USE) || defined(BME6_USE)
const char TEMPERATURE_FEED[] = "test/sensors/temperature"; const char TEMPERATURE_FEED[] = "unsafe/sensors/temperature";
const char PRESSURE_FEED[] = "test/sensors/pressure"; const char PRESSURE_FEED[] = "unsafe/sensors/pressure";
const char HUMIDITY_FEED[] = "test/sensors/humidity"; const char HUMIDITY_FEED[] = "unsafe/sensors/humidity";
const char ABSHUMIDITY_FEED[] = "test/sensors/abshumidity"; const char ABSHUMIDITY_FEED[] = "unsafe/sensors/abshumidity";
#endif #endif
#if defined(SHT_USE) #if defined(SHT_USE) || defined(SI7021_USE)
const char TEMPERATURE_FEED[] = "test/sensors/temperature"; const char TEMPERATURE_FEED[] = "unsafe/sensors/temperature";
const char HUMIDITY_FEED[] = "test/sensors/humidity"; const char HUMIDITY_FEED[] = "unsafe/sensors/humidity";
const char ABSHUMIDITY_FEED[] = "test/sensors/abshumidity"; const char ABSHUMIDITY_FEED[] = "unsafe/sensors/abshumidity";
#endif #endif
#ifdef BME6_USE #ifdef BME6_USE
const char IAQ_FEED[] = "test/sensors/iaq"; const char IAQ_FEED[] = "unsafe/sensors/iaq";
const char IAQPREC_FEED[] = "test/sensors/iaqprec"; const char IAQPREC_FEED[] = "unsafe/sensors/iaqprec";
#endif #endif
#ifdef VEML_USE #ifdef VEML_USE
const char UVA_FEED[] = "test/sensors/uva"; const char UVA_FEED[] = "unsafe/sensors/uva";
const char UVB_FEED[] = "test/sensors/uvb"; const char UVB_FEED[] = "unsafe/sensors/uvb";
const char UVINDEX_FEED[] = "test/sensors/uvindex"; const char UVINDEX_FEED[] = "unsafe/sensors/uvindex";
#endif #endif
#ifdef BH_USE #ifdef BH_USE
const char LIGHT_FEED[] = "test/sensors/light"; const char LIGHT_FEED[] = "unsafe/sensors/light";
#endif #endif
#if defined (CCS_USE) || defined(SGP30_USE) #if defined (CCS_USE) || defined(SGP30_USE)
const char ECO2_FEED[] = "test/sensors/eco2"; const char ECO2_FEED[] = "unsafe/sensors/eco2";
const char TVOC_FEED[] = "test/sensors/tvoc"; const char TVOC_FEED[] = "unsafe/sensors/tvoc";
#endif
#if defined (SDS011_USE) || defined(SGP30_USE)
const char PM10_FEED[] = "unsafe/sensors/pm10";
const char PM10CORR_FEED[] = "unsafe/sensors/pm10corr";
const char PM25_FEED[] = "unsafe/sensors/pm25";
const char PM25CORR_FEED[] = "unsafe/sensors/pm25corr";
#endif #endif
#ifdef BATTERY_USE #ifdef BATTERY_USE
const char BATTERY_FEED[] = "test/sys/battery"; const char BATTERY_FEED[] = "unsafe/sys/battery";
#endif #endif

View File

@ -110,6 +110,28 @@ CCS811 ccs;
SGP30 sgp; SGP30 sgp;
#endif #endif
#ifdef SDS011_USE
#ifndef ESP32
#include <SoftwareSerial.h>
#endif
#include <Sds011.h>
#define SDS_PIN_RX D7
#define SDS_PIN_TX D6
#ifdef ESP32
HardwareSerial& serialSDS(Serial2);
Sds011Async< HardwareSerial > sds011(serialSDS);
#else
SoftwareSerial serialSDS;
Sds011Async< SoftwareSerial > sds011(serialSDS);
#endif
#endif
#ifdef SI7021_USE
//https://github.com/sparkfun/Si7021_Breakout/blob/master/Libraries/Arduino/Si7021/
#include "SparkFun_Si7021_Breakout_Library.h"
Weather THMeter;
#endif
void messageReceived(String &topic, String &payload) { void messageReceived(String &topic, String &payload) {
#ifdef SERIAL_DEBUG #ifdef SERIAL_DEBUG
Serial.println("incoming: " + topic + " - " + payload); Serial.println("incoming: " + topic + " - " + payload);
@ -232,6 +254,16 @@ float tvoc(NAN);
String tvoc_str; String tvoc_str;
char tvocC[8]; char tvocC[8];
#endif #endif
#ifdef SDS011_USE
double pm25(NAN);
double pm10(NAN);
double pm25corr(NAN);
double pm10corr(NAN);
String pm25_str;
String pm10_str;
char pm25x[8];
char pm10x[8];
#endif
#ifdef BATTERY_USE #ifdef BATTERY_USE
float battery(NAN); float battery(NAN);
String batt_str; String batt_str;
@ -247,6 +279,8 @@ bool bh1750Check = false;
bool ccs811Check = false; bool ccs811Check = false;
bool sht30Check = false; bool sht30Check = false;
bool sgp30Check = false; bool sgp30Check = false;
bool sds011Check = false;
bool si7021Check = false;
WiFiClient mqttSocket; WiFiClient mqttSocket;
MQTTClient mqttClient; MQTTClient mqttClient;
@ -634,6 +668,18 @@ void initSensors() {
#endif #endif
} }
#endif #endif
/*********************SI7021 I2C init **************************************/
#ifdef SI7021_USE
Serial.print(F("\tSI7021 init...\t"));
if (!THMeter.begin())
{
Serial.println(F("no SI7021 detected!"));
}
else {
si7021Check = true;
Serial.println(F("SI7021 ready."));
}
#endif
/******************** i2c init END ****************/ /******************** i2c init END ****************/
} }
@ -713,6 +759,29 @@ void setup() {
mqtt_disconnect(); mqtt_disconnect();
yield(); yield();
} }
if (si7021Check) {
//InProgress
//ToDo Heater https://www.silabs.com/community/sensors/forum.topic.html/when_si7021_is_neede-8a2a
float dewpoint = DewPoint(temperature, humidity);
Serial.println("[DEBUG]: Taupunkt:\t" + String(dewpoint));
if (humidity >= 80.0 || dewpoint > temperature) {
THMeter.heaterOn();
delay(50);
Serial.println(F("[DEBUG] : Si7021 Heater ON"));
//THMeter.heaterOff();
}
int temporary = 500;
while (temporary >= 0 && THMeter.getRH() >= 80.0) {
Serial.print("[DEBUG]: " + String(temporary) + "\t");
Serial.println(String(THMeter.getRH()));
temporary--;
delay(20);
}
THMeter.heaterOff();
//InProgress
Serial.println(F("[DEBUG] : Si7021 Heater OFF"));
}
//firmware update check //firmware update check
/*if (firmware_available() /*if (firmware_available()
//{ //{

File diff suppressed because it is too large Load Diff

View File

@ -50,7 +50,7 @@ bool wifi_connect() {
// http://arduino-esp8266.readthedocs.io/en/latest/esp8266wifi/generic-class.html#persistent // http://arduino-esp8266.readthedocs.io/en/latest/esp8266wifi/generic-class.html#persistent
WiFi.persistent (false); WiFi.persistent (false);
WiFi.hostname(name); //ToDo Change to correct value WiFi.hostname(name); //ToDo Change to correct value
WiFi.config(ip, gateway, subnet, dns); //WiFi.config(ip, gateway, subnet, dns);
// Connect to WiFi access point. // Connect to WiFi access point.
if( rtcValid ) { if( rtcValid ) {
// The RTC data was good, make a quick connection // The RTC data was good, make a quick connection