Ajaya Dahal
Published

Realtime temperature monitor

Realtime temperature monitoring system - IOT

IntermediateFull instructions providedOver 1 day2,258
Realtime temperature monitor

Things used in this project

Hardware components

ESP8266 ESP-12E
Espressif ESP8266 ESP-12E
×1
Arduino UNO
Arduino UNO
×1
LED, RGB
LED, RGB
×3
RGB Backlight LCD - 16x2
Adafruit RGB Backlight LCD - 16x2
×1
Fan / Force Cooled Heat Sink, CPU
Fan / Force Cooled Heat Sink, CPU
×1

Software apps and online services

Arduino IDE
Arduino IDE
Android Studio
Android Studio
Solidworks

Hand tools and fabrication machines

3D Printer (generic)
3D Printer (generic)

Story

Read more

Custom parts and enclosures

Solidworks assembly file

Solidworks part file(BOX)

Solidworks part file(Cover)

Schematics

final_model1_F2ghw9LJFn.PNG

Code

ESP8266 wifi module

Arduino
#include <DHT.h>;
#include <LiquidCrystal_I2C.h>
#include "FirebaseESP8266.h"  
#include <ESP8266WiFi.h>
#include <Adafruit_Sensor.h>
#include <NTPClient.h>
#include <WiFiUdp.h>

#include<SoftwareSerial.h> //Included SoftwareSerial Library
//Started SoftwareSerial at RX and TX pin of ESP8266/NodeMCU
SoftwareSerial s(3,1);

#define DHTPIN D4    
#define DHTTYPE DHT11 
#define RED D6
#define GREEN D7
//#define BLUE 9
#define FAN_RELAY D5
#define FireBaseHost "onlyfans-d399c.firebaseio.com"
#define FireBaseAuth "Q4hMdDoU78odV9JJpiPeKgU5vyZ0lxONDFUj33Qi"
WiFiUDP ntpUDP;
// set the LCD number of columns and rows
int lcdColumns = 16;
int lcdRows = 2;
const long utcOffsetInSeconds = 60000;
const int GTMOffSet = -6;

NTPClient timeClient(ntpUDP, "time.nist.gov",GTMOffSet*60*60, utcOffsetInSeconds);
// set LCD address, number of columns and rows
LiquidCrystal_I2C lcd(0x27, lcdColumns, lcdRows);  
DHT dht(DHTPIN, DHTTYPE); 
FirebaseData firebaseData;

String daysOfTheWeek[7] = {"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"};
String months[12]={"January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"};
const char* wifi_ssid = "onlyfans";           
const char* wifi_password = "123456789";         
const char* fanID = "onlyfans-d399c";
unsigned long currentMillis = 0; 
unsigned long previousFanOn = 0;   // will store last time the fan was turned on
int fanSlowInterval = 80; // millisecs between fan move
float hum;  
float temp; 
float oldTemp;
int fanSpeed = 0;
bool greenLED = false;
bool redLED = false;
bool orangeLED = false;


void setup()
{
  Serial.begin(115200);
  s.begin(115200);
  dht.begin();
  WiFi.begin(wifi_ssid, wifi_password);
  Firebase.begin(FireBaseHost, FireBaseAuth);
  
  lcd.init();
  lcd.backlight();
  
  delay(500);
  
  lcd.setCursor(4, 0);
  lcd.print("Welcome");
  lcd.setCursor(0, 1);
  lcd.print("T. A.  A.  F. U");
  
  oldTemp = dht.readTemperature();
  oldTemp = (1.8*oldTemp)+32;
  
  Serial.print("********** connecting to WIFI ********** : ");
  Serial.println(wifi_ssid);
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print("...___ connecting");
  }
  Serial.println("");
  Serial.println("-> WiFi connected");
  Serial.println("-> IP address: ");
  Serial.println(WiFi.localIP());
  
  timeClient.begin();

  pinMode(RED, OUTPUT);
  pinMode(GREEN, OUTPUT);
  pinMode(FAN_RELAY, OUTPUT);
 // pinMode(BLUE, OUTPUT);
 
  fanSpeed = 200; 
  digitalWrite(FAN_RELAY, HIGH);
  writeLED(0,255,0);
   //  greenLED = true;
   // orangeLED = false;
  //  redLED = false;
  delay(500);//waiting 1 seconds to clear the display
  lcd.clear();
  
}
String getTime(){
  timeClient.update();
//Get a time structure
  unsigned long epochTime = timeClient.getEpochTime();
  struct tm *ptm = gmtime ((time_t *)&epochTime); 
  int monthDay = ptm->tm_mday;
  int currentMonth = ptm->tm_mon+1;
  String currentMonthName = months[currentMonth-1];
  int currentYear = ptm->tm_year+1900;
  String currentDate = String(currentYear) + "-" + String(currentMonth) + "-" + String(monthDay);
  String formattedTime = timeClient.getFormattedTime(); 
  String date = daysOfTheWeek[timeClient.getDay()]+", "+formattedTime+" "+currentDate;
  Serial.println(date);
  return date;
}

