DHT12 (i2c сензор за евтина влажност и температура), бързо и лесно използване: 14 стъпки
DHT12 (i2c сензор за евтина влажност и температура), бързо и лесно използване: 14 стъпки
Anonim
DHT12 (i2c сензор за евтина влажност и температура), бързо и лесно използване
DHT12 (i2c сензор за евтина влажност и температура), бързо и лесно използване

Можете да намерите актуализация и други на моя сайт

Харесва ми сензор, който може да се използва с 2 проводника (протокол i2c), но обичам евтиния.

Това е библиотека на Arduino и esp8266 за серията DHT12 на много ниски разходни сензори за температура/влажност (по -малко от 1 $), които работят с i2c или едножична връзка.

Много полезно, ако искате да използвате esp01 (ако използвате сериен, имате само 2 пина), за да прочетете влажността и температурата и да ги покажете на i2c LCD.

AI прочетох, че понякога изглежда, че има нужда от калибриране, но имам дърво на това и получавам стойност, много подобна на DHT22. Ако имате калибриране на този проблем, отворете проблема в github и добавям изпълнение.

Стъпка 1: Как работи I2c

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

I2C работи с двата си проводника, SDA (линия за данни) и SCL (линия на часовника).

И двете линии са с отворен дренаж, но са изтеглени с резистори.

Обикновено на линията има един главен и един или няколко подчинени, въпреки че може да има няколко господари, но ще говорим за това по -късно.

И господарите, и подчинените могат да предават или получават данни, следователно, устройството може да бъде в едно от тези четири състояния: главно предаване, главно приемане, предаване на подчинено устройство, приемане на подчинено устройство.

Стъпка 2: Библиотека

Моята библиотека можете да намерите тук.

За изтегляне

Щракнете върху бутона ИЗТЕГЛЯНЕ в горния десен ъгъл, преименувайте некомпресираната папка DHT12.

Проверете дали папката DHT съдържа DHT12.cpp и DHT12.h.

Поставете папката на библиотеката DHT във вашата / библиотеки / папка.

Може да се наложи да създадете подпапка библиотеки, ако това е първата ви библиотека.

Рестартирайте IDE.

Стъпка 3: Behaivor

Тази библиотека се опитва да подражава на поведението на стандартните DHT библиотечни сензори (и копира много код) и добавям кода за управление на i2c също по същия начин.

Методът е същият за DHT библиотечния сензор, като някои добавят подобна функция на точката на оросяване.

Стъпка 4: Използване на I2c

За да се използва с i2c (адрес по подразбиране и SDA SCL щифт по подразбиране) конструкторът е:

DHT12 dht12;

и вземете стойността по подразбиране за SDA SCL щифт.

(Възможно е предефиниране с посочен конструктор за esp8266, необходим за ESP-01). или

DHT12 dht12 (uint8_t адресOrPin)

addressOrPin -> адрес

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

Стъпка 5: Използване на един проводник

За да използвате един проводник:

DHT12 dht12 (uint8_t адресOrPin, вярно)

addressOrPin -> ПИН

булева стойност е изборът на режим oneWire или i2c.

Стъпка 6: Неявно четене

Можете да го използвате с "неявно", "просто четене" или "пълно четене": Имплицитно, само първото четене прави истинско четене на сензора, другото четене става за 2 секунди. interval са запаметената стойност за първо четене.

// Отчитането на сензора има 2 секунди изминало време, освен ако не предадете параметър сила

// Четене на температурата като Целзий (по подразбиране) 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 секунди изминало време, освен ако не предадете параметър сила

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 секунди изминало време, освен ако не предадете параметър сила

DHT12:: ReadStatus chk = dht12.readStatus (); Serial.print (F ("\ nЧетене на сензора:")); switch (chk) {case DHT12:: OK: Serial.println (F ("OK")); прекъсване; случай DHT12:: ERROR_CHECKSUM: Serial.println (F ("Грешка в контролната сума")); прекъсване; регистър DHT12:: ERROR_TIMEOUT: Serial.println (F ("Timeout error")); прекъсване; случай DHT12:: ERROR_TIMEOUT_LOW: Serial.println (F ("Грешка при изчакване при нисък сигнал, опитайте да поставите висока устойчивост на издърпване")); прекъсване; случай DHT12:: ERROR_TIMEOUT_HIGH: Serial.println (F ("Грешка при изчакване при нисък сигнал, опитайте да поставите ниско съпротивление на издърпване")); прекъсване; случай DHT12:: ERROR_CONNECT: Serial.println (F ("Грешка при свързване")); прекъсване; случай DHT12:: ERROR_ACK_L: Serial.println (F ("AckL грешка")); прекъсване; случай DHT12:: ERROR_ACK_H: Serial.println (F ("AckH грешка")); прекъсване; регистър DHT12:: ERROR_UNKNOWN: Serial.println (F ("ОТКРИТА неизвестна грешка")); прекъсване; случай 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

Arduino: OneWire
Arduino: OneWire

Стъпка 11: Arduino: I2c

Arduino: I2c
Arduino: 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 (колекция):

  • Сензор за температурата на влажността
  • Аналогов разширител
  • Цифров разширител
  • ЛСД дисплей

Препоръчано: