3.5 Sensoren

Bosch BMP280 Druck und Temperatursensor mit I2C und SPI Schnittstelle

[Infoseite zum Sensor Pressure sensor BMP280] [Bosch Datenblatt] [MezData Links zu Sensoren]

Anschluss ans Board
Anschluss ans Board
Adapterplatine und Sensor

Ich nutze PB8 und PB9 für I2C. PB10 und PB11 könnten auch I2C werden jedoch als USART für das Bluetooth-Modul benötigt.

I2C Schnittstelle auf Seriell ausgeben

#include <Wire.h>
#include <Adafruit_BMP280.h>

Adafruit_BMP280 bmp; // I2C

void setup() {
  Serial.begin(9600);
  while ( !Serial ) delay(100);   // wait for native usb
  Serial.println(F("BMP280 test"));
  unsigned status;
  status = bmp.begin(0x76); // Adafruit nimmt sonst 0x77 als Geräteadresse an
  if (!status) {
    Serial.println(F("Kein Sensor erkannt."));
    while (1) delay(10);
  }

  bmp.setSampling(Adafruit_BMP280::MODE_NORMAL,     /* Operating Mode. */
                  Adafruit_BMP280::SAMPLING_X2,     /* Temp. oversampling */
                  Adafruit_BMP280::SAMPLING_X16,    /* Pressure oversampling */
                  Adafruit_BMP280::FILTER_X16,      /* Filtering. */
                  Adafruit_BMP280::STANDBY_MS_500); /* Standby time. */
}

void loop() {
    Serial.print(F("Temperature = "));
    Serial.print(bmp.readTemperature());
    Serial.println(" *C");

    Serial.print(F("Pressure = "));
    Serial.print(bmp.readPressure());
    Serial.println(" Pa");

    Serial.print(F("Approx altitude = "));
    Serial.print(bmp.readAltitude(1013.25)); // Adjusted to local forecast!
    Serial.println(" m"); 

    Serial.println();
    delay(2000);
}

I2C auf LCD ausgeben

#include <Wire.h>
#include <LiquidCrystal_PCF8574.h>
#include <Adafruit_BMP280.h>
LiquidCrystal_PCF8574 lcd (0x27); // LCD-Adresse auf 0x27

Adafruit_BMP280 bmp; // I2C

void setup() {
  unsigned status;
  status = bmp.begin(0x76); // Adafruit nimmt sonst 0x77 als Adresse
  lcd.begin(16, 2); // initialize the lcd
  lcd.clear();
  lcd.setBacklight(255);
  if (!status) {
    lcd.print(F("Kein Sensor erkannt."));
    while (1) delay(10);
  }

  bmp.setSampling(Adafruit_BMP280::MODE_NORMAL,     /* Operating Mode. */
                  Adafruit_BMP280::SAMPLING_X2,     /* Temp. oversampling */
                  Adafruit_BMP280::SAMPLING_X16,    /* Pressure oversampling */
                  Adafruit_BMP280::FILTER_X16,      /* Filtering. */
                  Adafruit_BMP280::STANDBY_MS_500); /* Standby time. */
}

void loop() {
  lcd.clear();
  lcd.setCursor(0,0); // erstes Zeichen, erste Zeile
  lcd.print(F("Temp(C):  "));
  lcd.print(bmp.readTemperature());
  lcd.setCursor(0,1); // erstes Zeichen, zweite Zeile
  lcd.print(F("p(hPa) : "));
  lcd.print(bmp.readPressure()/100); // Ausgabe in HektoPascal
  delay(2000);
}

SPI Schnittstelle

#include <SPI.h>
#include <Adafruit_BMP280.h>

#define BMP_SCK  (PB13)
#define BMP_MISO (PB14)
#define BMP_MOSI (PB15)
#define BMP_CS   (PB12) // ChipSelect oder SS = SlaveSelect

Adafruit_BMP280 bmp(BMP_CS, BMP_MOSI, BMP_MISO,  BMP_SCK);

void setup() {
  Serial.begin(9600);
  while ( !Serial ) delay(100);   // wait for native usb
  Serial.println(F("BMP280 test"));
  unsigned status;
  status = bmp.begin();
  if (!status) {
    Serial.println(F("Kein Sensor erkannt."));
    while (1) delay(10);
  }

  bmp.setSampling(Adafruit_BMP280::MODE_NORMAL,     /* Operating Mode. */
                  Adafruit_BMP280::SAMPLING_X2,     /* Temp. oversampling */
                  Adafruit_BMP280::SAMPLING_X16,    /* Pressure oversampling */
                  Adafruit_BMP280::FILTER_X16,      /* Filtering. */
                  Adafruit_BMP280::STANDBY_MS_500); /* Standby time. */
}

void loop() {
    Serial.print(F("Temperature = "));
    Serial.print(bmp.readTemperature());
    Serial.println(" *C");

    Serial.print(F("Pressure = "));
    Serial.print(bmp.readPressure());
    Serial.println(" Pa");

    Serial.print(F("Approx altitude = "));
    Serial.print(bmp.readAltitude(1013.25)); // Adjusted to local forecast!
    Serial.println(" m"); 

    Serial.println();
    delay(2000);
}