BME280 – Measure air pressure, humidity, and temperature
FunduinoLast updated on
Umgebungswerte auslesen – vom BME280 bis zur Luftqualität mit dem BME680
Choose a microcontroller
Pins, schematic, and sketch in the steps change with your selection. It remains saved.
Den BME280 anschließen
Die Bibliotheken für den BME280 installieren
Den BME280 auslesen
Programmcode – BME280 auslesen
#include <Seeed_BME280.h> // Implementieren der Seeed-Bibliothek, ermöglicht die Kommunikation mit dem BME280
#include <Wire.h> // Implementieren der Wire-Bibliothek, ermöglicht dem Arduino die Kommunikation mit Geräten, die das I²C-Protokoll verwenden
BME280 bme280;
void setup()
{
Serial.begin(9600); // Einstellen der Baudrate
if (!bme280.init()) // Wenn keine Daten vom BME280 abgefragt werden können ...
{
Serial.println("FEHLER!"); // ... dann soll eine Fehlermeldung ausgegeben werden.
}
}
void loop() // Starten unserer Schleife
{
float Pascal; // Deklarieren der Variablen
double Bar;
Serial.print("Temperatur : ");
Serial.print(bme280.getTemperature()); // Abfrage und Ausgabe der Temperatur
Serial.println("C");
Serial.print("Druck : ");
Pascal = bme280.getPressure(); // Abfrage des Drucks in Pascal
Serial.print(Pascal); // Ausgabe des Drucks in Pascal
Serial.print(" Pascal oder auch ");
Bar = (Pascal / 100000); // Wandlung des Pascal-Werts in Bar
Serial.print(Bar); // Ausgabe des Drucks in Bar
Serial.println(" Bar");
Serial.print("Feuchtigkeit : ");
Serial.print(bme280.getHumidity()); // Abfrage und Ausgabe der Feuchtigkeit
Serial.println("%");
Serial.println(" ");
delay(1000);
}Der BME680 – was der Sensor zusätzlich kann
BME680 mit der Adafruit-Bibliothek auslesen
1 / 2
Programmcode – BME680 mit der Adafruit-Bibliothek
#include "Wire.h"
#include "Adafruit_Sensor.h"
#include "Adafruit_BME680.h"
// Luftdruck auf Meereshöhe
#define SEALEVELPRESSURE_HPA (1013.25)
// i2c-Anschluss
Adafruit_BME680 bme;
void setup()
{
// Seriellen Monitor starten
Serial.begin(9600);
while (!Serial);
delay(1000);
Serial.println(F("BME680 Test"));
// BME680 starten
if (!bme.begin()) {
Serial.println("BME680 Sensor nicht gefunden!");
// Programm anhalten
while (1);
}
/*
oversampling: Setzen einer höheren Abtastrate als die Standardrate
mögliche Werte:
BME680_OS_NONE -> ausgeschaltet
BME680_OS_1X
BME680_OS_4X
BME680_OS_8X
BME680_OS_16X
bme.setTemperatureOversampling(BME680_OS_NONE);
bme.setHumidityOversampling(BME680_OS_2X);
bme.setPressureOversampling(BME680_OS_4X);
// IIR = infinite impulse response (Filter mit unendlicher Impulsantwort)
// liefert eine unendlich lang andauernde Impulsantwort
bme.setIIRFilterSize(BME680_FILTER_SIZE_3);
bme.setGasHeater(320, 150);
Standardwerte sind für die Messung ausreichend
*/
}
void loop()
{
// wenn der Sensor keine Daten übermittelt ...
if (!bme.performReading())
{
Serial.println("Keine Messdaten");
return;
}
Serial.print("Temperatur: ");
// Messwert in String umwandeln
String Temperatur = String(bme.temperature);
// . durch , ersetzen
Temperatur.replace(".", ",");
Serial.println(Temperatur + " °C");
String Luftfeuchtigkeit = String(bme.humidity);
Luftfeuchtigkeit.replace(".", ",");
Serial.print("Luftfeuchtigkeit: ");
Serial.println(Luftfeuchtigkeit + " %");
Serial.print("Luftdruck = ");
String Luftdruck = String(bme.pressure / 100.0);
Luftdruck.replace(".", ",");
Serial.println(Luftdruck + " hPa");
Serial.print("Widerstandswert Gas = ");
String GasWiderstand = String(bme.gas_resistance / 1000.0);
Serial.println(GasWiderstand + " KOhm");
Serial.print("Ungefähre Höhe: ");
Serial.print(bme.readAltitude(SEALEVELPRESSURE_HPA));
Serial.println(" m");
Serial.println();
delay(2000);
}BME680 mit der BSEC-Bibliothek am ESP32
1 / 5
BSEC – Benötigte Bibliothek und Variable
#include "bsec.h" // Objekt (iaqSensor) der Klasse Bsec definieren Bsec iaqSensor;
BSEC – Der setup-Teil
void setup()
{
Serial.begin(9600);
// auf serielle Verbindung warten
while (!Serial);
delay(1000);
// Hex-Adresse des BME680
// BME68X_I2C_ADDR_HIGH = 0x77 (Standard)
// BME68X_I2C_ADDR_LOW = 0x76 (Verbindung SDO zu GND)
iaqSensor.begin(BME68X_I2C_ADDR_HIGH, Wire);
// Array der verfügbaren Sensoren
bsec_virtual_sensor_t sensorList[13] =
{
BSEC_OUTPUT_IAQ,
BSEC_OUTPUT_STATIC_IAQ,
BSEC_OUTPUT_CO2_EQUIVALENT,
BSEC_OUTPUT_BREATH_VOC_EQUIVALENT,
BSEC_OUTPUT_RAW_TEMPERATURE,
BSEC_OUTPUT_RAW_PRESSURE,
BSEC_OUTPUT_RAW_HUMIDITY,
BSEC_OUTPUT_RAW_GAS,
BSEC_OUTPUT_STABILIZATION_STATUS,
BSEC_OUTPUT_RUN_IN_STATUS,
BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE,
BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_HUMIDITY,
BSEC_OUTPUT_GAS_PERCENTAGE
};
// BSEC_SAMPLE_RATE_ULP: Ultra Low Power Mode -> Messung alle 5 Minuten
// BSEC_SAMPLE_RATE_LP: Low Power Mode -> Messung alle 3 Sekunden
iaqSensor.updateSubscription(sensorList, 13, BSEC_SAMPLE_RATE_LP);
}BSEC – Der loop-Teil
void loop()
{
// wenn der Sensor arbeitet ...
if (iaqSensor.run())
{
// Messwerte ermitteln, in Strings umwandeln, . durch , ersetzen
String Temperatur = String(iaqSensor.temperature);
Temperatur.replace(".", ",");
String Luftfeuchtigkeit = String(iaqSensor.humidity);
Luftfeuchtigkeit.replace(".", ",");
String Luftdruck = String(iaqSensor.pressure / 100);
Luftdruck.replace(".", ",");
String IAQ = String(iaqSensor.iaq);
IAQ.replace(".", ",");
String StatischerIAQ = String(iaqSensor.staticIaq);
StatischerIAQ.replace(".", ",");
String CO2 = String(iaqSensor.co2Equivalent);
CO2.replace(".", ",");
// Ausgabe im Seriellen Monitor
Serial.println("Statusmeldungen:");
Serial.println("-----------------------------");
Serial.println("Sensor bereit (0-1): " + String(int(iaqSensor.runInStatus)));
Serial.println("Genauigkeit IAQ (0-3): " + String(int(iaqSensor.iaqAccuracy)));
Serial.println("-----------------------------");
Serial.println("Messwerte:");
Serial.println("-----------------------------");
Serial.println("Temperatur: " + Temperatur + " °C");
Serial.println("Feuchtigkeit: " + Luftfeuchtigkeit + " %");
Serial.println("Luftdruck: " + Luftdruck + " hPa");
Serial.println("IAQ: " + IAQ);
Serial.println("Statischer IAQ: " + StatischerIAQ);
Serial.println("Schätzung CO2: " + CO2 + " ppm");
Serial.println("-----------------------------");
}
}Erweiterung: Die Messdaten auf einem LCD anzeigen
1 / 3
Programmcode – Messwerte auf einem LCD anzeigen
#include "bsec.h"
#include "LCDIC2.h"
// 4-zeiliges LCD
LCDIC2 lcd(0x27, 20, 4);
// Objekt (iaqSensor) der Klasse Bsec definieren
Bsec iaqSensor;
void setup()
{
Serial.begin(9600);
// auf serielle Verbindung warten
while (!Serial);
delay(1000);
// LCD starten
lcd.begin();
// Cursor "verstecken"
lcd.setCursor(false);
// Hex-Adresse des BME680
// BME68X_I2C_ADDR_HIGH = 0x77 (Standard)
// BME68X_I2C_ADDR_LOW = 0x76 (Verbindung SDO zu GND)
iaqSensor.begin(BME68X_I2C_ADDR_HIGH, Wire);
// Array der verfügbaren Sensoren
bsec_virtual_sensor_t sensorList[13] =
{
BSEC_OUTPUT_IAQ,
BSEC_OUTPUT_STATIC_IAQ,
BSEC_OUTPUT_CO2_EQUIVALENT,
BSEC_OUTPUT_BREATH_VOC_EQUIVALENT,
BSEC_OUTPUT_RAW_TEMPERATURE,
BSEC_OUTPUT_RAW_PRESSURE,
BSEC_OUTPUT_RAW_HUMIDITY,
BSEC_OUTPUT_RAW_GAS,
BSEC_OUTPUT_STABILIZATION_STATUS,
BSEC_OUTPUT_RUN_IN_STATUS,
BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE,
BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_HUMIDITY,
BSEC_OUTPUT_GAS_PERCENTAGE
};
// BSEC_SAMPLE_RATE_ULP: Ultra Low Power Mode -> Messung alle 5 Minuten
// BSEC_SAMPLE_RATE_LP: Low Power Mode -> Messung alle 3 Sekunden
iaqSensor.updateSubscription(sensorList, 13, BSEC_SAMPLE_RATE_LP);
}
void loop()
{
// wenn der Sensor arbeitet ...
if (iaqSensor.run())
{
// Messwerte ermitteln, in Strings umwandeln, . durch , ersetzen
String Temperatur = String(iaqSensor.temperature);
Temperatur.replace(".", ",");
String Luftfeuchtigkeit = String(iaqSensor.humidity);
Luftfeuchtigkeit.replace(".", ",");
String Luftdruck = String(iaqSensor.pressure / 100);
Luftdruck.replace(".", ",");
String IAQ = String(iaqSensor.iaq);
IAQ.replace(".", ",");
String StatischerIAQ = String(iaqSensor.staticIaq);
StatischerIAQ.replace(".", ",");
String CO2 = String(iaqSensor.co2Equivalent);
CO2.replace(".", ",");
// Ausgabe im Seriellen Monitor
Serial.println("Statusmeldungen:");
Serial.println("-----------------------------");
Serial.println("Sensor bereit (0-1): " + String(int(iaqSensor.runInStatus)));
Serial.println("Genauigkeit IAQ (0-3): " + String(int(iaqSensor.iaqAccuracy)));
Serial.println("-----------------------------");
Serial.println("Messwerte:");
Serial.println("-----------------------------");
Serial.println("Temperatur: " + Temperatur + " °C");
Serial.println("Feuchtigkeit: " + Luftfeuchtigkeit + " %");
Serial.println("Luftdruck: " + Luftdruck + " hPa");
Serial.println("IAQ: " + IAQ);
Serial.println("Statischer IAQ: " + StatischerIAQ);
Serial.println("Schätzung CO2: " + CO2 + " ppm");
Serial.println("-----------------------------");
// Ausgabe auf dem LCD
lcd.setCursor(0, 0);
lcd.print("Temperatur: " + Temperatur + "\337C");
lcd.setCursor(0, 1);
lcd.print("Feuchtigkeit: " + Luftfeuchtigkeit + "%");
lcd.setCursor(0, 2);
lcd.print("IAQ: " + IAQ);
lcd.setCursor(0, 3);
lcd.print("CO2: " + CO2 + " ppm");
}
}Erweiterung: Die Messdaten im Web anzeigen
Rate the instructions