INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.

Antwort schreiben 
 
Themabewertung:
  • 0 Bewertungen - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
Welche Library für BMP/BME280 ggf. BME680
21.12.2019, 12:18
Beitrag #1
Welche Library für BMP/BME280 ggf. BME680
Hallo,

für die BOSCH Sensoren BMP280 und BME280 gibt es mittlerweile eine ganze Menge Libraries. Welche ist empfehlenswert, die sowohl BMP280 und BME280 unterstützt ggf. auch den neuen BME680?

Gruß Adruino4Fun
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
21.12.2019, 12:49
Beitrag #2
RE: Welche Library für BMP/BME280 ggf. BME680
(21.12.2019 12:18)Arduino4Fun schrieb:  Hallo,

für die BOSCH Sensoren BMP280 und BME280 gibt es mittlerweile eine ganze Menge Libraries. Welche ist empfehlenswert, die sowohl BMP280 und BME280 unterstützt ggf. auch den neuen BME680?

Gruß Adruino4Fun
Da sich die von dir genannten Sensoren sehr stark in der Technik unterscheiden, wird es da keine gemeinsame Library geben.
Mir ist jedenfalls bisher keine untergekommen.

Gruß Dieter

I2C = weniger ist mehr: weniger Kabel, mehr Probleme. Cool
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
21.12.2019, 23:22 (Dieser Beitrag wurde zuletzt bearbeitet: 21.12.2019 23:32 von Bitklopfer.)
Beitrag #3
RE: Welche Library für BMP/BME280 ggf. BME680
Hallo,
für BME280 und BMP 280 beztze ich die beiden Libs von Adafruit, eine gemeinsame ist mir nicht bekannt.
Für den BME680 macht nur die BSEC-Lib von Bosch selbst wirklich Sinn, die ist closed Source und Bosch verrät keine Details über ihre IAQ Berechnung.
https://github.com/BoschSensortec/BSEC-Arduino-library

Gruß aus Berlin

Link editiert. lgbk
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
22.12.2019, 09:51
Beitrag #4
RE: Welche Library für BMP/BME280 ggf. BME680
Hallo,

danke für die Hinweise, werde ich mir anschauen

Gruß Arduino4Fun
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
22.12.2019, 11:03 (Dieser Beitrag wurde zuletzt bearbeitet: 22.12.2019 18:57 von Franz54.)
Beitrag #5
RE: Welche Library für BMP/BME280 ggf. BME680
Ich habe die BME280 (MyBME280.h) und die BMP180 (SFE_BMP180.h) Sensoren. Dafür mußte ich auch zwei veschiedene Lib´s nehmen. Da sind große Unterschiede. Also auch keine kleinen Anpassungen im Programm, sondern völlig verschiedene Befehle. Ich fürchte die BMP180 Sensoren werden bei mir wohl die Ladenhüter werden. Die sind für 3,3 Volt und die Arbeit mit dieser Lib ist auch nicht mein´s. Ist aber nur das erste Gefühl anhand der Testprogramme.

Franz

PS: Hier noch die beiden Testprogramme zu den Lib´s:

Code:
//Testprogramm 1 für Luftdrucksensor BME280
//Code fuer Arduino
//Author Retian
//Version 1.1


//Prototypen:
void leseMesswerte(void);
void ausgabeMesswerte(void);
#include <MyBME280.h>

#include <LiquidCrystal_I2C.h> // LCD Display
LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);

//Hier auswählen zwischen I2C- und SPI-Schnittstelle
//Mit I2C-Schnittstelle:
#define BME280_I2cAdd 0x76 //I2C-Adresse
MyBME280 BME(BME280_I2cAdd);

//Mit SPI-Schnittstelle:
//#define cs 10 //CS-Pin für SPI-Schnittstelle
//MyBME280 BME(cs, BME280_SPI);


