Construa uma Estação Meteorológica Pessoal Confiável com Arduino, ESP8266 e ThingSpeak
Componentes e Materiais
| Adafruit BMP180 (pressão e temperatura) | 1 |
| Sensor DHT11 Temperatura e Umidade (4 pinos) | 1 |
| LDR (Resistor Dependente de Luz) | 1 |
| Espressif ESP8266 ESP-01 | 1 |
| Arduino Nano R3 | 1 |
| Resistor 4.75k Ω | 1 |
| Resistor 51K Ω | 1 |
| Módulo Conversor DC-DC Buck LM2596 Step-Down | 1 |
| Jack DC | 1 |
| Chave liga/desliga | 1 |
| Adaptador de parede 12V-2A | 1 |
| PCB (placa de circuito impresso) | 1 |
| Header Macho 40 Posições 1 Linha (0.1") | 1 |
| Header Fêmea 8 Posições 1 Linha (0.1") | 5 |
| Caixa plástica | 1 |
Ferramentas e Máquinas Necessárias
- Alicate de decapar fios
- Pistola de cola quente (genérica)
- Ferro de solda (genérico)
- Chave de fenda
- Lima (para acabamento artesanal)
Aplicativos e Serviços Online
- Arduino IDE
- API ThingSpeak
Sobre o Projeto
Introdução: Faça uma Estação Meteorológica Pessoal
Sentado no seu quarto você começa a suar ou sentir frio; você se pergunta qual seria a temperatura no seu quarto? Ou qual seria a umidade? Isso aconteceu comigo algum tempo atrás.
Isso levou à criação da Estação Meteorológica Pessoal, que monitora temperatura, umidade, pressão e intensidade de luz do seu quarto e envia para um canal privado no thingspeak.com.
Vamos começar.
Passo 1: Vídeo Rápido
Aqui está um pequeno vídeo que resume tudo em 5 minutos.
Clique aqui para assistir no YouTube.
Passo 2: Componentes Eletrônicos Necessários
Descrição: Usaremos DHT11 para detectar umidade, BMP180 para detectar temperatura e pressão e um Resistor Dependente de Luz (LDR) para obter uma ideia aproximada da intensidade de luz. O Arduino Nano reunirá dados desses sensores e enviará ao ESP8266 para fazer upload para seu canal privado no thingspeak.com. Alimentaremos nosso Arduino Nano a partir de um adaptador de parede 12V-2A, sensores e ESP8266 receberão tensão convertida do conversor buck baseado no LM2596.
Lista de componentes:
- Sensor de pressão e temperatura BMP180
- Sensor de umidade DHT11
- Resistor Dependente de Luz (LDR)
- Módulo WiFi ESP8266 (firmware pronto)
- Arduino Nano
- 2 Resistores - 51 KOhm e 4.7 KOhm
- Conversor buck LM2596
- Jack DC
- Chave e
- Adaptador de parede 12V-2A

Passo 3: Ferramentas e Itens Extras Necessários
Descrição: Usaremos alicate de decapar para retirar isolação dos fios, lima para suavizar cortes/furos no gabinete, pistola de cola quente para fixar componentes dentro do gabinete, chave de fenda para fechar a tampa do gabinete e ferro de solda com solda para montar o circuito em placa de circuito geral (PCB). Caixa plástica 4x4x2 polegadas atua como gabinete. Também precisaremos de barras de pinos macho e fêmea junto com conectores fêmeas para montagem adequada na PCB.
Lista de Ferramentas:
- Alicate de decapar
- Lima
- Pistola de cola quente
- Chave de fenda e
- Ferro de solda e solda
Lista de Itens Extras:
- Caixa plástica 4x4x2 polegadas (usei esta dimensão, qualquer dimensão próxima deve servir)
- Placa de circuito de propósito geral
- Barras de pinos macho e fêmea e
- Conectores fêmeas

Passo 4: Requisitos de Software
Descrição: Para ver o valor dos dados dos sensores, precisaremos de um canal privado no thingspeak.com. Precisaremos da Arduino IDE para escrever o código do Arduino Nano. (Assumo que vocês possuem PC/laptop e um roteador WiFi com acesso à internet)
Lista de requisitos de software:
- Canal privado no Thingspeak.com e
- Arduino IDE (preferencialmente versão mais recente).
Você pode baixar a versão mais recente da Arduino IDE em arduino.cc. Agora vamos criar um canal privado no thingspeak.com.
Passo 5: Criando Canal Privado no Thingspeak.com
Para criar um canal privado no thingspeak.com siga estes passos:
- Abra seu navegador e vá para thingspeak.com e clique na aba 'Sign Up' no canto superior direito (Imagem 1)
- Preencha os detalhes e clique em 'Create account' (Imagem 2)
- Agora clique na aba 'New Channel' (Imagem 3)
- Preencha novamente os detalhes do canal e habilite 4 campos (pois enviaremos 4 valores de sensores), role para baixo e clique em 'Save Channel' (Imagem 4/5)
- Nesta página clique na aba 'API Keys' e anote sua 'Write API Key'

Pronto, agora você tem seu canal privado ThingSpeak.
Agora vamos juntar todos os componentes eletrônicos.
Passo 6: Esquemático para Estação Meteorológica Pessoal
Aqui estou anexando a imagem do esquemático para Estação Meteorológica Pessoal. Também estou anexando arquivo fritzing para o mesmo. As conexões são bastante simples.
- BMP180 conecta à porta I2C do Arduino Nano
- LDR conectado em divisor de tensão com resistor 51 KOhm e junção conecta ao pino A1 do Arduino Nano
- Pino de dados do DHT11 puxado para alto com resistor 4.7 KOhm e conectado ao pino A0 do Arduino Nano
- TX e RX do ESP8266 conectam a D10 e D11 do Arduino Nano respectivamente. CH_PD do ESP8266 conecta ao rail 3.3V
- Ajuste a saída do módulo LM2596 para 3.3V girando o potenciômetro neste módulo. Conecte a saída deste módulo ao Vcc e Gnd do BMP180, DHT11, LDR e Vcc e Gnd do ESP8266 respectivamente
- Entrada do módulo LM2596 vem do adaptador de parede 12V-2A que também conecta ao Vin e Gnd do Arduino Nano

Precisamos montar este circuito em Placa de Circuito de Propósito Geral. Vamos fazer isso.
Passo 7: Montando Circuito em Placa de Circuito de Propósito Geral (PCB)
Ferramentas de hardware e itens extras do passo 3 agora entram em ação.
- Use barra de pinos fêmea para colocação do Arduino Nano e ESP8266 na PCB
- Use ferro de solda e solda para conectá-los eletricamente à placa
- Use conectores fêmeas para estender o alcance de todos os sensores e módulo LM2596 pois eles serão colados na tampa e parede do gabinete
- Use barra de pinos macho para fazer pontos de conexão para as extensões fêmeas feitas acima
- Realize o esquemático do circuito na PCB usando fios (desencape-os com alicate de decapar), ou trilho de solda derretida e finalmente
- Verifique curtos antes de energizar o circuito usando um multímetro

Agora que todo hardware está colocado na PCB, vamos ver o código.
Passo 8: Código
Código para Estação Meteorológica Pessoal é bastante simples. Comentei o código adequadamente para facilitar a portabilidade. Antes de gravar o código, cuide das seguintes coisas.
- Certifique-se de que todas as bibliotecas estão instaladas
- Substitua os hífens pelo SSID do seu ponto de acesso (roteador WiFi) na linha 14 do código
- Substitua os hífens pela SENHA da sua rede WiFi na linha 15 do código
- Substitua os hífens pela Write API Key do seu canal privado ThingSpeak na linha 17
- Ao programar o Arduino Nano certifique-se de que sua fonte 12V DC está DESLIGADA
Aqui está o link para o github (Estação Meteorológica Pessoal) para baixar código e bibliotecas que usei.
Agora que temos nosso hardware e software no lugar, só falta a embalagem.
Passo 9: Preparação do Gabinete
Agora precisamos fazer furos de várias formas e tamanhos na caixa 4x4x2 polegadas. Precisamos fazer furos para jack DC e chave em qualquer parede preferida do gabinete. Também precisamos fazer furos para os sensores na tampa do gabinete.
Anexei uma imagem mostrando as dimensões dos furos que precisamos fazer no gabinete.

Use lâmina quente para cortar o plástico.
Use lima para suavizar os furos.

Passo 10: Fechando a Tampa
Coloque sua PCB montada dentro do gabinete.
Coloque chave e jack DC nos furos na parede; sensores nos furos da tampa. Finalize a posição e use pistola de cola quente para fixá-los. Finalmente use chave de fenda para fechar a tampa.
Pronto, você tem sua Estação Meteorológica Pessoal. Ligue a fonte de alimentação e veja a temperatura, umidade, pressão e intensidade de luz do seu quarto de qualquer lugar do mundo através do seu smartphone/PC/Tablet no seu canal privado ThingSpeak.
É isso para este Projeto. Comente em caso de dúvidas. Obrigado por ler.
Código
CódigoArduino
#include <SoftwareSerial.h>
#include <Wire.h>
#include <dht.h>
#include <Adafruit_BMP085.h>
#define DEBUG 0 // altere para 1 para habilitar debug via monitor serial
#define dht_pin A0 // definindo pino A0 para sensor DHT
#define lightSensor A1 // definindo pino A1 como entrada para divisor de tensão LDR
dht DHT;
Adafruit_BMP085 bmp;
SoftwareSerial esp8266Module(10, 11); // RX, TX
String network = "----"; // SSID do seu ponto de acesso
String password = "-------------"; // senha do seu ponto de acesso WiFi
#define IP "184.106.153.149" // Endereço IP do thingspeak.com
String GET = "GET /update?key=----------------"; // substitua pela chave do seu canal
void setup() {
if(DEBUG){
Serial.begin(9600);
}
esp8266Module.begin(9600);
if (!bmp.begin()) {
if(DEBUG){
Serial.println("Could not find a valid BMP085 sensor, check wiring!");
}
while (1) {}
}
delay(2000);
}
void loop() {
setupEsp8266();
DHT.read11(dht_pin);
double humi = DHT.humidity;
double bmp_temp = bmp.readTemperature();
double bmp_pressure = bmp.readPressure();
int lightIntensity = analogRead(lightSensor);
updateTemp(String(bmp_temp), String(lightIntensity), String(bmp_pressure), String(humi));
delay(30000);
}
void setupEsp8266() {
if(DEBUG){
Serial.println("Reseting esp8266");
}
esp8266Module.flush();
esp8266Module.println(F("AT+RST"));
delay(7000);
if (esp8266Module.find("OK")) {
if(DEBUG){
Serial.println("Found OK");
Serial.println("Changing espmode");
}
esp8266Module.flush();
changingMode();
delay(5000);
esp8266Module.flush();
connectToWiFi();
} else {
if(DEBUG){
Serial.println("OK not found");
}
}
}
bool changingMode() {
esp8266Module.println(F("AT+CWMODE=1"));
if (esp8266Module.find("OK")) {
if(DEBUG){
Serial.println("Mode changed");
}
return true;
} else if(esp8266Module.find("NO CHANGE")){
if(DEBUG){
Serial.println("Already in mode 1");
}
return true;
} else {
if(DEBUG){
Serial.println("Error while changing mode");
}
return false;
}
}
bool connectToWiFi() {
if(DEBUG){
Serial.println("inside connectToWiFi");
}
String cmd = F("AT+CWJAP=\"");
cmd += network;
cmd += F("\",\"");
cmd += password;
cmd += F("\"");
esp8266Module.println(cmd);
delay(15000);
if (esp8266Module.find("OK")) {
if(DEBUG){
Serial.println("Connected to Access Point");
}
return true;
} else {
if(DEBUG){
Serial.println("Could not connect to Access Point");
}
return false;
}
}
void updateTemp(String voltage1, String voltage2, String voltage3, String voltage4) {
String cmd = "AT+CIPSTART=\"TCP\",\"";
cmd += IP;
cmd += "\",80";
esp8266Module.println(cmd);
delay(5000);
if(esp8266Module.find("Error")){
if(DEBUG){
Serial.println("ERROR while SENDING");
}
return;
}
cmd = GET + "&field1=" + voltage1 + "&field2=" + voltage2 + "&field3=" + voltage3 + "&field4=" + voltage4 + "\r\n";
esp8266Module.print("AT+CIPSEND=");
esp8266Module.println(cmd.length());
delay(15000);
if(esp8266Module.find(">")) {
esp8266Module.print(cmd);
if(DEBUG){
Serial.println("Data sent");
}
} else {
esp8266Module.println("AT+CIPCLOSE");
if(DEBUG){
Serial.println("Connection closed");
}
}
}
Biblioteca e Código para Estação Meteorológica Pessoal
Confira o Readme: github.com/jayraj4021/Personal-Weather-Station-14
Esquemáticos

schematic.fzz
Processo de manufatura
- Estação Meteorológica Solar DIY com Raspberry Pi
- Construindo Estação Meteorológica Externa com Raspberry Pi 2 e ADS‑WS1
- Construa Estação Meteorológica Raspberry Pi que Envia Dados Diários por Email
- Integre sua Estação Meteorológica ao CWOP: Guia Prático
- Monitor Meteorológico – Estação Meteorológica DIY com Raspberry Pi e Upload para Dropbox
- Estação Meteorológica Avançada v2.0: Monitoramento em Tempo Real de Temperatura, Pressão, Umidade e Altitude
- Persianas Inteligentes: Controle Automático de Luz com Arduino e Energia Solar
- Envio de Dados do Sensor DHT11 para o ThingSpeak com Arduino MKR1000
- Estação Meteorológica Portátil Arduino por $10 – DIY com Nano, DHT22, BMP180 e LCD
- eDOT: Relógio de Precisão e Estação Meteorológica Arduino com Controle IR Embutido