DHT11 DHT22 com Raspberry Pi Pico usando MicroPython

Tempo de leitura: 8 minutes

Este tutorial mostra como fazer a interface dos sensores de temperatura e umidade DHT11/DHT22 com o Raspberry Pi Pico usando o MicroPython. Primeiro, aprenderemos a fazer a interface do DHT22 com o Raspberry Pi Pico. Depois disso, veremos o código de exemplo do MicroPython para medir a temperatura e a umidade atuais e exibi-lo no terminal MicroPython. Em segundo lugar, veremos um exemplo do MicroPython para exibir essas leituras do sensor em um OLED SSD1306.

 

Pré-requisitos

Antes de começarmos esta lição, certifique-se de que você esteja familiarizado e tenha a versão mais recente do Python 3 em seu sistema, tenha configurado o MicoPython no Raspberry Pi Pico e tenha um Ambiente de Desenvolvimento Integrado (IDE) em execução no qual faremos a programação. Usaremos o mesmo Thonny IDE que usamos anteriormente quando aprendemos a piscar e perseguir LEDs em micro-python.

 

Introdução DHT11/DHT22

O DHT11/DHT22 é um sensor que mede a umidade relativa e o sensor de temperatura. Fornece uma saída digital calibrada com protocolo de 1 fio. Ambos os sensores são baratos. Eles são bastante semelhantes entre si com algumas diferenças de especificações.

O DHT22 é quase semelhante ao DHT11, mas o primeiro mede a temperatura e a umidade com maior precisão e suporta uma faixa mais ampla.

 

DHT11 vs DHT22

A tabela a seguir lista a comparação de ambos os sensores DHT.

DHT22DHT11
Temperatura-40 a 80 ºC +/- 0,5 ºC0 a 50 ºC +/-2 ºC
Umidade0 a 100% +/-2%20 a 90% +/-5%
ResoluçãoUmidade: 0,1% Temperatura: 0,1ºCUmidade: 1% Temperatura: 1ºC
Tensão operacional3-6 V DC (alimentação direta do Raspberry Pi Pico)3-5,5 V DC (alimentação direta do Raspberry Pi Pico)
Tempo de amostragem2 segundos1 segundo
Classificação atual$4 a $10$1 a $5
Output data typefloatint
Pinout4 pinos (o mesmo que DHT11)4 pinos (o mesmo que DHT22)

Como você pode ver na tabela de comparação acima, o DHT22 oferece maior faixa de temperatura e resolução para temperatura e umidade. Mas é mais caro que o DHT11. No entanto, DHT11 tem um melhor período de amostragem. Além disso, a faixa de tensão de operação para ambos os sensores é quase e podemos alimentar esses sensores diretamente dos pinos de alimentação do Raspberry Pi Pico.

Independentemente das diferenças acima, ambos os sensores DHT têm o mesmo princípio de funcionamento e a mesma pinagem. Podemos usar o mesmo script MicroPython para ler as leituras de temperatura e umidade selecionando o tipo DHT dentro do código.

Os sensores DHT são pré-calibrados. Podemos conectá-los diretamente ao Raspberry Pi Pico para obter a leitura da saída do sensor. Eles são compostos internamente por um sensor de detecção de umidade e um termistor. Esses dois componentes medem a umidade e a temperatura.

 

Pinagem DHT11/DHT22

A figura a seguir mostra o diagrama de pinagem dos sensores DHT. O sensor DHT consiste em quatro pinos. Mas nos módulos DHT apenas três pinos são expostos à pinagem do módulo e o resistor pull-up de 10k ohm é conectado internamente ao pino 2.

Descrição do pino

A seguir lista a pinagem do sensor DHT e sua breve descrição. O número do pino começa da esquerda para a direita quando você segura o sensor pela extremidade frontal.

DHT11/DHT22 PinoConexão com Raspberry Pi Pico
1 ( VCC)3.3V
2 (Data Out)Quaisquer pinos GPIO do Raspberry Pi Pico junto com resistência de pull-up de 10k ohmr
3 (NC)Não usado
4 (GND)Terra
  • Vcc é o pino da fonte de alimentação. Aplique tensão em uma faixa de 3,3 V a 5,0 V a este pino
  • Data Out é o pino de saída digital. Ele envia o valor da temperatura e umidade medida na forma de dados seriais
  • N/C não está conectado
  • GND: Conecte o pino GND

