meta data for this page
Differences
This shows you the differences between two versions of the page.
| Next revision | Previous revision | ||
| sensor:bmp_bme [2026/04/21 20:47] – created - external edit 127.0.0.1 | sensor: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, | Bosch BMP sensors primarily measure barometric pressure and temperature, | ||
| - | |< 100% >| | + | [[:sensor:bmp_bme# |
| - | ^Type of \\ measurement ^Model^Power \\ voltage ^Measurement, | + | [[:sensor:bmp_bme# |
| - | |{{anchor: | + | [[:sensor:bmp_bme# |
| - | |{{anchor: | + | [[:sensor:bmp_bme# |
| - | |{{anchor: | + | [[:sensor:bmp_bme# |
| - | |{{anchor: | + | |
| - | + | ||
| - | The BME/BMP sensors can be integrated with the [[https:// | + | |
| - | + | ||
| - | * BMP085, BMP180 and BMP280 sensors: https:// | + | |
| - | * BME280: https:// | + | |
| - | * BME680: https:// | + | |
| - | + | ||
| - | + | ||
| - | + | ||
| - | ===== BME/BMP Modules ===== | + | |
| ==== BMP180 Temperature/ | ==== BMP180 Temperature/ | ||
| + | {{anchor: | ||
| {{ : | {{ : | ||
| - | {{anchor: | + | {{: |
| Another name for the **GY-68** module is a breakout board that integrates the [[# | Another name for the **GY-68** module is a breakout board that integrates the [[# | ||
| Line 40: | Line 30: | ||
| ==== BME280 Temperature/ | ==== BME280 Temperature/ | ||
| + | {{anchor: | ||
| {{ : | {{ : | ||
| - | {{anchor: | + | {{: |
| Another name, **GY-BME280**, | Another name, **GY-BME280**, | ||
| Line 61: | Line 52: | ||
| ==== BMP280 (HW-611) Temperature/ | ==== BMP280 (HW-611) Temperature/ | ||
| + | {{anchor: | ||
| {{ : | {{ : | ||
| - | {{anchor: | + | {{: |
| The GY-BMP280-3.3 is a sensor module featuring the [[# | The GY-BMP280-3.3 is a sensor module featuring the [[# | ||
| 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>: | {{page>: | ||
| - | ==== GY-BMP280/ | + | ==== BME680 |
| - | <code c> | + | {{anchor: |
| - | // include | + | |
| - | #include < | + | |
| - | #include < | + | |
| - | #include < | + | |
| - | + | ||
| - | // variable | + | |
| - | float bmp_280_temp; | + | |
| - | float bmp_280_press; | + | |
| - | bool bmp_280_ready; | + | |
| - | String unitID = " | + | |
| - | + | ||
| - | // init | + | |
| - | Adafruit_BMP280 bmp_280; // BMP280/ | + | |
| - | + | ||
| - | // call block | + | |
| - | void bmp_280_function () { | + | |
| - | bmp_280_temp = bmp_280.readTemperature(); | + | |
| - | bmp_280_press = bmp_280.readPressure() / 100.0F; | + | |
| - | Serial.print(" | + | |
| - | Serial.print(" | + | |
| - | } | + | |
| - | + | ||
| - | + | ||
| - | void setup() { | + | |
| - | Serial.begin(115200); | + | |
| - | // unit works? | + | |
| - | bmp_280_ready = bmp_280.begin(0x76); | + | |
| - | if (!bmp_280_ready) { | + | |
| - | Serial.println(" | + | |
| - | } else { | + | |
| - | Serial.println(" | + | |
| - | } | + | |
| - | } | + | |
| - | + | ||
| - | 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 ();} | + | |
| - | } | + | |
| - | } | + | |
| - | </ | + | |
| - | ==== CJMCU-680 | + | |
| {{ : | {{ : | ||
| {{anchor: | {{anchor: | ||
| - | The **CJMCU-680** is an environmental sensor breakout board based on the Bosch BME680 chip. It is a versatile //" | + | The BME680 (//CJMCU-680//) is an environmental sensor breakout board based on the Bosch BME680 chip. It is a versatile //" |
| - | **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/ | ||
| + | |||
| + | === 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 | + | === Controller |
| * 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, | ||
| - | * | ||
| - | * Required Libraries (Arduino Library Manager): | ||
| - | | ||
| - | | ||
| - | * | ||
| - | * Wiring (I2C): | ||
| - | | ||
| - | | ||
| - | | ||
| - | | ||
| - | | ||
| - | */ | ||
| - | #include < | + | === Source codes === |
| - | #include < | + | |
| - | #include < | + | |
| - | // Sea level pressure for altitude calculation | + | Arduino C : [[code: |
| - | #define SEA_LEVEL_PRESSURE_HPA 1013.25 | + | RP2040_ETH_Modul: |
| + | RP2040_ETH_Modul: | ||
| - | // Create BME680 object (I2C address: 0x76 or 0x77) | ||
| - | Adafruit_BME680 bme; | ||
| - | void setup() { | + | ==== BME688 Temperature/ |
| - | Serial.begin(9600); | + | {{ :sensor: |
| - | while (!Serial); | + | {{anchor:bme688}} |
| - | + | {{anchor: | |
| - | Serial.println(F(" | + | |
| - | Serial.println(F(" | + | |
| - | Serial.println(F(" | + | |
| - | + | ||
| - | // Initialize sensor | + | |
| - | if (!bme.begin(0x76)) | + | |
| - | Serial.println(F(" | + | |
| - | Serial.println(F(" | + | |
| - | | + | |
| - | + | ||
| - | if (!bme.begin(0x77)) | + | |
| - | Serial.println(F(" | + | |
| - | while (1); // Halt program | + | |
| - | | + | |
| - | } | + | |
| - | + | ||
| - | Serial.println(F(" | + | |
| - | + | ||
| - | // Configure | + | |
| - | bme.setTemperatureOversampling(BME680_OS_8X); | + | |
| - | bme.setHumidityOversampling(BME680_OS_2X); | + | |
| - | bme.setPressureOversampling(BME680_OS_4X); | + | |
| - | bme.setIIRFilterSize(BME680_FILTER_SIZE_3); | + | |
| - | bme.setGasHeater(320, | + | |
| - | + | ||
| - | Serial.println(F(" | + | |
| - | delay(2000); | + | |
| - | } | + | |
| - | + | ||
| - | void loop() | + | |
| - | // Start measurement and wait for result | + | |
| - | if (!bme.performReading()) | + | |
| - | Serial.println(F(" | + | |
| - | delay(2000); | + | |
| - | return; | + | |
| - | } | + | |
| - | + | ||
| - | // Print sensor | + | |
| - | Serial.println(F(" | + | |
| - | + | ||
| - | // Temperature | + | |
| - | Serial.print(F(" | + | |
| - | Serial.print(bme.temperature, | + | |
| - | Serial.println(F(" | + | |
| - | + | ||
| - | // Humidity | + | |
| - | Serial.print(F(" | + | |
| - | Serial.print(bme.humidity, | + | |
| - | Serial.println(F(" | + | |
| - | | + | The Bosch **BME688** is an advanced 4-in-1 environmental sensor that integrates high-accuracy measurements for temperature, |
| - | Serial.print(F(" | + | |
| - | Serial.print(bme.pressure / 100.0, 2); | + | |
| - | Serial.println(F(" hPa")); | + | |
| - | // Altitude above sea level (calculated) | + | |< |
| - | | + | ^Parameter^Measurement Range^Accuracy^| |
| - | | + | ^Temperature-40°C to +85°C|±0.5°C to ±1.0°C| |
| - | | + | ^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(" | + | |
| - | Serial.print(bme.gas_resistance / 1000.0, 2); | + | |
| - | Serial.println(F(" | + | |
| - | | + | |
| - | Serial.print(F("Air Quality: | + | |
| - | | + | * **I²C Addresses: |
| + | * **Current Consumption: | ||
| - | Serial.println(); | + | **AI Features |
| - | | + | The BME688' |
| - | | + | * Recognize unique |
| - | } | + | |
| + | * Provide an //Indoor Air Quality// | ||
| - | // Simple air quality rating based on gas resistance | + | {{page>: |
| - | String getAirQuality(uint32_t gasResistance) | + | |
| - | uint32_t kOhm = gasResistance / 1000; | + | |
| - | if (kOhm >= 300) { | + | === Source codes === |
| - | return F(" | + | |
| - | } else if (kOhm >= 150) { | + | |
| - | return F(" | + | |
| - | } else if (kOhm >= 50) { | + | |
| - | return F(" | + | |
| - | } else if (kOhm >= 10) { | + | |
| - | return F(" | + | |
| - | } else { | + | |
| - | return F(" | + | |
| - | } | + | |
| - | } | + | |
| - | </ | + | |
| + | RP2040_ETH_Modul: | ||
| + | RP2040_ETH_Modul: | ||
| ===== I²C topics on lamaPLC ===== | ===== I²C topics on lamaPLC ===== | ||
| Line 330: | Line 203: | ||
| \\ | \\ | ||
| - | {{tag> | + | {{tag> |
| This page has been accessed for: Today: {{counter|today}}, | This page has been accessed for: Today: {{counter|today}}, | ||