ESP32: Датчик окружающей среды BME680 с Arduino IDE (Газ, Давление, Влажность, Температура)
BME680 – это цифровой датчик окружающей среды, который измеряет газ, давление, влажность и температуру. В этом руководстве вы узнаете, как использовать модуль датчика BME680 с платой ESP32 в Arduino IDE. Датчик взаимодействует с микроконтроллером по протоколам связи I2C или SPI.
Вы узнаете, как подключить датчик к плате ESP32, установить необходимые библиотеки, использовать простой скетч для отображения показаний датчика в Serial Monitor и создать веб-сервер для удалённого мониторинга вашего датчика.
Знакомство с модулем датчика окружающей среды BME680
BME680 – это датчик окружающей среды, который объединяет датчики газа, давления, влажности и температуры. Датчик газа может обнаруживать широкий спектр газов, таких как летучие органические соединения (VOC). По этой причине BME680 может использоваться для контроля качества воздуха в помещении.
Измерения BME680
BME680 – это цифровой датчик 4-в-1, который измеряет:
Температуру
Влажность
Барометрическое давление
Газ: летучие органические соединения (VOC), такие как этанол и угарный газ
Датчик газа
BME680 содержит MOX-сенсор (Metal-oxide – оксид металла), который обнаруживает летучие органические соединения в воздухе. Этот датчик даёт вам качественное представление о сумме VOC/загрязнителей в окружающем воздухе – он не является специфичным для конкретной молекулы газа.
MOX-сенсоры состоят из поверхности из оксида металла, чувствительного чипа для измерения изменений проводимости и нагревателя. Он обнаруживает VOC путём адсорбции молекул кислорода на чувствительном слое. BME680 реагирует на большинство летучих органических соединений, загрязняющих воздух в помещении (за исключением CO2).
Когда датчик вступает в контакт с восстановительными газами, молекулы кислорода реагируют и увеличивают проводимость по поверхности. В качестве необработанного сигнала BME680 выдаёт значения сопротивления. Эти значения изменяются из-за вариаций концентрации VOC:
Более высокая концентрация VOC >> Более низкое сопротивление
Более низкая концентрация VOC >> Более высокое сопротивление
Реакции, происходящие на поверхности датчика (и, следовательно, сопротивление), зависят от параметров, отличных от концентрации VOC, таких как температура и влажность.
Важная информация о датчике газа
Датчик газа даёт вам качественное представление о газах VOC в окружающем воздухе. Таким образом, вы можете отслеживать тенденции, сравнивать свои результаты и видеть, улучшается или ухудшается качество воздуха. Для получения точных измерений необходимо откалибровать датчик по известным источникам и построить калибровочную кривую.
Когда вы впервые получаете датчик, рекомендуется запустить его на 48 часов, прежде чем начать собирать «реальные» данные. После этого также рекомендуется запускать датчик на 30 минут перед получением показаний газа.
Точность BME680
Вот точность датчиков температуры, влажности и давления BME680:
Датчик |
Точность |
|---|---|
Температура |
+/- 1.0 °C |
Влажность |
+/- 3% |
Давление |
+/- 1 гПа |
Диапазон работы BME680
В следующей таблице показан диапазон работы датчиков температуры, влажности и давления BME680.
Датчик |
Диапазон работы |
|---|---|
Температура |
от -40 до 85 °C |
Влажность |
от 0 до 100% |
Давление |
от 300 до 1100 гПа |
Распиновка BME680
Вот распиновка BME680:
VCC |
Питание датчика |
GND |
Общая земля |
SCL |
Вывод SCL для связи по I2C / Вывод SCK для связи по SPI |
SDA |
Вывод SDA для связи по I2C / Вывод SDI (MOSI) для связи по SPI |
SDO |
Вывод SDO (MISO) для связи по SPI |
CS |
Вывод выбора чипа (Chip Select) для связи по SPI |
Интерфейс BME680
BME680 поддерживает интерфейсы I2C и SPI.
BME680 I2C
Для использования протокола связи I2C используйте следующие выводы:
BME680 |
ESP32 |
|---|---|
SCL |
GPIO22 |
SDA |
GPIO 21 |
GPIO 22 (SCL) и GPIO 21 (SDA) – это стандартные выводы I2C ESP32. Вы можете использовать другие выводы, если правильно настроите их в коде.
Рекомендуемое чтение: ESP32 I2C Communication: Set Pins, Multiple Bus Interfaces and Peripherals (Arduino IDE)
BME680 SPI
Для использования протокола связи SPI используйте следующие выводы:
BME680 |
ESP32 |
|---|---|
SCL (SCK SPI Clock) |
GPIO 18 |
SDA (SDI MOSI) |
GPIO 23 |
SDO (MISO) |
GPIO 19 |
CS (Chip Select) |
GPIO 5 |
Это стандартные выводы SPI ESP32. Вы можете использовать другие выводы, если правильно настроите их в коде.
Необходимые компоненты
Для выполнения этого руководства вам понадобятся следующие компоненты:
ESP32 (читайте Лучшие платы разработки ESP32)
Вы можете использовать ссылки выше или перейти напрямую на MakerAdvisor.com/tools, чтобы найти все компоненты для ваших проектов по лучшей цене!
Схема подключения – ESP32 с BME680
BME680 может взаимодействовать по протоколам связи I2C или SPI.
ESP32 с BME680 по I2C
Следуйте приведённой ниже схеме подключения, чтобы подключить BME680 к ESP32 с использованием стандартных выводов I2C.
ESP32 с BME680 по SPI
В качестве альтернативы вы можете использовать протокол связи SPI. В этом случае следуйте приведённой ниже схеме подключения, чтобы подключить BME680 к ESP32 с использованием стандартных выводов SPI.
Рекомендуемое чтение: ESP32 Pinout Reference: Which GPIO pins should you use?
Подготовка Arduino IDE
Мы будем программировать плату ESP32 с помощью Arduino IDE. Убедитесь, что у вас установлено дополнение ESP32. Следуйте этому руководству:
Вам также необходимо установить библиотеку Adafruit BME680 и библиотеку Adafruit Unified Sensor.
Установка библиотеки BME680
Для получения показаний от модуля датчика BME680 мы будем использовать библиотеку Adafruit_BME680. Выполните следующие шаги для установки библиотеки в Arduino IDE:
Откройте Arduino IDE и перейдите в Sketch > Include Library > Manage Libraries. Откроется Менеджер библиотек.
Введите «adafruit bme680» в поле поиска и установите библиотеку.
Установка библиотеки Adafruit_Sensor
Для использования библиотеки BME680 вам также необходимо установить библиотеку Adafruit_Sensor. Выполните следующие шаги для установки библиотеки в Arduino IDE:
Перейдите в Sketch > Include Library > Manage Libraries и введите «Adafruit Unified Sensor» в поле поиска. Прокрутите вниз, чтобы найти библиотеку, и установите её.
После установки библиотек перезапустите Arduino IDE.
Код – Чтение газа, давления, влажности и температуры BME680
Для чтения газа, давления, температуры и влажности мы будем использовать пример скетча из библиотеки.
После установки библиотеки BME680 и библиотеки Adafruit_Sensor откройте Arduino IDE и перейдите в File > Examples > Adafruit BME680 Library > bme680async.
/***
Read Our Complete Guide: https://RandomNerdTutorials.com/esp32-bme680-sensor-arduino/
Designed specifically to work with the Adafruit BME680 Breakout ----> http://www.adafruit.com/products/3660 These sensors use I2C or SPI to communicate, 2 or 4 pins are required to interface. Adafruit invests time and resources providing this open source code, please support Adafruit and open-source hardware by purchasing products from Adafruit! Written by Limor Fried & Kevin Townsend for Adafruit Industries. BSD license, all text above must be included in any redistribution
***/
#include <Wire.h>
#include <SPI.h>
#include <Adafruit_Sensor.h>
#include "Adafruit_BME680.h"
/*#define BME_SCK 18
#define BME_MISO 19
#define BME_MOSI 23
#define BME_CS 5*/
#define SEALEVELPRESSURE_HPA (1013.25)
Adafruit_BME680 bme; // I2C
//Adafruit_BME680 bme(BME_CS); // hardware SPI
//Adafruit_BME680 bme(BME_CS, BME_MOSI, BME_MISO, BME_SCK);
void setup() {
Serial.begin(115200);
while (!Serial);
Serial.println(F("BME680 async test"));
if (!bme.begin()) {
Serial.println(F("Could not find a valid BME680 sensor, check wiring!"));
while (1);
}
// Set up oversampling and filter initialization
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); // 320*C for 150 ms
}
void loop() {
// Tell BME680 to begin measurement.
unsigned long endTime = bme.beginReading();
if (endTime == 0) {
Serial.println(F("Failed to begin reading :("));
return;
}
Serial.print(F("Reading started at "));
Serial.print(millis());
Serial.print(F(" and will finish at "));
Serial.println(endTime);
Serial.println(F("You can do other work during BME680 measurement."));
delay(50); // This represents parallel work.
// There's no need to delay() until millis() >= endTime: bme.endReading()
// takes care of that. It's okay for parallel work to take longer than
// BME680's measurement time.
// Obtain measurement results from BME680. Note that this operation isn't
// instantaneous even if milli() >= endTime due to I2C/SPI latency.
if (!bme.endReading()) {
Serial.println(F("Failed to complete reading :("));
return;
}
Serial.print(F("Reading completed at "));
Serial.println(millis());
Serial.print(F("Temperature = "));
Serial.print(bme.temperature);
Serial.println(F(" *C"));
Serial.print(F("Pressure = "));
Serial.print(bme.pressure / 100.0);
Serial.println(F(" hPa"));
Serial.print(F("Humidity = "));
Serial.print(bme.humidity);
Serial.println(F(" %"));
Serial.print(F("Gas = "));
Serial.print(bme.gas_resistance / 1000.0);
Serial.println(F(" KOhms"));
Serial.print(F("Approx. Altitude = "));
Serial.print(bme.readAltitude(SEALEVELPRESSURE_HPA));
Serial.println(F(" m"));
Serial.println();
delay(2000);
}
Мы внесли несколько изменений в скетч, чтобы сделать его полностью совместимым с ESP32.
Как работает код
Продолжайте чтение этого раздела, чтобы узнать, как работает код, или перейдите к разделу Демонстрация.
Библиотеки
Код начинается с подключения необходимых библиотек: библиотека Wire для использования I2C, библиотека SPI (если вы хотите использовать SPI вместо I2C), библиотеки Adafruit_Sensor и Adafruit_BME680 для взаимодействия с датчиком BME680.
#include <Wire.h>
#include <SPI.h>
#include <Adafruit_Sensor.h>
#include "Adafruit_BME680.h"
Связь по SPI
Мы предпочитаем использовать протокол связи I2C с датчиком. Однако код подготовлен, если вы хотите использовать SPI. Вам просто нужно раскомментировать следующие строки кода, которые определяют выводы SPI.
/*#define BME_SCK 18
#define BME_MISO 19
#define BME_MOSI 23
#define BME_CS 15*/
Давление на уровне моря
Создаётся переменная SEALEVELPRESSURE_HPA.
#define SEALEVELPRESSURE_HPA (1013.25)
Эта переменная сохраняет давление на уровне моря в гектопаскалях (что эквивалентно миллибарам). Эта переменная используется для оценки высоты при заданном давлении путём сравнения его с давлением на уровне моря. В этом примере используется значение по умолчанию, но для точных результатов замените значение на текущее давление на уровне моря в вашем местоположении.
I2C
В этом примере по умолчанию используется протокол связи I2C. Следующая строка создаёт объект Adafruit_BME680 с именем bme на стандартных выводах I2C ESP32: GPIO 22 (SCL), GPIO 21 (SDA).
Adafruit_BME680 bme; // I2C
Для использования SPI вам нужно закомментировать предыдущую строку и раскомментировать следующую.
//Adafruit_BME680 bme(BME_CS, BME_MOSI, BME_MISO, BME_SCK); // software SPI
setup()
В setup() запускается последовательная связь.
Serial.begin(115200);
Инициализация датчика BME680
Инициализация датчика BME680:
if (!bme.begin()) {
Serial.println(F("Could not find a valid BME680 sensor, check wiring!"));
while (1);
}
Настройте следующие параметры (передискретизация, фильтр и нагреватель газа) для датчика.
// Set up oversampling and filter initialization
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); // 320*C for 150 ms
Для повышения разрешения необработанных данных датчика он поддерживает передискретизацию (oversampling). Мы будем использовать параметры передискретизации по умолчанию, но вы можете их изменить.
setTemperatureOversampling(): установка передискретизации температуры.
setHumidityOversampling(): установка передискретизации влажности.
setPressureOversampling(): установка передискретизации давления.
Эти методы могут принимать один из следующих параметров:
BME680_OS_NONE: отключить считывание;
BME680_OS_1X
BME680_OS_2X
BME680_OS_4X
BME680_OS_8X
BME680_OS_16X
Датчик BME680 интегрирует внутренний IIR-фильтр для уменьшения кратковременных изменений выходных значений датчика, вызванных внешними помехами. Метод setIIRFilterSize() устанавливает IIR-фильтр. Он принимает размер фильтра в качестве параметра:
BME680_FILTER_SIZE_0 (без фильтрации)
BME680_FILTER_SIZE_1
BME680_FILTER_SIZE_3
BME680_FILTER_SIZE_7
BME680_FILTER_SIZE_15
BME680_FILTER_SIZE_31
BME680_FILTER_SIZE_63
BME680_FILTER_SIZE_127
Датчик газа интегрирует нагреватель. Установите профиль нагревателя с помощью метода setGasHeater(), который принимает в качестве аргументов:
температуру нагревателя (в градусах Цельсия)
время, в течение которого нагреватель должен быть включён (в миллисекундах)
Мы будем использовать настройки по умолчанию: 320 °C в течение 150 мс.
loop()
В loop() мы будем получать измерения от датчика BME680.
Сначала сообщите датчику о начале асинхронного чтения с помощью bme.beginReading(). Это возвращает время, когда чтение будет готово.
// Tell BME680 to begin measurement.
unsigned long endTime = bme.beginReading();
if (endTime == 0) {
Serial.println(F("Failed to begin reading :("));
return;
}
Serial.print(F("Reading started at "));
Serial.print(millis());
Serial.print(F(" and will finish at "));
Serial.println(endTime);
Затем вызовите метод endReading() для завершения асинхронного чтения. Если асинхронное чтение всё ещё выполняется, блокировка продолжается до его завершения.
if (!bme.endReading()) {
Serial.println(F("Failed to complete reading :("));
return;
}
После этого мы можем получить показания следующим образом:
bme.temperature: возвращает показание температуры
bme.pressure: возвращает показание давления
bme.humidity: возвращает показание влажности
bme.gas_resistance: возвращает сопротивление газа
Serial.print(F("Temperature = "));
Serial.print(bme.temperature);
Serial.println(F(" *C"));
Serial.print(F("Pressure = "));
Serial.print(bme.pressure / 100.0);
Serial.println(F(" hPa"));
Serial.print(F("Humidity = "));
Serial.print(bme.humidity);
Serial.println(F(" %"));
Serial.print(F("Gas = "));
Serial.print(bme.gas_resistance / 1000.0);
Serial.println(F(" KOhms"));
Serial.print(F("Approx. Altitude = "));
Serial.print(bme.readAltitude(SEALEVELPRESSURE_HPA));
Serial.println(F(" m"));
Для получения дополнительной информации о методах библиотеки ознакомьтесь со справочником класса Adafruit_BME680.
Демонстрация
Загрузите код на вашу плату ESP32. Перейдите в Tools > Board и выберите используемую плату ESP32. Перейдите в Tools > Port и выберите порт, к которому подключена ваша плата. Затем нажмите кнопку загрузки.
Откройте Serial Monitor на скорости 115200 бод, нажмите кнопку RST на плате. Показания датчика будут отображены.
Код – Веб-сервер ESP32 с BME680
В этом разделе мы приводим пример веб-сервера, который вы можете создать с ESP32 для отображения показаний BME680.
Установка библиотек – Асинхронный веб-сервер
Для создания веб-сервера вам необходимо установить следующие библиотеки. Нажмите на ссылки ниже, чтобы скачать библиотеки.
Эти библиотеки недоступны для установки через Менеджер библиотек Arduino, поэтому вам нужно скопировать файлы библиотек в папку библиотек Arduino. В качестве альтернативы в Arduino IDE вы можете перейти в Sketch > Include Library > Add .zip Library и выбрать только что скачанные библиотеки.
Код
Затем загрузите следующий код на вашу плату (введите ваш SSID и пароль).
/*********
Rui Santos & Sara Santos - Random Nerd Tutorials
Complete project details at https://RandomNerdTutorials.com/esp32-bme680-sensor-arduino/
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files.
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
*********/
#include <Wire.h>
#include <SPI.h>
#include <Adafruit_Sensor.h>
#include "Adafruit_BME680.h"
#include <WiFi.h>
#include "ESPAsyncWebServer.h"
// Replace with your network credentials
const char* ssid = "REPLACE_WITH_YOUR_SSID";
const char* password = "REPLACE_WITH_YOUR_PASSWORD";
//Uncomment if using SPI
/*#define BME_SCK 18
#define BME_MISO 19
#define BME_MOSI 23
#define BME_CS 5*/
Adafruit_BME680 bme; // I2C
//Adafruit_BME680 bme(BME_CS); // hardware SPI
//Adafruit_BME680 bme(BME_CS, BME_MOSI, BME_MISO, BME_SCK);
float temperature;
float humidity;
float pressure;
float gasResistance;
AsyncWebServer server(80);
AsyncEventSource events("/events");
unsigned long lastTime = 0;
unsigned long timerDelay = 30000; // send readings timer
void getBME680Readings(){
// Tell BME680 to begin measurement.
unsigned long endTime = bme.beginReading();
if (endTime == 0) {
Serial.println(F("Failed to begin reading :("));
return;
}
if (!bme.endReading()) {
Serial.println(F("Failed to complete reading :("));
return;
}
temperature = bme.temperature;
pressure = bme.pressure / 100.0;
humidity = bme.humidity;
gasResistance = bme.gas_resistance / 1000.0;
}
String processor(const String& var){
getBME680Readings();
//Serial.println(var);
if(var == "TEMPERATURE"){
return String(temperature);
}
else if(var == "HUMIDITY"){
return String(humidity);
}
else if(var == "PRESSURE"){
return String(pressure);
}
else if(var == "GAS"){
return String(gasResistance);
}
return "0";
}
const char index_html[] PROGMEM = R"rawliteral(
<!DOCTYPE HTML><html>
<head>
<title>BME680 Web Server</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.7.2/css/all.css" integrity="sha384-fnmOCqbTlWIlj8LyTjo7mOUStjsKC4pOpQbqyi7RrhN7udi9RwhKkMHpvLbHG9Sr" crossorigin="anonymous">
<link rel="icon" href="data:,">
<style>
html {font-family: Arial; display: inline-block; text-align: center;}
p { font-size: 1.2rem;}
body { margin: 0;}
.topnav { overflow: hidden; background-color: #4B1D3F; color: white; font-size: 1.7rem; }
.content { padding: 20px; }
.card { background-color: white; box-shadow: 2px 2px 12px 1px rgba(140,140,140,.5); }
.cards { max-width: 700px; margin: 0 auto; display: grid; grid-gap: 2rem; grid-template-columns: repeat(auto-fit, minmax(300px, 1fr)); }
.reading { font-size: 2.8rem; }
.card.temperature { color: #0e7c7b; }
.card.humidity { color: #17bebb; }
.card.pressure { color: #3fca6b; }
.card.gas { color: #d62246; }
</style>
</head>
<body>
<div class="topnav">
<h3>BME680 WEB SERVER</h3>
</div>
<div class="content">
<div class="cards">
<div class="card temperature">
<h4><i class="fas fa-thermometer-half"></i> TEMPERATURE</h4><p><span class="reading"><span id="temp">%TEMPERATURE%</span> °C</span></p>
</div>
<div class="card humidity">
<h4><i class="fas fa-tint"></i> HUMIDITY</h4><p><span class="reading"><span id="hum">%HUMIDITY%</span> %</span></p>
</div>
<div class="card pressure">
<h4><i class="fas fa-angle-double-down"></i> PRESSURE</h4><p><span class="reading"><span id="pres">%PRESSURE%</span> hPa</span></p>
</div>
<div class="card gas">
<h4><i class="fas fa-wind"></i> GAS</h4><p><span class="reading"><span id="gas">%GAS%</span> KΩ</span></p>
</div>
</div>
</div>
<script>
if (!!window.EventSource) {
var source = new EventSource('/events');
source.addEventListener('open', function(e) {
console.log("Events Connected");
}, false);
source.addEventListener('error', function(e) {
if (e.target.readyState != EventSource.OPEN) {
console.log("Events Disconnected");
}
}, false);
source.addEventListener('message', function(e) {
console.log("message", e.data);
}, false);
source.addEventListener('temperature', function(e) {
console.log("temperature", e.data);
document.getElementById("temp").innerHTML = e.data;
}, false);
source.addEventListener('humidity', function(e) {
console.log("humidity", e.data);
document.getElementById("hum").innerHTML = e.data;
}, false);
source.addEventListener('pressure', function(e) {
console.log("pressure", e.data);
document.getElementById("pres").innerHTML = e.data;
}, false);
source.addEventListener('gas', function(e) {
console.log("gas", e.data);
document.getElementById("gas").innerHTML = e.data;
}, false);
}
</script>
</body>
</html>)rawliteral";
void setup() {
Serial.begin(115200);
// Set the device as a Station and Soft Access Point simultaneously
WiFi.mode(WIFI_AP_STA);
// Set device as a Wi-Fi Station
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(1000);
Serial.println("Setting as a Wi-Fi Station..");
}
Serial.print("Station IP Address: ");
Serial.println(WiFi.localIP());
Serial.println();
// Init BME680 sensor
if (!bme.begin()) {
Serial.println(F("Could not find a valid BME680 sensor, check wiring!"));
while (1);
}
// Set up oversampling and filter initialization
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); // 320*C for 150 ms
// Handle Web Server
server.on("/", HTTP_GET, [](AsyncWebServerRequest *request){
request->send(200, "text/html", index_html, processor);
});
// Handle Web Server Events
events.onConnect([](AsyncEventSourceClient *client){
if(client->lastId()){
Serial.printf("Client reconnected! Last message ID that it got is: %u\n", client->lastId());
}
// send event with message "hello!", id current millis
// and set reconnect delay to 1 second
client->send("hello!", NULL, millis(), 10000);
});
server.addHandler(&events);
server.begin();
}
void loop() {
if ((millis() - lastTime) > timerDelay) {
getBME680Readings();
Serial.printf("Temperature = %.2f C \n", temperature);
Serial.printf("Humidity = %.2f %% \n", humidity);
Serial.printf("Pressure = %.2f hPa \n", pressure);
Serial.printf("Gas Resistance = %.2f KOhm \n", gasResistance);
Serial.println();
// Send Events to the Web Server with the Sensor Readings
events.send("ping",NULL,millis());
events.send(String(temperature).c_str(),"temperature",millis());
events.send(String(humidity).c_str(),"humidity",millis());
events.send(String(pressure).c_str(),"pressure",millis());
events.send(String(gasResistance).c_str(),"gas",millis());
lastTime = millis();
}
}
Демонстрация веб-сервера
После загрузки откройте Serial Monitor на скорости 115200 бод, чтобы получить IP-адрес ESP32.
Откройте браузер и введите IP-адрес. Вы должны получить доступ к веб-серверу с последними показаниями датчика. Вы можете получить доступ к веб-серверу на компьютере, планшете или смартфоне в вашей локальной сети.
Показания автоматически обновляются на веб-сервере с помощью Server-Sent Events.
Мы не будем объяснять, как работает веб-сервер, в этом руководстве. Мы написали это руководство, посвящённое веб-серверу BME680 с ESP32.
Заключение
Модуль датчика BME680 – это цифровой датчик 4-в-1, который объединяет датчики газа, давления, температуры и влажности. BME680 содержит MOX-сенсор, который определяет наличие большинства газов VOC. Этот датчик даёт вам качественное представление о сумме VOC/загрязнителей в окружающем воздухе. По этой причине BME680 может использоваться для мониторинга качества воздуха в помещении.
Если вы используете ESP8266, читайте ESP8266 NodeMCU: BME680 Environmental Sensor using Arduino IDE (Gas, Pressure, Humidity, Temperature).
Мы надеемся, что это вводное руководство оказалось полезным. У нас есть руководства для других популярных датчиков:
ESP32 с датчиком температуры и влажности DHT11/DHT22 с Arduino IDE
ESP32 с BME280 с Arduino IDE (давление, температура, влажность)
ESP32 датчик температуры DS18B20 с Arduino IDE (одиночный, множественный, веб-сервер)
ESP32 с барометрическим датчиком BMP180 (температура и давление)
Узнайте больше о ESP32 с нашими ресурсами:
Спасибо за чтение.
Источник: ESP32: BME680 Environmental Sensor using Arduino IDE (Gas, Pressure, Humidity, Temperature)