BMP388 je přesný barometrický senzor, který měří:
- atmosférický tlak
- teplotu
- nadmořskou výšku (výpočtem z tlaku)
Díky vysoké přesnosti se používá např. v dronech, navigaci nebo meteostanicích.

Hlavní vlastnosti (přepsáno z tabulky)
- rozsah tlaku: přibližně 300 až 1250 hPa
- teplotní rozsah: −40 až +85 °C
- komunikace: I2C nebo SPI
- spotřeba: cca 3.4 µA při 1 Hz
- absolutní přesnost tlaku: ±0.5 hPa
- relativní přesnost: ±0.08 hPa
- šum: velmi nízký (cca 0.03 Pa)
- maximální vzorkování: až 200 Hz
Pinout (převedeno do seznamu)
- VIN → napájení 5 V
- 3V3 → napájení 3.3 V
- GND → zem
- SCK → hodinový signál (I2C SCL nebo SPI SCK)
- SDI → data (I2C SDA nebo SPI MOSI)
- SDO → SPI MISO
- CS → chip select (SPI)
- INT → interrupt pin

Zapojení k ESP32
I2C (nejjednodušší)
- SDA → GPIO 21
- SCL → GPIO 22

SPI (alternativa)
- SCK → GPIO 18
- MOSI → GPIO 23
- MISO → GPIO 19
- CS → GPIO 5

Co potřebuješ
- ESP32
- BMP388 modul
- breadboard + vodiče
- Arduino IDE + knihovny
Instalace knihoven
Nainstaluj:
- Adafruit BMP3XX
- Adafruit Unified Sensor
(v Arduino IDE přes Library Manager)


Základní kód – měření tlaku, teploty a výšky
bmp.cpp
1#include <Wire.h>
2#include <SPI.h>
3#include <Adafruit_Sensor.h>
4#include "Adafruit_BMP3XX.h"
5
6Adafruit_BMP3XX bmp;
7
8#define SEALEVELPRESSURE_HPA (1013.25)
9
10void setup() {
11 Serial.begin(115200);
12
13 if (!bmp.begin_I2C()) {
14 Serial.println("BMP388 nenalezen!");
15 while (1);
16 }
17
18 bmp.setTemperatureOversampling(BMP3_OVERSAMPLING_8X);
19 bmp.setPressureOversampling(BMP3_OVERSAMPLING_4X);
20 bmp.setIIRFilterCoeff(BMP3_IIR_FILTER_COEFF_3);
21 bmp.setOutputDataRate(BMP3_ODR_50_HZ);
22}
23
24void loop() {
25 if (!bmp.performReading()) {
26 Serial.println("Chyba cteni!");
27 return;
28 }
29
30 Serial.print("Teplota = ");
31 Serial.print(bmp.temperature);
32 Serial.println(" °C");
33
34 Serial.print("Tlak = ");
35 Serial.print(bmp.pressure / 100.0);
36 Serial.println(" hPa");
37
38 Serial.print("Nadmorska vyska = ");
39 Serial.print(bmp.readAltitude(SEALEVELPRESSURE_HPA));
40 Serial.println(" m");
41
42 Serial.println();
43 delay(2000);
44}Jak to funguje
bmp.performReading()načte nová databmp.temperaturevrací teplotubmp.pressurevrací tlakbmp.readAltitude()spočítá výšku podle tlaku
Důležité:
- proměnná
SEALEVELPRESSURE_HPAmusí odpovídat aktuálnímu tlaku u tebe - jinak bude výška nepřesná
Web server s ESP32 + BMP388
ESP32 může data zobrazit i v prohlížeči:
Co to dělá
- připojí se na WiFi
- zobrazí tlak, teplotu a výšku
- data se automaticky aktualizují
Potřebné knihovny
- ESPAsyncWebServer
- AsyncTCP
Kompletní kód (zjednodušený, funkční)
bmp.cpp
1#include <WiFi.h>
2#include <Wire.h>
3#include <Adafruit_Sensor.h>
4#include <Adafruit_BMP3XX.h>
5#include <ESPAsyncWebServer.h>
6
7const char* ssid = "TVE_WIFI";
8const char* password = "HESLO";
9
10Adafruit_BMP3XX bmp;
11AsyncWebServer server(80);
12
13#define SEALEVELPRESSURE_HPA (1013.25)
14
15void setup() {
16 Serial.begin(115200);
17
18 if (!bmp.begin_I2C()) {
19 Serial.println("BMP388 chyba");
20 while (1);
21 }
22
23 WiFi.begin(ssid, password);
24 while (WiFi.status() != WL_CONNECTED) {
25 delay(1000);
26 Serial.println("Pripojovani...");
27 }
28
29 Serial.println(WiFi.localIP());
30
31 server.on("/", HTTP_GET, [](AsyncWebServerRequest *request){
32 if (!bmp.performReading()) return;
33
34 String html = "<html><body>";
35 html += "Teplota: " + String(bmp.temperature) + " C<br>";
36 html += "Tlak: " + String(bmp.pressure / 100.0) + " hPa<br>";
37 html += "Vyska: " + String(bmp.readAltitude(SEALEVELPRESSURE_HPA)) + " m";
38 html += "</body></html>";
39
40 request->send(200, "text/html", html);
41 });
42
43 server.begin();
44}
45
46void loop() {}
Shrnutí
BMP388 je přesný a univerzální senzor:
- měří tlak a teplotu
- umožňuje výpočet nadmořské výšky
- funguje přes I2C i SPI
- vhodný pro IoT, drony i meteostanice
