Оглавление:

DHT12 (дешевый датчик влажности и температуры i2c), быстрое и простое использование: 14 шагов
DHT12 (дешевый датчик влажности и температуры i2c), быстрое и простое использование: 14 шагов

Видео: DHT12 (дешевый датчик влажности и температуры i2c), быстрое и простое использование: 14 шагов

Видео: DHT12 (дешевый датчик влажности и температуры i2c), быстрое и простое использование: 14 шагов
Видео: Andrey Vlasovskikh, JetBrains - What Python Can Do with Microcontrollers 2024, Ноябрь
Anonim
DHT12 (дешевый датчик влажности и температуры i2c), быстрое и простое использование
DHT12 (дешевый датчик влажности и температуры i2c), быстрое и простое использование

Вы можете найти обновления и другие новости на моем сайте

Мне нравится датчик, который можно использовать с 2-х проводным (протокол i2c), но мне нравится недорогой.

Это библиотека Arduino и esp8266 для серии очень недорогих датчиков температуры / влажности DHT12 (менее 1 доллара США), которые работают с i2c или однопроводным соединением.

Очень полезно, если вы хотите использовать esp01 (если вы используете последовательный порт, у вас только 2 контакта), чтобы считывать влажность и температуру и отображать их на ЖК-дисплее i2c.

Я читал, что иногда кажется, что нужна калибровка, но у меня есть дерево, и я получаю значение, очень похожее на DHT22. Если у вас есть калибровка этой проблемы, откройте проблему на github, и я добавлю реализацию.

Шаг 1. Как работает I2c

Как работает I2c
Как работает I2c

I2C работает с двумя проводами: SDA (линия передачи данных) и SCL (линия синхронизации).

Обе эти линии имеют открытый сток, но подтянуты резисторами.

Обычно на линии есть один мастер и один или несколько подчиненных, хотя может быть несколько мастеров, но об этом мы поговорим позже.

И ведущие, и ведомые устройства могут передавать или принимать данные, поэтому устройство может находиться в одном из этих четырех состояний: ведущее передается, ведущее принимает, ведомое передает, ведомое принимает.

Шаг 2: Библиотека

Вы можете найти мою библиотеку здесь.

Скачать

Нажмите кнопку СКАЧАТЬ в правом верхнем углу, переименуйте несжатую папку в DHT12.

Убедитесь, что папка DHT содержит DHT12.cpp и DHT12.h.

Поместите папку библиотеки DHT в вашу папку / libraries /.

Вам может потребоваться создать подпапку библиотек, если это ваша первая библиотека.

Перезагрузите IDE.

Шаг 3: поведение

Эта библиотека пытается имитировать поведение стандартных датчиков библиотеки DHT (и копирует много кода), и я добавляю код для управления i2c olso таким же образом.

Метод такой же, как и в библиотечном датчике DHT, с некоторыми добавлением функции точки росы.

Шаг 4: Использование I2c

Для использования с i2c (адрес по умолчанию и вывод SCL SDA по умолчанию) конструктор:

DHT12 dht12;

и возьмите значение по умолчанию для вывода SDA SCL.

(Возможно переопределение с помощью указанного конструктора для esp8266, необходимого для ESP-01). или

DHT12 dht12 (uint8_t addressOrPin)

addressOrPin -> адрес

изменить адрес.

Шаг 5: Использование One Wire

Чтобы использовать один провод:

DHT12 dht12 (uint8_t addressOrPin, истина)

addressOrPin -> контакт

логическое значение - это выбор режима oneWire или i2c.

Шаг 6: неявное чтение

Вы можете использовать его с «неявным», «простым чтением» или «полным считыванием»: неявное, только первое чтение выполняет истинное считывание датчика, другое считывание выполняется за 2 секунды. interval - это сохраненное значение первого чтения.

// Считывание датчика имеет истекшее время 2 секунды, если вы не передаете параметр force

// Считываем температуру в градусах Цельсия (по умолчанию) float t12 = dht12.readTemperature (); // Считываем температуру по Фаренгейту (isFahrenheit = true) float f12 = dht12.readTemperature (true); // Показания датчика также могут быть "старыми" до 2 секунд (это очень медленный датчик) float h12 = dht12.readHumidity (); // Вычислить индекс тепла в градусах Фаренгейта (по умолчанию) float hif12 = dht12.computeHeatIndex (f12, h12); // Вычислить индекс тепла в градусах Цельсия (isFahreheit = false) float hic12 = dht12.computeHeatIndex (t12, h12, false); // Вычислить точку росы в градусах Фаренгейта (по умолчанию) float dpf12 = dht12.dewPoint (f12, h12); // Вычислить точку росы в градусах Цельсия (isFahreheit = false) float dpc12 = dht12.dewPoint (t12, h12, false);

