Der BME280 ist ein Temperatur- Luftfeuchte- und Luftdrucksensor. Neben der Messung der Luftfeuchte mit ±3% Genauigkeit und der einer Temperaturmessung von ±1.0°C Genauigkeit stellt er auch einen Messwert für den Luftdruck mit ±1 hPa absoluter Genauigkeit zur Verfügung. Damit kann die Höhe auf ±1 Meter bestimmt werden.
Die Betriebsspannung für den BME280 ist 3,3V. Die von uns verwendete Ausführung GYBMEP verfügt über Pegelwandlung und Spannungsregler und ist für 3,3V und 5V verwendbar. Er ist auch alternativ zum DHT einsetzbar, wird über den I2C Bus angesteuert und belegt damit keine weiteren Ein-/Ausgänge des ATmega. Der BME 280 ist auf zwei verschiedene I2C Adressen (0x76, 0x77) einstellbar. Die Adresse wird auf der Platine über eine Lötbrücke konfiguriert. Damit können zwei BME280 in einem System angeschlossen werden.
Nach der Umstellung mit einem Ohmmeter kontrollieren, dass zwsichem dem VCC/VIN- und GND- Anschluss keine Kurzschluss besteht.
Der Messwert Luftdruck wird in den beelogger-Sketchen unterstützt. Dort ist auch eine Anpassung (Sensor- bzw. Höhenkorrektur) des Messwerts parametrierbar. Als Vergleichswert können Messwerte offizieller örtlicher Wettermessstationen herangezogen werden.
Bezug
Der Sensor BME280 Ausführung GYBMEP ist kompatibel mit allen beelogger Varianten! |
Bild | Bezugsquelle | Preis ca. | Suchbegriffe* | Bemerkungen |
eBay | 5,00€ | BME280 GYBMEP | Für den beelogger bitte keine anderen Versionen des BME280 benutzen |
Beschaltung
Ein Betrieb des BME280 Ausführung GYBMEP ist mit allen beeogger-Varianten möglich.
BME280 | |
3,3V oder 5V | VCC |
GND | GND |
A4 / SDA | SDA |
A5 / SCL | SCL |
Libraries
<Wire.h>
– in der Arduino-Software bereits enthalten
beelogger_bme280 basiernd auf:
<Adafruit_BME280.h>
– https://github.com/adafruit/Adafruit_BME280_Library
Die Versionen für den beelogger sind im Library-Paket enthalten.
Progammcode:
Für den BME280 steht ein Testprogrammcode zur Verfügung. Der BME280 wird im Sketch zyklisch abgefragt und die drei Messwerte über den seriellen Monitor ausgegeben. Der Testprogrammcode zeigt auch, wie Codeanteile zur Ergänzung in die diversen beelogger-Sketche integriert werden kann. Neuere Sketche enthalten die notwendigen Programmanteile bereits.
Hinweis:
Der BME280 kann mit der I2C-Adresse 0x76 oder 0x77 vorkonfiguriert sein.
Die Umstellung der Adresse erfolgt je nach Modul über unterschiedliche Merthoden.
Wenn nur ein BME280 im System konfiguriert ist, diese Adresse des Sensors in der beelogger_config.h im Feld ‚BME280_Adresse[2]‘ eintragen.
Hier die beiden Möglichkeiten:
uint8_t BME280_adresse[2] = {0x76, 0x77};
oder:
uint8_t BME280_adresse[2] = {0x77, 0x76};
/* (C) 2018 R.Schick / Thorsten Gurzan - beelogger.de This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ // beelogger.de - Arduino Datenlogger für Imker // Erläuterungen dieses Programmcodes unter https://beelogger.de #include "Wire.h" #define Anzahl_Sensoren_BME280 1 // Mögliche Werte: '0','1','2' #define Korrektur_Luftdruck 0.0 // Korrekturwert um Abweichungen zu offiziellen Wetterstationen auszugleichen //---------------------------------------------------------------- // Konfiguration BME280 - Temperatur und Luftfeuchte //---------------------------------------------------------------- #include "Adafruit_Sensor.h" #include "Adafruit_BME280.h" uint8_t BME280_adresse[2] = {0x76, 0x77}; #define SDA A4 // I2C Daten #define SCL A5 // I2C Clock #define SEALEVELPRESSURE_HPA (1013.25f) //---------------------------------------------------------------- const float No_Val = 999.99; float Temp[2] = {No_Val, No_Val}; float Feuchte[2] = {No_Val, No_Val}; float L_Druck[2] = {No_Val, No_Val}; // Für beelogger-SMD: Aktivierung der Stromversorgung für Sensoren, Module und DS3231 #define Power_Pin 4 void setup() { Serial.begin(9600); Serial.println("BME280 Test 13.04.2021"); Serial.println(); digitalWrite(Power_Pin, HIGH); pinMode(Power_Pin, OUTPUT); delay(1000); } void loop() { Serial.println(F("BME280- hole Werte: ")); delay(500); Sensor_BME280(); for (byte i = 0; i < Anzahl_Sensoren_BME280; i++) { Serial.print(F("BME280 Nr.: ")); Serial.println(i + 1); if (Temp[i] == No_Val) { Serial.println(F("BME280- Fehler ")); } else { Serial.print(F("Temperatur: ")); Serial.println(Temp[i]); Serial.print(F("Luftfeuchte: ")); Serial.println(Feuchte[i]); Serial.print(F("Luftdruck: ")); L_Druck[i] = L_Druck[i] / 100.0; L_Druck[i] = L_Druck[i] + Korrektur_Luftdruck; Serial.println(L_Druck[i]); } Serial.flush(); } delay(2000); } //---------------------------------------------------------------- // Funktion BME280 - Temperatur und Luftfeuchte //---------------------------------------------------------------- void Sensor_BME280() { if (Anzahl_Sensoren_BME280 > 0) { float Temperatur_BME; float Luftfeuchte_BME; float Luftdruck_BME; boolean check; Adafruit_BME280 my_bme; for (byte i = 0; i < Anzahl_Sensoren_BME280; i++) { check = my_bme.begin(BME280_adresse[i]); // I2C Adresse delay (100); // time to get system ready if (check) { // if bme ok Temperatur_BME = my_bme.readTemperature(); Luftfeuchte_BME = my_bme.readHumidity(); Luftdruck_BME = my_bme.readPressure(); } else { Temperatur_BME = No_Val; Luftfeuchte_BME = No_Val; Luftdruck_BME = No_Val; } if (i == 0) { // erster BME Temp[0] = Temperatur_BME; // Hier kann die Zuordnung der Sensoren geändert werden Feuchte[0] = Luftfeuchte_BME; // Hier kann die Zuordnung der Sensoren geändert werden L_Druck[0] = Luftdruck_BME; } if (i == 1) { // zweiter BME Temp[1] = Temperatur_BME; // Hier kann die Zuordnung der Sensoren geändert werden Feuchte[1] = Luftfeuchte_BME; // Hier kann die Zuordnung der Sensoren geändert werden L_Druck[1] = Luftdruck_BME; } } } } //----------------------------------------------------------------
Ausgabe des seriellen Monitors (9600 baud):
BME280 Test BME280- hole Werte: BME280 Nr.: 1 Temperatur: 18.20 Luftfeuchte: 72.30 Luftdruck: 1021.00 BME280 Nr.: 2 Temperatur: 20.30 Luftfeuchte: 71.50 Luftdruck: 1022.00
Testprogrammcode herunterladen
Der Programmcode zum Messbetrieb für den Arduino Datenlogger mit Stockwaage für Imker ist für ATmega328 oder STM32Fxyz für unterschiedliche Konfigurationen mit bis zu vier Waagen pro System verfügbar.