unsigned long zeit;
float luftTemp, luftDruck, redLuftDruck, luftFeuchte;
int hoehe = 460; //Messort 460 m ueber dem Meer
// ------------------------------------------------------------------------------------------------
void setup() {
  Serial.begin(9600);

  lcd.begin(20, 4);
  lcd.backlight();
  lcd.clear();

  if (BME.isReady())
  {
    Serial.println("BME280 ok");
    lcd.setCursor (0, 0);
    lcd.print (F("BME280 init ok"));
    BME.setWeatherMonitoring(); //Setze Parameter für Wetterueberwachung
    BME.init();
    //Beim Initialisieren des Parametersatzes für Wetterueberwachung (Forced-Mode)
    //wird bereits eine Messung vom Sensor durchgeführt und als Rohwerte gespeichert
    leseMesswerte();
    ausgabeMesswerte();
  }
  else
  {
    Serial.println("BME280 Fehler");
    while (1); //hier geht es im Fehlerfall nicht weiter
  }
  zeit = millis();
}
// -----------------------------------------------------------------------------------------------
void loop() {
  if (millis() > zeit + 5000) //Messung alle 5 Sekunden
  {
    BME.startSingleMeas();
    leseMesswerte();
    ausgabeMesswerte();
    zeit = millis();
  }
}
// -----------------------------------------------------------------------------------------------
void leseMesswerte()
{
  luftTemp = BME.readTemp();
  luftDruck = BME.readPress();
  redLuftDruck = BME.readReducedPress(hoehe);
  luftFeuchte = BME.readHumidity();
}
// ----------------------------------------------------------------------------------------------
void ausgabeMesswerte()
{
  
// Ausgabe Serial ----------------------------------------------
    Serial.print("Lufttemperatur  : ");
    Serial.print(luftTemp);
    Serial.println(" Grad C");
    Serial.print("LuftDruck       : ");
    Serial.print(luftDruck);
    Serial.println(" hPa");
    Serial.print("Red. LuftDruck  : ");
    Serial.print(redLuftDruck);
    Serial.println(" hPa");
    Serial.print("Luftfeuchtigkeit: ");
    Serial.print(luftFeuchte);
    Serial.println(" %");
    Serial.println();
  
// Ausgabe auf LCD Display 4x20 Zeichen-----------------
  lcd.setCursor (0, 0);
  lcd.print (F("Temperatur: "));
  lcd.setCursor (12, 0);
  lcd.print (luftTemp);
  lcd.setCursor (0, 1);
  lcd.print (F("LuftDruck:"));
  lcd.setCursor (11, 1);
  lcd.print (luftDruck);
  lcd.print (F(" mb"));
  lcd.setCursor (0, 2);
  lcd.print (F("Rel.Druck:"));
  lcd.setCursor (10, 2);
  lcd.print (redLuftDruck);
  lcd.print (F(" mb"));
  lcd.setCursor (0, 3);
  lcd.print (F("Luftfeucht"));
  lcd.setCursor (11, 3);
  lcd.print (luftFeuchte);
  lcd.print (F(" %"));
}
// Mehr Infos: https://arduino-projekte.webnode.at/meine-libraries/luftdruck-luftfeuchtesensor-bme280/


Code:
/*Dieses Programm zeigt, wie Sie die Bibliothek SFE_BMP180 zum Lesen des
  Bosch BMP180 Luftdrucksensor einrichten.
  https://www.sparkfun.com/products/11824

  Wie die meisten Drucksensoren misst der BMP180 den absoluten Druck.
  Dies ist der tatsächliche Umgebungsdruck, der vom Gerät gemessen wird
  und variieren sowohl mit der Höhe als auch mit dem Wetter.

  Vor einer Druckmessung müssen Sie eine Temperaturmessung durchführen.
  Dies geschieht mit startTemperature () und getTemperature ().
  Das Ergebnis ist in Grad C.

  Sobald Sie eine Temperaturmessung durchgeführt haben, können Sie eine Druckmessung durchführen.
  Dies geschieht mit startPressure () und getPressure ().
  Das Ergebnis wird in Millibar (mb) oder Hektopascal (hPa) angegeben.
  ###########################################################################​##################
  Wahrscheinlich werden Sie Wettermuster überwachen wollen.
  Entfernen Sie die Auswirkungen der Höhe. Dies wird Messwerte erzeugen, die können
  mit den veröffentlichten Druckwerten von anderen Orten verglichen werden.
  Verwenden Sie dazu die Funktion sealevel (). Sie müssen zur Verfügung stellen
  die bekannte Höhe, in der der Druck gemessen wurde.

  Wenn Sie die Höhe messen möchten, müssen Sie den Druck kennen
  in einer Grundlinie Höhe. Dies kann der durchschnittliche Druck auf Meereshöhe sein oder
  in diesem Fall eine vorherige Druckmessung in Ihrer Höhe
  Nachfolgende Höhenmessungen sind + oder - die anfängliche Basislinie.
  Dies geschieht mit der Funktion height ().
  ###########################################################################​##################
  Hardware-Verbindungen:

  - (GND) to GND
  + (VDD) to 3.3V

  (ACHTUNG: + nicht an 5V anschließen, da sonst der Sensor beschädigt wird!)

   Sie müssen auch die I2C-Pins (SCL und SDA) mit Ihrem verbinden
   Arduino. Die Pins sind auf verschiedenen Arduinos unterschiedlich:

   Beliebige Arduino-Pins mit der Bezeichnung: SDA SCL
   Uno, Redboard, Pro: A4 A5
   Mega2560, Fällig: 20 21
   Leonardo: 2 3

   Lassen Sie den IO (VDDIO) -Pin unverbunden. Dieser Pin dient zum Anschließen
   das BMP180 zu Systemen mit niedrigeren Logikniveaus wie 1.8V

   Habe Spaß! -Ihre Freunde bei SparkFun.

   Die Bibliothek SFE_BMP180 verwendet Gleitkommagleichungen, die von der
   Wetterstation-Datenlogger-Projekt: http://wmrx00.sourceforge.net/

   In unserem Beispielcode wird die Lizenz "beerware" verwendet. Du kannst alles machen
   Sie mögen mit diesem Code. Nein, wirklich nichts. Wenn Sie es nützlich finden,
   kauf mir eines Tages ein Bier.

   V10 Mike Grusin, SparkFun Electronics 24.10.2013
   V1.1.2-Updates für Arduino 1.6.4 5/2015
*/

