DHT / DHT.ino /
2413aec 5 years ago
1 contributor
119 lines | 3.381kb
#ifndef ARDUINO_ESP8266_WEMOS_D1MINI
  #ifndef ARDUINO_ESP8266_WEMOS_D1R1
    error "Board Must be /LOLIN(WEMOS) D1 R2 & Mini/ OR /Wemos D1 R1/"
  #endif //ARDUINO_ESP8266_WEMOS_D1R1
#endif //ARDUINO_ESP8266_WEMOS_D1MINI

//---------------------------------------------------------------------
//Note:
//---------------------------------------------------------------------
// ARDUINO_ESP8266_WEMOS_D1MINI :
// - ESP DevBoard with onboard direct connector for DHT & OLED
// - ESP Devboard with no screen
// ARDUINO_ESP8266_WEMOS_D1R1
// - ESP DevBoard with Battery holder
//---------------------------------------------------------------------

// My Includes
#include <dummy.h>
#include "my_constants.h"
#include "my_draw.h"
#include "my_wifi.h"
#include "my_dht.h"
#include "my_ntp.h"
#include "my_isr.h"

#ifdef USE_OTA
#include "my_ota.h"
#endif //USE_OTA

#ifdef USE_MQTT
#include "my_mqtt.h"
#endif //USE_MQTT

#include "my_http.h"

ADC_MODE(ADC_VCC);


void setup() {
  Serial.begin(115200);
  Serial.setDebugOutput(true);
  Serial.println();

  Serial.println("Initialization Screen");
  drawInit();
  draw(compile_time, NOLOGO, 0, 0);
  
  Serial.println("Initialization DHT");
  dht.begin();
  Serial.println("Initialization WIFI");
  WiFiConnect();

  // Sync clock
  if( WiFi.status() == WL_CONNECTED ) {
    setClock();
    sprintf(clientID,clientIDFmt,WiFi.macAddress().c_str());
#ifdef USE_MQTT
    mqtt_connect();
#endif //USE_MQTT
  }
  Serial.println("BuildDate:["+String(compile_date)+"]");
  ota_set();
  
#ifdef ARDUINO_ESP8266_WEMOS_D1MINI
  digitalWrite(LED_BUILTIN, LOW);
#endif //ARDUINO_ESP8266_WEMOS_D1MINI

  Serial.println("Initialization HTTP server on port "+String(PORT));
  http_set();

  isr_set();

  delay(1000);
  displaySetStatus(0);
}

// the loop function runs over and over again forever
void loop() {
  ArduinoOTA.handle();
  unsigned long time;
  time = millis();
  if (time - timeSinceLastModeSwitch > UPDATE_PERIOD) {
  #ifdef HAS_DHT
    float mT = readDHTTemperature();
    float mH = readDHTHumidity();
    String dispMsg = String(mT)+" | "+String(mH)+"%";
    countMeasures++;
    getTimeString();
    #ifdef USE_MQTT
    mqtt_reconnect();
    String MQTTMsg = "{\"time\": \""+String(acTimeStringTZ)+"\", \"MAC\": \""+WiFi.macAddress()+"\", \"temp\":"+String(mT)+", \"humidity\": "+String(mH)+"}";
    if (!client.publish(mqtt_topic, MQTTMsg.c_str())) {
      Serial.println("ERROR: MQTT not sent!");
    } 
    #endif //USE_MQTT
    draw(acTimeString, NOLOGO, mT, mH);
  #endif //HAS_DHT
  
    timeSinceLastModeSwitch = millis();
  } else if( time > MAX_RUNNING_TIME ) {
      //Restart the board if running time is > MAX_RUNNING_TIME
      #ifdef USE_MQTT
      mqtt_reconnect();
      String MQTTMsg = "{\"time\": \""+String(acTimeStringTZ)+"\", \"MAC\": \""+WiFi.macAddress()+"\", \"status\": \"Triggered reboot\"}";
      if (!client.publish(mqtt_topic, MQTTMsg.c_str())) {
        Serial.println("ERROR: MQTT not sent!");
      }
      #endif //USE_MQTT  
      Serial.println("Triggered reboot");
      ESP.restart();
    } else if(WiFi.status() != WL_CONNECTED) {
      //Reconnect WiFi if not connected
      WiFiConnect();
      mqtt_connect();
    }
  server.handleClient();  
  delay(LOOP_DELAY);
}