Zpět na články

ESP32 + BMP388 – kompletní návod

BMP388 s ESP32 umožňuje přesně měřit tlak, teplotu a odhadnout nadmořskou výšku.

ESP32 + BMP388 – kompletní návod

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.

ESP32 Blog image

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
ESP32 Blog image

Zapojení k ESP32

I2C (nejjednodušší)

  • SDA → GPIO 21
  • SCL → GPIO 22
ESP32 Blog image

SPI (alternativa)

  • SCK → GPIO 18
  • MOSI → GPIO 23
  • MISO → GPIO 19
  • CS → GPIO 5
ESP32 Blog image

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)

ESP32 Blog image
ESP32 Blog image

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á data
  • bmp.temperature vrací teplotu
  • bmp.pressure vrací tlak
  • bmp.readAltitude() spočítá výšku podle tlaku

Důležité:

  • proměnná SEALEVELPRESSURE_HPA musí 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() {}
ESP32 Blog image

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

Nakupte svoje ESP32 ještě dnes!

Doprava Zásilkovnou za 89 Kč
Platba dobírkou
Vrácení do 30 dnů
Omezené zásoby - skladem

ESP32-S3 DevKit USB-C

Kompletní vývojová deska s USB-C

240MHz dvoujádrový
WiFi 802.11 b/g/n
Bluetooth 4.2 + BLE
4MB Flash paměť
520KB SRAM
38 GPIO pinů
209za kus

Množstevní slevy:

1
Celkem
209
Objednat

Bezpečná platba při převzetí zásilky nebo online platba přes Comgate, a.s.