Hoje a Raspberry Pi Zero W faz (apenas) a sua segunda aparição aqui no Arduino e Cia, mas em grande estilo. Com ela vamos montar um projeto de Monitor de Temperatura com Raspberry Pi e Thingspeak.

Esse projeto surgiu da necessidade de se fazer um monitoramento remoto de uma sala de servidores, onde por algumas vezes o ar condicionado pára de funcionar e isso faz com que as máquinas desliguem por causa do superaquecimento.

Usando a plataforma ThingSpeak é possível monitorar em tempo real a temperatura da sala, tomando providências em caso de emergência.

O que é o ThingSpeak

O ThingSpeak é uma das plataforma mais populares de IoT (Internet das Coisas), que usa uma API para envio e recebimento de dados via HTTP ou MQTT.

Logo ThingSpeak

Gratuita para projetos não comerciais, o ThingSpeak permite o envio de dados não apenas de uma Raspberry Pi, mas também de dispositivos como ESP8266, ESP32 e Arduino, apenas para citar alguns exemplos.

Os dados no ThingSpeak são apresentados principalmente em forma de gráficos ao longo do tempo, e dentro da própria plataforma é possível realizar uma análise dos dados usando o MatLab.

Na versão gratuita você pode enviar dados a cada 15 segundos, o que é mais do que suficiente para grande parte dos projetos de IoT e testes em geral.

Conexão do sensor de temperatura DHT11 na Raspberry Pi

No projeto optamos por usar um sensor de temperatura e umidade DHT11, cuja conexão com a Raspberry Pi Zero W é bastante simplificada e exige, além do sensor, um resistor de 10K.

O pino de dados do sensor DHT11 está conectado no pino 16 (GPIO 23) da Raspberry Pi, e a alimentação é feita através do pino 1 (3.3V) da GPIO.

Circuito Raspberry Pi Zero W e Sensor de Temperatura e Umidade DHT11

A parte de hardware termina aqui. Simples e rápida. Vamos então para a configuração do ThingSpeak.

Criando um canal no ThingSpeak

No ThingSpeak vamos criar um Canal, que é o local para onde os dados do sensor de temperatura serão enviados.

Se você ainda não tem uma conta no ThingSpeak, basta entrar em www.thingspeak.com/login e criar uma. É bem simples, no esquema “entrar com nome e email, receber um email de confirmação, criar uma senha, etc, etc“.

Logado no ThingSpeak, selecione Channels no menu superior e depois clique em New Channel:

Botão New Channel ThingSpeak

Na próxima tela vamos preencher os campos do Canal que estamos criando. Não é necessário preencher todos os campos, ok?

O ThingSpeak permite a criação de até 8 campos de dados por canal e também possui 3 campos de localização, ou seja, você pode enviar dados como latitude, longitude e elevação, permitindo o rastreamento de dispositivos.

Vamos utilizar nesse exemplo os campos Nome (name), onde vamos colocar o nome do Canal que estamos criando, Descrição (Description) com algumas observações como a finalidade do Canal e por fim os campos Field 1 e Field 2, que vão receber os dados de temperatura e umidade, respectivamente.

Configurações do novo Canal

Clique em Save Channel no final da página para que as configurações sejam gravadas.

Configurações do canal

Na próxima etapa é mostrada a página principal do Canal, onde você pode setar se ele será público ou privado, verificar as chaves API e onde também temos uma informação importante que será usada no nosso programa em Python da Raspberry: o Channel ID, no lado superior esquerdo da página (ou na URL da página):

Channel ID

Nessa tela, selecione o menu API Keys, ali estão mais duas informações que vamos utilizar no nosso programa: a chave de escrita da API (Write API Key) e a chave de leitura da API (Read API Keys):

Chaves API Escrita e Leitura

Isso finaliza a criação do Canal no ThingSpeak. Anotou as 3 informações que vamos precisar?

  • Channel_ID (número do canal)
  • Write API Key (chave API de escrita)
  • Read API Key (chave API de leitura)

Ótimo. Com isso, vamos voltar para a Raspberry Pi.

Programa monitor de temperatura com Raspberry Pi

