ESP8266 NodeMCU: датчик окружающей среды BME680 в Arduino IDE (газ, давление, влажность, температура)
BME680 — это цифровой датчик окружающей среды, который измеряет газ, давление, влажность и температуру. В этом руководстве вы узнаете, как использовать модуль датчика BME680 с платой ESP8266 NodeMCU в Arduino IDE. Датчик взаимодействует с микроконтроллером по протоколам связи I2C или SPI.
Вы узнаете, как подключить датчик к плате ESP8266 NodeMCU, установить необходимые библиотеки, использовать простой скетч для отображения показаний датчика в мониторе порта и создать веб-сервер для удалённого мониторинга вашего датчика.
Знакомство с модулем датчика окружающей среды BME680
BME680 — это датчик окружающей среды, объединяющий датчики газа, давления, влажности и температуры. Датчик газа может обнаруживать широкий спектр газов, таких как летучие органические соединения (VOC). По этой причине BME680 может использоваться для контроля качества воздуха в помещении.
Измерения BME680
BME680 — это цифровой датчик 4-в-1, который измеряет:
Температуру
Влажность
Барометрическое давление
Газ: летучие органические соединения (VOC), такие как этанол и угарный газ
Датчик газа
BME680 содержит MOX (Metal-oxide) сенсор, который обнаруживает VOC в воздухе. Этот датчик даёт вам качественное представление о сумме VOC/загрязняющих веществ в окружающем воздухе — он не является специфичным для конкретной молекулы газа.
MOX-сенсоры состоят из поверхности оксида металла, чувствительного чипа для измерения изменений проводимости и нагревателя. Он обнаруживает VOC путём адсорбции молекул кислорода на своём чувствительном слое. BME680 реагирует на большинство VOC, загрязняющих воздух в помещении (кроме 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 |
Общий GND |
SCL |
Вывод SCL для связи по I2C / Вывод SCK для связи по SPI |
SDA |
Вывод SDA для связи по I2C / Вывод SDI (MISO) для связи по SPI |
SDO |
Вывод SDO (MOSI) для связи по SPI |
CS |
Вывод выбора чипа для связи по SPI |
Интерфейс BME680
BME680 поддерживает интерфейсы I2C и SPI.
BME680 I2C
Для использования протокола связи I2C используйте следующие выводы:
BME680 |
ESP8266 |
|---|---|
SCL |
GPIO 5 (D1) |
SDA |
GPIO 4 (D2) |
GPIO 5 (SCL) и GPIO 4 (SDA) — это стандартные выводы I2C ESP8266. Вы можете использовать другие выводы, если правильно укажете их в коде.
BME680 SPI
Для использования протокола связи SPI используйте следующие выводы:
BME680 |
ESP8266 |
|---|---|
SCL (SCK SPI Clock) |
GPIO 14 (D5) |
SDA (SDI MOSI) |
GPIO 13 (D7) |
SDO (MISO) |
GPIO 12 (D6) |
CS (Chip Select) |
GPIO 15 (D8) |
Это стандартные выводы SPI ESP8266. Вы можете использовать другие выводы, если правильно укажете их в коде.
Необходимые компоненты
Для выполнения этого руководства вам понадобятся следующие компоненты:
Вы можете использовать приведённые выше ссылки или перейти непосредственно на MakerAdvisor.com/tools, чтобы найти все компоненты для ваших проектов по лучшей цене!
Схема подключения — ESP8266 NodeMCU с BME680
BME680 может взаимодействовать по протоколам связи I2C или SPI.
ESP8266 с BME680 по I2C
Следуйте приведённой ниже схеме для подключения BME680 к ESP8266 с использованием стандартных выводов I2C.
ESP8266 с BME680 по SPI
Кроме того, вы можете использовать протокол связи SPI. В этом случае следуйте приведённой ниже схеме для подключения BME680 к ESP8266 с использованием стандартных выводов SPI.
Примечание
Если вы используете протокол связи SPI, подключайте датчик только после загрузки кода.
Рекомендуем прочитать: Справочник по выводам ESP8266: какие GPIO-выводы следует использовать?
Подготовка Arduino IDE
Мы будем программировать плату ESP8266 с помощью Arduino IDE. Поэтому убедитесь, что у вас установлено дополнение ESP8266. Следуйте следующему руководству:
Вам также необходимо установить библиотеку 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/esp8266-nodemcu-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 14
#define BME_MISO 12
#define BME_MOSI 13
#define BME_CS 15*/
#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);
}
Мы внесли несколько изменений в скетч, чтобы он был полностью совместим с ESP8266.
Как работает код
Продолжайте читать этот раздел, чтобы узнать, как работает код, или перейдите к разделу Демонстрация.
Библиотеки
Код начинается с подключения необходимых библиотек: библиотека 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 14
#define BME_MISO 12
#define BME_MOSI 13
#define BME_CS 15*/
Давление на уровне моря
Создаётся переменная SEALEVELPRESSURE_HPA.
#define SEALEVELPRESSURE_HPA (1013.25)
Эта переменная сохраняет давление на уровне моря в гектопаскалях (эквивалентно миллибарам). Эта переменная используется для оценки высоты для заданного давления путём сравнения его с давлением на уровне моря. В этом примере используется значение по умолчанию, но для точных результатов замените значение на текущее давление на уровне моря в вашем местоположении.
I2C
В этом примере по умолчанию используется протокол связи I2C. Следующая строка создаёт объект Adafruit_BME680 с именем bme на стандартных выводах I2C ESP8266: GPIO 5 (SCL), GPIO 4 (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_1XBME680_OS_2XBME680_OS_4XBME680_OS_8XBME680_OS_16X
Датчик BME680 интегрирует внутренний фильтр IIR для уменьшения кратковременных изменений выходных значений датчика, вызванных внешними возмущениями. Метод setIIRFilterSize() устанавливает фильтр IIR. Он принимает размер фильтра в качестве параметра:
BME680_FILTER_SIZE_0(без фильтрации)BME680_FILTER_SIZE_1BME680_FILTER_SIZE_3BME680_FILTER_SIZE_7BME680_FILTER_SIZE_15BME680_FILTER_SIZE_31BME680_FILTER_SIZE_63BME680_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.
Демонстрация
Загрузите код на вашу плату ESP8266. Перейдите в Tools > Board и выберите используемую плату ESP8266. Перейдите в Tools > Port и выберите порт, к которому подключена ваша плата. Затем нажмите кнопку загрузки.
Откройте монитор порта на скорости 115200 бод, нажмите кнопку RST на плате. Показания датчика будут отображены.
Примечание: если вы используете связь по SPI, подключайте схему только после нажатия кнопки RST.
Код — веб-сервер ESP8266 NodeMCU с BME680
В этом разделе мы приводим пример веб-сервера, который вы можете создать с помощью ESP8266 для отображения показаний BME680.
Установка библиотек — Async Web Server
Для создания веб-сервера вам необходимо установить следующие библиотеки. Нажмите на ссылки ниже, чтобы скачать библиотеки.
Эти библиотеки недоступны для установки через менеджер библиотек Arduino, поэтому вам нужно скопировать файлы библиотек в папку Libraries установки Arduino. Кроме того, в Arduino IDE вы можете перейти в Sketch > Include Library > Add .zip Library и выбрать только что скачанные библиотеки.
Код
Затем загрузите следующий код на вашу плату (введите свой SSID и пароль).
/*********
Rui Santos & Sara Santos - Random Nerd Tutorials
Complete project details at https://RandomNerdTutorials.com/esp8266-nodemcu-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 <ESP8266WiFi.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 14
#define BME_MISO 12
#define BME_MOSI 13
#define BME_CS 15*/
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 String();
}
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();
}
}
Демонстрация веб-сервера
После загрузки откройте монитор порта на скорости 115200 бод, чтобы получить IP-адрес ESP8266.
Откройте браузер и введите IP-адрес. Вы получите доступ к веб-серверу с последними показаниями датчика. Вы можете получить доступ к веб-серверу на компьютере, планшете или смартфоне в вашей локальной сети.
Показания автоматически обновляются на веб-сервере с использованием Server-Sent Events.
В этом руководстве мы не будем объяснять, как работает веб-сервер. Мы написали отдельное руководство, посвящённое веб-серверу BME680 с платой ESP8266.
Заключение
Модуль датчика BME680 — это цифровой датчик 4-в-1, объединяющий датчики газа, давления, температуры и влажности. BME680 содержит MOX-сенсор, который определяет наличие большинства газов VOC. Этот датчик даёт вам качественное представление о сумме VOC/загрязняющих веществ в окружающем воздухе. По этой причине BME680 может использоваться для мониторинга качества воздуха в помещении.
Если вы используете ESP32, прочитайте ESP32: датчик окружающей среды BME680 в Arduino IDE (газ, давление, влажность, температура).
Мы надеемся, что это вводное руководство было полезным. У нас есть руководства для других популярных датчиков:
ESP8266 DHT11/DHT22: веб-сервер температуры и влажности с Arduino IDE
ESP8266 с BME280 в Arduino IDE (давление, температура, влажность)
ESP8266 DS18B20: датчик температуры с Arduino IDE (одиночный, множественный, веб-сервер)
Узнайте больше об ESP8266 с нашими ресурсами:
Спасибо за чтение.