Raspberry Pi Pico: датчики температуры и влажности DHT11/DHT22 (MicroPython)

В этом руководстве показано, как считывать температуру и влажность с датчиков DHT11 или DHT22 с помощью платы Raspberry Pi Pico с прошивкой MicroPython.

Raspberry Pi Pico с датчиком температуры и влажности DHT11 DHT22 MicroPython

Примечание

Предпочитаете использовать Arduino IDE? Ознакомьтесь со следующим руководством: Raspberry Pi Pico: датчик температуры и влажности DHT11/DHT22 (Arduino IDE).

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

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

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

import dht
from machine import Pin

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

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

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

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

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

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

Для выполнения данного руководства вам необходимо установить прошивку MicroPython на плату Raspberry Pi Pico. Также вам понадобится IDE для написания и загрузки кода на плату.

Рекомендуемой IDE для MicroPython на Raspberry Pi Pico является Thonny IDE. Следуйте следующему руководству, чтобы узнать, как установить Thonny IDE, прошить прошивку MicroPython и загрузить код на плату.

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

Датчики 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 на плате расширения (breakout board), он имеет только три вывода и встроенный подтягивающий резистор на выводе 2.

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

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

Вывод DHT

Подключение

1

3.3V

2

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

3

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

4

GND

Плата расширения датчика DHT

Если у вас датчик DHT11 или DHT22 на плате расширения, он имеет только три вывода и встроенный подтягивающий резистор на выводе данных.

Датчик DHT22 на плате расширения

В этом случае подключение еще проще, и вам не нужно подключать внешний резистор. Платы расширения DHT обычно имеют маркировку на выводах: GND, VCC и DATA.

Вывод DHT

Подключение

GND

GND

VCC

3V3(OUT)

DAT

GPIO 22 (или любой другой цифровой вывод)

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

Raspberry Pi Pico с датчиком DHT

Вот список компонентов, необходимых для сборки схемы (если у вас нет платы расширения DHT, вам понадобится резистор 4.7 кОм):

  • Raspberry Pi Pico

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

  • Резистор 4.7 кОм или аналогичного номинала (не нужен, если у вас есть плата расширения DHT)

  • Макетная плата (breadboard)

  • Соединительные провода

Подключение DHT11/DHT22 к Raspberry Pi Pico

Подключите датчик DHT22 или DHT11 к Raspberry Pi Pico, как показано на следующей схеме. Если у вас есть плата расширения DHT, игнорируйте резистор.

Схема подключения Raspberry Pi Pico с датчиком DHT (Fritzing)

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

Вам также может быть полезно: Руководство по выводам Raspberry Pi Pico и Pico W: объяснение GPIO.

Raspberry Pi Pico с датчиком DHT – код

Откройте новый файл в Thonny IDE или другой MicroPython IDE по вашему выбору и скопируйте следующий код.

from machine import Pin
from time import sleep
import dht

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

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 22. Используйте следующую команду, если вы используете датчик DHT22:

sensor = dht.DHT22(Pin(22))

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

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

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

Примечание

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

В операторе 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.')

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

Сохраните код на плату Raspberry Pi Pico с помощью Thonny IDE или любой другой MicroPython IDE по вашему выбору.

Скопируйте приведенный выше код в новый файл в Thonny IDE.

Скрипт датчика DHT в MicroPython Thonny IDE

После копирования кода в файл нажмите на иконку Сохранить. Затем выберите Raspberry Pi Pico.

Сохранение файла на Raspberry Pi Pico в MicroPython IDE

Сохраните файл с именем: main.py.

Сохранение файла main.py в MicroPython Thonny IDE

Примечание

Когда вы называете файл main.py, Raspberry Pi Pico будет автоматически запускать этот файл при загрузке. Если вы назовете его по-другому, он все равно будет сохранен в файловой системе платы, но не будет запускаться автоматически при загрузке.

Перезагрузите плату (отключите и подключите ее к компьютеру). Нажмите маленькую зеленую кнопку «Run Current Script» или нажмите F5.

Запуск скрипта в Thonny IDE

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

Отображение показаний DHT на Raspberry Pi Pico в оболочке MicroPython

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

Если ваш датчик DHT не может получить показания, ознакомьтесь с руководством по устранению неполадок DHT, которое поможет вам решить проблему (хотя это руководство по устранению неполадок для Arduino IDE, большинство проблем связаны с аппаратной частью, поэтому большинство советов полезны независимо от используемого языка программирования).

Заключение

В этом руководстве вы узнали, как подключить датчики температуры DHT11 и DHT22 к Raspberry Pi Pico и как получить показания температуры и влажности с помощью прошивки MicroPython.

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