195 lines
5.5 KiB
Arduino
195 lines
5.5 KiB
Arduino
|
#include <Adafruit_BMP280.h>
|
||
|
#include <ESP8266WiFi.h>
|
||
|
#include <WiFiClient.h>
|
||
|
#include <ESP8266WebServer.h>
|
||
|
#include "DHT.h"
|
||
|
#include <SPI.h>
|
||
|
|
||
|
#include "proj_password.h"
|
||
|
|
||
|
#define LED 2 //On board LED
|
||
|
#define DHTTYPE DHT22 // DHT 11
|
||
|
uint8_t DHTPin = 12;
|
||
|
DHT dht(DHTPin, DHTTYPE);
|
||
|
|
||
|
// define device I2C address: 0x76 or 0x77 (0x77 is library default address)
|
||
|
#define BMP280_I2C_ADDRESS 0x76
|
||
|
// initialize Adafruit BMP280 library
|
||
|
Adafruit_BMP280 bmp280;
|
||
|
|
||
|
float humidity, temperature, temperature_2, pressure;
|
||
|
ESP8266WebServer server(80); //Server on port 80
|
||
|
const char MAIN_page[] PROGMEM = R"=====(
|
||
|
<!doctype html>
|
||
|
<html>
|
||
|
<head>
|
||
|
<title>Weather</title>
|
||
|
<h1 style="text-align:center; color:red;">Some Weather ....</h1>
|
||
|
<h3 style="text-align:center;">NodeMCU Data Logger</h3>
|
||
|
<style>
|
||
|
canvas{
|
||
|
-moz-user-select: none;
|
||
|
-webkit-user-select: none;
|
||
|
-ms-user-select: none;
|
||
|
}
|
||
|
/* Data Table Styling*/
|
||
|
#dataTable {
|
||
|
font-family: sans-serif;
|
||
|
border-collapse: collapse;
|
||
|
width: 100%;
|
||
|
text-align: center;
|
||
|
}
|
||
|
#dataTable td, #dataTable th {
|
||
|
border: 1px solid #ddd;
|
||
|
padding: 8px;
|
||
|
}
|
||
|
#dataTable tr:nth-child(even){background-color: #f2f2f2;}
|
||
|
#dataTable tr:hover {background-color: #ddd;}
|
||
|
#dataTable th {
|
||
|
padding-top: 12px;
|
||
|
padding-bottom: 12px;
|
||
|
text-align: center;
|
||
|
background-color: #050505;
|
||
|
color: white;
|
||
|
}
|
||
|
</style>
|
||
|
</head>
|
||
|
<body>
|
||
|
<div>
|
||
|
<table id="dataTable">
|
||
|
<tr>
|
||
|
<th>Time</th>
|
||
|
<th>Temperature (°C)</th>
|
||
|
<th>Temperature 2 (°C)</th>
|
||
|
<th>Humidity (%)</th>
|
||
|
<th>Pressure (hPa)</th>
|
||
|
</tr>
|
||
|
</table>
|
||
|
</div>
|
||
|
<br>
|
||
|
<br>
|
||
|
<script>
|
||
|
var Tvalues = [];
|
||
|
var Hvalues = [];
|
||
|
var timeStamp = [];
|
||
|
var T2value = [];
|
||
|
var Pvalue = [];
|
||
|
setInterval(function() {
|
||
|
// Call a function repetatively with 5 Second interval
|
||
|
getData();
|
||
|
}, 5000); //5000mSeconds update rate
|
||
|
function getData() {
|
||
|
var xhttp = new XMLHttpRequest();
|
||
|
xhttp.onreadystatechange = function() {
|
||
|
if (this.readyState == 4 && this.status == 200) {
|
||
|
//Push the data in array
|
||
|
var time = new Date().toLocaleTimeString();
|
||
|
var txt = this.responseText;
|
||
|
var obj = JSON.parse(txt);
|
||
|
Tvalues.push(obj.Temperature);
|
||
|
Hvalues.push(obj.Humidity);
|
||
|
T2value.push(obj.Temperature_2);
|
||
|
Pvalue.push(obj.Pressure);
|
||
|
timeStamp.push(time);
|
||
|
|
||
|
if(Tvalues.length > 10){
|
||
|
Tvalues.pop();
|
||
|
Hvalues.pop();
|
||
|
timeStamp.pop();
|
||
|
T2value.pop();
|
||
|
Pvalue.pop();
|
||
|
document.getElementById("dataTable").deleteRow(10);
|
||
|
}
|
||
|
|
||
|
//Update Data Table
|
||
|
var table = document.getElementById("dataTable");
|
||
|
var row = table.insertRow(1); //Add after headings
|
||
|
var cell1 = row.insertCell(0);
|
||
|
var cell2 = row.insertCell(1);
|
||
|
var cell3 = row.insertCell(2);
|
||
|
var cell4 = row.insertCell(3);
|
||
|
var cell5 = row.insertCell(4);
|
||
|
|
||
|
cell1.innerHTML = time;
|
||
|
cell2.innerHTML = obj.Temperature;
|
||
|
cell3.innerHTML = obj.Temperature_2;
|
||
|
cell4.innerHTML = obj.Humidity;
|
||
|
cell5.innerHTML = obj.Pressure;
|
||
|
}
|
||
|
};
|
||
|
xhttp.open("GET", "readData", true); //Handle readData server on ESP8266
|
||
|
xhttp.send();
|
||
|
}
|
||
|
</script>
|
||
|
</body>
|
||
|
</html>
|
||
|
|
||
|
)=====";
|
||
|
|
||
|
|
||
|
void handleRoot() {
|
||
|
String s = MAIN_page; //Read HTML contents
|
||
|
server.send(200, "text/html", s); //Send web page
|
||
|
}
|
||
|
|
||
|
void readData() {
|
||
|
|
||
|
String data = "{\"Temperature\":\"" + String(temperature) + "\", \"Humidity\":\"" + String(humidity) + "\", \"Temperature_2\":\"" + String(temperature_2) + "\", \"Pressure\":\"" + String(pressure) + "\" }";
|
||
|
digitalWrite(LED,!digitalRead(LED)); //Toggle LED on data request ajax
|
||
|
server.send(200, "text/plane", data); //Send ADC value, temperature and humidity JSON to client ajax request
|
||
|
delay(2000);
|
||
|
temperature = (dht.readTemperature());
|
||
|
humidity = dht.readHumidity();
|
||
|
|
||
|
// read temperature and pressure from BMP280 sensor
|
||
|
temperature_2 = (bmp280.readTemperature()); // get temperature
|
||
|
pressure = (bmp280.readPressure()/100); // get pressure
|
||
|
|
||
|
Serial.println("T1: " + String(temperature) + " T2:" + String(temperature_2) + " H:" + String(humidity) + " P: " + String(pressure));
|
||
|
}
|
||
|
|
||
|
void setup ()
|
||
|
{
|
||
|
Serial.begin(115200);
|
||
|
Serial.println();
|
||
|
pinMode(DHTPin, INPUT);
|
||
|
dht.begin();
|
||
|
|
||
|
// initialize the BMP280 sensor
|
||
|
//Wire.begin(D1, D2); // set I2C pins [SDA = D2, SCL = D1], default clock is 100kHz
|
||
|
//Wire.begin(4, 0);
|
||
|
Wire.begin();
|
||
|
while(!bmp280.begin(BMP280_I2C_ADDRESS)){
|
||
|
Serial.println("BPM280 put");
|
||
|
delay(1000);
|
||
|
}
|
||
|
|
||
|
WiFi.begin(ssid, password); //Connect to your WiFi router
|
||
|
Serial.println("");
|
||
|
//Onboard LED port Direction output
|
||
|
pinMode(LED,OUTPUT);
|
||
|
|
||
|
// Wait for connection
|
||
|
while (WiFi.status() != WL_CONNECTED) {
|
||
|
delay(500);
|
||
|
Serial.print(".");
|
||
|
}
|
||
|
|
||
|
//If connection successful show IP address in serial monitor
|
||
|
Serial.println("");
|
||
|
Serial.print("Connected to ");
|
||
|
Serial.println(ssid);
|
||
|
Serial.print("IP address: ");
|
||
|
Serial.println(WiFi.localIP()); //IP address assigned to your ESP
|
||
|
|
||
|
server.on("/", handleRoot); //Which routine to handle at root location. This is display page
|
||
|
server.on("/readData", readData); //This page is called by java Script AJAX
|
||
|
|
||
|
server.begin(); //Start server
|
||
|
Serial.println("HTTP server started");
|
||
|
}
|
||
|
|
||
|
void loop(void){
|
||
|
server.handleClient(); //Handle client requests
|
||
|
}
|