BME 280 Sensor
Den BME280 Sensor für Temperatur, Luftdruck und Luftfeuchtigkeit erhält man für den Arduino bereits auf einer kleinen Platine mit etwas Zusatzschaltung montiert. Zum leichteren Anschluß an den Arduino lötet man einfach noch vier Kontaktpfosten in den vorgesehenen Lötbohrungen an. Die Anschlüsse sind für Betriebsspannung Vin, Masse GND und zwei Anschlüsse für die serielle Datenübermittlung SCL und SDA, die der I2C Anschluss zum Arduino sind. Für die Betriebsspannung erhält man oft widersprüchliche Angaben. Mal liest man maximal +3,3V, oder auch +5V, weil ein entsprechender Spannungsregler verbaut sein soll. Auf der sicheren Seite ist man auf jeden Fall mit 3,3V. Die habe ich bei meinem Exemplar auch angeschlossen. SDA habe ich mit A4 und SCL mit A5 an meinem Nano verbunden.
Auf der Rückseite der Platine findet sich ein Baustein 662K, was ein Spannungsregler ist, der aus 5V, 3,3V macht. Das lässt den Schluß zu, dass die Sensorplatine tatsächlich auch an 5V angeschlossen werden kann.
Die Beschriftung auf meiner Sensorplatine ist BME/BMP280. Auf dem Sensor selbst (das ist das kleine silberne viereckige Käferchen auf dem 789 UP steht) konnte ich aber weder BMP280 noch BME280 lesen. Meine Versuche lassen aber den Schluß zu, dass es sich tatsächlich um den BME280 handelt, zumal der Lieferant (AZ-Delivery) in seiner Produktbeschreibung auch BME280 angibt.
Die Inbetriebnahme war ziemlich tricky. Das bin ich aber schon gewohnt, dass die scheinbar kleinsten und einfachsten Sachen oft ihre Tücken haben.
Auf der Suche nach einer passenden Library habe ich mich bei Adafruit umgetan und bin sofort fündig geworden (https://github.com/adafruit/Adafruit_BME280_Library). Library installiert (bzw. als ZIP heruntergeladen und in den Libraryordner kopiert) und das Beispielprogramm in die IDE geladen. Beim Compilieren kam sofort eine Fehlermeldung, dass die Lib Adafruit_Sensor.h nicht gefunden wurde. Sofern man vorher noch nie eine Ardafruit Lib verwendet hat, kann es sein, dass noch die "Adafruit Unified Sensor " nachinstalliert werden muß. Nachdem das erledigt war klappte auch der Compilierungsvorgang ohne Fehlermeldung.
Leider funktionierte der Sensor nicht, bzw. bekam ich keine Werte auf dem seriellen Monitor am PC angezeigt. Also die nächste Library gesucht und installiert. Das war dann die von cactus_io_BME280_I2C von cactus.io Download - BME280 I2C Library . Mit dieser Lib und folgendem Programm bekam ich dann endlich Werte angezeigt.
Dann ahnte ich, warum es wahrscheinlich mit der Adafruit Lib nicht funktionierte. Kurz den Code der Ardafruit Lib angesehen und da war auch schon das Problem gefunden.
Das Beispielprogramm von Ardafruit initialisiert den Sensor einfach mit dem Befehl bmp.begin() , also ohne jegliche Parameterübergabe. In der Lib wird als Standardsensoradresse 0x77 gesetzt, wenn man keine Parameter in begin() einfügt. Nachdem ich dann in den Aufruf BMP.begin(0x76) eingetragen hatte lief es. Es lag also an der Sensoradresse. Der Sensor kann sowohl mit 0X76, als uch mit 0x77 angesprochen werden, sofern man auf der Platine eine kleine Änderung vornimmt. Auf dem Foto sieht man links neben dem Sensor drei Lötpads. Das obere und mittlere Lötpad sind ab Werk per Leiterbahn verbunden, was die Adresse 0x76 setzt. Möchte man auf 0x77 umstellen, muß man die Leiterbahn unterbrechen (mit einem scharfen Messer durchtrennen) und einen Lötklecks zwischen das mittlere und untere Lötpad setzen.
Den BME280 Sensor für Temperatur, Luftdruck und Luftfeuchtigkeit erhält man für den Arduino bereits auf einer kleinen Platine mit etwas Zusatzschaltung montiert. Zum leichteren Anschluß an den Arduino lötet man einfach noch vier Kontaktpfosten in den vorgesehenen Lötbohrungen an. Die Anschlüsse sind für Betriebsspannung Vin, Masse GND und zwei Anschlüsse für die serielle Datenübermittlung SCL und SDA, die der I2C Anschluss zum Arduino sind. Für die Betriebsspannung erhält man oft widersprüchliche Angaben. Mal liest man maximal +3,3V, oder auch +5V, weil ein entsprechender Spannungsregler verbaut sein soll. Auf der sicheren Seite ist man auf jeden Fall mit 3,3V. Die habe ich bei meinem Exemplar auch angeschlossen. SDA habe ich mit A4 und SCL mit A5 an meinem Nano verbunden.
Auf der Rückseite der Platine findet sich ein Baustein 662K, was ein Spannungsregler ist, der aus 5V, 3,3V macht. Das lässt den Schluß zu, dass die Sensorplatine tatsächlich auch an 5V angeschlossen werden kann.
Die Beschriftung auf meiner Sensorplatine ist BME/BMP280. Auf dem Sensor selbst (das ist das kleine silberne viereckige Käferchen auf dem 789 UP steht) konnte ich aber weder BMP280 noch BME280 lesen. Meine Versuche lassen aber den Schluß zu, dass es sich tatsächlich um den BME280 handelt, zumal der Lieferant (AZ-Delivery) in seiner Produktbeschreibung auch BME280 angibt.
Die Inbetriebnahme war ziemlich tricky. Das bin ich aber schon gewohnt, dass die scheinbar kleinsten und einfachsten Sachen oft ihre Tücken haben.
Auf der Suche nach einer passenden Library habe ich mich bei Adafruit umgetan und bin sofort fündig geworden (https://github.com/adafruit/Adafruit_BME280_Library). Library installiert (bzw. als ZIP heruntergeladen und in den Libraryordner kopiert) und das Beispielprogramm in die IDE geladen. Beim Compilieren kam sofort eine Fehlermeldung, dass die Lib Adafruit_Sensor.h nicht gefunden wurde. Sofern man vorher noch nie eine Ardafruit Lib verwendet hat, kann es sein, dass noch die "Adafruit Unified Sensor " nachinstalliert werden muß. Nachdem das erledigt war klappte auch der Compilierungsvorgang ohne Fehlermeldung.
Leider funktionierte der Sensor nicht, bzw. bekam ich keine Werte auf dem seriellen Monitor am PC angezeigt. Also die nächste Library gesucht und installiert. Das war dann die von cactus_io_BME280_I2C von cactus.io Download - BME280 I2C Library . Mit dieser Lib und folgendem Programm bekam ich dann endlich Werte angezeigt.
Code:
#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);
}
Das Beispielprogramm von Ardafruit initialisiert den Sensor einfach mit dem Befehl bmp.begin() , also ohne jegliche Parameterübergabe. In der Lib wird als Standardsensoradresse 0x77 gesetzt, wenn man keine Parameter in begin() einfügt. Nachdem ich dann in den Aufruf BMP.begin(0x76) eingetragen hatte lief es. Es lag also an der Sensoradresse. Der Sensor kann sowohl mit 0X76, als uch mit 0x77 angesprochen werden, sofern man auf der Platine eine kleine Änderung vornimmt. Auf dem Foto sieht man links neben dem Sensor drei Lötpads. Das obere und mittlere Lötpad sind ab Werk per Leiterbahn verbunden, was die Adresse 0x76 setzt. Möchte man auf 0x77 umstellen, muß man die Leiterbahn unterbrechen (mit einem scharfen Messer durchtrennen) und einen Lötklecks zwischen das mittlere und untere Lötpad setzen.
Zuletzt bearbeitet: