Este artigo é o primeiro de uma série de três artigos que mostra como construir uma estação de medição de temperatura utilizando Arduino e IoT open source. Ou seja, qualquer um poderá reproduzir este artigo e contribuir para a medição de temperatura em diferentes pontos do Brasil (e, quem sabe, planeta).
Para comunicação com internet, será utilizado um módulo Wi-Fi ESP8266 ESP-01, o qual utilizará MQTT. Esta série foi feita por mim e por Douglas Salin Zuqueto.
A série de artigos que está sendo escrita aborda os seguintes assuntos:
- Estação de medição de temperatura Open-Source com Arduino e IoT – Configuração: Criação de um software no Arduino capaz de se comunicar com o sensor de temperatura DHT-22 e configuração da comunicação serial com o módulo ESP8266 ESP-01;
- Estação de medição de temperatura Open-Source com Arduino e IoT – Comunicação: Preparação do ESP8266 ESP-01 para comunicação serial com Arduino e comunicação com o Broker MQTT;
- Estação de medição de temperatura Open-Source com Arduino e IoT – Publicação dos dados: Finalização do software no Arduino, desenvolvimento de um WebSocket para comunicação com o Broker MQTT (através de qualquer navegador, em qualquer dispositivo capaz de navegar na Internet) e finalização do projeto (funcionamento completo).
Esta série foi desenvolvida com o hardware oferecido pelo loja FILIPEFLOP, a qual foi fundamental para o desenvolvimento deste projeto, pois sem o auxílio do hardware, o projeto se tornaria inviável.

