
Оглавление:
- Шаг 1. Как работает I2c
- Шаг 2: Библиотека
- Шаг 3: поведение
- Шаг 4: Использование I2c
- Шаг 5: Использование One Wire
- Шаг 6: неявное чтение
- Шаг 7: простое чтение
- Шаг 8: полное чтение
- Шаг 9: Схема подключения
- Шаг 10: Arduino: OneWire
- Шаг 11: Arduino: I2c
- Шаг 12: Esp8266 (D1Mini) OneWire
- Шаг 13: Esp8266 (D1Mini) I2c
- Шаг 14: Спасибо
2025 Автор: John Day | [email protected]. Последнее изменение: 2025-01-23 15:05

Вы можете найти обновления и другие новости на моем сайте
Мне нравится датчик, который можно использовать с 2-х проводным (протокол i2c), но мне нравится недорогой.
Это библиотека Arduino и esp8266 для серии очень недорогих датчиков температуры / влажности DHT12 (менее 1 доллара США), которые работают с i2c или однопроводным соединением.
Очень полезно, если вы хотите использовать esp01 (если вы используете последовательный порт, у вас только 2 контакта), чтобы считывать влажность и температуру и отображать их на ЖК-дисплее i2c.
Я читал, что иногда кажется, что нужна калибровка, но у меня есть дерево, и я получаю значение, очень похожее на DHT22. Если у вас есть калибровка этой проблемы, откройте проблему на github, и я добавлю реализацию.
Шаг 1. Как работает 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

Шаг 11: Arduino: I2c

Шаг 12: Esp8266 (D1Mini) OneWire

Шаг 13: Esp8266 (D1Mini) I2c

Шаг 14: Спасибо
Детская площадка Arduino (https://playground.arduino.cc/Main/DHT12SensorLibrary)
Серия проектов i2c (Сборник):
- Датчик температуры и влажности
- Аналоговый расширитель
- Цифровой расширитель
- ЖК дисплей
Рекомендуемые:
Как использовать датчик влажности и температуры DHT12 I2C с Arduino: 7 шагов

Как использовать датчик влажности и температуры DHT12 I2C с Arduino: в этом руководстве мы узнаем, как использовать датчик влажности и температуры DHT12 I2C с Arduino и отображать значения на OLED-дисплее. Посмотрите видео
Создание-Предупреждение-Использование-Ubidots-ESP32 + Датчик температуры и влажности: 9 шагов

Создание-Предупреждение-Использование-Ubidots-ESP32 + Датчик температуры и влажности: в этом руководстве мы будем измерять различные данные о температуре и влажности с помощью датчика температуры и влажности. Вы также узнаете, как отправить эти данные в Ubidots. Так что вы можете анализировать его из любого места для разных приложений. Также, создав emai
Raspberry Pi - HIH6130 I2C Датчик влажности и температуры Руководство по Java: 4 шага

Raspberry Pi - Датчик влажности и температуры HIH6130 I2C Руководство по Java: HIH6130 - датчик влажности и температуры с цифровым выходом. Эти датчики обеспечивают уровень точности ± 4% относительной влажности. С лучшей в отрасли долговременной стабильностью, истинной температурной компенсацией цифрового I2C, лучшей в отрасли надежностью, энергоэффективностью
Беспроводной монитор влажности (ESP8266 + датчик влажности): 5 шагов

Беспроводной монитор влажности (ESP8266 + датчик влажности): я покупаю петрушку в горшке, и большую часть дня почва была сухой. Поэтому я решил сделать этот проект, касающийся определения влажности почвы в горшке с петрушкой, чтобы проверить, когда мне нужно полить почву водой. Я думаю, что этот датчик (емкостной датчик влажности v1.2) хорош, потому что
Быстрое, быстрое, дешевое, красивое светодиодное освещение комнаты (для всех): 5 шагов (с изображениями)

Быстрое, быстрое, дешевое, красивое светодиодное освещение комнаты (для всех): Приветствую всех :-) Это мое первое руководство, поэтому комментарии приветствуются :-) Я надеюсь показать вам, как быстро сделать светодиодное освещение на Крошечный жучок. Что вам понадобится: кабели, светодиоды, резисторы (510 Ом на 12 В), скобы, паяльник, резцы и прочее