In diesem Tutorial möchten wir Euch heute zeigen, wie man den BME280 Temperatursensor einfach und schnell anschließen kann. Der BME280 Sensor ist ein günstiger Sensor, der sowohl Temperatur und Luftfeuchtigkeit, wie auch den Luftdruck messen kann. Mit diesem Sensor lassen sich eine Vielzahl von Projekten realisieren, beispielsweise eine eigene Wetter-Station oder ein Netzwerk zur Messung von Raumtemperatur und Luftfeuchtigkeit.
Technische Daten des BME280
- Abmessung (L x B) – 14mm x 10mm
- Eingangsspannung – 1.8V bis 5V
- Schnittstellen – I2C
- Der Messbereich:
- Temperatur -40°C bis +85°C
- Luftdruck 300hPa bis 1100hPa ±0.25%
- Luftfeuchtigkeit ±3% relative Genauigkeit, ≤ 2% Hysterese
Anschluss per I2C
Der BME280 ist ein Sensor, der über eine sogenannte I2C Schnittstelle verfügt. Diese Schnittstelle hat 4 Anschlüsse. In diesem Beispiel zeigen wir, wie man den BME280 an einem Arduino richtig anschließt.
BME280 Sensor | Pin am wArduino UNO |
---|---|
VIN | 5V |
GND | GND |
SCL | analoger PIN A4 |
SDA | analoger PIN A5 |
Schaltung mit Arduino Nano und BME280
Nun wollen wir eine kleine Schaltung mit einem Arduino Nano realisieren. Die Ausgabe der aktuellen Werte wie Temperatur, Luftfeuchtigkeit und Luftdruck soll hier einfach über die serielle Schnittstelle erfolgen. Zur Realisierung dieser kleinen Schaltung benötigen wir die folgenden Komponenten:
- 1x Arduino Nano
- 1x Sensor BME280
- 4x Breadboard Kabel
- 1x Breadboard 400 Pin
BME280 Bibliothek
Um den Sensor schnell und einfach anzusteuern, empfehlen wir die Bibliothek von http://cactus.io. Hier muss nur die I2C Adresse „0x76“ auskommentiert werden.
Quellcode
Beispiel zur Bibliothek von http://cactus.io
Den nachfolgenden Quellcode habe wir von der Seite http://cactus.io/hookups/sensors/barometric/bme280/hookup-arduino-to-bme280-barometric-pressure-sensor kopiert und deutsche Texte verpasst.
Das Beispiel erzeugt auf dem seriellen Monitor eine Ausgabe.
[sourcecode language=”C”]
/***************************************************************************
This is a library for the BME280 humidity, temperature & pressure sensor
Designed specifically to work with the BME280 Breakout board
—-> http://www.adafruit.com/products/2650
This sketch only supports the I2C bus for connection.
***************************************************************************/
#include <Wire.h>
#include "cactus_io_BME280_I2C.h"
BME280_I2C bme(0x76); // I2C using address 0x76
void setup() {
Serial.begin(9600);
Serial.println("BME280 Luftdruck, Luftfeuchtigkeit, Temperatur Sensor | cactus.io");
Serial.println("—————————————————————–");
Serial.println("");
if (!bme.begin()) {
Serial.println("Es konnte kein BME280 Sensor gefunden werden!");
Serial.println("Bitte überprüfen Sie die Verkabelung!");
while (1);
}
bme.setTempCal(-1);
Serial.println("Luftdruck\tLuftfeuchtigkeit\t\tTemperatur(Celsius)\t\tTemperatur(Fahrenheit)");
}
void loop() {
bme.readSensor();
Serial.print(bme.getPressure_MB()); Serial.print("\t\t"); // Pressure in millibars
Serial.print(bme.getHumidity()); Serial.print("%\t\t\t\t");
Serial.print(bme.getTemperature_C()); Serial.print(" °C\t\t\t");
Serial.print(bme.getTemperature_F()); Serial.println(" °F");
delay(2000);
}
[/sourcecode]
Beispiel – Ausgabe auf einem 0,9″ OLED Display
Für diese Schaltung benötigst du:
- einen Taster
- einen 10KOhm Widerstand
- ein 0,91″ OLED Display
- einen Arduino Nano
- 12 Breadboard Kabel
- ein 400 PIN Breadboard
- ein BME280 Sensor
Hallo, danke für die ausführliche Anleitung. Bei mir hat das leider nicht geklappt.
Bin jedoch mit einer anderen Bibliothek zum Ziel gekommen, zumindest für Temp und Druck, worauf es mir ankam. Hab VCC, CSB und SDO mit 3,3V-PIN verbunden, SDA auf PIN A4 und SDO an PIN A5 (GND natürlich auf GND). Hierzu meinen Code:
#include
#include
Adafruit_BMP280 bmp;
void setup() {
Serial.begin(9600);
bmp.begin();
pinMode(A4, INPUT);
pinMode(A5, INPUT);
}
void loop() {
Serial.print(“Temperatur: “);
Serial.print(bmp.readTemperature());
Serial.println( ” °C”);
Serial.print(“Druck: “);
Serial.print(bmp.readPressure());
Serial.println( ” Pa”);
Serial.println();
delay(2000);
}
Hope it helps, wenn noch jemand Probleme hatte.