#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <DHT.h>
#include "WiFi.h"
#include "HTTPClient.h"
#define DHTPIN 15 // Pino ao qual o sensor DHT está conectado
#define LEDPIN 2 // Pino ao qual o LED está conectado
#define SEGUNDO_LEDPIN 0 // Pino ao qual o segundo LED está conectado
LiquidCrystal_I2C tela(0x27, 16, 2); // Inicialização do display LCD com endereço 0x27 e dimensões 16x2
DHT dht(DHTPIN, DHT22); // Criação de um objeto DHT com o pino e tipo de sensor especificados
bool dadosLidos = false; // Variável para rastrear se os dados foram lidos ou não
unsigned long previousMillis = 0; // Variável para armazenar o tempo da última atualização
const long interval = 5000; // Intervalo de atualização em milissegundos (5 segundos)
const char* ssid = "Wokwi-GUEST"; // Nome da rede Wi-Fi
const char* senha = ""; // Senha da rede Wi-Fi
HTTPClient http; // Criação de um objeto HTTPClient para fazer solicitações HTTP
void setup() {
Serial.begin(115200); // Inicialização da comunicação serial a 115200 bps
pinMode(LEDPIN, OUTPUT); // Define o pino do LED como saída
pinMode(SEGUNDO_LEDPIN, OUTPUT); // Define o pino do segundo LED como saída
tela.init(); // Inicializa o display LCD
tela.backlight(); // Liga a luz de fundo do display
dht.begin(); // Inicializa o sensor DHT
WiFi.begin(ssid, senha); // Início da conexão Wi-Fi usando as credenciais fornecidas
while (WiFi.status() != WL_CONNECTED) { // Aguarda até que a conexão Wi-Fi seja estabelecida
delay(500);
Serial.print(".");
}
Serial.println("WiFi conectado"); // Mensagem indicando que a conexão Wi-Fi foi estabelecida
}
void loop() {
unsigned long currentMillis = millis(); // Obtém o tempo atual em milissegundos
if (!dadosLidos || currentMillis - previousMillis >= interval) {
previousMillis = currentMillis; // Atualiza o tempo da última atualização
float temperature = dht.readTemperature(); // Lê a temperatura do sensor
float humidity = dht.readHumidity(); // Lê a umidade do sensor
if (!isnan(temperature) && !isnan(humidity)) { // Verifica se os dados de temperatura e umidade são válidos
Serial.print("Temperatura: ");
Serial.print(temperature);
Serial.print(" °C\t");
Serial.print("Umidade: ");
Serial.print(humidity);
Serial.println(" %"); // Verificar condições e acionar atuadores
if (temperature > 35.0) {
digitalWrite(LEDPIN, HIGH); // Liga o LED 1
} else {
digitalWrite(LEDPIN, LOW); // Desliga o LED 1
}
if (humidity > 70.0) {
digitalWrite(SEGUNDO_LEDPIN, HIGH); // Liga o LED 2
} else {
digitalWrite(SEGUNDO_LEDPIN, LOW); // Desliga o LED 2
}
// Exibir dados no display
tela.setCursor(0, 0);
tela.print("Programa Mantovas ");
tela.setCursor(0, 2);
tela.print("Temp: " + String(temperature, 1) + "C");
tela.setCursor(0, 3);
tela.print("Umidade: " + String(humidity, 1) + "%");
// Enviar dados para ThingSpeak
String url = "https://api.thingspeak.com/update?api_key=NOQQDLU7SFRN1ITC&field1=0" + String(temperature) + "&field2=" + String(humidity);
http.begin(url); // Inicia uma solicitação HTTP com a URL configurada
int httpCode = http.GET(); // Realiza a solicitação HTTP do tipo GET
http.end(); // Finaliza a conexão HTTP
if (httpCode == 200) {
Serial.println("Dados enviados para o ThingSpeak"); // Exibe mensagem de sucesso
} else {
Serial.println("Erro ao enviar dados para o ThingSpeak"); //Exibe mensagem de erro
}
dadosLidos = true; // Define que os dados foram lidos nesta iteração
}
}
}