Esp32 Bme280 als Arduino Tab.
Bme280.ino
// ****************************************************************
// Sketch Esp32 Bme280 Modular(Tab)
// created: Jens Fleischer, 2018-08-10
// last mod: Jens Fleischer, 2020-03-26
// For more information visit: https://fipsok.de
// ****************************************************************
// Hardware: Esp32, Bme280, 2 x 4k7 Ohm Widerstand
// SDA an D21
// SCL an D22
// 4k7 Ohm Widerstand von VCC auf D21
// 4k7 Ohm Widerstand von VCC auf D22
// Getestet auf: ESP32 NodeMCU-32s
/******************************************************************
Copyright (c) 2018 Jens Fleischer. All rights reserved.
This file is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
This file is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
*******************************************************************/
// Diese Version von Bme280 sollte als Tab eingebunden werden.
// #include <WebServer.h> müssen im Haupttab aufgerufen werden
// Die Funktionalität des ESP32 Webservers ist erforderlich.
// Die Funktion "bme280();" muss im Setup aufgerufen werden.
// Gib die Höhe in Meter über Meeresspiegel an deinem Standort an
/**************************************************************************************/
#include <Wire.h>
#include <BME280I2C.h> // Version 2.3 https://www.github.com/finitespace/BME280
BME280I2C bme; // Standard : Zwangsmodus, Standby-Zeit = 1000 ms
void bme280() { // Funktionsaufruf "bme280();" muss im Setup eingebunden werden
Wire.begin();
if (!bme.begin()) {
DEBUG_P("Keinen BME280 Sensor gefunden!");
}
server.on("/bme280", []() {
server.send(200, "application/json", handleBme());
});
}
String handleBme() {
const int hoehe = 163; // virtuelle Höhe in Meter über Meeresspiegel an deinem Standort anpassen
float temp, hum, pres, sealevel;
BME280::TempUnit tempUnit(BME280::TempUnit_Celsius); //TempUnit_: Celsius, Fahrenheit
BME280::PresUnit presUnit(BME280::PresUnit_hPa); //PresUnit_: Pa, hPa, inHg, atm, bar, torr, psi
bme.read(pres, temp, hum, tempUnit, presUnit);
sealevel = (pres / pow(1 - ((0.0065 * hoehe) / (temp + (0.0065 * hoehe) + 273.15)), 5.257)); // Berechnung relativer Luftdruck
return (String)"[\"" + temp + "\",\"" + hum + "\",\"" + sealevel + "\"]";
}
Die Webseite zum Esp32 Bme280 Tab.
bme280.html
<!DOCTYPE HTML> <!-- For more information visit: https://fipsok.de -->
<html lang="de">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="style32.css">
<title>Klimadaten</title>
<script>
function renew() {
fetch('/bme280').then(function (response) {
return response.json();
}).then(function (array) {
var elem = document.querySelector('#temp');
array[2] != 'nan' ? elem.innerHTML = array[0] + '°C' : elem.innerHTML = '---------';
elem = document.querySelector('#hum');
array[2] != 'nan' ? elem.innerHTML = array[1] + ' %' : elem.innerHTML = 'Fehler';
elem = document.querySelector('#pres');
array[2] != 'nan' ? elem.innerHTML = array[2] + ' hPa' : elem.innerHTML = '---------';
});
}
document.addEventListener('DOMContentLoaded', renew);
setInterval(renew, 1000)
</script>
<style>
body {
padding: 10px;
font-size: 3em;
}
section {
align-items: center;
background-color: black;
width: 290px;
height: 180px;
border: .15em solid #909294;
box-shadow: 5px 10px 5px #5a5a5b;
border-radius: .2em;
}
span {
color: #00ff05;
position: relative;
top: 0.2em;
left: .1em;
font-weight: bold
}
</style>
</head>
<body>
<section>
<span id="temp"></span>
<span id="hum"></span>
<span id="pres"></span>
</section>
</body>
</html>