Skip to content

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

Vladyslav Heneraliuk edited this page Mar 3, 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гПа

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

/*
BME280 I2C Test.ino

This code shows how to record data from the BME280 environmental sensor
using I2C interface. This file is an example file, part of the Arduino
BME280 library.

GNU General Public License

Written: Dec 30 2015.
Last Updated: Oct 07 2017.

Connecting the BME280 Sensor:
Sensor              ->  Board
-----------------------------
Vin (Voltage In)    ->  3.3V
Gnd (Ground)        ->  Gnd
SDA (Serial Data)   ->  A4 on Uno/Pro-Mini, 20 on Mega2560/Due, 2 Leonardo/Pro-Micro
SCK (Serial Clock)  ->  A5 on Uno/Pro-Mini, 21 on Mega2560/Due, 3 Leonardo/Pro-Micro

 */

#include <BME280I2C.h>
#include <Wire.h>

#define SERIAL_BAUD 115200

BME280I2C bme;    // Default : forced mode, standby time = 1000 ms
                  // Oversampling = pressure ×1, temperature ×1, humidity ×1, filter off,

//////////////////////////////////////////////////////////////////
void setup()
{
  Serial.begin(SERIAL_BAUD);

  while(!Serial) {} // Wait

  Wire.begin();

  while(!bme.begin())
  {
    Serial.println("Could not find BME280 sensor!");
    delay(1000);
  }

  switch(bme.chipModel())
  {
     case BME280::ChipModel_BME280:
       Serial.println("Found BME280 sensor! Success.");
       break;
     case BME280::ChipModel_BMP280:
       Serial.println("Found BMP280 sensor! No Humidity available.");
       break;
     default:
       Serial.println("Found UNKNOWN sensor! Error!");
  }
}

//////////////////////////////////////////////////////////////////
void loop()
{
   printBME280Data(&Serial);
   delay(500);
}

//////////////////////////////////////////////////////////////////
void printBME280Data
(
   Stream* client
)
{
   float temp(NAN), hum(NAN), pres(NAN);

   BME280::TempUnit tempUnit(BME280::TempUnit_Celsius);
   BME280::PresUnit presUnit(BME280::PresUnit_Pa);

   bme.read(pres, temp, hum, tempUnit, presUnit);

   client->print("Temp: ");
   client->print(temp);
   client->print("°"+ String(tempUnit == BME280::TempUnit_Celsius ? 'C' :'F'));
   client->print("\t\tHumidity: ");
   client->print(hum);
   client->print("% RH");
   client->print("\t\tPressure: ");
   client->print(pres);
   client->println("Pa");

   delay(1000);
}

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%

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

//
//    FILE: SHT31_demo.ino
//  AUTHOR: Rob Tillaart
// PURPOSE: demo
//     URL: https://github.com/RobTillaart/SHT31


#include "Wire.h"
#include "SHT31.h"

#define SHT31_ADDRESS   0x44

uint32_t start;
uint32_t stop;

SHT31 sht;


void setup()
{
  Serial.begin(115200);
  Serial.println(__FILE__);
  Serial.print("SHT31_LIB_VERSION: \t");
  Serial.println(SHT31_LIB_VERSION);

  Wire.begin();
  Wire.setClock(100000);
  sht.begin();

  uint16_t stat = sht.readStatus();
  Serial.print(stat, HEX);
  Serial.println();
}


void loop()
{
  start = micros();
  sht.read();         //  default = true/fast       slow = false
  stop = micros();

  Serial.print("\t");
  Serial.print(stop - start);
  Serial.print("\t");
  Serial.print(sht.getTemperature(), 1);
  Serial.print("\t");
  Serial.println(sht.getHumidity(), 1);
  delay(100);
}


//  -- END OF FILE --

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 (макс.)

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

//
//    FILE: SHT2x_demo.ino
//  AUTHOR: Rob Tillaart
// PURPOSE: demo
//     URL: https://github.com/RobTillaart/SHT2x


#include "Wire.h"
#include "SHT2x.h"

uint32_t start;
uint32_t stop;

SHT2x sht;


void setup()
{
  Serial.begin(115200);
  Serial.println(__FILE__);
  Serial.print("SHT2x_LIB_VERSION: \t");
  Serial.println(SHT2x_LIB_VERSION);

  Wire.begin();
  sht.begin();

  uint8_t stat = sht.getStatus();
  Serial.print(stat, HEX);
  Serial.println();
}


void loop()
{
  start = micros();
  sht.read();
  stop = micros();

  Serial.print("\t");
  Serial.print(stop - start);
  Serial.print("\t");
  Serial.print(sht.getTemperature(), 1);
  Serial.print("\t");
  Serial.println(sht.getHumidity(), 1);
  delay(1000);
}


//  -- END OF FILE --