Übersetzungen dieser Seite:

BME280 Temperatur, Luftfeuchtigkeit und Luftdruck Sensor

BME280

Fast kompatibel zum Luftdrucksensor BMP280 der Firma Bosch, gibt der BME280 neben dem gemessenen Luftdruck und der Umgebungstemperatur auch die Luftfeuchtigkeit als Rohwert aus, wobei der Sensor wahlweise über I2C- oder über SPI-Schnittstelle angeschlossen werden kann. Mit Hilfe von im Sensor gespeicherten Kompensationsparametern kann dann aus den Rohwerten der Luftdruck am Standort (Stationsniveauluftdruck), die Luftfeuchte und die Umgebungstemperatur ermittelt werden.

Technische Daten des BME280

  • Abmaße (L x B) – 14mm x 10mm
  • Betriebsspannung – 1.8V bis 5V
  • Schnittstelle – I2C
  • Messbereiche
    • Temperatur -40°C bis +85°C
    • Luftdruck 300hPa bis 1100hPa ±0.25%
    • Luftfeuchtigkeit ±3% relative Genauigkeit, ≤ 2% Hysterese

Anschluss

Der Sensor BME280 verfügt über 4 Pins welche wiefolgt an den Arduino Merkurboard angeschlossen werden:

BME280 → Merkurboard

VIN → 3.3V

GND → GND

SCL → SCL PIN D8

SDA → SDA PIN A9

Schaltung

I2C-Adresse:

Die Standard-I2C-Adresse des abgebildeten Moduls ist 0x76 und kann mit einer Lötbrücke am Modul auf 0x77 geändert werden. Das habe ich aber nicht ausprobiert! Laut Bosch-Datenblatt ist der SDO-Pin am Sensor das Adressbit 0 der I2C-Adresse, der entweder auf GND oder auf VDD gelegt werden muss.

BME280 Bibliothek

Für den Sensor gibt es eine Bibliothek von Adafruit.

Quellcode

/*
 * Sample arduino sketch using contiki features.
 * We turn the LED off 
 * We allow read the moisture sensor
 * Unfortunately sleeping for long times in loop() isn't currently
 * possible, something turns off the CPU (including PWM outputs) if a
 * Proto-Thread is taking too long. We need to find out how to sleep in
 * a Contiki-compatible way.
 * Note that for a normal arduino sketch you won't have to include any
 * of the contiki-specific files here, the sketch should just work.
 */

#include <Wire.h>
#include <Adafruit_Sensor.h>
#include <Adafruit_BME280.h>

extern "C" {
#include "arduino-process.h"
#include "rest-engine.h"

extern resource_t res_bmptemp, res_bmphum, res_bmppress,res_bmpatm,res_bmpalt, res_battery;

float bmptemp;
float bmppress;
float bmpatm;
float bmpalt;
float bmphum;
char  bmptemp_s[8];
char  bmppress_s[10];
char  bmpatm_s[8];
char  bmpalt_s[8];
char  bmphum_s[8];

#define SEALEVELPRESSURE_HPA (1013.25)
Adafruit_BME280 bme; // I2C

#define LED_PIN 4
}

void setup (void)
{
    // switch off the led
    pinMode(LED_PIN, OUTPUT);
    digitalWrite(LED_PIN, HIGH);

    bool status;
    
    // default settings
    status = bme.begin(0x77);
    if (!status) {
        printf("Could not find a valid BME280 sensor, check wiring!");
    }
    // init coap resourcen
    rest_init_engine ();
    #pragma GCC diagnostic ignored "-Wwrite-strings"
    rest_activate_resource (&res_bmptemp, "s/temp");
    rest_activate_resource (&res_bmppress, "s/press");
    rest_activate_resource (&res_bmpatm, "s/atm");
    rest_activate_resource (&res_bmpalt, "s/alt");
    rest_activate_resource (&res_battery, "s/battery");
    #pragma GCC diagnostic pop
}

// at project-conf.h
// LOOP_INTERVAL		(10 * CLOCK_SECOND)
void loop (void)
{
    bmptemp = bme.readTemperature();
    bmppress = bme.readPressure();
    bmpalt = bme.readAltitude(SEALEVELPRESSURE_HPA);
    bmpatm = bme.readPressure() / 100.0F;
    bmphum = bme.readHumidity();
    
    dtostrf(bmptemp , 0, 2, bmptemp_s );   
    dtostrf(bmppress , 0, 2, bmppress_s );
    dtostrf(bmpalt , 0, 2, bmpalt_s );
    dtostrf(bmpatm , 0, 2, bmpatm_s );
    dtostrf(bmphum , 0, 2, bmphum_s );
         
// Debug Print
//    printf("Temp: %s\n",bmptemp_s);
//    printf("Press: %s\n",bmppress_s);
//    printf("Altitude: %s\n",bmpalt_s);
//    printf("atm: %s\n",bmpatm_s);
//    printf("hum: %s\n",bmphum_s);   
}

Hier findest du das Beispielprojekt auf Ardu-Contiki:

https://github.com/osdomotics/ardu-contiki/blob/master/examples/arduino-bme280/sketch.pde

Bezugsquelle


de/tutorials/arduino-contiki/bme280.txt · Zuletzt geändert: 2019/04/11 13:00 von harald42