Transferência de Dados de Temperatura e Umidade entre Dois Arduinos via Firebase
Componentes e Materiais
| Arduino UNO | ×2 |
| ESP8266 ESP-01 | ×2 |
| Sensor de Temperatura e Umidade DHT11 (3 pinos) | ×1 |
| Display LCD I2C 16x2 (DFRobot) | ×1 |
| Protoboard (genérica) | ×2 |
| Jumpers Macho/Fêmea | ×1 |
Aplicativos e Serviços Online
- Arduino IDE
- Google Firebase (Realtime Database)
Visão Geral do Projeto
Neste tutorial IoT, você lerá temperatura e umidade de um sensor DHT11 em um Arduino UNO, enviará os valores ao Firebase via ESP8266, e depois recuperará essas leituras em um segundo Arduino UNO para exibi-las em um LCD I2C. Este exemplo prático demonstra comunicação serial, rede Wi-Fi e armazenamento de dados na nuvem — habilidades essenciais para desenvolvedores embarcados modernos.
Passo 1 – Entender o Papel de Cada Placa
O UNO serve como interface do sensor enquanto o ESP8266 atua como gateway Wi-Fi. Eles comunicam via porta serial; o ESP8266 nunca se conecta diretamente à internet, apenas o módulo Wi-Fi o faz. Mantenha o código separado para cada placa para evitar confusão.
Passo 2 – Conectar o LCD ao UNO
Use I2C para simplicidade e menor uso de pinos. O exemplo de LCD 20x4 do módulo DFRobot funciona pronto. Se estiver usando um display 20x4, atualize o construtor para LiquidCrystal_I2C lcd(0x3F, 20, 4);.
Passo 3 – Ligar o DHT11 ao Segundo UNO
Siga o tutorial oficial DHT11 do Arduino para fiação e instalação da biblioteca. O sensor requer apenas um pino de dados (A0 no nosso exemplo).
Passo 4 – Configurar o ESP8266 com Firebase
Configure credenciais Wi-Fi e detalhes do projeto Firebase no sketch. O Firebase Realtime Database fornece uma árvore JSON simples onde o ESP8266 escreve os nós temperature e humidity. Para iniciantes, o vídeo tutorial cobre cada passo em detalhes.
Passo 5 – Dominar a Comunicação Serial
Ao transmitir dados via serial, envie apenas a string necessária. Quaisquer prints de depuração adicionais podem quebrar o protocolo. Na nossa implementação, o UNO do sensor envia uma string separada por vírgula (ex: 25.3,60.1) para o ESP8266, que analisa e encaminha cada valor ao Firebase.
Passo 6 – Carregar e Testar
Carregue o sketch do sensor no primeiro UNO, o sketch sensor-ESP8266 no primeiro ESP8266, e o sketch LCD-ESP8266 no segundo ESP8266. Verifique se o LCD atualiza com leituras novas a cada poucos segundos. Sempre desconecte o cabo USB do Arduino antes de desconectar jumpers para evitar curtos acidentais.
Problemas Comuns e Soluções
- Falha no Upload para ESP8266: Selecione a placa ESP8266 genérica na IDE. Se ainda falhar, reinicie a placa, reinsira o módulo e tente novamente.
- Falha no Upload para UNO: Certifique-se que o cabo USB está conectado antes de iniciar o uploader. Remova o GPIO-0 (IO0) do ESP8266 do GND durante a programação.
- Incompatibilidade Serial: Conecte TX do ESP8266 no RX do UNO e RX do ESP8266 no TX do UNO (cruzados). Não imprima strings não-dados durante a comunicação.
- Falhas no LCD: Atrasos seriais podem causar caracteres aleatórios no LCD. Executar
lcd.clear()antes de imprimir cada novo conjunto de valores resolve a maioria dos problemas.
Trechos de Código
lcd_arduino.ino (Arduino)
#include <LiquidCrystal_I2C.h>
#include <Wire.h>
LiquidCrystal_I2C lcd(0x3F, 20, 4);
String sensorData;
void setup() {
Serial.begin(9600);
lcd.begin(20, 4);
lcd.init();
lcd.backlight();
lcd.setCursor(0, 0);
lcd.print("Temperature: ");
lcd.setCursor(18, 0);
lcd.print("C");
lcd.setCursor(0, 1);
lcd.print("Humidity: ");
lcd.setCursor(15, 1);
lcd.print("%");
}
void loop() {
if (Serial.available()) {
sensorData = Serial.readString();
String temp = sensorData.substring(0, sensorData.indexOf(','));
String hum = sensorData.substring(sensorData.indexOf(',') + 1);
lcd.clear();
lcd.setCursor(13, 0);
lcd.print(temp);
lcd.setCursor(10, 1);
lcd.print(hum);
}
delay(2000);
}
lcd_esp8266.ino (ESP8266)
#include <ESP8266WiFi.h>
#include <FirebaseArduino.h>
#define FIREBASE_HOST "SEU_LINK_FIREBASE"
#define FIREBASE_AUTH "SEU_TOKEN_FIREBASE"
#define WIFI_SSID "SEU_SSID_WIFI"
#define WIFI_PASSWORD "SUA_SENHA_WIFI"
void setup() {
Serial.begin(9600);
WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
while (WiFi.status() != WL_CONNECTED) delay(500);
Firebase.begin(FIREBASE_HOST, FIREBASE_AUTH);
}
void loop() {
String temp = Firebase.getString("temperature");
String hum = Firebase.getString("humidity");
Serial.flush();
Serial.print(temp + "," + hum);
delay(2000);
}
sensor_arduino.ino (Arduino)
#include <SoftwareSerial.h>
#include <dht.h>
#define DHT_PIN A0
DHT dht;
void setup() {
Serial.begin(9600);
}
void loop() {
dht.read11(DHT_PIN);
String data = String(dht.temperature) + "," + String(dht.humidity);
Serial.flush();
Serial.print(data);
delay(2000);
}
sensor_esp8266.ino (ESP8266)
#include <ESP8266WiFi.h>
#include <FirebaseArduino.h>
#define FIREBASE_HOST "SEU_LINK_FIREBASE"
#define FIREBASE_AUTH "SEU_TOKEN_FIREBASE"
#define WIFI_SSID "SEU_SSID_WIFI"
#define WIFI_PASSWORD "SUA_SENHA_WIFI"
void setup() {
WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
while (WiFi.status() != WL_CONNECTED) delay(500);
Serial.begin(9600);
Firebase.begin(FIREBASE_HOST, FIREBASE_AUTH);
}
void loop() {
if (Serial.available()) {
String payload = Serial.readString();
int comma = payload.indexOf(',');
String temp = payload.substring(0, comma);
String hum = payload.substring(comma + 1);
Firebase.setString("temperature", temp);
Firebase.setString("humidity", hum);
if (Firebase.failed()) {
Serial.println("Falha ao escrever no Firebase");
}
}
delay(2000);
}
Processo de manufatura
- Transmissão de Dados de Temperatura em Tempo Real do ppDAQC Pi-Plate para InitialState com Raspberry Pi Headless
- Monitoramento em Tempo Real de Painel Solar com Arduino: Sistema de Aquisição de Dados de Baixo Custo
- Robô de Detecção Humana Baseado em Arduino Uno: Integração de Sensores Passo a Passo
- Construa um Sensor de Batimento Cardíaco Infravermelho Confiável com Arduino: Guia Passo a Passo
- Medição de Distância em Tempo Real com Sonar Arduino e Visualização no Processing
- Controle Suave de Brilho de LED com Bolt IoT e Arduino UNO
- Integrando Sensor de Pulso MAX30100 com Arduino: Guia Passo a Passo
- Guia Passo a Passo: Conectando Sensor de Umidade do Solo YL-39/YL-69 ao Arduino UNO
- Interface Web em PHP para Controlar Arduino Uno via Ethernet Shield
- Migração CMMS Perfeita: Diretrizes Especializadas para Transferência de Dados