MicroPython Skill Builders — #6 Датчики температуры и влажности

MicroPython Skill Builders — датчики температуры и влажности

Добро пожаловать в очередной урок серии MicroPython Skill Builders от Тони Гудью, цель которой — улучшить ваши навыки программирования на MicroPython, знакомя вас с новыми компонентами и техниками кодирования — с использованием Raspberry Pi Pico!

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

Не успели прочитать предыдущие уроки? Загляните в раздел с предыдущими эпизодами серии.

Что вам понадобится

Предполагается, что Thonny уже установлен на вашем компьютере, а Raspberry Pi Pico настроен с актуальной прошивкой MicroPython (UF2). Если нет — ознакомьтесь с руководством по началу работы с Raspberry Pi Pico, где это подробно описано.

Также предполагается, что вы прочли или прошли предыдущие уроки серии (ссылка выше, если нет).

Вам понадобится:

  • Raspberry Pi Pico с контактными штырьками (header pins)

  • Беспаечная макетная плата (полного размера)

  • Кабель Micro-USB (для питания и программирования Pico)

  • Перемычки (jumper wires) (папа-папа и папа-мама)

  • Датчик DHT11 или DHT22

  • Опционально — резистор (при использовании немонтированных датчиков; подробнее — ниже)

Варианты датчиков

Набор сенсоров Waveshare содержит датчик DHT11 на удобной плате с коннекторами, но его также можно приобрести как отдельный компонент.

DHT22 очень похож, но немного точнее; он доступен в монтированном и немонтированном вариантах. Монтированные версии имеют удобный индикаторный светодиод питания.

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

Датчики DHT11 и DHT22

Распиновка DHT11/DHT22

Монтированные датчики

Монтированные платы имеют три контакта:

  • DOUT — подключается к любому выводу GPIO. Мы будем использовать GP0

  • GND — подключается к шине GND

  • VCC — подключается к шине 3,3 В

Датчик DHT11 — монтированный вариант

Немонтированные датчики

Немонтированные датчики имеют четыре вывода и требуют резистор 4,7 кОм — 10 кОм между двумя контактами. Распиновка одинакова для DHT11.

Сверху вниз:

  • GND — подключается к шине GND

  • NC — не подключается

  • DATA — любой цифровой вывод, мы будем использовать GP0

  • VCC — подключается к шине 3,3 В

Резистор используется для соединения VCC и DATA на макетной плате, как показано ниже:

Схема подключения DHT22 на макетной плате

Программное обеспечение MicroPython для DHT11/DHT22

Очень удобно, что MicroPython уже включает код для работы с этими датчиками в прошивке UF2 для Raspberry Pi Pico. Просмотреть все встроенные процедуры можно с помощью быстрой команды.

Подключите Pico к компьютеру, запустите Thonny и введите в окне Shell в строке приглашения >>> команду help („modules“).

Вы должны увидеть вывод, похожий на следующий:

MicroPython v1.19.1 on 2022-06-18; Raspberry Pi Pico with RP2040

Type "help()" for more information.

>>> help('modules')
__main__          framebuf          uasyncio/funcs    ujson
_boot             gc                uasyncio/lock     umachine
_boot_fat         math              uasyncio/stream   uos
_onewire          micropython       ubinascii         urandom
_rp2              neopixel          ucollections      ure
_thread           onewire           ucryptolib        uselect
_uasyncio         rp2               uctypes           ustruct
builtins          uarray            uerrno            usys
cmath             uasyncio/__init__ uhashlib          utime
dht               uasyncio/core     uheapq            uzlib
ds18x20           uasyncio/event    uio
Plus any modules on the filesystem
>>>

Эти датчики используют библиотеку dht из первого столбца.

Вот код для DHT22:

# Test DHT22 Temperature and Humidity Sensor
# dht library is built into MicroPython

# Needs 4.7K to 10K resistor between 3.3V and signal pin
# Pins VCC, Sig, NC, GND - View from front
from machine import Pin
from time import sleep
import dht

sensor = dht.DHT22(Pin(0))

while True:
    try:
        sleep(1)
        # The DHT22 returns at most one measurement every 1s
        sensor.measure()
        # Retrieves measurements from the sensor
        print(f"Temperature : {sensor.temperature():.1f}")
        print(f"Humidity    : {sensor.humidity():.1f}\n")
        # Transmits the temperature to the terminal
    except OSError as e:
        print('Failed reception')
        # If the pico does not receive the measurements from the sensor

Вот код для DHT11 — изменение только в названии устройства!

# Test DHT11 Temperature and Humidity Sensor
# dht library is built into MicroPython
from machine import Pin
from time import sleep
import dht

sensor = dht.DHT11(Pin(0))

while True:
    try:
        sleep(1)
        # The DHT11 returns at most one measurement every 1s
        sensor.measure()
        # Retrieves measurements from the sensor
        print(f"Temperature : {sensor.temperature():.1f}")
        print(f"Humidity    : {sensor.humidity():.1f}\n")
        # Transmits the temperature to the terminal
    except OSError as e:
        print('Failed reception')
        # If the pico does not receive the measurements from the sensor

Какой бы датчик вы ни выбрали, оба дают похожий вывод — простые и понятные показания:

>>> %Run -c $EDITOR_CONTENT
Temperature : 20.6
Humidity    : 59.3

Temperature : 20.7
Humidity    : 58.2

Temperature : 20.7
Humidity    : 58.2

Temperature : 20.7
Humidity    : 58.2

Temperature : 20.7
Humidity    : 58.2

Это всё весьма просто и понятно — для начала мониторинга окружающей среды нужен минимальный объём кода.

Обратите внимание на задержку в одну секунду в цикле. Этим датчикам требуется не менее секунды между измерениями — чего более чем достаточно, поскольку в большинстве случаев ни температура, ни влажность не меняются очень быстро. Вы также можете сравнить получаемые показания температуры с надёжным альтернативным источником, чтобы понять, нужно ли применять поправочный коэффициент.

Стоит отметить, что эти датчики не предназначены для использования на открытом воздухе или в условиях очень высокой влажности.

Дополнительные ресурсы

Страницы вики Waveshare содержат технические описания датчиков, которые могут быть полезны: