HTU21D IIC/I2C цифровой модуль датчика температуры и влажности.

Модуль HTU21D IIC/I2C представляет собой цифровой датчик температуры и влажности, который может быть легко интегрирован в различные проекты и системы благодаря простому интерфейсу I2C.

Основные технические характеристики модуля:

  • Диапазон измерения температуры: от -40°C до +125°C
  • Диапазон измерения влажности: от 0% до 100%
  • Точность измерения температуры: ±0.3°C
  • Точность измерения влажности: ±3%
  • Напряжение питания: от 2.1 до 3.6 В
  • Интерфейс связи: I2C
  • Адрес датчика: 0x40

Для работы с модулем необходимо подключить его к микроконтроллеру по интерфейсу I2C. Ниже приведен пример кода на языке Arduino, который демонстрирует чтение данных с датчика и вывод их на серийный порт:

#include <Wire.h>

#define HTU21D_ADDRESS 0x40

void setup()
{
  Serial.begin(9600);
  Wire.begin();
}

void loop()
{
  float temperature, humidity;

  // Запросить измерение температуры
  Wire.beginTransmission(HTU21D_ADDRESS);
  Wire.write(0xF3);
  Wire.endTransmission();
  delay(50);

  // Прочитать данные о температуре
  Wire.requestFrom(HTU21D_ADDRESS, 2);
  temperature = Wire.read() << 8 | Wire.read();
  temperature = -46.85 + (175.72 * temperature / 65536);

  // Запросить измерение влажности
  Wire.beginTransmission(HTU21D_ADDRESS);
  Wire.write(0xF5);
  Wire.endTransmission();
  delay(50);

  // Прочитать данные о влажности
  Wire.requestFrom(HTU21D_ADDRESS, 2);
  humidity = Wire.read() << 8 | Wire.read();
  humidity = -6 + (125 * humidity / 65536);

  Serial.print("Temperature: ");
  Serial.print(temperature);
  Serial.print(" C, Humidity: ");
  Serial.print(humidity);
  Serial.println(" %");

  delay(1000);
}

В этом примере мы используем библиотеку Wire для управления шиной I2C и чтения данных с датчика. Сначала мы отправляем запрос на измерение температуры, затем считываем данные о температуре и преобразуем их в соответствующие единицы измерения. Аналогично мы запрашиваем и считываем данные о влажности.

Полученные данные выводятся на серийный порт в цикле loop() с помощью функции Serial.print(). Кроме того, данные могут быть использованы для различных задач, таких как автоматический контроль климата в комнате или в теплице, а также для мониторинга погодных условий.

Для работы с модулем HTU21D на esp8266 нужно подключить его к шине I2C, как мы это делали ранее с другими I2C-модулями. Вот пример кода, который демонстрирует чтение данных с HTU21D и вывод их на серийный порт:

#include <Wire.h>

#define HTU21D_ADDRESS 0x40

void setup() {
  Serial.begin(9600);
  Wire.begin();
}

void loop() {
  // Запросить измерение температуры
  Wire.beginTransmission(HTU21D_ADDRESS);
  Wire.write(0xF3);
  Wire.endTransmission();
  
  // Ждем 50 мс, чтобы получить результат
  delay(50);
  
  // Читаем 2 байта данных
  Wire.requestFrom(HTU21D_ADDRESS, 2);
  byte msb = Wire.read();
  byte lsb = Wire.read();
  
  // Преобразуем данные в градусы Цельсия
  int16_t rawTemp = (msb << 8) | lsb;
  float temp = -46.85 + 175.72 / 65536.0 * (float)rawTemp;
  
  // Выводим результат на серийный порт
  Serial.print("Temperature: ");
  Serial.print(temp);
  Serial.println(" C");
  
  // Запросить измерение влажности
  Wire.beginTransmission(HTU21D_ADDRESS);
  Wire.write(0xF5);
  Wire.endTransmission();
  
  // Ждем 50 мс, чтобы получить результат
  delay(50);
  
  // Читаем 2 байта данных
  Wire.requestFrom(HTU21D_ADDRESS, 2);
  msb = Wire.read();
  lsb = Wire.read();
  
  // Преобразуем данные в проценты влажности
  int16_t rawHumidity = (msb << 8) | lsb;
  float humidity = -6 + 125 / 65536.0 * (float)rawHumidity;
  
  // Выводим результат на серийный порт
  Serial.print("Humidity: ");
  Serial.print(humidity);
  Serial.println(" %");
  
  delay(1000); // Ждем 1 секунду перед следующим измерением
}

В данном коде мы используем библиотеку Wire для работы с шиной I2C и функцию delay() для задержки между запросами. Для получения температуры и влажности мы отправляем соответствующие команды на модуль HTU21D, затем ждем 50 мс для получения результата и читаем 2 байта данных. Далее мы преобразуем полученные данные в градусы Цельсия и проценты влажности, соответствующим образом:

// Преобразование данных температуры
float t = (data[0] * 256.0) + data[1];
t = ((-46.85 + (175.72 * t / 65536.0)) - 0.1);

// Преобразование данных влажности
float h = (data[2] * 256.0) + data[3];
h = ((-6.0 + (125.0 * h / 65536.0)) - 0.1);

Здесь мы используем формулы из даташита для преобразования данных температуры и влажности из двухбайтового формата в градусы Цельсия и проценты влажности соответственно. Обратите внимание, что значения -0.1 добавляются для компенсации неточностей измерений.

Затем мы выводим преобразованные данные на серийный порт:

// Вывод преобразованных данных на серийный порт
Serial.print("Temperature: ");
Serial.print(t);
Serial.print(" C, Humidity: ");
Serial.print(h);
Serial.println(" %");

Этот код выводит значения температуры и влажности на серийный порт в формате “Temperature: XX C, Humidity: XX %”. Можно изменить формат вывода, добавить другие данные или передавать их по интерфейсу UART для дальнейшей обработки.

Важно отметить, что датчик HTU21D может работать в режиме низкого энергопотребления, который позволяет уменьшить потребление энергии и продлить время работы от батарейного питания. Для этого необходимо использовать команду перевода датчика в спящий режим и настройку периода ожидания. Как правило, в библиотеках для работы с датчиком уже есть функции для работы в этом режиме.

Оставьте комментарий