Monitorando Temperatura com DHT11 e Raspberry Pi 66

Neste tutorial vamos ver como você pode monitorar a temperatura e umidade de ambientes usando um Sensor de temperatura e umidade DHT11 com Raspberry Pi, utilizando um programa em Python que vai mostrar essas informações na tela em tempo real.

Já mostramos anteriormente a utilização do Sensor DHT11 com Arduino, portanto vamos apenas lembrar as características básicas desse sensor:

  • Alimentação: 3 à 5,5 V
  • Faixa de leitura – Umidade: 20 à 80%
  • Precisão umidade: 5%
  • Faixa de leitura – Temperatura: 0 – 50 ºC
  • Precisão temperatura: +/- 2 ºC

O sensor envia os dados para o microcontrolador utilizando apenas um pino, os outros dois são Vcc e GND, sendo que o terceiro pino não é utilizado. Confira o datasheet e na imagem abaixo a pinagem do sensor:

Pinagem DHT11

Conexão do DHT11 com Raspberry Pi

Vamos enviar os dados do sensor para o Raspberry Pi em intervalos de 5 segundos. Como alimentação, vamos utilizar os 3.3V da placa, e como pino de entrada no Raspberry o pino 22 (GPIO 25).

Não se esqueça que os pinos do Raspberry utilizam nível de tensão de 3.3V, portanto se você for alimentar o DHT11 com uma fonte externa (maior do que 3.3V), por exemplo, é necessário um divisor de tensão para não danificar a GPIO do Raspberry. Utilize um resistor de 4,7 K como pull-up para o pino de dados do sensor.

Circuito Raspberry Pi DHT11

Biblioteca do sensor de temperatura DHT11

Vamos baixar e instalar a biblioteca da Adafruit para esse sensor de temperatura diretamente no Raspbian. Esta biblioteca serve para o DHT11 e também para o Sensor DHT22, uma versão mais precisa do sensor.

Com o Raspberry conectado à internet, abra o LX Terminal e digite os seguintes comandos:

git clone https://github.com/adafruit/Adafruit_Python_DHT.git

cd Adafruit_Python_DHT

Antes de continuar com a instalação da biblioteca, utilize os comandos abaixo para atualizar o Raspberry:

sudo apt-get update
sudo apt-get install build-essential python-dev

Agora sim, podemos continuar com a instalação da biblioteca:

sudo python setup.py install

Esse processo pode ser um pouco demorado, dependendo da configuração do Raspbian e da sua conexão à internet.

Leitura das informações de temperatura e umidade

Carregue a interface de programação em Python do Raspbian clicando no ícone IDLE, na tela principal. Em seguida, selecione FILE, depois NEW WINDOW. Será aberta uma nova janela, onde você deve digitar ou copiar o programa abaixo:

# Programa : Sensor de temperatura DHT11 com Raspberry Pi
# Autor : MakerHero

# Carrega as bibliotecas
import Adafruit_DHT
import RPi.GPIO as GPIO
import time

# Define o tipo de sensor
sensor = Adafruit_DHT.DHT11
#sensor = Adafruit_DHT.DHT22

GPIO.setmode(GPIO.BOARD)

# Define a GPIO conectada ao pino de dados do sensor
pino_sensor = 25

# Informacoes iniciais
print ("*** Lendo os valores de temperatura e umidade");

while(1):
   # Efetua a leitura do sensor
   umid, temp = Adafruit_DHT.read_retry(sensor, pino_sensor);
   # Caso leitura esteja ok, mostra os valores na tela
   if umid is not None and temp is not None:
     print ("Temperatura = {0:0.1f}  Umidade = {1:0.1f}n").format(temp, umid);
     print ("Aguarda 5 segundos para efetuar nova leitura...n");
     time.sleep(5)
   else:
     # Mensagem de erro de comunicacao com o sensor
     print("Falha ao ler dados do DHT11 !!!")

No início do programa são carregadas as bibliotecas Adafruit_DHT, para leitura do sensor de temperatura, e também as bibliotecas GPIO e timer.

Execute o programa pressionando a tecla F5 e uma nova janela será aberta,  apresentando os dados de temperatura e umidade em intervalos de 5 segundos:

DHT11 - Temperatura e umidade

Gostou de monitorar a temperatura usando o DHT11 com Raspberry Pi? Deixe seu comentário logo abaixo.

Faça seu comentário

Acesse sua conta e participe

66 Comentários

  1. Olá Adilson parabéns pelo artigo. Gostaria de saber uma informação que não achei em lugar algum, qual é o menor intervalo de tempo possível entre leituras analógicas do raspberry. Do arduino sei que é algo em torno de 100us. Obrigado

    1. Olá Tiago,

      A informação que encontrei é de 10us. Mas esse valor depende de outras variáveis.

      Abraço!
      Rosana – Equipe MakerHero

  2. Para quem está com dificuldade no “import ADafrui_DHT” no raspberry pi 4B, sigam os passos abaixo:

    sudo apt-get update
    sudo apt-get install build-essential python-dev
    git clone https://github.com/adafruit/Adafruit_Python_DHT.git
    cd Adafruit_Python_DHT
    sudo python setup.py install
    sudo python3 setup.py install

    No final dê um SHUTDOWN no raspberry e ligue de novo (não reinicie).
    Sabe Deus porque só funcionou assim, hehehe.,..

  3. Olá …

    Estou com problema na utilização dos módulos do adafruit
    Fiz a instalação corretamente mas quando vou executar o aplicativo vem a mensagem : “No modulo named Adafruit_dht”

    Parece que a solução é utilizar per missão de administrador mas não sei como se faz isso …

    Agradeço qualquer ajuda.
    Obrigado

    1. Olá, Edmundo!

      Refaça os passos, e altere apenas o que está em negrito:
      Com o Raspberry conectado à internet, abra o LX Terminal e digite os seguintes comandos:

      git clone https://github.com/adafruit/Adafruit_Python_DHT.git

      cd Adafruit_Python_DHT

      Antes de continuar com a instalação da biblioteca, utilize os comandos abaixo para atualizar o Raspberry:

      sudo apt-get update
      sudo apt-get install build-essential python-dev

      Agora sim, podemos continuar com a instalação da biblioteca:

      sudo python3 setup.py install

      Isso deve resolver!

      Abraços!
      Diogo – Equipe MakerHero

      1. Boa noite Diogo. Alterando a linha em negrito fundou (após reiniciar o Raspbian).

        Porém na hora de rodar o programa, diz que houve “Falha ao ler dados do DHT11”

        Pela sua experiência alguma ideia de onde posso estar errando.

        Eu usei um resistor de 10. Podia!?

        1. Rodrigo,

          Acho que é um resistor muito baixo para fazer a função de pullup… Isso pode estar impedindo que o sinal seja lido corretamente.

          Abraços!
          Diogo – Equipe MakerHero

  4. Tive esse erro:

    *** Lendo os valores de temperatura e umidade
    Traceback (most recent call last):
    File “/home/pi/Adafruit_Python_DHT/Sensor.py”, line 23, in
    umid, temp = Adafruit_DHT.read_retry(sensor, pino_sensor);
    File “/home/pi/Adafruit_Python_DHT/Adafruit_DHT/common.py”, line 94, in read_retry
    humidity, temperature = read(sensor, pin, platform)
    File “/home/pi/Adafruit_Python_DHT/Adafruit_DHT/common.py”, line 80, in read
    platform = get_platform()
    File “/home/pi/Adafruit_Python_DHT/Adafruit_DHT/common.py”, line 55, in get_platform
    from . import Raspberry_Pi_2
    File “/home/pi/Adafruit_Python_DHT/Adafruit_DHT/Raspberry_Pi_2.py”, line 22, in
    from . import Raspberry_Pi_2_Driver as driver
    ImportError: cannot import name ‘Raspberry_Pi_2_Driver’
    >>>

    1. Olá Milton,

      Você seguiu corretamente o procedimento de instalação da biblioteca do sensor DHT11?

      Abraço!
      Rosana – Equipe MakerHero

      1. Olá, segui o mesmo procedimento e apareceu o mesmo erro pra mim. Alguém já resolveu este assunto? Obrigado!

        1. Olá Fabrício,

          Você está com permissão de administrador?

          Abraço!
          Rosana – Equipe MakerHero

  5. olá,

    o raspberry consegue controlar mais de 1 sensor de temperatura?
    quero utilizar para controlar 5 sensores de temperatura.

    grato

    1. Olá Ilton,

      É possível sim monitorar mais de um sensor de temperatura usando o Raspberry.
      Boa sorte no projeto!

      Abraço!
      Rosana – Equipe MakerHero

  6. Boa tarde

    Saberia me dizer se tem como utilizar a linguagem C# ao invés de python??

    1. Olá Renato!

      Eu sei que é possível com C. Dê uma olhada neste post:
      https://www.makerhero.com/blog/linguagem-c-com-raspberry-pi/

      Abraços!

      André – Equipe MakerHero

  7. Bom dia, estou com uma dúvida na montagem da protoboard, abaixo da instalação do resistor existe uma faixa pintada de vermelho, qual componente coloco?

    1. Olá Rodolfo!

      Você deve colocar um jumper ali, para ligar os 5 V no pino 1 do DHT11.

      Abraços!

      André – Equipe MakerHero

  8. Qual a temperatura mínima recomendada para disparar uma notificação de alerta? Configuramos no Zabbix para disparar uma notificação quando atingir-se uma temperatura de 33º, o que acham?

    1. Olá Cesar!

      Para quê você quer mandar esse alerta?

      Abraços!

      André – Equipe MakerHero

  9. Boa noite,

    Esse código funciona para o sensor LM35DZ tenho uma Raspberry Pi 2?

    1. Olá Miola!

      Não funciona, pois o LM35 tem a saída analógica.

      Abraços!

      André – Equipe MakerHero

  10. tem como encaminhar os logs de tempertura e humidade por email?

    1. Olá Edson!

      Fizemos um post sobre isso:
      https://www.makerhero.com/blog/enviar-email-com-raspberry-pi-em-python/

      Abraços!

      André – Equipe MakerHero

  11. Eu consigo utilizar este valor em um arquivo HTML ou PHP? Como faço a importação do valor de temperatura?

    1. Olá Crispim!

      Você já deu uma olhada nesse post:
      https://www.makerhero.com/blog/automacao-residencial-com-raspberry-pi-alarme/

      Ele fala como colocar dados da Rasp em uma página na WEB.

      Abraços!

      André – Equipe MakerHero

      1. Olá! Primeiro parabéns pelo ótimo trabalho. Eu não conhecia o site de vocês e achei muito bom; inclusive o nome!!

        Sobre o tópico: eu queria escrever essa informação num arquivo HTML.

        # Caso leitura esteja ok, mostra os valores na tela
        if umid is not None and temp is not None:
        print (“Temperatura = {0:0.1f} Umidade = {1:0.1f} \n”).format(temp, umid);
        print (“Aguarda 5 segundos para efetuar nova leitura… \n”);
        f = open(“demofile.html”, “w”)
        f.write(“Temperatura = {0:0.1f} Umidade = {1:0.1f} \n”)
        time.sleep(5)

        Sabe porque está dando errado? Não escreve o valor.

        1. Descobri. A solução é setar uma variável e imprimir a variável. Mesmo assim, obrigado!

          1. Olá Crispim!

            É bom saber que o nosso trabalho ajuda as pessoas 🙂

            Abraços!

            André – Equipe MakerHero

  12. EU N SEI OQ TO FAZENDO

    1. Olá Lucas!

      Não se desespere cara!

      Se está muito complicado esse post, você pode ir pra um um pouco mais básico 😀

      Dá uma olhada nesse tutorial: https://www.makerhero.com/blog/guia-primeiros-passos-com-raspberry-pi/

      Eu também comecei por ele!

      Boa sorte!

      Abraços

  13. Existe algum que atinja até 300 graus?

  14. Ola Boa tarde

    Estou montando um projeto onde preciso medir a temperatura e umidade de três locais diferentes, pois bem pensei em utilizar o seguinte sensor DHT11. porem tenho uma duvida …

    Nesse tipo de aplicação tem algum limitador de distancia ? ou seja posso estar com o sensor a por exemplo 70 metros e o mesmo ligado através de cabo par trançado ?

    1. Segundo o datasheet o máximo recomendado é 20 metros

  15. Olá! Gostaria de saber do porquê usarmos um resistor como pull-up quando o Raspberry Pi já possui resistores de pull-up e pull-down integrados, desde que ativados pelo código (com o argumento pull_up_down=GPIO.PUD_DOWN no GPIO.setup)

  16. Boa tarde, gostaria de umas dicas pra fazer com que o Raspberry dispare um e mail para mim quando o termômetro atingir uma temperatura específica? alguém já fez ou tem alguma ideia de como ser feito?

    1. Olá Leonardo!

      Procure no google por “how to send e-mail Raspberry pi Python”, você vai achar bastante coisa.
      Segue alguns links que encontrei que podem ajudar:
      http://naelshiab.com/tutorial-send-email-python/
      https://iotbytes.wordpress.com/programmatically-send-e-mail-from-raspberry-pi-using-python-and-gmail/
      https://myhydropi.com/send-email-with-a-raspberry-pi-and-python

      Aí você junta os princípios e conceitos em um projeto só.

      Abraço!

  17. Prezados,

    Acredito que este tutorial esteja desatualizado.A importação da biblioteca adafruit não está ocorrendo no .py. Quando é executado o script é retornado um erro. Como podemos resolver isto?

  18. ERRO
    Traceback (most recent call last):
    File “/home/pi/Giovane/temperatura1.py”, line 5, in
    import Adafruit_DHT
    ImportError: No module named ‘Adafruit_DHT’

    Instalei conforme o procedimento … não consigo ler o sensor. Estou usando o DHT 22, mas alterei no programa para tal.
    O erro parece ter a ver com a biblioteca, mas ela está lá!
    Aguardo help!

    1. Giovane,

      Sim, o erro ocorre na importação da biblioteca adafruit. Tenho um projeto com o sensor DHT22 também e antes funcionava normalmente, até que atualizei o raspberry. Ainda não encontrei a solução… Caso consiga entro em contato. (Não sou muito de programação, rs).

    2. Eu tava com o mesmo erro. Tentei rodar direto no terminal e funcionou, mudei pra Idle 2 e foi também, só dá esse erro na Idle 3. A questão é a versão do Python, provavelmente na biblioteca do sensor.

  19. Como mandar tudo para o MySql?

  20. Olá, muito obrigado pelas dicas do post.

    Eu ainda estou começando a trabalhar com o RPi e tenho uma série de dúvidas.
    Primeiramente, eu executei todos os passos desse tutorial e tudo funcionou corretamente. Agora eu gostaria que o RPi rodasse de forma autônoma e além de um display LCD, gostaria de chamar um comando de voz para falar a temperatura e umidade. Eu instalei alguns aplicativos com o apt e sempre rodo eles via LXTerminal para pronunciar algo (ou até mesmo comandos para o leitor de textos Google). Com isso, seria possível implementar no script desse tutorial, uma linha de código para executar um aplicativo externo desses ou então abrir e escrever o comando (para executar os aplicativos) no LXTerminal de forma automática?

  21. Fiz tudo certinho, compila e roda, porém não aparece nenhum valor na tela, não entendo, tem algum jeito diferente de imprimir as variáveis?

  22. Boa tarde, estou tentando fazer uma leitura desse sensor com um raspberry pi3, segui o tutorial completo, porém ele não faz a leitura dos valores, há algum problema desse sensor com o rpi3?

  23. Em Python 3 dá o seguinte erro: ‘Nonetype’ object has no attribute ‘format’

    A solução é só alterar o print para:

    print (“Temperatura = {0:0.1f} Umidade = {1:0.1f}n”.format(temp, umid));
    ^
    Foi só uma questão de localização dos parêntesis, pois no Python 3 print é uma função.

    Obrigado ao autor pelas instruções. Valeu! 🙂

  24. Bom dia,

    Estou com dúvidas se posso colocar mais de um sensor destes e como conectar ele na GPIO.
    Pensei em monitorar a temperatura do lado de dentro e fora de uma sala.

    Obrigado

    1. Bom dia Ricardo,

      Não testei com dois sensores, mas tente criar um “sensor2”, por exemplo:

      sensor2 = Adafruit_DHT.DHT11

      E depois, conectá-lo, por exemplo, na GPIO 23 (pino 16):

      pino_sensor2 = 23

      O mapeamento da GPIO você encontra neste link: http://www.raspberrypi-spy.co.uk/wp-content/uploads/2012/06/Raspberry-Pi-GPIO-Layout-Model-B-Plus-rotated-2700×900.png

      Abraço!

      Adilson – Equipe MakerHero

  25. Olá, no caso as temperaturas ali estão e Fahrenheit, certo? (Caso já estiver em Celsius, Ignore abaixo)

    Bem, eu gostaria de saber se eu mudasse para Celsius eu precisaria alterar por completo a estrutura “Temperatura = {0:0.1f} Umidade = {1:0.1f}” ou poderia colocar como “Temperatura = {0:0.1c} Umidade = {1:0.1c}n”)” ? E teria como introduzir um teste de controle para caso a temperatura ultrapassar (tantos) ele executar um comando como (Temperatura esta muito alta ou baixa)?

    Obrigado a todos que responderem minhas duvidas, Grato.
    #SouIniciante.

  26. Para quem teve o erro : Error accessing GPIO. Make sure program is run as root with sudo!
    É só salvar o arquivo do Python e executarcom o sudo no Terminal.

    Mais ou menos assim : sudo python nome_do_arquivo.py

    1. Boooooaaaa, Afonso.
      Valeu

  27. Olá, estou com o seguinte erro.

    *** Lendo os valores de temperatura e umidade

    Traceback (most recent call last):
    File “/home/pi/DHT11Teste.py”, line 21, in
    umid, temp = Adafruit_DHT.read_retry(sensor, pino_sensor);
    File “build/bdist.linux-armv6l/egg/Adafruit_DHT/common.py”, line 90, in read_retry
    humidity, temperature = read(sensor, pin, platform)
    File “build/bdist.linux-armv6l/egg/Adafruit_DHT/common.py”, line 77, in read
    return platform.read(sensor, pin)
    File “build/bdist.linux-armv6l/egg/Adafruit_DHT/Raspberry_Pi.py”, line 34, in read
    raise RuntimeError(‘Error accessing GPIO. Make sure program is run as root with sudo!’)
    RuntimeError: Error accessing GPIO. Make sure program is run as root with sudo!
    >>>

    Poderiam me ajudar?

    Muito obrigado.

  28. ESTOU COM ESSE MESMO ERRO DO NOSSO AMIGO JOEL, COMO RESOLVO?

    *** Lendo os valores de temperatura e umidade
    Traceback (most recent call last):
    File “sensor.py”, line 23, in
    umid, temp = Adafruit_DHT.read_retry(sensor, pino_sensor);
    File “/home/pi/Adafruit_Python_DHT/Adafruit_DHT/common.py”, line 90, in read_retry
    humidity, temperature = read(sensor, pin, platform)
    File “/home/pi/Adafruit_Python_DHT/Adafruit_DHT/common.py”, line 76, in read
    platform = get_platform()
    File “/home/pi/Adafruit_Python_DHT/Adafruit_DHT/common.py”, line 48, in get_platform
    import Raspberry_Pi
    File “/home/pi/Adafruit_Python_DHT/Adafruit_DHT/Raspberry_Pi.py”, line 22, in
    import Raspberry_Pi_Driver as driver
    ImportError: No module named Raspberry_Pi_Driver

  29. Bom dia, estou com um problema, da um erro no código dizendo que os drives do DHT22 não estão instalados, como eu os instalo?

  30. Para quem estiver com problemas ao carregar a biblioteca utilizando o IDLE, certifique-se de que seu usuário tem permissão de administrador!

  31. Não rolou para mim aqui.

    Traceback (most recent call last)
    file “home/pi/dht22-python…..”, line 6, in
    import adafuit_DHT
    importerror: no module named ‘adafruit_dht’

    ta tudo instalado certinho

    ajuda favor

  32. Fiz igual o tutorial, est[a retornando este erro

    *** Lendo os valores de temperatura e umidade
    Traceback (most recent call last):
    File “sensor.py”, line 23, in
    umid, temp = Adafruit_DHT.read_retry(sensor, pino_sensor);
    File “/home/pi/Adafruit_Python_DHT/Adafruit_DHT/common.py”, line 90, in read_retry
    humidity, temperature = read(sensor, pin, platform)
    File “/home/pi/Adafruit_Python_DHT/Adafruit_DHT/common.py”, line 76, in read
    platform = get_platform()
    File “/home/pi/Adafruit_Python_DHT/Adafruit_DHT/common.py”, line 48, in get_platform
    import Raspberry_Pi
    File “/home/pi/Adafruit_Python_DHT/Adafruit_DHT/Raspberry_Pi.py”, line 22, in
    import Raspberry_Pi_Driver as driver
    ImportError: No module named Raspberry_Pi_Driver

    Sou novo no Rasp, poderia me ajudar por favor ?

    1. Tenho o mesmo erro aqui….

  33. Olá!
    Quando aperto F5 na IDLE aparece esse erro

    >>> ================================ RESTART ================================
    >>>

    Traceback (most recent call last):
    File “/home/pi/Adafruit_Python_DHT/Adafruit_DHT/Adafruit_DHT.py”, line 5, in
    import Adafruit_DHT
    File “/home/pi/Adafruit_Python_DHT/Adafruit_DHT/Adafruit_DHT.py”, line 10, in
    sensor = Adafruit_DHT.DHT11
    AttributeError: ‘module’ object has no attribute ‘DHT11’
    >>>

    Como se eu não tivesse importado a biblioteca, mas importei.
    Agradeço
    Uso o Censor DHT11 e resistor de 4,7k como instruido acima

    1. Resolvido, depois que importei a biblioteca desliguei o raspberry totalmente e voltei a ligá-lo. Funcionou belezinha

      1. Boa tarde Pablo,

        Legal, precisando, estamos à disposição.

        Abraço.

        Adilson – Equipe MakerHero

  34. no caso senhor(a) utilizo 1 sensor. Queria saber no caso de tiver mais de 1 sensor

    1. Dentro do WHILE tem uma função:
      # Efetua a leitura do sensor
      umid, temp = Adafruit_DHT.read_retry(sensor, pino_sensor);
      basta repetir a função, com novas variáveis e outro valor em “pino_sensor”.

Trackbacks and Pingbacks

  1. […] Veja o post completo: Monitorando Temperatura com DHT11 e Raspberry Pi […]