Peças necessárias

Você vai precisar dos seguintes componentes

  • Raspberry PI Pico
  • DHT11 e DHT22
  • Protoboard
  • Resistor de 10K ohm (não necessário se estiver usando a versão do módulo do sensor)
  • Fios de ligação

Interface DHT22 com Raspberry Pi Pico

Conecte o DHT22 ao Raspberry Pi Pico junto com um resistor pull-up de 10K ohm. O diagrama de conexão é mostrado na figura abaixo.

  • O primeiro pino para ambos os sensores é um pino de fonte de alimentação (Vcc). Conecte-o com o pino de 3,3 volts do Raspberry Pi Pico.
  • Data out é o pino pelo qual obtemos amostras de temperatura e umidade do sensor DHT. Conecte este pino com o GPIO2 do Raspberry Pi Pico e também conecte o pino de dados com um resistor pull-up de 10k. Mas você também pode usar qualquer pino digital do Raspberry Pi Pico.

Um resistor de pull-up é usado para manter o pino de dados alto para comunicação adequada entre o microcontrolador e o sensor. Você pode verificar a folha de dados do DHT11 e DHT22 para obter mais informações sobre ele. DHT22 também é conhecido pelo nome de AM2302.

  • Terceiro pino não é usado
  • Conecte o quarto pino (GND) ao pino terra da placa

 

Código MicroPython DHT11/DHT22 Raspberry Pi Pico

Agora vamos ver o script MicroPython para DHT11/DHT22 para obter as leituras do sensor. Copie o código a seguir para o arquivo main.py e carregue o arquivo main.py para o Raspberry Pi Pico.

Este script MicroPython lê as leituras de temperatura e umidade do sensor DHT22 e as imprime no console do shell MicroPython.

from machine import Pin
from time import sleep
import dht
 
sensor = dht.DHT22(Pin(2)) 
 
while True:
    sensor.measure()
    temp = sensor.temperature()
    hum = sensor.humidity()
    print("Temperature: {}°C   Humidity: {:.0f}% ".format(temp, hum))
    sleep(2)

 

Como o Código Funciona?

Primeiramente, importamos o módulo Pin, dht e sleep para que possamos acessar seus métodos através de suas classes definidas.

from machine import Pin
from time import sleep
import dht

Em seguida, definiremos um objeto dht chamado ‘sensor’ e atribuiremos o pino de dados a ele. Aqui estamos usando o sensor DHT22 com pino de dados conectado no GPIO2. Se estiver usando DHT11, substitua ‘DHT22’ por ‘DHT11’ e altere o número do pino adequadamente.

sensor = dht.DHT22(Pin(2))

Dentro do loop infinito, obteremos a leitura de temperatura e umidade e a salvaremos em ‘temp’ e ‘hum’ respectivamente. Eles serão impressos no console do shell após um atraso de 2 segundos.

while True:
    sensor.measure()
    temp = sensor.temperature()
    hum = sensor.humidity()
    print("Temperature: {}°C   Humidity: {:.0f}% ".format(temp, hum))
    sleep(2)

 

Demonstração

Para testar o script MicroPython para DHT22 com Raspberry Pi Pico, carregue o arquivo main.py em sua placa.

Você verá as leituras do sensor sendo impressas no console do shell a cada dois segundos da seguinte forma:

 

MicroPython exibindo valores do sensor DHT11/DHT22 no display OLED com Raspberry Pi Pico

Nesta seção, veremos como exibir leituras DHT em um display OLED 0,96 SSD1306 usando MicroPython e Raspberry Pi Pico.

Biblioteca MicroPython de exibição OLED SSD1306

Para um display OLED, também precisaremos carregar uma biblioteca para o Raspberry Pi Pico.

  • Para fazer isso com sucesso, abra seu Thonny IDE com seu Raspberry Pi Pico conectado ao seu sistema. Vá para Tools > Manage Packages. Isso abrirá o Thonny Package Manager.

Pesquise “ssd1306” na barra de pesquisa digitando seu nome e clicando no botão “Search on PyPI”.

  • A partir dos seguintes resultados de pesquisa, clique no destacado abaixo: micropython-ssd1306

Instale esta biblioteca.

Após alguns momentos, esta biblioteca será instalada com sucesso. Agora estamos prontos para programar nosso Raspberry Pi Pico com display OLED.

 

Conectando a tela OLED SSD1306 com Raspberry Pi Pico e DHT11/DHT22

Precisaremos dos seguintes componentes para conectar nosso Raspberry Pi Pico ao display OLED e HC-SR04.

  • Raspberry PI Pico
  • DHT11/DHT22
  • Tela OLED SSD1306
  • Fios de conexão

O display OLED possui 4 terminais que iremos conectar com o Raspberry Pi Pico. Como o display OLED requer uma tensão de operação na faixa de 3,3-5V, conectaremos o terminal VCC com 3,3V que será comum com a placa e o sensor. O SCL do display será conectado com o pino SCL do módulo e o SDA do display será conectado com o SDA do módulo. O aterramento de todos os três dispositivos será mantido em comum.

As conexões entre os três dispositivos que estamos usando podem ser vistas abaixo.

SSD1306 OLED DisplayRaspberry Pi Pico
VCC3.3V
SDAGP0 (I2C0 SDA)
SCLGP1 (I2C0 SCL)
GNDGND
DHT11/DHT22Raspberry Pi Pico
Pin 1 (VCC)3.3V
Pin 2 (Data Out)GP2
Pin 3 (NC)Não Usado
Pin 4 (GND)GND

 

Esquema Raspberry Pi Pico com OLED e DHT22

Siga o diagrama esquemático abaixo e conecte-os de acordo.

 

Código MicroPython: Exibindo leituras DHT22 no display OLED

from machine import Pin, I2C
from time import sleep
import dht
from ssd1306 import SSD1306_I2C
 
sensor = dht.DHT22(Pin(2)) 
i2c=I2C(0,sda=Pin(0), scl=Pin(1), freq=400000)    #initializing the I2C method 
oled = SSD1306_I2C(128, 64, i2c)
 
while True:
    oled.fill(0)
    sensor.measure()
    temp = str(sensor.temperature())
    hum = str(sensor.humidity())
    oled.text("Temperature",0,0)
    oled.text(temp +" C",0,10)
    oled.text("Humidity",0,35)
    oled.text(hum + " %",0,45)
    oled.show()
    sleep(2)

 

Como funciona o código?

Na seção, explicamos apenas a parte do código MicroPython que é usada para exibir os valores do sensor DHT22 no OLED. Porque o resto do código é o mesmo que usamos na seção anterior para exibir as leituras do sensor no console do shell.

Importaremos o ssd1306, que é a biblioteca de exibição OLED que instalamos anteriormente. Isso nos ajudará a acessar todas as funções definidas dentro dele. Além disso, estaremos importando a classe Pin e a classe I2C do módulo da máquina. Isso ocorre porque temos que especificar o pino para comunicação I2C.

from machine import Pin, I2C
from ssd1306 import SSD1306_I2C

Em seguida, inicializaremos os pinos I2C GPIO para SCL e SDA, respectivamente. Usamos os pinos I2C0 SCL e I2C0 SDA.

Criamos um método I2C() que recebe quatro parâmetros. O primeiro parâmetro é o canal I2C que estamos usando. O segundo parâmetro especifica o pino I2C GPIO da placa que está conectada à linha SDA. O terceiro parâmetro especifica o pino I2C GPIO da placa que está conectada à linha SCL. O último parâmetro é a conexão de frequência.

Estamos configurando o SCL no pino 1 e o SDA no pino 0.

i2c=I2C(0,sda=Pin(0), scl=Pin(1), freq=400000)    #initializing the I2C method

Agora, vamos criar um objeto ‘oled’ de SSD1306_I2C que usa a largura, altura e o objeto i2c como parâmetros.

oled = SSD1306_I2C(128, 64, i2c)

Limpa o display OLED com a rotina led.fill().

oled.fill(0)

Por fim, exiba o texto junto com as leituras de temperatura e umidade no OLED a cada 2 segundos.

sensor.measure()
temp = str(sensor.temperature())
hum = str(sensor.humidity())
oled.text("Temperature",0,0)
oled.text(temp +" C",0,10)
oled.text("Humidity",0,35)
oled.text(hum + " %",0,45)
oled.show()
sleep(2)

No final, chame o método show() no método oled para que as alterações sejam exibidas no OLED.

oled.show()

 

Demonstração

Carregue o código acima como arquivo main.py para Raspberry Pi Pico. Você obterá leituras DHT22 no display OLED da seguinte forma: