1_Rudiron_DHT11.md


Библиотека Rudiron_DHT11

Библиотека Rudiron_DHT11 предназначена для работы с датчиком температуры и влажности DHT11 на платах Rudiron. Она обеспечивает простой интерфейс для чтения данных, обрабатывая сложный однопроводной протокол связи и проверку контрольной суммы.

Содержание

  • Описание библиотеки
  • Установка
  • Зависимости
  • Содержимое библиотеки
    • Конструктор
    • Методы
  • Примеры использования
    • ReadHumidity.ino
    • ReadTemperature.ino
    • ReadTemperatureAndHumidity.ino
  • Проблемы и решения

Описание библиотеки

Rudiron_DHT11 позволяет легко считывать температуру (в °C) и влажность (в %) с датчика DHT11. Библиотека управляет низкоуровневой связью, включая отправку стартового сигнала, чтение 40-битных данных и проверку их целостности. Она подходит для проектов, требующих мониторинга окружающей среды, таких как метеостанции, системы управления климатом или умный дом.

Особенности:

  • Простота использования - настройка пина и чтение данных в несколько строк кода.
  • Надёжность - проверка контрольной суммы исключает некорректные данные.
  • Совместимость - работает на всех платформах, поддерживаемых Arduino.
  • Лёгкость - минимальное потребление памяти.

Версия: 1.0.0

Установка

  1. Скачайте библиотеку:
    • Клонируйте репозиторий Rudiron Libraries или скачайте ZIP-файл из раздела релизов.
  2. Установите в Arduino IDE:
    • Откройте Arduino IDE.
    • Перейдите в Скетч -> Подключить библиотеку -> Добавить .ZIP библиотеку и выберите ZIP-файл.
    • Библиотека появится в меню Скет -> Подключить библиотеку -> Rudiron_DHT11.
  3. Проверьте установку:
    • Убедитесь, что примеры библиотеки доступны в Файл -> Примеры -> Rudiron_DHT11.

Зависимости

  • Arduino Framework: Библиотека использует стандартные функции Arduino (pinMode, digitalWrite, micros и т.д.).
  • Аппаратные требования: Датчик DHT11, подключённый к цифровому пину. Может потребоваться подтягивающий резистор 4.7–10 кОм между пином данных и VCC.

Содержимое библиотеки

Библиотека предоставляет класс Rudiron_DHT11 с конструктором и четырьмя публичными методами для работы с датчиком.

Конструктор

Rudiron_DHT11()
  • Описание: Создаёт объект для работы с датчиком DHT11.

  • Особенности:

    • Инициализирует внутренний массив данных нулями, чтобы избежать неопределённых значений.
    • Не требует параметров; пин настраивается позже через attach().
  • Пример:

    Rudiron_DHT11 dht;
    

Методы

  • void attach(uint8_t pin)

    • Описание: Задаёт цифровой пин для связи с датчиком.

    • Параметры: pin - номер цифрового пина (например, 2).

    • Особенности:

      • Пин должен поддерживать вход и выход (большинство цифровых пинов).
      • Не выполняет проверку на корректность пина, так как это зависит от аппаратной платформы.
    • Пример:

      dht.attach(2); // Подключение к пину 2
      
  • bool read()

    • Описание: Считывает данные с датчика DHT11, выполняя полный цикл протокола связи.

    • Возвращает: true при успешном чтении и проверке данных, false при ошибке (таймаут, сбой контрольной суммы).

    • Особенности:

      • Отправляет стартовый сигнал (18 мс низкий, 20–40 мкс высокий).
      • Считывает 40 бит (5 байт): влажность (2 байта), температура (2 байта), контрольная сумма (1 байт).
      • Проверяет контрольную сумму для обеспечения целостности данных.
      • Таймауты (100 мкс) предотвращают зависание при отсутствии ответа датчика.
    • Пример:

      if (dht.read()) {
        // Данные успешно считаны
      }
      
  • float getHumidity() const

    • Описание: Возвращает значение влажности из последнего успешного чтения.

    • Возвращает: Влажность в процентах как число с плавающей точкой (например, 45.0).

    • Особенности:

      • Объединяет целую (_data[0]) и дробную (_data[1]) части влажности.
      • Для DHT11 дробная часть всегда 0, но метод возвращает float для совместимости с другими датчиками.
      • Не вызывает чтение датчика; используйте read() перед вызовом.
    • Пример:

      float humidity = dht.getHumidity(); // Например, 45.0
      
  • float getTemperature() const

    • Описание: Возвращает значение температуры из последнего успешного чтения.

    • Возвращает: Температура в градусах Цельсия как число с плавающей точкой (например, 23.0).

    • Особенности:

      • Объединяет целую (_data[2]) и дробную (_data[3]) части температуры.
      • Как и в getHumidity(), дробная часть для DHT11 равна 0.
      • Требует предварительного вызова read().
    • Пример:

      float temperature = dht.getTemperature(); // Например, 23.0
      

Примеры использования

Библиотека включает три примера скетчей в папке examples, демонстрирующих базовое использование. Все примеры используют пин 2 для подключения DHT11 и выводят данные в Serial Monitor (9600 бод).

ReadHumidity.ino

  • Описание: Считывает влажность с датчика каждые 2 секунды и выводит её в Serial Monitor.

  • Код:

    #include "Rudiron_DHT11.h"
    Rudiron_DHT11 dht;
    void setup() {
      Serial.begin(9600);
      while (!Serial);
      dht.attach(2);
      Serial.println("Чтение влажности с DHT11...");
    }
    void loop() {
      if (dht.read()) {
            Serial.print("Влажность: ");
            Serial.print(dht.getHumidity(), 1);
            Serial.println(" %");
      } else {
            Serial.println("Ошибка чтения данных с DHT11!");
      }
      delay(2000);
    }
    
  • Особенности:

    • Показывает, как использовать read() и getHumidity().
    • Выводит влажность с одним знаком после запятой для компактности.
    • Интервал 2 секунды соответствует минимальной частоте опроса DHT11.
  • Применение: Мониторинг влажности в теплицах, складах или жилых помещениях.

ReadTemperature.ino

  • Описание: Считывает температуру каждые 2 секунды и выводит её в Serial Monitor.
  • Код: Аналогичен ReadHumidity.ino, но использует getTemperature() и выводит температуру в °C.
  • Особенности:
    • Демонстрирует работу с температурой.
    • Формат вывода удобен для чтения (например, “Температура: 23.0 °C”).
    • Простая структура, подходящая для начинающих.
  • Применение: Температурный контроль в метеостанциях или системах умного дома.

ReadTemperatureAndHumidity.ino

  • Описание: Считывает и отображает одновременно температуру и влажность каждые 2 секунды.

  • Код:

    #include "Rudiron_DHT11.h"
    Rudiron_DHT11 dht;
    void setup() {
      Serial.begin(9600);
      while (!Serial);
      dht.attach(2);
      Serial.println("Чтение температуры и влажности с DHT11...");
    }
    void loop() {
      if (dht.read()) {
            Serial.print("Влажность: ");
            Serial.print(dht.getHumidity(), 1);
            Serial.print(" %\t");
            Serial.print("Температура: ");
            Serial.print(dht.getTemperature(), 1);
            Serial.println(" °C");
      } else {
            Serial.println("Ошибка чтения данных с DHT11!");
      }
      delay(2000);
    }
    
  • Особенности:

    • Комбинирует вызовы getHumidity() и getTemperature() в одном цикле.
    • Выводит данные в одной строке с табуляцией для удобства чтения.
    • Полезен для приложений, требующих оба параметра.
  • Применение: Комплексный мониторинг окружающей среды (например, в климат-контроле).

Инструкции для примеров:

  1. Подключите пин данных DHT11 к пину 2.
  2. Загрузите скетч через Arduino IDE.
  3. Откройте Serial Monitor (Ctrl+Shift+M, 9600 бод).
  4. Наблюдайте за показаниями или сообщениями об ошибках.

Проблемы и решения

Проблемы и решения: GitFlic Проблемы.


Последнее обновление: 1 апреля 2025