MicroPython: ESP32/ESP8266 с датчиком температуры и влажности DHT11/DHT22
В этом руководстве показано, как использовать датчики температуры и влажности DHT11 или DHT22 с платами ESP32 и ESP8266 с использованием прошивки MicroPython.
Использование модуля 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:
Thonny IDE:
uPyCraft IDE:
Знакомство с датчиками DHT11 и DHT22
Датчики DHT11 и DHT22 используются для измерения температуры и относительной влажности. Они очень популярны среди мейкеров и любителей электроники.
Эти датчики содержат чип, который выполняет аналого-цифровое преобразование и выдает цифровой сигнал с данными о температуре и влажности. Это делает их очень простыми в использовании с любым микроконтроллером.
DHT11 и DHT22: сравнение
Датчики DHT11 и DHT22 очень похожи, но различаются по своим характеристикам. В следующей таблице сравниваются некоторые из наиболее важных характеристик датчиков температуры и влажности DHT11 и DHT22. Для более подробного анализа этих датчиков обратитесь к техническим описаниям (datasheet) датчиков.
Параметр |
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 и DHT11. Когда датчик обращен к вам лицевой стороной, нумерация контактов начинается с 1 слева направо.
Контакт DHT |
Подключение |
|---|---|
1 |
3.3V |
2 |
Любой цифровой GPIO; также подключите подтягивающий резистор 10 кОм |
3 |
Не подключать |
4 |
GND |
Необходимые компоненты
Для выполнения этого руководства вам необходимо подключить датчик температуры DHT11 или DHT22 к плате ESP32 или ESP8266. Вам понадобится подтягивающий резистор 10 кОм.
Вот список компонентов, необходимых для сборки схемы:
ESP32 или ESP8266 (читайте ESP32 vs ESP8266)
Схема подключения: ESP32 с DHT11/DHT22
Подключите датчик DHT22 или DHT11 к плате ESP32 согласно следующей схеме.
В этом примере мы подключаем пин данных DHT к GPIO 14. Однако вы можете использовать любой другой подходящий цифровой пин.
Узнайте, как использовать GPIO ESP32, в нашем руководстве: Распиновка ESP32: какие GPIO пины следует использовать?
Схема подключения: ESP8266 с DHT11/DHT22
Используйте следующую схему, если вы работаете с платой ESP8266.
Код
Откройте новый файл в вашей 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.
Нажмите OK, чтобы загрузить код на плату.
После загрузки кода нажмите кнопку RESET на плате.
Новые показания температуры и влажности должны отображаться в терминале MicroPython Shell каждые две секунды.
Если вы используете uPyCraft IDE и у вас возникли проблемы с загрузкой кода, перейдите к следующему руководству и прокрутите до раздела «Running Your First Script»: Начало работы с MicroPython на ESP32 и ESP8266.
Устранение неполадок
Если ваш датчик DHT не получает показания, прочитайте наше руководство по устранению неполадок DHT, чтобы помочь вам решить проблему.
Заключение
Получение показаний температуры и влажности с MicroPython очень просто благодаря модулю dht. После определения объекта dht вам нужно лишь использовать методы temperature() и humidity().
Надеемся, что это руководство было полезным. Теперь вы можете отображать показания датчика на веб-сервере, к которому можно получить доступ со смартфона, или отправлять показания на IoT-платформу через протокол MQTT. Ознакомьтесь со следующими руководствами: