MicroPython: ESP32/ESP8266 с датчиком температуры и влажности DHT11/DHT22

В этом руководстве показано, как использовать датчики температуры и влажности DHT11 или DHT22 с платами ESP32 и ESP8266 с использованием прошивки MicroPython.

MicroPython: ESP32/ESP8266 с датчиком DHT11/DHT22

Использование модуля dht

В MicroPython есть встроенный модуль dht, который по умолчанию входит в состав прошивки MicroPython. Поэтому получение показаний температуры и влажности не составляет труда.

1. Начните с импорта модулей dht и machine:

import dht
from machine import Pin

2. Создайте объект dht, который ссылается на пин данных датчика — в данном случае это GPIO 14:

sensor = dht.DHT11(Pin(14))
#sensor = dht.DHT22(Pin(14))

3. Для измерения и чтения показаний датчика используйте:

sensor.measure()
sensor.temperature()
sensor.humidity()

Продолжайте чтение для получения полного и подробного руководства.

Предварительные требования — Прошивка MicroPython

Для выполнения этого руководства вам нужна прошивка MicroPython, установленная на вашу плату ESP32 или ESP8266. Вам также понадобится IDE для написания и загрузки кода на плату. Мы рекомендуем использовать Thonny IDE или uPyCraft IDE:

Знакомство с датчиками DHT11 и DHT22

Датчики DHT11 и DHT22 используются для измерения температуры и относительной влажности. Они очень популярны среди мейкеров и любителей электроники.

Датчики температуры и влажности DHT11 и DHT22

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

DHT11 и DHT22: сравнение

Датчики DHT11 и DHT22 очень похожи, но различаются по своим характеристикам. В следующей таблице сравниваются некоторые из наиболее важных характеристик датчиков температуры и влажности DHT11 и DHT22. Для более подробного анализа этих датчиков обратитесь к техническим описаниям (datasheet) датчиков.

Параметр

DHT11

DHT22

Внешний вид

DHT11 DHT22

Диапазон температур

от 0 до 50 ºC ±2 ºC

от -40 до 80 ºC ±0,5 ºC

Диапазон влажности

от 20 до 90% ±5%

от 0 до 100% ±2%

Разрешение

Влажность: 1%, Температура: 1 ºC

Влажность: 0,1%, Температура: 0,1 ºC

Рабочее напряжение

3 – 5,5 В DC

3 – 6 В DC

Потребляемый ток

0,5 – 2,5 мА

1 – 1,5 мА

Период опроса

1 секунда

2 секунды

Цена

$1 – $5

$4 – $10

Датчик DHT22 имеет лучшее разрешение и более широкий диапазон измерения температуры и влажности. Однако он немного дороже, и запрашивать показания можно только с интервалом в 2 секунды.

У датчика DHT11 меньший диапазон и меньшая точность. Однако вы можете запрашивать показания каждую секунду. К тому же он немного дешевле.

Несмотря на различия, они работают одинаково, и вы можете использовать один и тот же код для считывания температуры и влажности. Вам нужно лишь выбрать в коде тип используемого датчика.

Распиновка DHT

Датчики DHT имеют четыре контакта, как показано на следующем рисунке. Однако, если вы приобретаете датчик DHT на плате расширения, он имеет только три контакта и встроенный подтягивающий резистор на контакте 2.

Распиновка DHT22

В следующей таблице описана распиновка датчиков DHT22 и DHT11. Когда датчик обращен к вам лицевой стороной, нумерация контактов начинается с 1 слева направо.

Контакт DHT

Подключение

1

3.3V

2

Любой цифровой GPIO; также подключите подтягивающий резистор 10 кОм

3

Не подключать

4

GND

Необходимые компоненты

Для выполнения этого руководства вам необходимо подключить датчик температуры DHT11 или DHT22 к плате ESP32 или ESP8266. Вам понадобится подтягивающий резистор 10 кОм.

Вот список компонентов, необходимых для сборки схемы:

Схема подключения: ESP32 с DHT11/DHT22

Подключите датчик DHT22 или DHT11 к плате ESP32 согласно следующей схеме.

Схема подключения ESP32 с DHT11/DHT22

В этом примере мы подключаем пин данных DHT к GPIO 14. Однако вы можете использовать любой другой подходящий цифровой пин.

Узнайте, как использовать GPIO ESP32, в нашем руководстве: Распиновка ESP32: какие GPIO пины следует использовать?

Схема подключения: ESP8266 с DHT11/DHT22

Используйте следующую схему, если вы работаете с платой ESP8266.

Схема подключения ESP8266 с DHT11/DHT22

Код

Откройте новый файл в вашей IDE для MicroPython (например, uPyCraft IDE или Thonny IDE) и скопируйте следующий код.

# Полные детали проекта на https://RandomNerdTutorials.com

from machine import Pin
from time import sleep
import dht

sensor = dht.DHT22(Pin(14))
#sensor = dht.DHT11(Pin(14))

while True:
  try:
    sleep(2)
    sensor.measure()
    temp = sensor.temperature()
    hum = sensor.humidity()
    temp_f = temp * (9/5) + 32.0
    print('Temperature: %3.1f C' %temp)
    print('Temperature: %3.1f F' %temp_f)
    print('Humidity: %3.1f %%' %hum)
  except OSError as e:
    print('Failed to read sensor.')

Посмотреть исходный код

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

Импортируйте класс Pin из модуля machine для определения пинов, импортируйте метод sleep из модуля time для добавления задержек в код, и, наконец, импортируйте модуль dht для работы с функциями чтения датчиков DHT.

from machine import Pin
from time import sleep
import dht

Определите объект dht с именем sensor на указанном пине данных. В данном случае мы подключаем пин данных к GPIO 14. Используйте следующую команду, если вы используете датчик DHT22:

sensor = dht.DHT22(Pin(14))

Закомментируйте предыдущую строку и раскомментируйте следующую, если вы используете датчик DHT11:

#sensor = dht.DHT11(Pin(14))

В цикле while мы используем конструкции try и except. В блоке try мы пытаемся получить значения температуры и влажности.

Примечание

Конструкция try и except позволяет продолжить выполнение программы при возникновении исключения. Например, когда возникает ошибка, выполнение кода блока try прекращается и передаётся в блок except. В нашем примере исключение особенно полезно для предотвращения сбоя ESP32 или ESP8266, когда невозможно прочитать данные с датчика.

В блоке try сначала добавьте задержку в две секунды, поскольку максимальная частота опроса DHT22 составляет две секунды. В случае DHT11 — одна секунда.

sleep(2)

Перед запросом температуры и влажности необходимо вызвать метод measure() у объекта датчика.

sensor.measure()

Затем считайте температуру с помощью sensor.temperature() и влажность с помощью sensor.humidity(). Сохраните эти показания в переменных temp и hum.

temp = sensor.temperature()
hum = sensor.humidity()

Следующая команда преобразует температуру в градусы Фаренгейта.

temp_f = temp * (9/5) + 32.0

Наконец, выведите все показания в терминал MicroPython с помощью функции print():

print('Temperature: %3.1f C' %temp)
print('Temperature: %3.1f F' %temp_f)
print('Humidity: %3.1f %%' %hum)

В случае ошибки при получении показаний выполняется блок except и выводится сообщение об ошибке:

except OSError as e:
  print('Failed to read sensor.')

Демонстрация

После копирования кода и внесения необходимых изменений вы можете загрузить код на вашу плату ESP32 или ESP8266.

Если вы используете Thonny IDE, просто перейдите в File > Save as…. Затем выберите MicroPython device.

Сохранение на устройство MicroPython в Thonny IDE

Нажмите OK, чтобы загрузить код на плату.

После загрузки кода нажмите кнопку RESET на плате.

Новые показания температуры и влажности должны отображаться в терминале MicroPython Shell каждые две секунды.

Показания DHT в терминале MicroPython

Если вы используете uPyCraft IDE и у вас возникли проблемы с загрузкой кода, перейдите к следующему руководству и прокрутите до раздела «Running Your First Script»: Начало работы с MicroPython на ESP32 и ESP8266.

Устранение неполадок

Если ваш датчик DHT не получает показания, прочитайте наше руководство по устранению неполадок DHT, чтобы помочь вам решить проблему.

Заключение

Получение показаний температуры и влажности с MicroPython очень просто благодаря модулю dht. После определения объекта dht вам нужно лишь использовать методы temperature() и humidity().

Надеемся, что это руководство было полезным. Теперь вы можете отображать показания датчика на веб-сервере, к которому можно получить доступ со смартфона, или отправлять показания на IoT-платформу через протокол MQTT. Ознакомьтесь со следующими руководствами: