Skip to content

Сенсори клімату (температура, вологість, тиск)

Vladyslav Heneraliuk edited this page Mar 17, 2024 · 4 revisions

Загальна інформація

З версії 3.7 у прошивці додалась підтримка цифрових сенсорів температури, вологості та тиску.

Інформація з сенсорів відображається на дисплеї у новому режимі "Мікроклімат" (доступний при наявності одного з підтримуваних сенсорів), а також на додаткових екранах у режимі "Перемикання".

Прошивка підтримує наступні сенсори: BME280*/BMP280, сімейство сенсорів SHT3x (SHT30*, SHT31, SHT35, SHT85), а також сімейство сенсорів SHT2x (SHT20, SHT21, SHT25, HTU20*, HTU21, Si7021). Сенсори відмічені зірочкою (*) тестувались разом з прошивкою, підтримка інших сенсорів зі списку вище теоретично можлива, але не перевірялась.

BME280/BMP280

Сенсор підʼєднується до I2C шини ESP32, та використовує стандартну адрусу (0x77).

Схема підключення до ESP32:

BME280 ESP32
VCC 3.3V
GND GND
SCL GPIO 22
SDA GPIO 21

Характеристики:

  • Межі вимірювання температури: від -40 до 85 °C
  • Точність вимірювання температури: від 0.5 до 1 °C
  • Межі вимірювання вологості: від 0 до 100%
  • Точність вимірювання вологості: 3%
  • Межі вимірювання тиску: від 300 до 1100 гПа
  • Точність вимірювання тиску: 1гПа

Скетч для тестування роботи сенсора (використовується бібліотека forcedBMX280):

/* Forced-BMX280 Library
   soylentOrange - https://github.com/soylentOrange/Forced-BMX280

   forked from:
   Forced-BME280 Library
   Jochem van Kranenburg - jochemvk.duckdns.org - 9 March 2020
*/

#include <Wire.h>          // https://www.arduino.cc/reference/en/language/functions/communication/wire/
#include "forcedBMX280.h"  // https://github.com/soylentOrange/Forced-BMX280

/* Test-ino for BMX280 library
   Uses the minmal version of the library (int32_t result of temperature)
   Uses an Arduino Nano and a BME280/BMP280 sensor connected to Pin A4/A5
   Note to myself: yellow wire is SDA, connected to pin A4
                   green wire is SCL, connected to pin A5
   Components are 5V tolerant (using an on-bord LDO)
    - https://www.amazon.de/dp/B0B1HXTS29
    - https://www.amazon.de/dp/B0B1DWSKF5
*/

// BMX280-sensor
ForcedBMX280 climateSensor = ForcedBMX280();
int32_t g_temperature;  // current temperature - value of 1234 would be 12.34 °C

// UART control interface
#define SERIAL_BAUD 9600
static const char dashLine[] = "=======================================";

void setup() {
  // set LED as output and turn it off
  pinMode(LED_BUILTIN, OUTPUT);
  digitalWrite(LED_BUILTIN, LOW);

  // initialize serial pport
  Serial.begin(SERIAL_BAUD);

  // Wait for serial port to settle
  while (!Serial) {
    delay(10);
  }

  // start I2C and BME sensor
  Wire.begin();
  while (climateSensor.begin()) {
    Serial.println("Waiting for sensor...");
    digitalWrite(LED_BUILTIN, !digitalRead(LED_BUILTIN));
    delay(1000);
  }

  // Turn LED on if everything is fine
  digitalWrite(LED_BUILTIN, HIGH);
  Serial.println(dashLine);
  Serial.println("BMX280 ready");
  Serial.print("\tChipID: 0x");
  Serial.println(climateSensor.getChipID(), HEX);
  Serial.println(dashLine);
}

void loop() {
  // get Temperature
  delay(2000);
  climateSensor.takeForcedMeasurement();
  g_temperature = climateSensor.getTemperatureCelsius();
  Serial.println(" ");
  Serial.print("Temperature: ");
  Serial.print(g_temperature/100);
  Serial.print(".");
  Serial.print(g_temperature%100);
  Serial.println(" °C");
}

SHT3x (SHT30, SHT31, SHT35, SHT85)

Сенсор підʼєднується до I2C шини ESP32, та використовує стандартну адрусу (0x44).

Схема підключення до ESP32:

SHT3x ESP32
VIN 3.3V
GND GND
SCL GPIO 22
SDA GPIO 21

Характеристики:

  • Діапазон вимірювання температури: -40 до +120 °C
  • Точність діапазону температури (5-60 °C): +/- 0.3 °C
  • Діапазон вимірювання відносної вологості: 0 - 100 %
  • Точність діапазону відносної вологості (20-80 RH): 3%

Скетч для тестування роботи сенсора наведено нижче (в розділі SHT2x).

SHT2x (SHT20, SHT21, SHT25, HTU20, HTU21, Si7021)

Сенсор підʼєднується до I2C шини ESP32, та використовує стандартну адрусу (0x40).

Схема підключення до ESP32:

SHT2x ESP32
+ 3.3V
- GND
CL GPIO 22
DA GPIO 21

Характеристики:

  • Точність вимірювання вологості в діапазоні 10-95% RH: ± 2% (макс.)
  • Точність вимірювання температури в діапазоні -10 до +85 ° C: ± 0.4 ° C (макс.)

Скетч для тестування роботи сенсора (використовується бібліотека arduino-sht):

#include <Wire.h>
#include "SHTSensor.h"

// Note that all i2c devices sharing one bus must have distinct addresses. Thus
// this example only works with sensors that have distinct i2c addresses (e.g.
// SHT3x and SHT3x_alt, or SHT3x and SHTC3).
// Make sure not to use auto-detection as it will only pick up one sensor.

// SHT2x sensor family
SHTSensor sht2x(SHTSensor::SHT2X);

// SHT3x sensor family
SHTSensor sht3x(SHTSensor::SHT3X);

void setup() {
  // put your setup code here, to run once:
  Wire.begin();
  Serial.begin(9600);
  delay(1000); // let serial console settle

  // init on a specific sensor type (i.e. without auto detecting),
  // does not check if the sensor is responding and will thus always succeed.

  // initialize sht2x sensor
  sht2x.init();

  // initialize sht3x sensor
  sht3x.init();
}

void loop() {
  // read from first sensor
  if (sht2x.readSample()) {
    Serial.print("SHT2x :\n");
    Serial.print("  RH: ");
    Serial.print(sht2x.getHumidity(), 2);
    Serial.print("\n");
    Serial.print("  T:  ");
    Serial.print(sht2x.getTemperature(), 2);
    Serial.print("\n");
  } else {
    Serial.print("Sensor sht2x: Error in readSample()\n");
  }

  // read from second sensor
  if (sht3x.readSample()) {
    Serial.print("SHT3x:\n");
    Serial.print("  RH: ");
    Serial.print(sht3x.getHumidity(), 2);
    Serial.print("\n");
    Serial.print("  T:  ");
    Serial.print(sht3x.getTemperature(), 2);
    Serial.print("\n");
  } else {
    Serial.print("Sensor sht3x: Error in readSample()\n");
  }

  delay(1000);
}