-
-
Notifications
You must be signed in to change notification settings - Fork 6
Сенсори клімату (температура, вологість, тиск)
З версії 3.7 у прошивці додалась підтримка цифрових сенсорів температури, вологості та тиску.
Інформація з сенсорів відображається на дисплеї у новому режимі "Мікроклімат" (доступний при наявності одного з підтримуваних сенсорів), а також на додаткових екранах у режимі "Перемикання".
Прошивка підтримує наступні сенсори: BME280*/BMP280, сімейство сенсорів SHT3x (SHT30*, SHT31, SHT35, SHT85), а також сімейство сенсорів SHT2x (SHT20, SHT21, SHT25, HTU20*, HTU21, Si7021). Сенсори відмічені зірочкою (*) тестувались разом з прошивкою, підтримка інших сенсорів зі списку вище теоретично можлива, але не перевірялась.
Сенсор підʼєднується до 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");
}
Сенсор підʼєднується до 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).
Сенсор підʼєднується до 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);
}