Шаг 7: простое чтение

Простое чтение, чтобы получить статус прочитанного.

// Считывание датчика имеет истекшее время 2 секунды, если вы не передаете параметр force

bool chk = dht12.read (); // истинное чтение нормально, ложное чтение проблема

// Считываем температуру в градусах Цельсия (по умолчанию)

float t12 = dht12.readTemperature (); // Считываем температуру по Фаренгейту (isFahrenheit = true) float f12 = dht12.readTemperature (true); // Показания датчика также могут быть "старыми" до 2 секунд (это очень медленный датчик) float h12 = dht12.readHumidity (); // Вычислить индекс тепла в градусах Фаренгейта (по умолчанию) float hif12 = dht12.computeHeatIndex (f12, h12); // Вычислить индекс тепла в градусах Цельсия (isFahreheit = false) float hic12 = dht12.computeHeatIndex (t12, h12, false); // Вычислить точку росы в градусах Фаренгейта (по умолчанию) float dpf12 = dht12.dewPoint (f12, h12); // Вычислить точку росы в градусах Цельсия (isFahreheit = false) float dpc12 = dht12.dewPoint (t12, h12, false);

Шаг 8: полное чтение

Полное чтение для получения указанного статуса.

// Считывание датчика имеет истекшее время 2 секунды, если вы не передаете параметр force

DHT12:: ReadStatus chk = dht12.readStatus (); Serial.print (F ("\ nЧитать датчик:")); переключатель (chk) {case DHT12:: OK: Serial.println (F ("OK")); перерыв; case DHT12:: ERROR_CHECKSUM: Serial.println (F ("Ошибка контрольной суммы")); перерыв; case DHT12:: ERROR_TIMEOUT: Serial.println (F ("Ошибка тайм-аута")); перерыв; case DHT12:: ERROR_TIMEOUT_LOW: Serial.println (F ("Ошибка тайм-аута при низком уровне сигнала, попробуйте установить высокое сопротивление подтягивания")); перерыв; case DHT12:: ERROR_TIMEOUT_HIGH: Serial.println (F ("Ошибка тайм-аута при низком уровне сигнала, попробуйте установить низкое сопротивление подтягивания")); перерыв; case DHT12:: ERROR_CONNECT: Serial.println (F («Ошибка подключения»)); перерыв; case DHT12:: ERROR_ACK_L: Serial.println (F ("Ошибка AckL")); перерыв; case DHT12:: ERROR_ACK_H: Serial.println (F ("Ошибка AckH")); перерыв; case DHT12:: ERROR_UNKNOWN: Serial.println (F («ОБНАРУЖЕНА неизвестная ошибка»)); перерыв; case DHT12:: NONE: Serial.println (F («Нет результата»)); перерыв; по умолчанию: Serial.println (F («Неизвестная ошибка»)); перерыв; }

// Считываем температуру в градусах Цельсия (по умолчанию)

float t12 = dht12.readTemperature (); // Считываем температуру по Фаренгейту (isFahrenheit = true) float f12 = dht12.readTemperature (true); // Показания датчика также могут быть "старыми" до 2 секунд (это очень медленный датчик) float h12 = dht12.readHumidity (); // Вычислить индекс тепла в градусах Фаренгейта (по умолчанию) float hif12 = dht12.computeHeatIndex (f12, h12); // Вычислить индекс тепла в градусах Цельсия (isFahreheit = false) float hic12 = dht12.computeHeatIndex (t12, h12, false); // Вычислить точку росы в градусах Фаренгейта (по умолчанию) float dpf12 = dht12.dewPoint (f12, h12); // Вычислить точку росы в градусах Цельсия (isFahreheit = false) float dpc12 = dht12.dewPoint (t12, h12, false);

Шаг 9: Схема подключения

С примерами есть схема подключения, важно использовать правильный подтягивающий резистор.

Спасибо Bobadas, dplasa и adafruit за публикацию кода в github (где я беру код и идеи).

Шаг 10: Arduino: OneWire

Ардуино: OneWire
Ардуино: OneWire

Шаг 11: Arduino: I2c

Ардуино: I2c
Ардуино: I2c

Шаг 12: Esp8266 (D1Mini) OneWire

Esp8266 (D1Mini) OneWire
Esp8266 (D1Mini) OneWire

Шаг 13: Esp8266 (D1Mini) I2c

Esp8266 (D1Mini) I2c
Esp8266 (D1Mini) I2c

Шаг 14: Спасибо

Детская площадка Arduino (https://playground.arduino.cc/Main/DHT12SensorLibrary)

Серия проектов i2c (Сборник):

  • Датчик температуры и влажности
  • Аналоговый расширитель
  • Цифровой расширитель
  • ЖК дисплей

Рекомендуемые: