DHT11 DHT22 com Raspberry Pi Pico usando MicroPython
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.
Conteudo
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.
DHT22 | DHT11 | |
Temperatura | -40 a 80 ºC +/- 0,5 ºC | 0 a 50 ºC +/-2 ºC |
Umidade | 0 a 100% +/-2% | 20 a 90% +/-5% |
Resolução | Umidade: 0,1% Temperatura: 0,1ºC | Umidade: 1% Temperatura: 1ºC |
Tensão operacional | 3-6 V DC (alimentação direta do Raspberry Pi Pico) | 3-5,5 V DC (alimentação direta do Raspberry Pi Pico) |
Tempo de amostragem | 2 segundos | 1 segundo |
Classificação atual | $4 a $10 | $1 a $5 |
Output data type | float | int |
Pinout | 4 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 Pino | Conexã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 Display | Raspberry Pi Pico |
VCC | 3.3V |
SDA | GP0 (I2C0 SDA) |
SCL | GP1 (I2C0 SCL) |
GND | GND |
DHT11/DHT22 | Raspberry 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: