Pessoal, hoje eu trago para
vocês um exemplo que eu uso na prática no meu CPD, que é utilizar o ESP32 para
monitorar a temperatura e a umidade. Vou, então, te mostrar como fazer a
leitura de temperatura e umidade através do sensor DHT22 e enviar os valores
para o Firebase. Utilizamos também o App Fernando K para visualizar os
gráficos.
RECURSOS USADOS
- ESP32
- Protoboard
- Jumpers
- DHT22
- Smartphone com AppFernandoK
MONTAGEM
BIBLIOTECAS
Biblioteca SimpleDHT
Na IDE do Arduino vá em
Sketch->Incluir Biblioteca->Gerenciar Bibliotecas...
Instale SimpleDHT
Biblioteca GFX Library
Na IDE do Arduino vá em
Sketch->Incluir Biblioteca->Gerenciar Bibliotecas...
Instale Adafruit GFX Library
Biblioteca ST7735
Na IDE do Arduino vá em
Sketch->Incluir Biblioteca->Gerenciar Bibliotecas...
Instale Adafruit ST7735 and
ST7789 library
Biblioteca Firebase
IOXhop_FirebaseESP32:
Descompacte na pasta de libs
do arduino IDE
(C:\Users\<SEU_USUARIO>\Documents\Arduino\libraries)
Biblioteca ArduinoJson
Na sua Arduino IDE vá em:
Sketch -> Incluir
biblioteca -> Gerenciar bibliotecas
Pesquise por: arduinojson
Procure pela biblioteca
descrita como: ArduinoJson by Benoit Blanchon
Selecione a versão 5.13.3
E clique em instalar
FLUXOGRAMA
CÓDIGO
Declarações e variáveis
#include <WiFi.h> //Lib WiFi #include <SimpleDHT.h> //Lib DHT #include <IOXhop_FirebaseESP32.h> //Lib Firebase #include <ArduinoJson.h> //Lib para a manipulação de Json #include <Adafruit_GFX.h> //Lib Display #include <Adafruit_ST7735.h> //Lib Display #include <Fonts/FreeSans9pt7b.h> //Lib Display #define FIREBASE_HOST "xxxxxxxxxx.firebaseio.com" // URL da base de dados fornecido pelo Firebase para a conexão http #define FIREBASE_AUTH "" // Autenticação (no caso não estamos usando) #define DHTPIN 26 //Pino onde o DHT está ligado #define INTERVAL 5000 //Intervalo entre cada leitura do sensor //SSID e senha da rede WiFi onde o esp32 irá se conectar #define SSID "SSID" #define PASSWORD "PASSWORD" //Pinos do display #define DISPLAY_DC 12 //A0 #define DISPLAY_CS 13 //CS #define DISPLAY_MOSI 14 //SDA #define DISPLAY_CLK 27 //SCK #define DISPLAY_RST 0 #define ROW_HEIGHT 18 //Altura da linha de texto que vamos usar no display #define DISPLAY_WIDTH 160 //Largura do display #define LEFT_MARGIN 9 //Margem para distanciar o texto do canto do display //Objeto responsável pelo display Adafruit_ST7735 display = Adafruit_ST7735(DISPLAY_CS, DISPLAY_DC, DISPLAY_MOSI, DISPLAY_CLK, DISPLAY_RST); //Objeto que realiza a leitura da umidade e temperatura SimpleDHT22 dht; //Variáveis que vão guardar o valor da temperatura e umidade float temperature, humidity; //Marca quando foi feita a última leitura uint32_t lastTimeRead = 0;
Setup
void setup()
{
Serial.begin(115200);
//Inicializa o display
setupDisplay();
//Inicializa a conexão com a rede WiFi
setupWiFi();
//Inicializa a lib do Firebase
Firebase.begin(FIREBASE_HOST, FIREBASE_AUTH);
}
setupDisplay
//Inicialização do display
void setupDisplay()
{
//Inicializa o display
display.initR(INITR_BLACKTAB);
//Rotaciona o conteúdo mostrado
display.setRotation(3);
//Configura a fonte do texto
display.setFont(&FreeSans9pt7b);
//Pinta a tela toda de preto
display.fillScreen(ST77XX_BLACK);
//Configura e mostra o texto da umidade
display.setCursor(LEFT_MARGIN, ROW_HEIGHT);
display.setTextColor(ST77XX_CYAN);
display.print("Humidity:");
//Configura e mostra o texto da temperatura na quarta linha
display.setCursor(LEFT_MARGIN, 4*ROW_HEIGHT);
display.setTextColor(ST77XX_RED);
display.print("Temperature:");
}
setupWiFi
//Conexão com a rede WiFi
void setupWiFi()
{
WiFi.disconnect();
WiFi.mode(WIFI_STA);
//Tenta conectar à rede que possui este SSID e senha
WiFi.begin(SSID, PASSWORD);
Serial.println("");
//Enquanto não estiver conectado à rede WiFi
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
//Se chegou aqui está conectado
Serial.println("");
Serial.print("Connected to ");
Serial.println(SSID);
Serial.print("IP address: ");
Serial.println(WiFi.localIP());
}
Loop
void loop()
{
//Tempo em millissegundos desde o boot do esp
unsigned long now = millis();
//Se passou o intervalo desde a última leitura
if(now - lastTimeRead > INTERVAL)
{
//Faz a leitura do sensor
readSensor();
//Mostra no display
showOnDisplay();
//Envia para o Firebase
sendToFirebase();
//Marca quando ocorreu a última leitura
lastTimeRead = now;
}
}
readSensor
//Realiza a leitura da temperatura e umidade
void readSensor()
{
float t, h;
//Coloca o valor lido da temperatura em t e da umidade em h
int status = dht.read2(DHTPIN, &t, &h, NULL);
//Se a leitura foi bem sucedida
if (status == SimpleDHTErrSuccess) {
//Os valores foram lidos corretamente, então é seguro colocar nas variáveis
temperature = t;
humidity = h;
}
}
showOnDisplay
//Mostra a umidade no display
void showOnDisplay()
{
//Strings que serão exibidas no display
String strHumidity = String(humidity) + "%";
String strTemperature = String(temperature) + "C";
//Limpa o texto da umidade anterior
display.fillRect(0, ROW_HEIGHT + 5, DISPLAY_WIDTH, ROW_HEIGHT, ST77XX_BLACK);
//Posiciona o cursor na segunda linha
display.setCursor(LEFT_MARGIN, 2*ROW_HEIGHT);
//Configura a cor do texto como ciano
display.setTextColor(ST77XX_CYAN);
//Mostra a String da umidade
display.println(strHumidity);
//Limpa o texto da temperatura anterior
display.fillRect(0, 4*ROW_HEIGHT + 5, DISPLAY_WIDTH, ROW_HEIGHT, ST77XX_BLACK);
//Posiciona o cursor na quinta linha
display.setCursor(LEFT_MARGIN, 5*ROW_HEIGHT);
//Configura a cor do texto como vermelho
display.setTextColor(ST77XX_RED);
//Mostra a String da temperatura
display.println(strTemperature);
}
sendToFirebase
//Envia a temperatura e umidade para o Firebase
void sendToFirebase()
{
//Buffer para a criação dos jsons
StaticJsonBuffer<150> jsonBufferSensor;
StaticJsonBuffer<50> jsonBufferTimestamp;
//Criamos o objeto json que será enviado
JsonObject& sensorData = jsonBufferSensor.createObject();
sensorData["T"] = temperature; //Inserimos os atributo de temperatura
sensorData["H"] = humidity; //Inserimos os atributo de umidade
//Criamos o objeto json referente ao timestamp (Json auxiliar)
JsonObject& timestamp = jsonBufferTimestamp.createObject();
//Marcamos como um valor que o server do Firebase irá preencher com o timestamp
timestamp[".sv"] = "timestamp";
//Inserimos o json referente ao timestamp no json que será enviado
sensorData["timestamp"] = timestamp;
//Enviamos o json sensorData para o Firebase no path /History
Firebase.push("/History", sensorData);
//Limpamos os buffers dos jsons
jsonBufferTimestamp.clear();
jsonBufferSensor.clear();
}
50>150>
FIREBASE
Digite o nome do projeto e
clique em “Continuar”
Desative a opção Analytics já
que não vamos utilizar neste exemplo.
APP FERNANDO K
Adicione nome para a conexão e
adicione dataBaseURL (o mesmo em FIREBASE_HOST do .ino) e clique em “Add”
A conexão aparecerá na lista.
Clique nela.
Clique uma vez em cada botão
que acabou de criar. Cada botão irá criar um gráfico.
Se tudo ocorreu bem uma
mensagem como esta será exibida no terminal. Arraste o terminal para o lado
esquerdo.
Um gráfico com os os dados da
temperatura será exibido.
Arraste novamente para a
esquerda e será exibido o gráfico com os dados da umidade.

































2 Comentários
Parabéns Fernando. Copiei e executei seu projeto. Funcionou de primeira! Conectou de primeira no firebase, no aplicativo e compilação. Achei que tinha feito coisa errada de tão perfeito que foi! huahuahua. Só alterei para DHT11 que é o que eu tenho aqui e removi as libs/funções de display pois não tenho o HW. Show! Muito obrigado mesmo!!!
ResponderExcluirobrigado professor! Ótima aula! Parabens!
ResponderExcluir