void writeLED(int red_light_value, int green_light_value, int blue_light_value)
 {
  analogWrite(RED, red_light_value);
  analogWrite(GREEN, green_light_value);
 // analogWrite(BLUE, blue_light_value);
 }

 void writeDisplay(){
  lcd.setCursor(1, 0);
  lcd.print("Temp: ");
  lcd.print(temp);
  // print temp
  // TODO
  lcd.setCursor(1, 1);
  lcd.print("Fan Speed: ");
  lcd.print(fanSpeed);
  // print temp
  // TODO
 }

void updateTemperature(){
  hum = dht.readHumidity();
  temp= dht.readTemperature();
  
  //convert o celsious to farenheight
  temp = (1.8*temp)+32;
  
}

void updateDataBase() {
  char * fanStatus;
  String  date = getTime();
  char * push = "false";
  if (fanSpeed>0){
    fanStatus = "On";
  }
  else{
    fanStatus = "Off";
  }
  temp = dht.readTemperature();
  temp = (1.8*temp)+32;
  if (oldTemp<temp && temp>=81){
    oldTemp = temp;
    push = "true";
  }
  else{
    oldTemp = dht.readTemperature();
    push = "false";
  }
 
  Firebase.setString(firebaseData,"Current Speed", String(fanSpeed));
  Firebase.setString(firebaseData,"Current Temperature", String((int)temp+1));
  Firebase.setString(firebaseData,"Fan ID", fanID);
  Firebase.setString(firebaseData,"Fan Status", fanStatus);
  Firebase.setString(firebaseData,"Last Updated", date);
  Firebase.setString(firebaseData,"Push Notification", push);
 
 //
}


void updateLEDStatus(){
  if (temp<77&& !greenLED){
    //green light
    
    writeLED(0,255,0);
    greenLED = true;
    orangeLED = false;
    redLED = false;
    s.write((int)temp);
  }
  //orange
  else if(temp>=77 && temp<81 && !orangeLED){
    writeLED(255,165,0);
    greenLED = false;
    orangeLED = true;
    redLED = false;
    s.write((int)temp);
  }
  else if(temp>80 && !redLED){
    //red light
    writeLED(255, 0, 0);
    greenLED = false;
    orangeLED = false;
    redLED = true;
    s.write((int)temp);
  }
}


void writeFAN(){
 if (temp<77 ){
    digitalWrite(FAN_RELAY, LOW);
    fanSpeed = 0;
  }
 
  else if(temp>=77 && temp<81 ){
    if(previousFanOn>=4,294,967,000){            //4,294,967,295 is the highest float it can reach)
        previousFanOn=0;
    }                           
    
    if(currentMillis - previousFanOn >= fanSlowInterval){
      previousFanOn +=fanSlowInterval;
      digitalWrite(FAN_RELAY, HIGH);
      fanSpeed = 100;
    }
    else{
      digitalWrite(FAN_RELAY, LOW);
    }
  }
  else{
    digitalWrite(FAN_RELAY, HIGH);
    fanSpeed = 200;
  }
}


void loop()
{

  
    currentMillis = millis();  
    updateTemperature();
    updateLEDStatus();
    writeDisplay();
    writeFAN();
    updateDataBase();
    
    Serial.print("Humidity: ");
    Serial.print(hum);
    Serial.print(" %, Temp: ");
    Serial.print(temp);
    Serial.println(" Farenheight");
    delay(5000);
}



   

Credits

Ajaya Dahal
11 projects • 15 followers
Electrical and Computer Engineering Certified Part 107 FAA Drone Pilot
Contact

Comments

Please log in or sign up to comment.