Nessa etapa você já deve estar com a sua Raspberry Pi Zero W configurada, o Sistema Operacional Raspbian instalado e pronto para conexão à internet.

Se você ainda não fez isso, recomendo o post Raspberry Pi Imager: um jeito fácil de instalar o Raspbian. Com esse post realmente fica fácil: em poucos minutos você configura o cartão SD e instala o sistema operacional.

A primeira coisa que vamos fazer é instalar a biblioteca da Adafruit para o sensor de temperatura DHT11. Essa biblioteca funciona tanto para o DHT11 como para o DHT22, um sensor da mesma linha.

Abra uma janela de terminal e digite (ou copie):

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

Em seguida, entre na pasta Adafruit_Python_DHT:

cd Adafruit_Python_DHT

Instale a biblioteca utilizando o seguinte comando:

sudo python setup.py install

O processo de download e instalação leva alguns minutos. Depois disso, vamos instalar a biblioteca ThingSpeak com o comando:

sudo pip install thingspeak

Com as bibliotecas instaladas, crie um novo arquivo no editor nano onde vamos colocar o código em Python com:

sudo nano monitor_thingspeak.py

Dentro do editor, digite o programa abaixo, tomando o cuidado de colocar, nas linhas 10, 11 e 12 as informações que anotamos quando criamos o Canal:

#Programa: Monitor de Temperatura com Raspberry Pi Zero W e ThingSpeak
#Autor: Arduino e Cia

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

channel_id = 1262950 # PREENCHA COM O NUMERO DO CANAL
write_key  = '123456789ABC1293' # PREENCHA COM A CHAVE DE ESCRITA
read_key   = '232399ABC12AB921' # PREENCHA COM A CHAVE DE LEITURA

# Define o tipo de sensor (DHT11 ou DHT22)
# sensor = Adafruit_DHT.DHT22
sensor = Adafruit_DHT.DHT11

GPIO.setmode(GPIO.BOARD)

# Define a GPIO conectada ao pino de dados do sensor (pino 16)
gpio_sensor = 23

#Informacoes iniciais
print ("Definindo canal do ThingSpeak...")
canal_ts = thingspeak.Channel(id=channel_id, write_key=write_key, api_key=read_key)

while(1):
 # Efetua a leitura do sensor
 print ("Leitura da temperatura...");
 umid, temp = Adafruit_DHT.read_retry(sensor, gpio_sensor)
 #Caso leitura esteja ok, mostra os valores na tela
 if umid is not None and temp is not None:
   print ("Temp = {0:0.1f}  Umidade = {1:0.1f}%").format(temp, umid)
   #Envia os dados do sensor para o ThingSpeak
   response = canal_ts.update({'field1': temp, 'field2': umid})
 else:
 #Mensagem de erro de comunicacao com o sensor
   print("Falha ao ler dados do sensor !!!")

 #Aguarda 15 segundos e faz nova leitura
 print("Aguardando proxima leitura...")
 time.sleep(15)

Execute o programa usando:

sudo nano python monitor_thingspeak.py

Pronto. Agora é só aguardar. A cada 15 segundos os valores da temperatura e umidade são enviados para o ThingSpeak, e você pode acompanhar os gráficos em tempo real:

ThingSpeak mostrando dados do monitor de temperatura com Raspberry Pi Zero W

Não esqueça que 15 segundos é o limite mínimo de tempo entre um envio e outro, ok? Isso vale para a versão gratuita. Se você enviar os dados em um tempo menor, estes serão ignorados pela plataforma.

Legal! posso acompanhar esses dados no celular?

Claro! Usei um programa chamado ThingView (download Android). Dentro dele basta configurar o número do Canal e a chave (se necessário) e acompanhar o gráfico:

Tela ThingView Android Monitor de Temperatura com Raspberry Pi

Este exemplo de monitor de temperatura com Raspberry Pi é uma solução bem interessante e que você pode aplicar nos mais variados projetos, como por exemplo em Automação Residencial.

Gostou? Confira outros posts usando Raspberry Pi aqui mesmo no Arduino e Cia!

5/5 - (3 votes)