Dnes se podíváme na senzor BME280, který v jednom malém čidle zvládne měřit teplotu a vlhkost vzduchu a atmosférický tlak. Na první pohled vypadá jako obyčejné teplotní čidlo, ale díky měření tlaku se dá použít i jako jednoduchý základ domácí meteostanice.
Použil jsem kabelovou verzi od LaskaKitu, kde je senzor umístěný v pouzdře s držákem a připojený metrovým kabelem. To je praktické hlavně proto, že se čidlo nemusí nacházet přímo u Arduina nebo jiného mikrokontroléru, kde by ho mohlo ovlivňovat teplo z elektroniky. Modul komunikuje přes I2C sběrnici a podle prodejce zvládá napájení 3,3 až 5 V.

Co BME280 umí
BME280 je digitální senzor, který měří tři veličiny:
- teplotu
- relativní vlhkost vzduchu
- atmosférický tlak
Podle údajů výrobce pracuje samotný čip v rozsahu tlaku 300 až 1100 hPa a teploty -40 až +85 °C. Podporuje komunikaci přes I2C i SPI, i když u této kabelové verze se používá I2C.
Specifikace:
- Provozní rozsah:
- Tlak: 300-1100hPa
- Vlhkost: 0 až 100%
- Teplota: -40 až +85° C
- Rozlišení:
- Teplota: 0.01° C
- Vlhkost: 0,008%
- Tlak: 0.18Pa
- Přesnost:
- Teplota: + 1° C
- Vlhkost: + 3%
- Tlak: + -1hPa
- Délka kabelu: 100cm
- Rozměry: ø16x121mm
BME280 není jen teploměr
Na rozdíl od jednodušších čidel typu DHT11 nebo DHT22 má BME280 navíc měření atmosférického tlaku. To je zajímavé hlavně u meteostanice, protože změny tlaku často souvisí se změnou počasí.
Samotná teplota je u BME280 spíš doplňková hodnota. Čip ji používá i pro kompenzaci měření tlaku a vlhkosti. Pokud má být teplota co nejpřesnější, je dobré čidlo umístit dál od zdrojů tepla, třeba od stabilizátoru napětí, ESP32, Arduina nebo displeje.
Kabelová verze se na to hodí dobře, protože čidlo může být vyvedené mimo krabičku s elektronikou.
Zapojení
Zapojení je jednoduché, protože senzor komunikuje přes I2C. Stačí napájení a dva datové vodiče.
| Senzor BME280 | Arduino UNO / Nano | Arduino Mega | ESP32 |
|---|---|---|---|
| VCC – červená | 5 V | 5 V | 3,3 V |
| GND – černá | GND | GND | GND |
| SDA – žlutá | A4 | 20 | většinou GPIO 21 |
| SCL – zelená | A5 | 21 | většinou GPIO 22 |
U ESP32 záleží na konkrétní desce a programu, protože I2C piny se dají v kódu nastavit. U Arduina UNO, Nano a Mega jsou I2C piny dané pevně.
Barvy vodičů bych si před zapojením radši ověřil podle popisu u konkrétního kusu nebo podle potisku na modulu. U kabelových senzorů není dobré spoléhat jen na barvy.

Instalace knihovny
V Arduino IDE stačí otevřít Manažera knihoven a nainstalovat knihovnu Adafruit BME280 Library.
Pokud si knihovna vyžádá instalaci dalších závislostí, nainstalujeme je také.
Zkušební program
#include <Wire.h>
#include <Adafruit_Sensor.h>
#include <Adafruit_BME280.h>
Adafruit_BME280 bme;
void setup() {
Serial.begin(9600);
delay(1000);
Serial.println("Test senzoru BME280");
bool status = bme.begin(0x76);
if (!status) {
Serial.println("Senzor nebyl nalezen na adrese 0x76, zkousim 0x77...");
status = bme.begin(0x77);
}
if (!status) {
Serial.println("BME280 se nepodarilo najit.");
Serial.println("Zkontroluj zapojeni, napajeni a I2C adresu.");
while (1);
}
Serial.println("BME280 nalezen.");
}
void loop() {
float teplota = bme.readTemperature();
float tlak = bme.readPressure() / 100.0F;
float vlhkost = bme.readHumidity();
Serial.print("Teplota: ");
Serial.print(teplota);
Serial.println(" °C");
Serial.print("Vlhkost: ");
Serial.print(vlhkost);
Serial.println(" %");
Serial.print("Tlak: ");
Serial.print(tlak);
Serial.println(" hPa");
Serial.println("----------------------");
delay(2000);
}
V programu se zkouší nejdřív I2C adresa 0x76 a pokud senzor neodpoví, zkusí se ještě 0x77. To se hodí, protože BME280 se v praxi může vyskytovat na obou adresách. U některých modulů je výchozí adresa 0x77.
První spuštění
Po nahrání programu do Arduina otevřeme sériový monitor a nastavíme rychlost 9600 baudů. Pokud je vše správně zapojené, začnou se vypisovat tři hodnoty: teplota, vlhkost a tlak.

