#include <WiFi.h>
#include <WiFiClient.h>
#include <PubSubClient.h>
#define DHTPIN 4 // Pino do DHT22
#define DHTTYPE DHT22 // Definição do tipo DHT
#define LDRPIN 35 // Pino analógico para o LDR
DHT dht(DHTPIN, DHTTYPE);
EasyWebServer server; // Cria um objeto do EasyWebServer
// Variáveis para armazenar os valores dos sensores
float temperatura = 0.0;
float umidade = 0.0;
int luminosidade = 0;
// Configurações Wi-Fi
const char* ssid = "Wokwi-GUEST";
const char* password = "";
// Estrutura para armazenar os dados no datalog
struct Datalog {
float temperatura;
float umidade;
int luminosidade;
};
// Array para armazenar os dados (datalog)
Datalog dados[10]; // Armazena 10 registros de dados
int indexDatalog = 0; // Índice para os dados
void setup() {
Serial.begin(115200);
// Inicializa o DHT22
dht.begin();
// Inicializa o Wi-Fi
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(1000);
Serial.println("Conectando ao WiFi...");
}
Serial.println("Conectado ao WiFi!");
Serial.println(WiFi.localIP());
// Configura o servidor para servir a página web
server.on("/", HTTP_GET, [](){
String html = "<html><body>";
html += "<h1>Monitoramento do Ambiente</h1>";
html += "<p>Temperatura: " + String(temperatura) + " ℃</p>";
html += "<p>Umidade: " + String(umidade) + " %</p>";
html += "<p>Luminosidade: " + String(luminosidade) + "</p>";
html += "</body></html>";
server.send(200, "text/html", html);
});
// Inicia o servidor
server.begin();
}
// Função para armazenar os dados na memória
void armazenarDados(float temperatura, float umidade, int luminosidade) {
if (indexDatalog < 10) { // Armazena no máximo 10 registros
dados[indexDatalog].temperatura = temperatura;
dados[indexDatalog].umidade = umidade;
dados[indexDatalog].luminosidade = luminosidade;
indexDatalog++;
Serial.println("Dados armazenados em memória");
} else {
Serial.println("Memória cheia, sobrescrevendo o primeiro registro");
// Sobrescreve o primeiro registro quando atingir o limite
indexDatalog = 0;
dados[indexDatalog].temperatura = temperatura;
dados[indexDatalog].umidade = umidade;
dados[indexDatalog].luminosidade = luminosidade;
}
}
// Função para ler os dados armazenados
void lerDados() {
for (int i = 0; i < indexDatalog; i++) {
Serial.print("Registro ");
Serial.print(i + 1);
Serial.print(": Temperatura: ");
Serial.print(dados[i].temperatura);
Serial.print(" °C, Umidade: ");
Serial.print(dados[i].umidade);
Serial.print(" %, Luminosidade: ");
Serial.println(dados[i].luminosidade);
}
}
void loop() {
// Leitura da temperatura e umidade do DHT22
temperatura = dht.readTemperature();
umidade = dht.readHumidity();
// Leitura da luminosidade do LDR
luminosidade = analogRead(LDRPIN);
// Exibe os valores no terminal
Serial.print("Temperatura: ");
Serial.print(temperatura);
Serial.print(" °C, Umidade: ");
Serial.print(umidade);
Serial.print(" %, Luminosidade: ");
Serial.println(luminosidade);
// Armazenar os dados no datalog
armazenarDados(temperatura, umidade, luminosidade);
// Opcional: Chamar a função para ler os dados armazenados
lerDados(); // Mostra todos os dados armazenados até o momento
server.handleClient(); // Necessário para processar as requisições do servidor
delay(2000); // Atualiza a cada 2 segundos
}