#include "DHTesp.h"
#include <WiFi.h>
#include <WiFiClient.h>
#include "ThingSpeak.h"
///########### configuração do wifi
#define WIFI_SSID "Wokwi-GUEST"
#define WIFI_PASSWORD ""
// Defining the WiFi channel speeds up the connection:
#define WIFI_CHANNEL 6
int status = WL_IDLE_STATUS; // the Wifi radio's status
//configuração do thingspeak
const int myChannelNumber = 2591854;
const char* myApiKey = "ZWHMXWV5NJY75QOZ";
const char* server = "api.thingspeak.com";
unsigned long ultimaAtualizacao = 0;
const unsigned long intervaloEnvio = 15000; // Intervalo de envio em milissegundos (15 segundos)
WiFiClient client;
int DHT_PIN = 15;
DHTesp dhtSensor;
float temperatura = 0;
float umidade =0;
int led1 =25;
int led2 =26;
int led3 =27;
int led4 =14;
void setup() {
// put your setup code here, to run once:
Serial.begin(115200);
Serial.println("Hello, ESP32!");
dhtSensor.setup(DHT_PIN, DHTesp::DHT22);
pinMode(led1, OUTPUT);
pinMode(led2, OUTPUT);
pinMode(led3, OUTPUT);
pinMode(led4, OUTPUT);
conectawifi(); // Chama a função para conectar-se à rede WiFi
WiFi.mode(WIFI_STA);
ThingSpeak.begin(client);
}
void loop() {
sensorDHT22();
delay(1000);
// Verifica se passou o intervalo de 15 segundos desde a última atualização
if (millis() - ultimaAtualizacao >= intervaloEnvio) {
// Configura os campos no ThingSpeak para enviar os dados normalizados
ThingSpeak.setField(1, temperatura); // Substitua pelo valor que deseja enviar
ThingSpeak.setField(2, umidade);
// Envia os dados para o ThingSpeak e verifica o código de resposta
int x = ThingSpeak.writeFields(myChannelNumber, myApiKey);
// Verifica se o envio foi bem-sucedido ou se houve algum erro
if (x == 200) {
Serial.println("Dado enviado com sucesso");
} else {
Serial.println("Erro de envio: " + String(x));
}
// Atualiza o tempo da última atualização para controlar o próximo envio
ultimaAtualizacao = millis();
}
}
void sensorDHT22()
{
TempAndHumidity data = dhtSensor.getTempAndHumidity();
temperatura = data.temperature;
Serial.print("Tempreratura: ");
Serial.print(temperatura);
Serial.println("ºC");
umidade = data.humidity;
Serial.print("Umidade: ");
Serial.print(umidade);
Serial.println("%");
//Indicação de temperatura alta
if(temperatura >= 40)
{
digitalWrite(led3, HIGH);
digitalWrite(led4, LOW);
}
else{
digitalWrite(led3, LOW);
digitalWrite(led4, HIGH);
}
//Indicação de umidade alta
if(umidade >= 20)
{
digitalWrite(led2, HIGH);
digitalWrite(led1, LOW);
}
else{
digitalWrite(led2, LOW);
digitalWrite(led1, HIGH);
}
}
// Função para conectar-se à rede WiFi
void conectawifi() {
WiFi.begin(WIFI_SSID, WIFI_PASSWORD, WIFI_CHANNEL);
Serial.print("Conectando ao WiFi ");
Serial.print(WIFI_SSID);
// Aguarda a conexão
while (WiFi.status() != WL_CONNECTED) {
delay(100);
Serial.print(".");
}
Serial.println(" Conectado!");
Serial.print("IP address: ");
Serial.println(WiFi.localIP());
}