Motivação
A Internet das Coisas (IoT, em inglês) veio para ficar. Utilizando conceitos de IoT, pode-se criar sistemas interligados via web, não importando assim em nada a localização geográfica das partes. Chegamos à era em que sistemas comunicam-se entre si para oferecer a nós, seres humanos, uma melhor (e maior) experiência de uso.
Motivados pelas dimensões que a IoT podem nos proporcionar, eu e o Douglas Salin Zuqueto resolvemos construir uma estação de medição de temperatura utilizando conceitos de IoT. Ou seja, através da Internet, será possível obter a temperatura de um determinado local quase que instantaneamente, também o faremos de modo Open-Source, ou seja, qualquer um tem a liberdade de reproduzir o projeto. Assim, agregando mais valor a ele. Como foi citado, todo projeto é construído de forma livre, portanto, quanto mais pessoas reproduzirem o projeto, mais locais do planeta terão suas temperaturas monitoradas. Com isso, uma rede coloborativa de estações de medição se formará.
Hardware utilizado para medição de temperatura
O projeto utiliza os seguintes componentes de hardware:
- Arduino Nano V3.0;
- Módulo Wi-Fi ESP8266 ESP-01;
- Sensor de temperatura DHT-22;
- LM317T para regular 3V3 para o módulo Wi-Fi;
- Fios e protoboard.
Diagrama em blocos do sistema
O diagrama em blocos do sistema pode ser visto abaixo:
Conforme é mostrado no diagrama, toda a interação das estações de medição de temperatura e seus destinos finais (computadores, tablets e/ou smartphones) é feita puramente via Internet. Logo, qualquer local do planeta pode ter sua temperatura monitorada e disponibilizada no sistema sem problemas.
Circuito esquemático
O circuito esquemático do projeto pode ser visto na figura 2:
Leitura da temperatura
O primeiro passo para o desenvolvimento do projeto é realizar a leitura da temperatura obtida pelo sensor DHT-22. Primeiramente, é necessário baixar e instalar a biblioteca de comunicação do Arduino com o sensor DHT-22. Para isso, acesse este GitHub e siga as suas instruções.
Uma vez baixada e instalada a biblioteca, pode-se fazer um software básico no Arduino para ler o valor da temperatura e exibir no Serial Monitor (presente em qualquer IDE do Arduino).
/*
Leitor de temperatura (DHT22)
Autores: Pedro Bertoleti e Douglas Zuqueto
Data: Dezembro/2015
Este é o programa de leitura de tempertura (do sensor DHT22).
O programa le a temperatura em um periodo de 10 segundos e mostra,
no Serial Monitor, a temperatura lida.
*/
#include "DHT.h"
//defines gerais
#define DHTPIN 2 //pino do Arduino que está conectado ao pino de dados do sensor
#define DHTTYPE DHT22 //estabelece que o sensor utilizado é o DHT22 (é possível selecionar entre DHT11, DHT22 e DHT21)
#define TEMPO_LEITURA_SENSOR 10000 //tempo entre leituras de temperatura
//variáveis globais
DHT dht(DHTPIN, DHTTYPE); //objeto para comunicar com sensor de temperatura DHT22
//Função setup (inicializações do programa)
void setup()
{
Serial.begin(9600);
Serial.println("======Leitor de temperatura======");
//inicia a comunicação com o sensor DHT22
dht.begin();
}
//loop (programa principal)
void loop()
{
float TemperaturaLida;
//le a temperatura (em graus Celsius)
TemperaturaLida = dht.readTemperature();
//checa se a leitura da temperatura foi bem sucedida ou não
if (isnan(TemperaturaLida))
Serial.println("- Falha ao ler a temperatura medida pelo sensor DHT22");
else
{
Serial.print("- Temperatura: ");
Serial.print(TemperaturaLida);
Serial.println("C");
}
delay(TEMPO_LEITURA_SENSOR);
}
Resultados
Como citado no tópico anterior, pode-se observar o valor lido através do Serial Monitor. Portanto, veja na imagem abaixo um conjunto de leituras efetuadas.
Configuração da comunicação serial com módulo Wi-Fi
A Comunicação Serial do Arduino com o Módulo Wi-Fi não é nada complicado. Para quem já desenvolveu projetos envolvendo placas arduino com módulos Bluetooth, é praticamente a mesma coisa.
Observe o Sketch anterior e veja que já está sendo recuperado e impresso o valor da temperatura no monitor serial. Para que se possa enviar o valor da temperatura via serial para o módulo ESP8266 e, simultaneamente, ter mensagens de debug no monitor serial, teremos que fazer uma pequena modificação no código anterior. Observe o código abaixo.
/*
Leitor de temperatura (DHT22)
Autores: Pedro Bertoleti e Douglas Zuqueto
Data: Dezembro/2015
Este é o programa de leitura de tempertura (do sensor DHT22).
O programa le a temperatura em um periodo de 10 segundos e mostra,
no Serial Monitor, a temperatura lida.
*/
#include "DHT.h"
#include <SoftwareSerial.h> // Biblioteca SoftwareSerial
//defines gerais
#define DHTPIN 4 //pino do Arduino que está conectado ao pino de dados do sensor
#define DHTTYPE DHT22 //estabelece que o sensor utilizado é o DHT22 (é possível selecionar entre DHT11, DHT22 e DHT21)
#define TEMPO_LEITURA_SENSOR 10000 //tempo entre leituras de temperatura
//variáveis globais
DHT dht(DHTPIN, DHTTYPE); //objeto para comunicar com sensor de temperatura DHT22
SoftwareSerial comunicacaoESP(2, 3); // objeto para comunicação serial com o ESP8266 nas Portas 2(RX) e 3(TX)
//Função setup (inicializações do programa)
void setup()
{
Serial.begin(9600);
Serial.println("======Leitor de temperatura======");
comunicacaoESP.begin(9600); // inicia a comunicação serial com o ESP8266
//inicia a comunicação com o sensor DHT22
dht.begin();
}
//loop (programa principal)
void loop()
{
float TemperaturaLida;
//le a temperatura (em graus Celsius)
TemperaturaLida = dht.readTemperature();
//checa se a leitura da temperatura foi bem sucedida ou não
if (isnan(TemperaturaLida)) {
Serial.println("- Falha ao ler a temperatura medida pelo sensor DHT22");
comunicacaoESP.println('0'); // caso o valor seja nulo ou indefinido, o valor '0' é enviado para o ESP
} else
{
Serial.print("- Temperatura: ");
Serial.print(TemperaturaLida);
Serial.println("C");
comunicacaoESP.println(TemperaturaLida); // envio do valor da temperatura para o módulo ESP
}
delay(TEMPO_LEITURA_SENSOR);
}
Veja no Sketch acima que usamos a biblioteca SoftwareSerial. Essa biblioteca nos permite usar portas digitais do Arduino para criar outra comunicação serial em paralelo (emulada por software) à comunicação serial nativa da placa Arduino. Neste caso foi usado as portas 2 (RX) e 3 (TX) com velocidade de 9600 bauds.
Poderíamos ter usado os pinos 0 e 1 referente à comunicação serial nativa sem problema algum, mas com o auxílio da biblioteca usada podemos visualizar no monitor serial a temperatura lida (através da comunicação serial nativa) e, ao mesmo tempo, enviar a temperatura via serial (usando a biblioteca) para o ESP8266. Caso fosses usados os pinos 0 e 1, não teria como fazer esse debug no monitor serial.
Na segunda parte do artigo será abordada a programação do módulo ESP8266 para receber a temperatura enviada pelo Arduino, além de ser abordada a conexão do módulo com a rede Wi-Fi e também a conexão e o envio dos dados para o Broker MQTT.
Referências
- Biblioteca para o Arduino conversar com o sensor DHT-22
- Conexão do sensor DHT-22 ao Arduino
- Exemplo de projeto de uma estação meteorológica com Arduino e DHT-22
- Referências de imagens utilizadas:
https://www.flaticon.com/free-icon/monitor-tablet-and-smartohone_80932#term=mobile&page=1&position=13
https://www.flaticon.com/free-icon/thermometer_103102#term=temperature&page=1&position=1








olá!! bom dia!!! vi que o artigo é de 7 anos passados. Ainda é possível realizar o projeto!?
muito obrigado!!!
Teria como utilizar este protocolo MQTT com um m ódulo Ethernet w5100?
teria alguma forma de implantar serviço snmp ? para enviar resultados e alarmes. serviço de sms ou call ?
Ansioso pelos próximos, muito massa.
Mandou bem!
Valeu Eder! Logo virão as duas partes seguintes. Ficará massa!
Parabéns pelo Artigo!
Obrigado Tiago!
Artigo show Pedrão, você é o rei do IoT!
Hahaha, valeu Igor!
Prezados, sou iniciante no mundo Arduíno e um dos fatores do projeto que
preciso desenvolver envolver medição de temperatura corporal de
pequenos animais. Sabendo que a fiação entre os sensores e o
microcontrolador será roída por eles (além do risco de choque elétrico
ao spécimen) gostaria de saber dos Srs se conhecem algum sensor que
possa medir a temperatura a curta distância, sem que precise estar
fixado ao corpo do animal (que ficará em uma pequena gaiola). Desde já
agradeço pelas dicas/orientações.
estou montando uma estação meteorologica com arduino e o esp8266 e os sensores dht22, ldr, bmp180, biruta, anemometro, pluviometro, sensor de raios uv, sensores de poeira e fumaça e o rtc, esta comunicação vai suportar este volume todos de dados?