// Ihr Programm muss diese Bibliothek und die Wire-Bibliothek enthalten.
// (Wire ist eine Standardbibliothek, die in Arduino enthalten ist.):

#include <SFE_BMP180.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h> // LCD Display
LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);

// Sie müssen ein SFE_BMP180-Objekt mit dem Namen "pressure" erstellen:

SFE_BMP180 pressure
;

#define ALTITUDE 599.0 // Höhe in Metern von meinem Wohnsitz in Penzberg
// ----------------------------------------------------------------------------------------------------------
void setup()
{
  Serial.begin(9600);
  Serial.println("REBOOT");

  lcd.begin(20, 4);
  lcd.backlight();
  lcd.clear();

  // Initialisieren Sie den Sensor (es ist wichtig, dass die Kalibrierungswerte im Gerät gespeichert werden).

  if (pressure.begin())
    Serial.println("BMP180 Initialisierung ist erfolgt");
  else
  {
    // Ups, irgendwas ist schief gelaufen, das ist normalerweise ein Verbindungsproblem.
    // In den Kommentaren oben in dieser Skizze finden Sie die richtigen Verbindungen.

    Serial.println("BMP180 init Fehler\n\n");
    while (1); // Pause für immer.
  }
}
// ---------------------------------------------------------------------------------------------------------
void loop()
{
  char status;
  double T, P, p0, a;

  // Schleife hier, um alle 10 Sekunden die Druckwerte abzurufen.

  // Wenn Sie einen meeresspiegelkompensierten Druck wünschen, wie er in Wetterberichten verwendet wird,
  // müssen sie die Höhe kennen, in der Ihre Messungen durchgeführt werden.
  // In diesem Programm verwenden wir eine Konstante mit dem Namen ALTITUDE:

  Serial.println();
  Serial.print("Vergleichs Höhe: ");
  Serial.print(ALTITUDE, 0);
  Serial.print(" Meter, ");
  Serial.println();

  // Wenn Sie die Höhe und nicht den Druck messen möchten, benötigen Sie stattdessen
  // um einen bekannten Basisdruck bereitzustellen. Dies ist am Ende des Programm´s dargestellt.

  // Sie müssen zuerst eine Temperaturmessung durchführen, um eine Druckmessung durchzuführen.

  // Temperaturmessung starten:
  // Wenn die Anforderung erfolgreich ist, wird die Anzahl der zu wartenden ms zurückgegeben.
  // Wenn die Anfrage nicht erfolgreich ist, wird 0 zurückgegeben.

  status = pressure.startTemperature();
  if (status != 0)
  {
    // Warten Sie, bis die Messung abgeschlossen ist:
    delay(status);

    // Abrufen der abgeschlossenen Temperaturmessung:
    // Beachten Sie, dass der Messwert in der Variablen T gespeichert ist.
    // Funktion gibt 1 zurück, wenn erfolgreich, 0, wenn fehlgeschlagen.

    status = pressure.getTemperature(T);
    if (status != 0)
    {
      // Messung ausgeben:
      Serial.print(F("Temperatur: "));
      Serial.print(T, 2);
      Serial.print(F(" Grad C"));
      Serial.println();
      lcd.setCursor (0, 0);
      lcd.print (F("Temperatur: "));
      lcd.setCursor (12, 0);
      lcd.print (T, 2);


      // Druckmessung starten:
      // Der Parameter ist die Oversampling-Einstellung von 0 bis 3 (höchste Auflösung, längste Wartezeit).
      // Wenn die Anforderung erfolgreich ist, wird die Anzahl der zu wartenden ms zurückgegeben.
      // Wenn die Anfrage nicht erfolgreich ist, wird 0 zurückgegeben.

      status = pressure.startPressure(3);
      if (status != 0)
      {
        // Warten Sie, bis die Messung abgeschlossen ist:
        delay(status);

        // Abrufen der abgeschlossenen Druckmessung:
        // Beachten Sie, dass der Messwert in der Variablen P gespeichert ist.
        // Beachten Sie auch, dass für die Funktion die vorherige Temperaturmessung (T) erforderlich ist.
        // (Wenn die Temperatur stabil ist, können Sie eine Temperaturmessung für eine Reihe von Druckmessungen durchführen.)
        // Funktion gibt 1 zurück, wenn erfolgreich, 0, wenn fehlgeschlagen.

        status = pressure.getPressure(P, T);
        if (status != 0)
        {
          // Messung ausgeben:
          Serial.print("absoluter Druck: ");
          Serial.print(P, 2);
          Serial.print(" mb, ");
          Serial.print(P * 0.0295333727, 2);
          Serial.println(" inHg");
          lcd.setCursor (0, 1);
          lcd.print (F("Absol.Dr.:"));
          lcd.setCursor (11, 1);
          lcd.print (P, 2);
          lcd.print (F(" mb"));

          // Der Drucksensor gibt den absoluten Druck zurück, der sich mit der Höhe ändert.
          // Um die Höheneffekte zu beseitigen, verwenden Sie die Sealevel-Funktion und Ihre aktuelle Höhe.
          // Diese Nummer wird häufig in Wetterberichten verwendet.
          // Parameter: P = absoluter Druck in mb, ALTITUDE = aktuelle Höhe in m.
          // Ergebnis: p0 = Meeresspiegelausgleichsdruck in mb

          p0 = pressure.sealevel(P, ALTITUDE); // Wir sind bei 599 Metern (Boulder, CO)
          Serial.print("relativer (Meeresspiegel-) Druck: ");
          Serial.print(p0, 2);
          Serial.print(" mb, ");
          Serial.print(p0 * 0.0295333727, 2);
          Serial.println(" inHg");
          lcd.setCursor (0, 2);
          lcd.print (F("Rel.Druck:"));
          lcd.setCursor (10, 2);
          lcd.print (p0, 2);
          lcd.print (F(" mb"));

          // Auf der anderen Seite, wenn Sie Ihre Höhe aus dem Druckmesswert bestimmen möchten,
          // Verwenden Sie die Höhenfunktion zusammen mit einem Basisdruck (Meeresspiegel oder anderem).
          // Parameter: P = Absolutdruck in mb, p0 = Basisdruck in mb.
          // Ergebnis: a = Höhe in m.

          a = pressure.altitude(P, p0);
          Serial.print("Berechnete Höhe: ");
          Serial.print(a, 0);
          Serial.print(" Meter, ");
          Serial.println();
          lcd.setCursor (0, 3);
          lcd.print (F("Ber.Hoehe:"));
          lcd.setCursor (11, 3);
          lcd.print (a, 0);
          lcd.print (F(" Meter"));
        }
        else Serial.println("Fehler beim Abrufen der Druckmessung \ n");
      }
      else Serial.println("Fehler beim Starten der Druckmessung \ n");
    }
    else Serial.println("Fehler beim Abrufen der Temperaturmessung \ n");
  }
  else Serial.println("Fehler beim Starten der Temperaturmessung \ n");

  delay(1000);  // Pause für eine Minute.
}

