meta data for this page
  •  

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Next revision
Previous revision
sensor:bmp_bme [2026/04/21 20:47] – created - external edit 127.0.0.1sensor:bmp_bme [2026/05/12 21:09] (current) – [BME688 Temperature/Humidity/Barometric Pressure/Gas (VOC) Module] vamsan
Line 2: Line 2:
 Bosch BMP sensors primarily measure barometric pressure and temperature, while Bosch BME sensors are more comprehensive, adding humidity and, in newer models, gas/air quality sensing. Bosch BMP sensors primarily measure barometric pressure and temperature, while Bosch BME sensors are more comprehensive, adding humidity and, in newer models, gas/air quality sensing.
  
-|< 100% >| +[[:sensor:bmp_bme#bme180|BMP180 (GY-68) Temperature/Barometric Pressure Module]] \\ 
-^Type of \\ measurement ^Model^Power \\ voltage ^Measurement, range, accuracy^Communication^Note| +[[:sensor:bmp_bme#bme280|BME280 (GY-BME280) Temperature/Humidity/Barometric Pressure module]] \\  
-|{{anchor:bme280}}{{:sensor:t.png|Temperature measuring}}{{:sensor:h.png|Humidity measuring}}{{:sensor:p.png|Air-press measuring}}<color blue> \\ Temperature \\ Humidity \\ Air pressure</color>|Bosch \\ **BME280** {{ :sensor:bme_280.png?100 |BME280}}|**3.3 V** \\ (1.71 .. 3.6V)|Temperature measurement range: -40 .. +80 °C\\ Temperature measurement accuracy: ±0.5°C (-40..85)\\ Humidity measurement range: 0..100% RH\\ Humidity measurement accuracy: ±3% \\ Air pressure Range: 300 .. 1100 hPa \\ Air pressure accuracy: ±0.25%|[[com:basic_i2c|I²C]] \\ default addr.: **0x76/77** \\ [[com:basic_spi|SPI]]|-| +[[:sensor:bmp_bme#bmp280|BMP280 (HW-611) Temperature/Barometric Pressure module]] \\  
-|{{anchor:bme680}}{{:sensor:t.png|Temperature measuring}}{{:sensor:h.png|Humidity measuring}}{{:sensor:p.png|Air-pressure measuring}}<color blue> \\ Temperature \\ Humidity \\ Air pressure</color>|Bosch \\ **BME680** {{ :sensor:bme_680.png?100 |BME680}}|**3.3 V** \\ (1.71 .. 3.6V)|Temperature measurement range: -40 .. +80 °C\\ Temperature measurement accuracy: ±1.5°C\\ Humidity measurement range: 0..100% RH\\ Humidity measurement accuracy: ±3% \\ Air pressure Range: 300 .. 1100 hPa \\ Air pressure accuracy: ±0.25%|[[com:basic_i2c|I²C]] \\ default addr.: **0x76/77** \\ [[com:basic_spi|SPI]]|Direct output of IAQ: Index for Air Quality| +[[:sensor:bmp_bme#bme680|BME680 Temperature/Humidity/Barometric Pressure/Gas (VOCModule]] \\  
-|{{anchor:bmp180}}{{:sensor:t.png|Temperature measuring}}{{:sensor:p.png|Air-pressure measuring}}<color blue> \\ Temperature \\ Air-pressure</color>|Bosch \\ **BMP180** {{ :sensor:bmp_180.png?100 |BMP180}}|**3.3 V** \\ (1.62 .. 3.6V)|Temperature measurement range: -40 .. +85 °C\\ Temperature measurement accuracy: ±1.5°C\\ Air pressure Range: 4.35PSI .. 15.95PSI (30kPa .. 110kPa) \\ Air pressure accuracy: ±2%|[[com:basic_i2c|I²C]] \\ default addr.: **0x77** (fix)|Maximum Pressure: 145.04PSI (1000kPa) \\ Temperature resolution: 0.1 °C \\ Pressure resolution: 1 Pa| +[[:sensor:bmp_bme#bme688|BME688 Temperature/Humidity/Barometric Pressure/Gas (VOCwith AI Module]] \\ 
-|{{anchor:bmp280}}{{:sensor:t.png|Temperature measuring}}{{:sensor:p.png|Air-press measuring}}<color blue> \\ Temperature \\ Air-pressure</color>|Bosch \\ **BMP280** {{ :sensor:bmp_280.png?100 |BMP280}}|**3.3 V** \\ (1.71 .. 3.6V)|Temperature measurement range: -40 .. +85 °C\\ Temperature measurement accuracy: ±1.5°C\\ Air pressure Range: 4.35PSI .. 15.95PSI (30kPa .. 110kPa)\\ Air pressure accuracy: ±2%|[[com:basic_i2c|I²C]] \\ default addr.: **0x76** \\ [[com:basic_spi|SPI]]|Maximum Pressure: 290.08PSI (2000kPa) \\ Temperature resolution: 0.01 °C \\ Pressure resolution: 0.16 Pa| +
- +
-The BME/BMP sensors can be integrated with the [[https://tasmota.github.io/docs/About/|Tasmota]] system. For more details, see here: +
- +
-  * BMP085, BMP180 and BMP280 sensors: https://tasmota.github.io/docs/BME280/ +
-  * BME280: https://tasmota.github.io/docs/BME280/ +
-  * BME680: https://tasmota.github.io/docs/BME680/ +
- +
- +
- +
-===== BME/BMP Modules =====+
  
 ==== BMP180 Temperature/Barometric Pressure Module ==== ==== BMP180 Temperature/Barometric Pressure Module ====
 +{{anchor:bmp180}}{{anchor:gy_68}}
 {{ :sensor:modul_gy68.png?150|GY-68}} {{ :sensor:modul_gy68.png?150|GY-68}}
-{{anchor:gy_68}}{{:sensor:t.png|Temperature measuring}}{{:sensor:p.png|Air-press measuring}}+{{:sensor:t.png|Temperature measuring}}{{:sensor:p.png|Air-press measuring}}
  
 Another name for the **GY-68** module is a breakout board that integrates the [[#bmp180|Bosch BMP180]] sensor to measure atmospheric pressure, temperature, and altitude. The two terms refer to different components of the same product for hobbyist use: the BMP180 is the sensing chip on the GY-68 printed-circuit board. Another name for the **GY-68** module is a breakout board that integrates the [[#bmp180|Bosch BMP180]] sensor to measure atmospheric pressure, temperature, and altitude. The two terms refer to different components of the same product for hobbyist use: the BMP180 is the sensing chip on the GY-68 printed-circuit board.
Line 40: Line 30:
  
 ==== BME280 Temperature/Humidity/Barometric Pressure module ==== ==== BME280 Temperature/Humidity/Barometric Pressure module ====
 +{{anchor:bme280}}{{anchor:gy_bme280}}
 {{ :sensor:modul_gy_bme280.png?150|GY-BME280}} {{ :sensor:modul_gy_bme280.png?150|GY-BME280}}
-{{anchor:gy_bme280}}{{:sensor:t.png|Temperature measuring}}{{:sensor:h.png|Humidity measuring}}{{:sensor:p.png|Air-press measuring}}+{{:sensor:t.png|Temperature measuring}}{{:sensor:h.png|Humidity measuring}}{{:sensor:p.png|Air-press measuring}}
  
 Another name, **GY-BME280**, is a sensor module that integrates the [[#bme280|Bosch BME280]] environmental sensor chip and measures temperature, humidity, and atmospheric pressure. It is an upgrade to the BMP280 and is widely used in hobbyist electronics and IoT projects for comprehensive environmental monitoring. Another name, **GY-BME280**, is a sensor module that integrates the [[#bme280|Bosch BME280]] environmental sensor chip and measures temperature, humidity, and atmospheric pressure. It is an upgrade to the BMP280 and is widely used in hobbyist electronics and IoT projects for comprehensive environmental monitoring.
Line 61: Line 52:
  
 ==== BMP280 (HW-611) Temperature/Barometric Pressure module ==== ==== BMP280 (HW-611) Temperature/Barometric Pressure module ====
 +{{anchor:bmp280}}{{anchor:gy_bmp280}}
 {{ :sensor:gy_bm.png?150|GY-BMP280}} {{ :sensor:gy_bm.png?150|GY-BMP280}}
-{{anchor:gy_bmp280}}{{:sensor:t.png|Temperature measuring}}{{:sensor:p.png|Air-press measuring}} +{{:sensor:t.png|Temperature measuring}}{{:sensor:p.png|Air-press measuring}} 
  
 The GY-BMP280-3.3 is a sensor module featuring the [[#bmp280|Bosch BMP280]] environmental sensor chip, which precisely measures atmospheric pressure and temperature. This module operates from a 3.3V DC power supply, making it a low-power solution for applications such as weather monitoring, altimetry, and navigation systems.  The GY-BMP280-3.3 is a sensor module featuring the [[#bmp280|Bosch BMP280]] environmental sensor chip, which precisely measures atmospheric pressure and temperature. This module operates from a 3.3V DC power supply, making it a low-power solution for applications such as weather monitoring, altimetry, and navigation systems. 
Line 83: Line 75:
 *: //To set the I²C address to **0x77**, connect pin 6 of the module (SDO) to Vcc, typically the 3.3V supply, and connect pin 5 of the module (CSB) to Vcc to select the I²C interface.// *: //To set the I²C address to **0x77**, connect pin 6 of the module (SDO) to Vcc, typically the 3.3V supply, and connect pin 5 of the module (CSB) to Vcc to select the I²C interface.//
  
-==== GY-BMP280-3.3 Pinout ====+=== GY-BMP280-3.3 Pinout ===
  
 ^Pin^Name^I²C Function^SPI Function \\ (4-wire)^Description| ^Pin^Name^I²C Function^SPI Function \\ (4-wire)^Description|
Line 95: Line 87:
 {{page>:tarhal}} {{page>:tarhal}}
  
-==== GY-BMP280/HW-611 Arduino code ==== +==== BME680 Temperature/Humidity/Barometric Pressure/Gas (VOC) Module ==== 
-<code c> +{{anchor:bme680}}
-// include +
-#include <Wire.h> +
-#include <Adafruit_Sensor.h> +
-#include <Adafruit_BMP280.h> // BMP280/HW-611 +
- +
-// variable +
-float bmp_280_temp; +
-float bmp_280_press; +
-bool bmp_280_ready; +
-String unitID = "abcd"; +
- +
-// init +
-Adafruit_BMP280 bmp_280; // BMP280/HW-611 +
- +
-// call block +
-void bmp_280_function () { +
-  bmp_280_temp = bmp_280.readTemperature(); +
-  bmp_280_press = bmp_280.readPressure() / 100.0F; +
-  Serial.print("unitID: "); Serial.print(unitID); Serial.print("; bmp_280_temp: "); Serial.print(bmp_280_temp); Serial.println(" ; unit: C"); +
-  Serial.print("unitID: "); Serial.print(unitID); Serial.print("; bmp_280_press: "); Serial.print(bmp_280_press); Serial.println(" ; unit: hPa"); +
-+
- +
- +
-void setup() { +
-  Serial.begin(115200); +
-    // unit works? +
-    bmp_280_ready = bmp_280.begin(0x76);  +
-    if (!bmp_280_ready) { +
-    Serial.println("BMP280/HW-611 Sensor not found"); +
-    } else { +
- Serial.println("BMP280/HW-611 Sensor works"); +
-+
-  } +
- +
-void loop() { +
-  // call all units with 2 sec raster +
-  static unsigned long lastTime = 0; +
-  if (millis() - lastTime > 2000) { +
-    lastTime = millis(); +
-    // units call, if works +
-    if (bmp_280_ready) {bmp_280_function ();} +
-  } +
-+
-</code> +
-==== CJMCU-680 Temperature/Humidity/Barometric Pressure/Gas (VOC) Module ====+
 {{ :sensor:cjmcu_680_1.png?150|CJMCU-680}} {{ :sensor:cjmcu_680_1.png?150|CJMCU-680}}
 {{anchor:gy_bmp680}}{{:sensor:t.png|Temperature measuring}}{{:sensor:h.png|Humidity measuring}}{{:sensor:p.png|Air-press measuring}}{{:sensor:g.png|Gas Sensor}}  {{anchor:gy_bmp680}}{{:sensor:t.png|Temperature measuring}}{{:sensor:h.png|Humidity measuring}}{{:sensor:p.png|Air-press measuring}}{{:sensor:g.png|Gas Sensor}} 
  
-The **CJMCU-680** is an environmental sensor breakout board based on the Bosch BME680 chip. It is a versatile //"4-in-1"// module designed for DIY electronics and IoT projects. +The BME680 (//CJMCU-680//) is an environmental sensor breakout board based on the Bosch BME680 chip. It is a versatile //"4-in-1"// module designed for DIY electronics and IoT projects. 
  
-**Core Capabilities**+=== Core Capabilities === 
  
 The module measures four distinct environmental parameters:  The module measures four distinct environmental parameters: 
Line 166: Line 113:
  
  
-**Sensor Performance**+=== Sensor Performance === 
  
 ^Parameter^Measurement Range^Accuracy / Tolerance| ^Parameter^Measurement Range^Accuracy / Tolerance|
Line 180: Line 127:
   * **Humidity Sensor:** ~8 seconds (τ0-63%)   * **Humidity Sensor:** ~8 seconds (τ0-63%)
  
-==== CJMCU-680 Pinout ====+=== Comparison Table: BME680 vs. BME688 === 
 +^Feature^BME680^BME688| 
 +^Primary Focus|General Air Quality (IAQ)|Specific Gas Detection & AI| 
 +^Gas Sensor Type|MOX (Metal Oxide)|Enhanced MOX with Gas Scanner 
 +^AI Integration|None (Software-based IAQ only)|Integrated AI support (BME AI-Studio)| 
 +^Gas Detection|Broad VOCs (Volatile Organic Compounds)|VOCs + VSCs (Volatile Sulfur Compounds)| 
 +^Gas resistance range|Standard|Extended (for better discrimination)| 
 +^Humidity Stability|Moderate cross-sensitivity (~15-25% error)|High stability (<5% error in high humidity)| 
 +^Software Support|Basic BSEC library|BSEC + BME AI-Studio| 
 +^Replacement Type|N/A|Backward compatible "//Drop-in//" replacement| 
 + 
 +=== CJMCU-680 Pinout ===
 The standard CJMCU-680 module uses the following pin arrangement:  The standard CJMCU-680 module uses the following pin arrangement: 
  
Line 191: Line 149:
 ^6|CS|Chip Select for SPI. Pulling this high or leaving it disconnected defaults the module to I²C mode| ^6|CS|Chip Select for SPI. Pulling this high or leaving it disconnected defaults the module to I²C mode|
  
-==== Arduino wiring ====+=== Controller wiring ===
   * SCL: A5   * SCL: A5
   * GND: GND   * GND: GND
   * SDA: A4   * SDA: A4
   * Vdd: **3.3V** (or **5V** if your breakout board has a regulator).   * Vdd: **3.3V** (or **5V** if your breakout board has a regulator).
-==== Arduino code ==== 
-Install the Adafruit BME680 Library (this will also prompt you to install the Adafruit Unified Sensor and Adafruit BME680 Library, which you need) 
-<code c> 
-/* 
- * BME680 Sensor - Arduino Uno/Nano 
- * Connection: I2C 
- * Data: Temperature, Humidity, Pressure, Gas (Air Quality) 
- * 
- * Required Libraries (Arduino Library Manager): 
-   - "Adafruit BME680 Library" by Adafruit 
-   - "Adafruit Unified Sensor" by Adafruit 
- * 
- * Wiring (I2C): 
-   BME680  -->  Arduino Uno/Nano 
-   VCC     -->  3.3V (or 5V depending on module) 
-   GND     -->  GND 
-   SDA     -->  A4 
-   SCL     -->  A5 
- */ 
  
-#include <Wire.h> +=== Source codes ===
-#include <Adafruit_Sensor.h> +
-#include <Adafruit_BME680.h>+
  
-// Sea level pressure for altitude calculation (adjust to your location in hPa!+Arduino C : [[code:arduino_modul_bme680|Read BME680 Temperature/Humidity/Barometric Pressure/Gas (VOCModule]] \\ 
-#define SEA_LEVEL_PRESSURE_HPA 1013.25+RP2040_ETH_Modul: [[code:rp2040_eth_modul_bme680|Read BME 680/688 sensor data]] \\ 
 +RP2040_ETH_Modul: [[code:rp2040_eth_modul_bme680_modbus|Read BME 680/688 sensor data and store in Modbus input registers]] \\
  
-// Create BME680 object (I2C address: 0x76 or 0x77) 
-Adafruit_BME680 bme; 
  
-void setup() { +==== BME688 Temperature/Humidity/Barometric Pressure/Gas (VOCModule ==== 
-  Serial.begin(9600); +{:sensor:bme688.png?140|BME688 Temperature/Humidity/Barometric Pressure/Gas (VOCModule}} 
-  while (!Serial);  // Wait until Serial is ready +{{anchor:bme688}
- +{{anchor:gy_bmp680}}{{:sensor:t.png|Temperature measuring}}{{:sensor:h.png|Humidity measuring}}{{:sensor:p.png|Air-press measuring}}{{:sensor:g.png|Gas Sensor}} 
-  Serial.println(F("============================")); +
-  Serial.println(F("  BME680 Sensor - Arduino   ")); +
-  Serial.println(F("============================")); +
- +
-  // Initialize sensor +
-  if (!bme.begin(0x76)) { +
-    Serial.println(F("ERRORBME680 not found!")); +
-    Serial.println(F("Please check your wiring.")); +
-    Serial.println(F("Trying address 0x77 ...")); +
- +
-    if (!bme.begin(0x77)) { +
-      Serial.println(F("ERRORBME680 not found on 0x77 either!")); +
-      while (1); // Halt program +
-    +
-  } +
- +
-  Serial.println(F("BME680 found successfully!")); +
- +
-  // Configure sensor settings +
-  bme.setTemperatureOversampling(BME680_OS_8X); +
-  bme.setHumidityOversampling(BME680_OS_2X); +
-  bme.setPressureOversampling(BME680_OS_4X); +
-  bme.setIIRFilterSize(BME680_FILTER_SIZE_3); +
-  bme.setGasHeater(320, 150); // Heater temperature320°C, Heating time150ms +
- +
-  Serial.println(F("Sensor configured. Starting measurements...\n")); +
-  delay(2000); +
-} +
- +
-void loop() { +
-  // Start measurement and wait for result +
-  if (!bme.performReading()) { +
-    Serial.println(F("ERRORReading failed!")); +
-    delay(2000); +
-    return; +
-  } +
- +
-  // Print sensor values +
-  Serial.println(F("----------------------------")); +
- +
-  // Temperature +
-  Serial.print(F("Temperature     ")); +
-  Serial.print(bme.temperature, 1); +
-  Serial.println(F(" °C")); +
- +
-  // Humidity +
-  Serial.print(F("Humidity        ")); +
-  Serial.print(bme.humidity, 1); +
-  Serial.println(F(" %"));+
  
-  // Pressure +The Bosch **BME688** is an advanced 4-in-1 environmental sensor that integrates high-accuracy measurements for temperature, humidity, barometric pressure, and gas. It is the first sensor of its kind to include //Artificial Intelligence// (**AI**featuresenabling it to detect specific gas compositions, such as //Volatile Organic Compounds// (**VOCs**and //Volatile Sulfur Compounds// (**VSCs**).
-  Serial.print(F("Pressure:         ")); +
-  Serial.print(bme.pressure / 100.02)+
-  Serial.println(F(" hPa"));+
  
-  // Altitude above sea level (calculated) +|<100%>| 
-  Serial.print(F("Altitude (approx): ")); +^Parameter^Measurement Range^Accuracy^| 
-  Serial.print(bme.readAltitude(SEA_LEVEL_PRESSURE_HPA), 1); +^Temperature-40°C to +85°C|±0.5°C to ±1.0°C| 
-  Serial.println(F(" m"));+^Humidity|0 to 100%|RH±3% RH| 
 +^Pressure|300 to 1100 hPa|±0.6 hPa (absolute)
 +^Gas Sensor|VOC, VSC, CO, H₂|AI-trained classification|
  
-  // Gas resistance (air quality) +**Hardware & Communication**
-  Serial.print(F("Gas Resistance:   ")); +
-  Serial.print(bme.gas_resistance / 1000.0, 2); +
-  Serial.println(F(" kΩ"));+
  
-  // Air quality as simple rating +  * **Operating Voltage:** 1.71V to 3.6V (**typically 3.3V**). 
-  Serial.print(F("Air Quality:      ")); +  * **Interface:** Supports both I²C (up to 3.4 MHzand SPI (up to 10 MHz)
-  Serial.println(getAirQuality(bme.gas_resistance));+  * **I²C Addresses:** The default is **0x76** or **0x77**, depending on the SDO pin connection. 
 +  * **Current Consumption:** Ranges from 0.15 µA in sleep mode to 3.9 mA during a standard gas scan.
  
-  Serial.println();+**AI Features (The "Digital Nose")**
  
-  // Wait 3 seconds until next measurement +The BME688's standout feature is its ability to be trained using the BME AI-Studio software. This allows the sensor to: 
-  delay(3000)+  * Recognize unique //"fingerprints"// of different gas mixtures. 
-}+  * Detect bacteria growth or spoiled food by identifying volatile sulfur compounds.  
 +  * Provide an //Indoor Air Quality// (**IAQ**index through the Bosch BSEC software library.
  
-// Simple air quality rating based on gas resistance +{{page>:sensor:bme680_688}}
-String getAirQuality(uint32_t gasResistance) { +
-  uint32_t kOhm = gasResistance / 1000;+
  
-  if (kOhm >300) { +=== Source codes ===
-    return F("Very Good"); +
-  } else if (kOhm >150) { +
-    return F("Good"); +
-  } else if (kOhm >50) { +
-    return F("Moderate"); +
-  } else if (kOhm >10) { +
-    return F("Poor"); +
-  } else { +
-    return F("Very Poor"); +
-  } +
-+
-</code>+
  
 +RP2040_ETH_Modul: [[code:rp2040_eth_modul_bme680|Read BME 680/688 sensor data]] \\
 +RP2040_ETH_Modul: [[code:rp2040_eth_modul_bme680_modbus|Read BME 680/688 sensor data and store in Modbus input registers]] \\
  
  ===== I²C topics on lamaPLC =====  ===== I²C topics on lamaPLC =====
Line 330: Line 203:
 \\ \\
  
-{{tag>BME280 BME680 BMP180 BMP280 HW-611 HW611 Bosch temperature humidity pressure sensor arduino i2c communication CJMCU}}+{{tag>BME280 BME680 BME688 BMP180 BMP280 HW-611 HW611 Bosch temperature humidity pressure sensor arduino i2c communication AI CJMCU Volatile_Organic_Compounds VOCs Volatile_Sulfur_Compounds VSCs IAQ}}
  
 This page has been accessed for: Today: {{counter|today}}, Until now: {{counter|total}} This page has been accessed for: Today: {{counter|today}}, Until now: {{counter|total}}