Обзор
Цифровой датчик HDC1080 от Texas Instruments — это высокоточный комбинированный сенсор температуры и влажности с низким энергопотреблением. Благодаря заводской калибровке и компактному исполнению, он идеально подходит для систем умного дома, метеостанций и носимых устройств.
HDC1080 / GY-213V-HDC1080 обеспечивает точность измерения относительной влажности ±2% и температуры ±0.2°C. Датчик потребляет всего 1.3 мкА в режиме сна, что делает его отличным выбором для устройств с батарейным питанием.
Примеры по платформам
Приобретите HDC1080 / GY-213V-HDC1080 Датчик Температуры и Влажности
Характеристики HDC1080
Полные технические параметры датчика температуры и влажности GY-213V-HDC1080.
Распиновка HDC1080
Основные выводы датчика для подключения по шине I2C.
- • Для шины I2C на линиях SDA и SCL требуются подтягивающие резисторы (обычно 4.7кОм или 10кОм).
- • Рекомендуется устанавливать блокировочный конденсатор 0.1 мкФ между VDD и GND максимально близко к датчику.
Модули GY-213V обычно поставляются с установленными резисторами, что упрощает подключение. Проверьте схему вашего модуля перед сборкой.
| Пин | Имя | Тип | Описание |
|---|---|---|---|
| 1 | GND | Power | Общий минус системы. |
| 2 | VDD | Power | Питание датчика (2.7В - 5.5В). |
| 3 | SDA | I2C | Линия данных I2C. |
| 4 | SCL | I2C | Линия тактового сигнала I2C. |
Подключение HDC1080 к ESP32
Схема и таблица соединений для работы датчика с микроконтроллером ESP32.
Схема подключения I2C (SDA — GPIO 21, SCL — GPIO 22)
| HDC1080 Пин | Контакт | ESP32 Пин | Примечание |
|---|---|---|---|
| VDD | → | 3.3V | Питание (3.3В для ESP32). |
| GND | → | GND | Общая земля. |
| SDA | → | GPIO 21 | Резистор 10кОм к VDD. |
| SCL | → | GPIO 22 | Резистор 10кОм к VDD. |
Устранение неполадок HDC1080
Частые ошибки при работе с датчиком и способы их решения.
Влажность зависла на 100%
Влажность зависла на 100%
Проблема: Датчик постоянно сообщает о влажности 100%, независимо от реальных условий. Это случается из-за насыщения сенсора при длительном воздействии высокой влажности или конденсата.
Решение: Поместите датчик в сухую среду для восстановления. Можно активировать встроенный нагреватель HDC1080 для удаления влаги с поверхности сенсора. Убедитесь, что на датчике нет пыли или остатков флюса после пайки.
Датчик возвращает 0xFFFF по I2C
Датчик возвращает 0xFFFF по I2C
Проблема: Попытки чтения приводят к получению значения `0xFFFF`, что означает ошибку связи или занятость сенсора.
Решение: Проверьте адрес I2C (обычно `0x40`). Убедитесь, что вы соблюдаете временную задержку между командой на измерение и чтением результата (около 15 мс для 14 бит). Проверьте надежность контактов и наличие подтягивающих резисторов.
Погрешность влажности до +6%
Погрешность влажности до +6%
Проблема: Со временем показания смещаются, или датчик показывает завышенные значения влажности.
Решение: Используйте встроенный нагреватель для периодической просушки датчика в условиях высокой влажности. Защищайте датчик от паров органических растворителей и клеев при монтаже в корпус.
Примеры кода HDC1080
Готовые примеры для работы с основными платформами на русском языке.
Arduino IDE
C++
Для ESP32 и Arduino UNO
Arduino IDE C++
Для ESP32 и Arduino UNO
Этот скетч использует библиотеку `ClosedCube_HDC1080` для чтения данных каждые 2 секунды.
#include <Wire.h>
#include "ClosedCube_HDC1080.h"
ClosedCube_HDC1080 hdc1080;
void setup() {
Wire.begin();
Serial.begin(115200); // Установите скорость 115200 в Serial Monitor
// Инициализация датчика (адрес по умолчанию 0x40)
hdc1080.begin(0x40);
Serial.println("HDC1080 инициализирован.");
}
void loop() {
// Чтение температуры в градусах Цельсия
float temperature = hdc1080.readTemperature();
// Чтение влажности в процентах
float humidity = hdc1080.readHumidity();
Serial.print("Температура: ");
Serial.print(temperature, 2);
Serial.println(" °C");
Serial.print("Влажность: ");
Serial.print(humidity, 2);
Serial.println(" %");
delay(2000); // Ожидание 2 секунды
}
ESP-IDF
C (Native)
Профессиональная разработка
ESP-IDF C (Native)
Профессиональная разработка
Реализация прямого управления шиной I2C через стандартный драйвер ESP-IDF.
#include <stdio.h>
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "driver/i2c.h"
#define I2C_MASTER_SCL_IO 22 /*!< Пин для I2C тактового сигнала */
#define I2C_MASTER_SDA_IO 21 /*!< Пин для I2C данных */
#define I2C_MASTER_NUM I2C_NUM_0
#define I2C_MASTER_FREQ_HZ 100000
#define HDC1080_SENSOR_ADDR 0x40
static esp_err_t i2c_master_init(void) {
i2c_config_t conf = {
.mode = I2C_MODE_MASTER,
.sda_io_num = I2C_MASTER_SDA_IO,
.scl_io_num = I2C_MASTER_SCL_IO,
.sda_pullup_en = GPIO_PULLUP_ENABLE,
.scl_pullup_en = GPIO_PULLUP_ENABLE,
.master.clk_speed = I2C_MASTER_FREQ_HZ,
};
i2c_param_config(I2C_MASTER_NUM, &conf);
return i2c_driver_install(I2C_MASTER_NUM, conf.mode, 0, 0, 0);
}
void read_hdc1080() {
uint8_t data[4];
uint8_t cmd = 0x00; // Указатель на регистр температуры
// Запуск измерения
i2c_master_write_to_device(I2C_MASTER_NUM, HDC1080_SENSOR_ADDR, &cmd, 1, pdMS_TO_TICKS(100));
vTaskDelay(pdMS_TO_TICKS(15)); // Ждем завершения измерения
// Чтение 4 байт (2 байта температуры + 2 байта влажности)
i2c_master_read_from_device(I2C_MASTER_NUM, HDC1080_SENSOR_ADDR, data, 4, pdMS_TO_TICKS(100));
uint16_t raw_temp = (data[0] << 8) | data[1];
uint16_t raw_humidity = (data[2] << 8) | data[3];
float temp = (raw_temp / 65536.0) * 165.0 - 40.0;
float hum = (raw_humidity / 65536.0) * 100.0;
printf("Температура: %.2f °C, Влажность: %.2f %%\n", temp, hum);
}
void app_main() {
ESP_ERROR_CHECK(i2c_master_init());
while (1) {
read_hdc1080();
vTaskDelay(pdMS_TO_TICKS(2000));
}
}
ESPHome
YAML
Для Home Assistant
ESPHome YAML
Для Home Assistant
Конфигурация для быстрого добавления HDC1080 в вашу систему умного дома.
i2c:
sda: 21
scl: 22
sensor:
- platform: hdc1080
temperature:
name: "Температура в комнате"
humidity:
name: "Влажность в комнате"
update_interval: 60s
MicroPython
Python
Простота и скорость отладки
MicroPython Python
Простота и скорость отладки
from machine import I2C, Pin
import time
# Инициализация I2C
i2c = I2C(0, scl=Pin(22), sda=Pin(21))
ADDR = 0x40
def read_data():
# Отправляем команду измерения
i2c.writeto(ADDR, b'\x00')
time.sleep_ms(20) # Ждем готовности
# Читаем 4 байта
data = i2c.readfrom(ADDR, 4)
raw_temp = (data[0] << 8) | data[1]
raw_hum = (data[2] << 8) | data[3]
t = (raw_temp / 65536.0) * 165.0 - 40.0
h = (raw_hum / 65536.0) * 100.0
return t, h
while True:
temp, hum = read_data()
print("Температура: {:.2f} °C".format(temp))
print("Влажность: {:.2f} %".format(hum))
time.sleep(2)
Итоги и рекомендации
Датчик HDC1080 / GY-213V-HDC1080 — это надежное и энергоэффективное промышленное решение, которое значительно превосходит дешевые датчики серии DHT.
- • Используйте спящий режим для экономии энергии в батарейных проектах.
- • Активируйте нагреватель только при необходимости (например, раз в день или при влажности >90%).
- • Держите датчик подальше от источников тепла самого микроконтроллера.
- • Никогда не превышайте напряжение 5.5В.
- • Не трогайте поверхность сенсора руками — жир пальцев может исказить показания влажности.
- • Избегайте прямого контакта с жидкостями и агрессивными газами.
Готовы собрать проект?
Интегрируйте HDC1080 в свое устройство на базе ESP32 и начните мониторинг микроклимата уже сегодня.