Ich habe übrigens die Ausgabe auf ein LCD Display geändert, dass ich mit einer Powerbank das ganze Zeug, Mega / Sensor / LCD Display, betreiben kann, und somit auch mal damit die Treppen rauf und runter kann, also die Höhe so knapp 10 Meter ändern kann.

https://www.youtube.com/watch?v=Fnzn85oWM_Q
Hier was zum Thema Deutsche Politik Angry
Und hier zum Thema richtige Politik Big Grin
Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  MobaTools Library: neue Version 2.0 läuft auch auf ESP8266 MicroBahner 7 635 07.02.2020 11:30
Letzter Beitrag: AnjinSan
  LEXUS2K/ssd1306 Library Rockman 2 302 04.01.2020 17:06
Letzter Beitrag: hotsystems
  Mp3-Modul library Problem Prospekteur 1 668 28.09.2019 20:30
Letzter Beitrag: hotsystems
  Zwei Schalter welche sich beinflussen Twix 14 1.668 19.07.2019 20:00
Letzter Beitrag: Tommy56
  EEPROM.h Library Rockman 2 1.167 22.06.2019 18:16
Letzter Beitrag: Rockman
Lightbulb Neues Library für 2.0" TFT-Display ILI9225 mit Arduino Due MartinZ 0 896 20.06.2019 09:59
Letzter Beitrag: MartinZ
  Library HF-FAN 8 1.804 13.03.2019 22:06
Letzter Beitrag: rkuehle
  Die Library von LittleVGL Batucada 9 1.682 15.02.2019 16:52
Letzter Beitrag: Batucada
  Library math.h Tellen 10 3.667 15.02.2019 15:04
Letzter Beitrag: Tommy56
  Welche Macro-Statements gibt es? torsten_156 1 1.477 10.12.2018 20:15
Letzter Beitrag: Tommy56

Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste