-
-
Save haeshh/47c32c8dc6989ed2167d7e7d7629e582 to your computer and use it in GitHub Desktop.
Beispielcode zur Abfrage des BMP180-Luftdrucksensors (ESP32, Arduino)
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* BMP180 Luftdruck-Sensor abfragen | |
* | |
* siehe Beispielprogramm: | |
* github.com/adafruit/Adafruit_BMP085_Unified/blob/master/examples/sensorapi/sensorapi.pde | |
* | |
* 2020-12-13 Heiko (unsinnsbasis.de) | |
*/ | |
#include <Wire.h> // Bibliothek für I2C einbinden | |
#include <Adafruit_Sensor.h> // Bibliotheken für den Sensor | |
#include <Adafruit_BMP085_U.h> | |
// Bitrate für die Datenübertragung zum seriellen Monitor | |
// (ESP: z.B. 115200, Arduino: zwingend 9600) | |
#define BITRATE 115200 // Arduino: 9600 | |
// Für die exakte Berechnung der Höhe des Standorts über dem Meeres- | |
// spiegel wird der aktuelle Luftdruck auf Meereshöhe benötigt, wie | |
// ihn Wetterdienste liefern, z.B. Deutscher Wetterdienst (DWD) | |
// -> https://www.dwd.de/DE/leistungen/beobachtung/beobachtung.html | |
// | |
// Notfalls Standardwert verwenden: SENSORS_PRESSURE_SEALEVELHPA | |
// (1013,25 hPa; siehe <Adafruit_Sensor.h>; Standard-Druck auf Meereshöhe) | |
// #define PRESSURE_NULL SENSORS_PRESSURE_SEALEVELHPA | |
#define PRESSURE_NULL (1009.9F) | |
// Höhe des eigenen Standorts über Meereshöhe | |
#define LOCAL_ALTITUDE (10.0F) | |
// Sensor-Objekt anlegen (die Zahl "180" ist eine frei wählbare ID) | |
Adafruit_BMP085_Unified bmp = Adafruit_BMP085_Unified(180); | |
void setup() { | |
Serial.begin(BITRATE); | |
delay(500); // kurz warten, bis die ser. Schnittstelle bereit ist | |
Serial.println("---- Test BMP180 ----\n"); | |
// Sensor initialisieren; ggf. Fehlermeldung ausgeben | |
if(!bmp.begin()) { | |
Serial.println("Sensor BMP180 nicht gefunden! Verkabelung ok?"); | |
while(1); // leere Dauerschleife; Programm bleibt hier stehen | |
} | |
} | |
void loop() { | |
float tempC, // Temperatur in Grad Celsius | |
druck; // Luftdruck in Hekto-Pascal hPa | |
// Luftdruck und Temperatur ausgeben | |
// getPressure() liefert Pascal; für hPa durch 100 teilen | |
bmp.getPressure(&druck); | |
druck /= 100; | |
Serial.print("Luftdruck: "); | |
Serial.print(druck,1); // Ausgabe mit einer Nachkommastelle | |
Serial.println(" hPa"); | |
bmp.getTemperature(&tempC); | |
Serial.print("Temperatur: "); | |
Serial.print(tempC,1); | |
Serial.println(" °C"); | |
// aus dem gemessenen Druck und dem aktuellen Druck auf Meereshöhe | |
// die Höhe des Standorts berechnen | |
Serial.print("Höhe über Meer: "); | |
Serial.print(bmp.pressureToAltitude(PRESSURE_NULL, druck),1); | |
Serial.println(" m"); | |
// mit der bekannten Höhe des Standorts den gemessenen Druck in | |
// Druck auf Meereshöhe umrechnen | |
Serial.print("Luftdruck (MH): "); | |
Serial.print(bmp.seaLevelForAltitude(LOCAL_ALTITUDE, druck),1); | |
Serial.println(" hPa\n"); | |
delay(5000); // vor der nächsten Messung einige Sekunden warten | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#define NUM_M 5 // Anzahl Messungen für Mittelwert | |
void loop(void) { | |
float tempC = 0.0, // Temperatur in Grad Celsius | |
druck = 0.0, // Luftdruck in Hekto-Pascal hPa | |
wert; | |
int i; | |
// Luftdruck und Temperatur ausgeben | |
// da die Werte leicht schwanken, mehrmals messen und mitteln | |
for (i=0; i<NUM_M; i++) { | |
bmp.getPressure(&wert); | |
druck += wert; | |
bmp.getTemperature(&wert); | |
tempC += wert; | |
if (i < NUM_M - 1) delay(500); // im letzten Schleifendurchlauf nicht mehr warten | |
} | |
tempC /= NUM_M; | |
// getPressure() liefert Pascal; für hPa zusätzlich durch 100 teilen | |
druck /= (NUM_M * 100); | |
Serial.print("Luftdruck: "); | |
Serial.print(druck,2); | |
Serial.println(" hPa"); | |
Serial.print("Temperatur: "); | |
Serial.print(tempC,2); | |
Serial.println(" °C"); | |
// aus dem gemessenen Druck und dem aktuellen Druck auf Meereshöhe | |
// die Höhe des Standorts berechnen | |
Serial.print("Höhe über Meer: "); | |
Serial.print(bmp.pressureToAltitude(PRESSURE_NULL, druck),1); | |
Serial.println(" m"); | |
// mit der bekannten Höhe des Standorts den gemessenen Druck in | |
// Druck auf Meereshöhe umrechnen | |
Serial.print("Luftdruck (MH): "); | |
Serial.print(bmp.seaLevelForAltitude(LOCAL_ALTITUDE, druck),1); | |
Serial.println(" hPa\n"); | |
delay(3000); // vor der nächsten Messung einige Sekunden warten | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment