Você está na página 1de 4

#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 "https://potenciomentro-default-rtdb.firebaseio.com/" // URL


da base de dados fornecido pelo Firebase para a conexão http
#define FIREBASE_AUTH "TNZXoLpKQvQb4gRunYTzyzq5nhneKUBxjhirF6qf" // 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 "jvm"
#define PASSWORD "jvm141519"

//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;

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);
}

//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:");
}

//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());
}

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;
}
}

//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;
}
}

//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);
}

//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();
}

Você também pode gostar