The air conditioner tends to consume a lot of electricity. This project is the development of the Internet of Things platform to save the energy consumption of air conditioners by controlling the temperature of airflow and area temperature. The proposed system is designed for local temperature transmissions through the MQTT Protocol and uses the Temperature Analytics Algorithm to decide to switch off the compressor in the proper conditions.
The temperature of the supply air of the air conditioner and the room temperature of the actual operation area are taken into account to be the controlling factors. If the supply air temperature reflects that the evaporator is too cold, or the room temperature of the actual area is reached to the required temperature, the controller will then control the compressor to stop working. This causes the compressor to run less and save more energy.
Why make this project?
In the air conditioner, the compressor is the heart of the air conditioner that has a power consumption of up to 80%. Meanwhile, the other components have a power consumption of only 20%. The cycle time of the compressor is an important factor in the loss of energy in the cooling process.
Once the air conditioner starts cooling, the compressor will start working. The thermostat is installed at the return air of the air conditioner to read the room temperature. The compressor stops when the room temperature read from the thermostat reaches the set value. Then, the compressor will restart working again when the room temperature red from the thermostat is higher than the set value. The room temperature is gradually cooled down from transmitting the cool derived from the supply air while the compressor is running. The room temperature is gradually higher while the compressor stops working.
However, the operation of the traditional air conditioner measures the room temperature indirectly from the return air to the air conditioner. It does not measure the room temperature directly in
the actual location. There is no measure of supply air temperature to be a factor reducing the energy of the air conditioner.
#INDEX
1. Demonstration
2. Working
The working of the project is based on two approaches.
Approach 1
The required room temperature is set by the user using the HTML developed using Flask. The room temperature is measured by the LM35 temperature sensor and this data is published on the AWS IOT core topic using the NodeMCU. This data is then received by the Raspberry Pi, which subscribes to the data from the AWS. The Raspberry Pi is connected to the compressor of the air conditioner through a relay (here in the project, we use a dc motor to demonstrate the on/off operation performed by the Raspberry Pi through motor driver L293d as its not feasible to open the A.C. and interface with the compressor circuit). When the room temperature gets lower than the set temperature, the compressor is turned off. As soon as the room temperature passes the set temperature, the compressor is turned on again.
Approach 2
The DHT11 temperature and humidity sensor measure the temperature of the supply air from the A.C. This supply air is 15 to 16 degrees cooler than the room temperature. As the room temperature drops, the supply air temperature also drops. A stage is achieved that there is no further drop in the supply air temperature and an equilibrium is achieved (as the room temperature becomes nearly equal to the supply air temperature). At this moment the compressor is turned off.
3. Circuit hardware
i. LM35 temperature sensor
LM35 is a precession Integrated circuit temperature sensor, whose output voltage varies, based on the temperature around it. It is a small and cheap IC that can be used to measure temperature anywhere between -55°C to 150°C. It can easily be interfaced with any Microcontroller that has ADC function or any development platform like Arduino.
Power the IC by applying a regulated voltage like +5V (Vcc) to the input pin and connected the ground pin to the ground of the circuit.
>>Pin configuration
No. | Pin Name | Description |
1 | Vcc | Input voltage is +5V for typical applications |
2 | Analog Out | There will be increase in 10mV for raise of every 1°C. Can range from -1V(-55°C) to 6V(150°C) |
3 | Ground | Connected to ground of circuit |
>>Specification
- Minimum and Maximum Input Voltage is 35V and -2V respectively. Typically 5V.
- Can measure temperature ranging from -55°C to 150°C
- The output voltage is directly proportional (Linear) to temperature (i.e.) there will be a rise of 10mV (0.01V) for every 1°C rise in temperature.
- ±0.5°C Accuracy
- Drain current is less than 60uA
- Low-cost temperature sensor
- Small and hence suitable for remote applications
- Available in TO-92, TO-220, TO-CAN, and SOIC package
ii. DHT11 temperature and humidity sensor
The DHT11 is a commonly used temperature and humidity sensor. It comes with a dedicated NTC to measure temperature and an 8-bit microcontroller to output the values of temperature and humidity as serial data. The sensor is also factory calibrated and hence easy to interface with other microcontrollers.
It can measure temperature from 0°C to 50°C and humidity from 20% to 90% with an accuracy of ±1°C and ±1%.
>> Pin configuration
No: | Pin Name | Description |
1 | Vcc | Power supply 3.5V to 5.5V |
2 | Data | Outputs both Temperature and Humidity through serial Data |
3 | NC | No Connection and hence not used |
4 | Ground | Connected to the ground of the circuit |
>>Specification
- Operating Voltage: 3.5V to 5.5V
- Operating current: 0.3mA (measuring) 60uA (standby)
- Output: Serial data
- Temperature Range: 0°C to 50°C
- Humidity Range: 20% to 90%
- Resolution: Temperature and Humidity both are 16-bit
- Accuracy: ±1°C and ±1%
iii. NodeMCU
NodeMCU is an open-source Lua based firmware for the ESP8266 WiFi SOC from Espressif and uses an on-module flash-based SPIFFS file system. It is implemented in C and is layered on the Espressif NON-OS SDK.
The firmware was initially developed as is a companion project to the popular ESP8266-based NodeMCU development modules, but the project is now community-supported, and the firmware can now be run on any ESP module.
>>Pin configuration
Category | Name | Description |
Power | Micro-USB, 3.3V, GND, Vin | Micro-USB: NodeMCU can be powered through the USB port 3.3V: Regulated 3.3V can be supplied to this pin to power the board GND: Ground pins Vin: External Power Supply |
Control Pins | EN, RST | The pin and the button resets the microcontroller |
Analog Pin | A0 | Used to measure analog voltage in the range of 0-3.3V |
GPIO Pins | GPIO1 to GPIO16 | NodeMCU has 16 general purpose input-output pins on its board |
SPI Pins | SD1, CMD, SD0, CLK | NodeMCU has four pins available for SPI communication. |
UART Pins | TXD0, RXD0, TXD2, RXD2 | NodeMCU has two UART interfaces, UART0 (RXD0 & TXD0) and UART1 (RXD1 & TXD1). UART1 is used to upload the firmware/program. |
I2C Pins | NodeMCU has I2C functionality support but due to the internal functionality of these pins, you have to find which pin is I2C. |
>>Specification
- Microcontroller: Tensilica 32-bit RISC CPU Xtensa LX106
- Operating Voltage: 3.3V
- Input Voltage: 7-12V
- Digital I/O Pins (DIO): 16
- Analog Input Pins (ADC): 1
- UARTs: 1
- SPIs: 1
- I2Cs: 1
- Flash Memory: 4 MB
- SRAM: 64 KB
- Clock Speed: 80 MHz
- USB-TTL based on CP2102 is included onboard, Enabling Plug n Play
- PCB Antenna
- Small Sized module to fit smartly inside your IoT projects
iv. Raspberry Pi
The Raspberry Pi is a series of small single-board computers developed in the United Kingdom by the Raspberry Pi Foundation. Early on, the Raspberry Pi project leaned towards the promotion of teaching basic computer science in schools and in developing countries. Later, the original model became far more popular than anticipated, selling outside its target market for uses such as robotics. It is now widely used in many areas, such as for weather monitoring, because of its low cost and high portability.
v. LCD display
LCD modules are very commonly used in most embedded projects, the reason being its cheap price, availability, and programmer-friendly. Most of us would have come across these displays in our day to day life, either at PCO’s or calculators. The appearance and the pinouts have already been visualized above now let us get a bit technical.
16×2 LCD is named so because; it has 16 Columns and 2 Rows. There are a lot of combinations available like 8×1, 8×2, 10×2, 16×1, etc. but the most used one is the 16×2 LCD. So, it will have (16×2=32) 32 characters in total and each character will be made of 5×8 Pixel Dots.
>>Pin configuration
No: | Pin Name: | Description |
1 | Vss (Ground) | Ground pin connected to system ground |
2 | Vdd (+5 Volt) | Powers the LCD with +5V (4.7V – 5.3V) |
3 | VE (Contrast V) | Decides the contrast level of display. Grounded to get maximum contrast. |
4 | Register Select | Connected to Microcontroller to shift between command/data register |
5 | Read/Write | Used to read or write data. Normally grounded to write data to LCD |
6 | Enable | Connected to Microcontroller Pin and toggled between 1 and 0 for data acknowledgment |
7 | Data Pin 0 | Data pins 0 to 7 form an 8-bit data line. They can be connected to Microcontroller to send 8-bit data. These LCDs can also operate on the 4-bit mode in such case Data pin 4,5,6 and 7 will be left free. |
8 | Data Pin 1 | |
9 | Data Pin 2 | |
10 | Data Pin 3 | |
11 | Data Pin 4 | |
12 | Data Pin 5 | |
13 | Data Pin 6 | |
14 | Data Pin 7 | |
15 | LED Positive | Backlight LED pin positive terminal |
16 | LED Negative | Backlight LED pin negative terminal |
>>Specification
- Operating Voltage is 4.7V to 5.3V
- Current consumption is 1mA without backlight
- Alphanumeric LCD display module, meaning can display alphabets and numbers
- Consists of two rows and each row can print 16 characters.
- Each character is build by a 5×8 pixel box
- Can work on both 8-bit and 4-bit mode
- It can also display any custom generated characters
- Available in Green and Blue Backlight
vi. L293D motor driver
The L293D is a popular 16-Pin Motor Driver IC. As the name suggests it is mainly used to drive motors. A single L293D IC is capable of running two DC motors at the same time; also the direction of these two motors can be controlled independently. So if you have motors that have an operating voltage less than 36V and operating current less than 600mA, which are to be controlled by digital circuits like Op-Amp, 555 timers, digital gates, or even Micron rollers like Arduino, PIC, ARM, etc.
>>Pin configuration
No. | Pin Name | Description |
1 | Enable 1,2 | This pin enables the input pin Input 1(2) and Input 2(7) |
2 | Input 1 | Directly controls the Output 1 pin. Controlled by digital circuits |
3 | Output 1 | Connected to one end of Motor 1 |
4 | Ground | Ground pins are connected to ground of circuit (0V) |
5 | Ground | Ground pins are connected to ground of circuit (0V) |
6 | Output 2 | Connected to another end of Motor 1 |
7 | Input 2 | Directly controls the Output 2 pin. Controlled by digital circuits |
8 | Vcc2 (Vs) | Connected to Voltage pin for running motors (4.5V to 36V) |
9 | Enable 3,4 | This pin enables the input pin Input 3(10) and Input 4(15) |
10 | Input 3 | Directly controls the Output 3 pin. Controlled by digital circuits |
11 | Output 3 | Connected to one end of Motor 2 |
12 | Ground | Ground pins are connected to ground of circuit (0V) |
13 | Ground | Ground pins are connected to ground of circuit (0V) |
14 | Output 4 | Connected to another end of Motor 2 |
15 | Input 4 | Directly controls the Output 4 pin. Controlled by digital circuits |
16 | Vcc2 (Vss) | Connected to +5V to enable IC function |
>>Specification
- Can be used to run Two DC motors with the same IC.
- Speed and Direction control is possible
- Motor voltage Vcc2 (Vs): 4.5V to 36V
- Maximum Peak motor current: 1.2A
- Maximum Continuous Motor Current: 600mA
- Supply Voltage to Vcc1(VSS): 4.5V to 7V
- Transition time: 300ns (at 5Vand 24V)
- Automatic Thermal shutdown is available
- Available in 16-pin DIP, TSSOP, SOIC packages
vii. DC motor
A DC motor is any of a class of rotary electrical motors that converts direct current electrical energy into mechanical energy. The most common types rely on the forces produced by magnetic fields. Nearly all types of DC motors have some internal mechanism, either electromechanical or electronic, to periodically change the direction of current in a part of the motor.
>>Specification
- Standard 130 Type DC motor
- Operating Voltage: 4.5V to 9V
- Recommended/Rated Voltage: 6V
- Current at No load: 70mA (max)
- No-load Speed: 9000 rpm
- Loaded current: 250mA (approx)
- Rated Load: 10g*cm
- Motor Size: 27.5mm x 20mm x 15mm
- Weight: 17 gram
4. Circuit connections
>>At the NodeMCU end
The output pin of the LM35 temperature sensor is connected to the A0 pin of NodeMCU and the Vcc pin of the sensor is connected to the 3.3V supply pin of NodeMCU & the Ground pin to the GND pin of the NodeMCU.
>>At the Raspberry Pi end
We are using the GPIO pin configuration on the Raspberry Pi.
>LCD connections– RS=7, E=8, D4=25, D5=24, D6=23, D7=18
>DHT11 connections– Vcc pin to 5V, Ground pin to GND and Data o/p pin to 4.
>L293D connections– Connect the pins 8 and 16 to 5V. Connect pin 4 to the GND. Then connect the pins 1, 2 & 7 of the L293D to the 2, 9 & 10 GPIO pins on the Rpi. Connect pin 3 and 6 to the dc motor.
5. Online services used
>>AWS- Amazon Web Services
Amazon Web Services (AWS) is a subsidiary of Amazon providing on-demand cloud computing platforms and APIs to individuals, companies, and governments, on a metered pay-as-you-go basis. These cloud computing web services provide a variety of basic abstract technical infrastructure and distributed computing building blocks and tools. AWS’s version of virtual computers emulates most of the attributes of a real computer, including hardware central processing units (CPUs) and graphics processing units (GPUs) for processing; local/RAM memory; hard-disk/SSD storage; a choice of operating systems; networking; and pre-loaded application software such as web servers, databases, and customer relationship management (CRM).
As of 2020, AWS comprises more than 175 products and services including computing, storage, networking, database, analytics, application services, deployment, management, mobile, developer tools, and tools for the Internet of Things. Most services are not exposed directly to end users, but instead offer functionality through APIs for developers to use in their applications. Amazon Web Services’ offerings are accessed over HTTP, using the REST architectural style and SOAP protocol for older APIs and exclusively JSON for newer ones.
>>Flask
Flask is a micro web framework written in Python. It is classified as a micro framework because it does not require particular tools or libraries. It has no database abstraction layer, form validation, or any other components where pre-existing third-party libraries provide common functions. However, Flask supports extensions that can add application features as if they were implemented in Flask itself. Extensions exist for object-relational mappers, form validation, upload handling, various open authentication technologies and several common framework related tools.
6. Code
>>NodeMCU code
#include "FS.h"
#include <ESP8266WiFi.h>
#include <PubSubClient.h>
#include <NTPClient.h>
#include <WiFiUdp.h>
// Update these with values suitable for your network.
const char* ssid = "Wifi_Name";
const char* password = "Wifi_password";
WiFiUDP ntpUDP;
NTPClient timeClient(ntpUDP, "pool.ntp.org");
const char* AWS_endpoint = "a1ttf08wevovu1-ats.iot.us-east-2.amazonaws.com"; //MQTT broker ip
void callback(char* topic, byte* payload, unsigned int length) {
Serial.print("Message arrived [");
Serial.print(topic);
Serial.print("] ");
for (int i = 0; i < length; i++) {
Serial.print((char)payload[i]);
}
Serial.println();
}
WiFiClientSecure espClient;
PubSubClient client(AWS_endpoint, 8883, callback, espClient); //set MQTT port number to 8883 as per //standard
long lastMsg = 0;
char msg[50];
int value = 0;
void setup_wifi() {
delay(10);
// We start by connecting to a WiFi network
espClient.setBufferSizes(512, 512);
Serial.println();
Serial.print("Connecting to ");
Serial.println(ssid);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.println("WiFi connected");
Serial.println("IP address: ");
Serial.println(WiFi.localIP());
timeClient.begin();
while(!timeClient.update()){
timeClient.forceUpdate();
}
espClient.setX509Time(timeClient.getEpochTime());
}
void reconnect() {
// Loop until we're reconnected
while (!client.connected()) {
Serial.print("Attempting MQTT connection...");
// Attempt to connect
if (client.connect("ESPthing")) {
Serial.println("connected");
// Once connected, publish an announcement...
client.publish("outTopic", "hello world");
// ... and resubscribe
client.subscribe("inTopic");
} else {
Serial.print("failed, rc=");
Serial.print(client.state());
Serial.println(" try again in 5 seconds");
char buf[256];
espClient.getLastSSLError(buf,256);
Serial.print("WiFiClientSecure SSL error: ");
Serial.println(buf);
// Wait 5 seconds before retrying
delay(5000);
}
}
}
void setup() {
Serial.begin(115200);
Serial.setDebugOutput(true);
// initialize digital pin LED_BUILTIN as an output.
pinMode(A0, INPUT);
setup_wifi();
delay(1000);
if (!SPIFFS.begin()) {
Serial.println("Failed to mount file system");
return;
}
// Load certificate file
File cert = SPIFFS.open("/cert.der", "r"); //replace cert.crt eith your uploaded file name
if (!cert) {
Serial.println("Failed to open cert file");
}
else
Serial.println("Success to open cert file");
delay(1000);
if (espClient.loadCertificate(cert))
Serial.println("cert loaded");
else
Serial.println("cert not loaded");
// Load private key file
File private_key = SPIFFS.open("/private.der", "r"); //replace private eith your uploaded file name
if (!private_key) {
Serial.println("Failed to open private cert file");
}
else
Serial.println("Success to open private cert file");
delay(1000);
if (espClient.loadPrivateKey(private_key))
Serial.println("private key loaded");
else
Serial.println("private key not loaded");
// Load CA file
File ca = SPIFFS.open("/ca.der", "r"); //replace ca eith your uploaded file name
if (!ca) {
Serial.println("Failed to open ca ");
}
else
Serial.println("Success to open ca");
delay(1000);
if(espClient.loadCACert(ca))
Serial.println("ca loaded");
else
Serial.println("ca failed");
Serial.print("Heap: "); Serial.println(ESP.getFreeHeap());
}
void loop() {
if (!client.connected()) {
reconnect();
}
client.loop();
int v = analogRead(A0);
float cel= (v*2.6*100)/1024;
delay(5000);
long now = millis();
if (now - lastMsg > 2000) {
lastMsg = now;
++value;
snprintf (msg, 75, "%f degree celcius", cel);
Serial.println(msg);
client.publish("outTopic", msg);
delay(5000);
}
}
>>Python code (for Raspberry Pi)
from AWSIoTPythonSDK.MQTTLib import AWSIoTMQTTClient
import Adafruit_DHT
from time import sleep
import RPi.GPIO as G
from Adafruit_CharLCD import Adafruit_CharLCD
DHT_PIN = 11
DHT_SENSOR = Adafruit_DHT.DHT11
Motor1 = 2 # Input Pin
Motor2 = 9 # Input Pin
Motor3 = 10 # Enable Pin
Settemp =int(input('Enter the setted temperature: '))
lcd = Adafruit_CharLCD(rs=7, en=8, d4=25, d5=24, d6=23, d7=18, cols=16, lines=2)
G.setmode(G.BCM)
G.setup(DHT_PIN,G.IN)
G.setup(Motor1,G.OUT)
G.setup(Motor2,G.OUT)
G.setup(Motor3,G.OUT)
lcd.message("Welcome")
sleep(2)
lcd.clear()
host = "a1ttf08wevovu1-ats.iot.us-east-2.amazonaws.com"
certPath = "7703953849-certificate.pem.crt"
clientId = "Gautam"
topic = "outTopic"
a= AWSIoTMQTTClient(clientId)
a.configureEndpoint(host, 8883)
a.configureCredentials("AmazonRootCA1.pem.crt","7703953849-private.pem.key","7703953849-certificate.pem.crt")
def customCallback(client, userdata, Message):
RoomTemp = Message.payload
print("RoomTemp : ",RoomTemp)
lcd.set_cursor(0,0)
lcd.message("Room Temp: ")
lcd.set_cursor(11,0)
lcd.message(str(RoomTemp))
sleep(2)
if(RoomTemp < str(Settemp)):
print("Compressor OFF")
lcd.clear()
lcd.set_cursor(1, 0)
lcd.message("Compressor OFF")
G.output(Motor3,G.LOW)
else:
print("Compressor ON")
lcd.clear()
lcd.set_cursor(1, 0)
lcd.message("Compressor ON")
G.output(Motor1,G.HIGH)
G.output(Motor2,G.LOW)
G.output(Motor3,G.HIGH)
supplytempprev = 0
a.connect()
while 1:
humidity, supplytemp= Adafruit_DHT.read(DHT_SENSOR, DHT_PIN)
if supplytemp is not None:
#print("Temp={0:0.1f}C %".format(supplytemp))
supplytemp = int(supplytemp)
lcd.set_cursor(0,0)
lcd.message("Sup Temp: ")
lcd.set_cursor(11,0)
lcd.message(str(supplytemp))
sleep(2)
if supplytemp == supplytempprev:
print("Compressor OFF")
lcd.clear()
lcd.set_cursor(1, 0)
lcd.message("Compressor OFF")
G.output(Motor3,G.LOW)
else:
print("Compressor ON")
lcd.clear()
lcd.set_cursor(1, 0)
lcd.message("Compressor ON")
G.output(Motor1,G.HIGH)
G.output(Motor2,G.LOW)
G.output(Motor3,G.HIGH)
a.subscribe("outTopic",1,customCallback)
humidity, supplytempprev= Adafruit_DHT.read(DHT_SENSOR, DHT_PIN)
sleep(5)
a.disconnect()
>>Flask code
- Python code
from flask import Flask, redirect, url_for, render_template, request, session, flash
from datetime import timedelta
app=Flask(__name__)
app.secret_key = "vaibhav"
app.permanent_session_lifetime = timedelta(minutes=30)
@app.route("/", methods=["POST","GET"])
def home():
if request.method == "POST":
return redirect(url_for("login"))
else:
if request.method == "GET":
return render_template("index.html")
@app.route("/login", methods=["POST","GET"])
def login():
if request.method == "POST":
session.permanent = True
user=request.form["nm"]
session["user"] = user
flash("Login Successful")
return redirect(url_for("temp"))
else:
if "user" in session:
flash("Already Logged In")
return render_template("login.html")
@app.route("/temp", methods=["POST","GET"])
def temp():
return render_template("temp.html")
app.run(debug=True)
- CSS code
*
{
margin: 0;
padding: 0;
font-family: 'Roboto', sans-serif;
}
body
{
display: flex;
justify-content: center;
align-items: center;
min-height: 100vh;
background : #101010;
}
.container
{
position: relative;
width: 900px;
display: flex;
justify-content: space-around;
}
.container .card
{
position: relative;
width: 250px;
background: linear-gradient(180deg,#1b1b1b,#222,#1b1b1b);
display: flex;
justify-content: center;
align-items: center;
height: 300px;
border-radius: 4px;
text-align: center;
overflow: hidden;
transition: 0.5s;
margin-left: 10px
}
.container .card:hover
{
transform: translateY(-10px);
box-shadow: 0 15px 35px rgba(0,0,0,.5);
}
.container .card:before
{
content: '';
position: absolute;
top: 0;
left: -50%;
width: 100%;
height: 100%;
background: rgba(255,255,255,.03);
pointer-events: none;
z-index: 1;
}
.percent
{
position: relative;
width: 150px;
height: 150px;
border-radius: 50%;
box-shadow: inset 0 0 50px #000;
background: #222;
z-index: 1000;
}
.percent .number
{
position: absolute;
top: 0px;
left: 0px;
width: 100%;
height: 100%;
display: flex;
justify-content: center;
align-items: center;
border-radius: 50%;
}
.percent .number h2
{
color: #777;
font-weight: 700;
font-size: 24px;
transition: 0.5;
}
.card:hover .percent .number h2
{
color: #fff;
font-size: 35px;
}
.percent .number h2 span
{
font-size: 24px;
color: #777;
}
.card:hover .percent .number h2 span
{
color: #fff;
transition: 0.5;
}
.text
{
position: relative;
color: #777;
font-weight: 700;
font-size: 18px;
letter-spacing: 1px;
text-transform: uppercase;
transition: 0.5s;
margin-top: 10px;
}
.card:hover .text
{
color: #fff;
}
svg
{
position: relative;
width: 150px;
height:150px;
z-index: 1000;
}
svg circle
{
width: 100%;
height: 100%;
fill: none;
stroke: #191919;
stroke-width: 10;
stroke-linejoin: round;
transform: translate(5px,5px);
}
svg circle:nth-child(2)
{
stroke-dasharray: 400;
stroke-dashoffset: 400;
}
.card:nth-child(1) svg circle:nth-child(2)
{
stroke-dashoffset: calc(440 - (440 * 35) / 100);
stroke: #00ff43;
}
.card:nth-child(2) svg circle:nth-child(2)
{
stroke-dashoffset: calc(440 - (440 * 800) / 100);
stroke: #00a1ff;
}
.card:nth-child(3) svg circle:nth-child(2)
{
stroke-dashoffset: calc(440 - (440 * 35) / 100);
stroke: #ff04f7;
}
.button-success
{
background: #222;
color: #fff;
padding: 10px;
}
- HTML code
<!DOCTYPE html>
<html>
<head>
<link rel="stylesheet" href="https://unpkg.com/purecss@2.0.3/build/pure-min.css" integrity="sha384-4ZPLezkTZTsojWFhpdFembdzFudphhoOzIunR1wH6g1WQDzCAiPvDyitaK67mp0+" crossorigin="anonymous">
<title>Home Page</title>
</head>
<body>
<p><h1>Welcome to my Website</h1></p>
<form method="POST">
<button class="pure-button pure-button-active">Get Started!</button>
</form>
</body>
</html>
<!DOCTYPE html>
<html>
<head>
<title>Temprature</title>
<link rel="stylesheet" type="text/css" href="{{url_for('static', filename='style.css')}}">
</head>
<body>
<div class="container">
<div class="card">
<div class="box">
<div class="percent">
<svg>
<circle cx="70" cy="70" r="70"></circle>
<circle cx="70" cy="70" r="70"></circle>
</svg>
<div class="number">
<h2>35<span>℃</span></h2>
</div>
</div>
<h2 class="text">Temperature</h2>
</div>
</div>
<div class="card">
<div class="box">
<div class="percent">
<svg>
<circle cx="70" cy="70" r="70"></circle>
<circle cx="70" cy="70" r="70"></circle>
</svg>
<div class="number">
<h2>500<span>kWh</span></h2>
</div>
</div>
<h2 class="text">Power</h2>
</div>
</div>
<div class="card">
<div class="box">
<div class="percent">
<svg>
<circle cx="70" cy="70" r="70"></circle>
<circle cx="70" cy="70" r="70"></circle>
</svg>
<div class="number">
<h2><span>₹</span>1200</h2>
</div>
</div>
<h2 class="text">Cost</h2>
</div>
</div>
</div>
</body>
</html>
7. Credits
>Adhyoksh Jyoti (Circuit design and Project documentation)
>Chandrima Mazumdar (LM35 + NodeMCU)
>Gautham Uppal (Project idea, AWS and Raspberry Pi)
>Vaibhav Balotra (Flask, HTML and CSS code)