BME280 to bardzo ciekawy czujnik produkowany przez firmę Bosch. Potrafi mierzyć wilgotność, temperaturę i ciśnienie powietrza z duża dokładnością. Do komunikacji używa SPI lub I2C, zwykle może pracować na napięciach z przedziału od 1,8V do 5,0V. Jak na swoje możliwości jest tani - można go kupić za okolice 15,00zł.
I2C wymaga mniejszej ilości połączeń niż SPI, dlatego preferuję ten sposób podłączania. Wykorzystamy następujące PINy czyjnika:
Domyślny adres czujnika to 0x76, jeżeli potrzebujemy podłączyć dwa czujniki do jednego kontolera to na drugim czujniku należy zewrzeć SDO do VCC, w ten sposób czujnik otrzyma adres 0x77.
Do obsługi tego sensora w Arduino potrzeba będzie biblioteka Adafruit_BME280 i Adafruit Unified Sensor.
Przykładowy kod obsługujący czujnik:
#include <Wire.h>
#include <Adafruit_Sensor.h>
#include <Adafruit_BME280.h>
Adafruit_BME280 bme;
void setup() {
Serial.begin(9600);
while(!Serial); // time to get serial running
Serial.println("Czujnik BME280");
unsigned status;
status = bme.begin(0x76);
if(!status) {
Serial.println("Nie udalo sie polaczyc z czujnikiem");
while(1) delay (1000);
}
}
void loop() {
Serial.print("Temperatura: ");
Serial.print(bme.readTemperature());
Serial.println("*C");
Serial.print("Cisnienie: ");
Serial.print(bme.readPressure() / 100.0F);
Serial.println("hPa");
Serial.print("Wilgotnosc: ");
Serial.print(bme.readHumidity());
Serial.println("%");
Serial.println();
Serial.println();
delay(5000);
}
Poniższy kod obsłuży dwa czujniki na raz:
#include <Wire.h>
#include <Adafruit_Sensor.h>
#include <Adafruit_BME280.h>
Adafruit_BME280 bme76;
Adafruit_BME280 bme77;
void setup() {
Serial.begin(9600);
while(!Serial); // time to get serial running
Serial.println("Czujnik BME280");
unsigned status;
status = bme76.begin(0x76);
if(!status) {
Serial.println("Nie udalo sie polaczyc z czujnikiem 76");
while(1) delay (1000);
}
status = bme77.begin(0x77);
if(!status) {
Serial.println("Nie udalo sie polaczyc z czujnikiem 77");
while(1) delay (1000);
}
}
void loop() {
Serial.print("Temperatura 76: ");
Serial.print(bme76.readTemperature());
Serial.println("*C");
Serial.print("Cisnienie 76: ");
Serial.print(bme76.readPressure() / 100.0F);
Serial.println("hPa");
Serial.print("Wilgotnosc 76: ");
Serial.print(bme76.readHumidity());
Serial.println("%");
Serial.print("Temperatura 77: ");
Serial.print(bme77.readTemperature());
Serial.println("*C");
Serial.print("Cisnienie 77: ");
Serial.print(bme77.readPressure() / 100.0F);
Serial.println("hPa");
Serial.print("Wilgotnosc 77: ");
Serial.print(bme77.readHumidity());
Serial.println("%");
Serial.println();
Serial.println();
delay(5000);
}