beelogger

Temperatur-/ Luftfeuchte-/ Luftdrucksensor (BME280)

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

*Einkaufstipps

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.

Das hier gezeigte BME280-Modul hat auf einer Seite zwei goldfarbene Lötpads. Zwei sind davon im Layout verbunden.
Zum Umstellen der I2C-Adresse die Verbindung zwischen den beiden Pads auftrennen und das Mittlere zum anderen Pad mit einer Lötbrücke verbinden.

Der Sensor BME 280 hat ein quadratisches Gehäuse mit einer Öffnung mittig.

Im Gegensatz zu einem BMP 280, der ein rechteckiges Gehäuse hat. Er liefert keinen Feuchtewert.

 

 

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.