Hodnoty se budou pomalu měnit podle okolních podmínek. Teplota nebude reagovat úplně okamžitě, protože čidlo i pouzdro mají nějakou tepelnou setrvačnost. Vlhkost naopak reaguje docela pěkně třeba při fouknutí na senzor.
Jednoduché pokusy
Pro další pokusy se hodí upravený program, který vypisuje naměřené hodnoty ve formátu vhodném pro sériový plotr v Arduino IDE. Ten je pak umí rovnou zpracovat a zobrazit jako graf.
#include <Wire.h>
#include <Adafruit_Sensor.h>
#include <Adafruit_BME280.h>
Adafruit_BME280 bme;
void setup() {
Serial.begin(9600);
delay(1000);
bool status = bme.begin(0x76);
if (!status) {
status = bme.begin(0x77);
}
if (!status) {
Serial.println("BME280_nenalezen:0");
while (1);
}
}
void loop() {
float teplota = bme.readTemperature();
float vlhkost = bme.readHumidity();
float tlak = bme.readPressure() / 100.0F; // tlak v hPa
Serial.print("Teplota:");
Serial.print(teplota);
Serial.print("\tVlhkost:");
Serial.print(vlhkost);
Serial.print("\tTlak_hPa:");
Serial.print(tlak);
Serial.print("\tTlak_minus_1000:");
Serial.println(tlak - 1000.0);
delay(1000);
}
Jako první pokus se dá sledovat běžná pokojová teplota a vlhkost. Stačí nechat senzor pár minut ležet na stole a počkat, až se hodnoty ustálí.

Druhý pokus může být reakce na vlhkost. Když na senzor opatrně dýchneme, vlhkost rychle vyskočí nahoru a potom zase postupně klesá. Tady je dobře vidět, že senzor opravdu neměří jen teplotu.

Další zajímavý pokus je sledování tlaku v čase. Tlak se během dne mění podle počasí, takže je dobré hodnotu logovat delší dobu. Krátkodobě se dá změna tlaku pozorovat i při přesunu mezi patry domu, ale tam už se bavíme o menších rozdílech a výsledek záleží na nastavení, šumu a okolních podmínkách.

Odhad nadmořské výšky
Z tlaku se dá přibližně vypočítat i nadmořská výška. Není to ale tak jednoduché, že by senzor přímo věděl, jak vysoko se nachází. Výpočet závisí na aktuálním tlaku přepočteném na hladinu moře. Pokud zadáme špatnou referenční hodnotu, bude špatně i vypočtená výška.
#include <Wire.h>
#include <Adafruit_Sensor.h>
#include <Adafruit_BME280.h>
#define SEALEVELPRESSURE_HPA 1016.5 //aktuální tlak přepočtený na hladinu moře - nutno upravit
Adafruit_BME280 bme;
void setup() {
Serial.begin(9600);
delay(1000);
Serial.println("Test BME280 - teplota, vlhkost, tlak a nadmorska vyska");
bool status = bme.begin(0x76);
if (!status) {
Serial.println("Senzor nebyl nalezen na adrese 0x76, zkousim 0x77...");
status = bme.begin(0x77);
}
if (!status) {
Serial.println("BME280 se nepodarilo najit.");
Serial.println("Zkontroluj zapojeni, napajeni a I2C adresu.");
while (1);
}
Serial.println("BME280 nalezen.");
Serial.println();
}
void loop() {
float teplota = bme.readTemperature();
float vlhkost = bme.readHumidity();
float tlak = bme.readPressure() / 100.0F; // prevod z Pa na hPa
float vyska = bme.readAltitude(SEALEVELPRESSURE_HPA);
Serial.print("Teplota: ");
Serial.print(teplota);
Serial.println(" °C");
Serial.print("Vlhkost: ");
Serial.print(vlhkost);
Serial.println(" %");
Serial.print("Tlak: ");
Serial.print(tlak);
Serial.println(" hPa");
Serial.print("Orientacni nadmorska vyska: ");
Serial.print(vyska);
Serial.println(" m");
Serial.println("-----------------------------");
delay(2000);
}
Proto bych tuhle funkci bral spíš jako zajímavost nebo orientační měření, ne jako přesný výškoměr.

Podle mapy jsem zhruba ve výšce 444 m n. m., takže je vidět, že výpočet je opravdu jen orientační.
Na co si dát pozor
Senzor bych neumísťoval přímo nad zahřívající se elektroniku. Pokud bude zavřený ve stejné krabičce jako mikrokontrolér, regulátor napětí nebo displej, může ukazovat vyšší teplotu než okolní vzduch.
Také bych ho nebral jako venkovní čidlo do deště, pokud není vhodně chráněný. BME280 měří vlhkost vzduchu, ale to neznamená, že mu bude dělat dobře voda, kondenzace nebo nečistoty. Pro venkovní použití by bylo potřeba vhodné krytí, které pustí vzduch k senzoru, ale ochrání ho před přímím deštěm.
Závěr
BME280 je hodně šikovný senzor pro každého, kdo si chce postavit jednoduchou meteostanici nebo jen sledovat podmínky v místnosti. Oproti obyčejným teplotním čidlům přidává měření vlhkosti a hlavně atmosférického tlaku, díky čemuž už z něj jde získat mnohem zajímavější data.
Kabelová verze je praktická hlavně tím, že se dá čidlo umístit dál od elektroniky a tím omezit ovlivnění měření teplem z desky. Pro domácí bastlení, Arduino projekty, logování počasí nebo porovnávání podmínek v různých místnostech je to podle mě velmi použitelný senzor.
Tento senzor zakoupíte na Laskakit.cz přímý odkaz je ZDE.
