#include "DHTesp.h" // Inclui a biblioteca para o sensor DHT, que mede temperatura e umidade
#include <WiFi.h> // Inclui a biblioteca para conexão WiFi no ESP32
#include <Ultrasonic.h> // Inclui a biblioteca para o sensor de proximidade
#include <WiFiClient.h> // Inclui a biblioteca para gerenciamento de clientes WiFi
#include "ThingSpeak.h" // Inclui a biblioteca para enviar dados ao ThingSpeak
//#############Configuração do DHT22
const int DHT_PIN = 15; // Define o pino onde o sensor DHT22 está conectado (pino digital 15)
DHTesp dhtSensor; // Cria um objeto da classe DHTesp para interagir com o sensor DHT
// Configuração do sensor de proximidade
#define TRIG_PIN 23
#define ECHO_PIN 22
Ultrasonic ultrasonic(TRIG_PIN, ECHO_PIN); // Cria um objeto para o sensor de proximidade
long previousDistance = 0; // Variável para armazenar a última distância medida
//########### Configuração do WiFi
#define WIFI_SSID "Wokwi-GUEST" // Nome da rede WiFi (SSID)
#define WIFI_PASSWORD "" // Senha da rede WiFi (vazia neste caso)
#define WIFI_CHANNEL 6 // Define o canal do WiFi para 6
int status = WL_IDLE_STATUS; // Variável que armazena o status inicial da conexão WiFi
// Configuração do ThingSpeak
const int myChannelNumber = 2693582; // Número do canal no ThingSpeak onde os dados serão enviados
const char* myApiKey = "D8R15DO6X6FFO10I"; // Chave de API para autorização no ThingSpeak
const char* server = "api.thingspeak.com"; // Endereço do servidor ThingSpeak
unsigned long ultimaAtualizacao = 0; // Armazena o tempo da última atualização de dados
const unsigned long intervaloEnvio = 15000; // Intervalo de envio de dados (15 segundos)
WiFiClient client; // Objeto WiFiClient para conectar ao servidor ThingSpeak
void setup() {
Serial.begin(115200); // Inicia a comunicação serial a 115200 bps
Serial.println("Hello, ESP32!"); // Mensagem no monitor serial
dhtSensor.setup(DHT_PIN, DHTesp::DHT22); // Configura o sensor no pino definido
conectawifi(); // Chama a função para conectar-se à rede WiFi
}
void loop() {
// Obtém os dados de temperatura e umidade do sensor DHT22
TempAndHumidity data = dhtSensor.getTempAndHumidity(); // Captura os dados de temperatura e umidade
Serial.println("Temperatura: " + String(data.temperature, 2) + "°C");
Serial.println("Umidade: " + String(data.humidity, 1) + "%");
Serial.println("---");
// Verifica se passaram 15 segundos desde a última atualização
if (millis() - ultimaAtualizacao >= intervaloEnvio) {
// Configura os campos no ThingSpeak com os dados obtidos
ThingSpeak.setField(1, data.temperature); // Define o primeiro campo como a temperatura
ThingSpeak.setField(2, data.humidity); // Define o segundo campo como a umidade
// Envia os dados para o ThingSpeak e armazena o código de resposta
int x = ThingSpeak.writeFields(myChannelNumber, myApiKey); // Envia os dados para o ThingSpeak
// Verifica se o envio foi bem-sucedido
if (x == 200) {
Serial.println("Dados de temperatura e umidade enviados 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();
}
// Funções referentes à medição de distância
int distance = ultrasonic.read();
// Verifica se a distância mudou
if (distance != previousDistance) {
// Atualiza o valor anterior
previousDistance = distance;
// Exibe a distância apenas se houver uma alteração
Serial.print("Distância: ");
Serial.print(distance);
Serial.println(" cm");
// Configura o campo no ThingSpeak e envia os dados
ThingSpeak.setField(3, distance); // Usa o campo 3 para a distância
int x = ThingSpeak.writeFields(myChannelNumber, myApiKey);
if (x == 200) {
Serial.println("Distância enviada com sucesso");
} else {
Serial.println("Erro de envio da distância: " + String(x));
}
}
delay(100);
}
// Função para conectar-se à rede WiFi
void conectawifi() {
WiFi.begin(WIFI_SSID, WIFI_PASSWORD, WIFI_CHANNEL); // Inicia a conexão WiFi com os dados fornecidos
Serial.print("Conectando ao WiFi ");
Serial.print(WIFI_SSID);
// Aguarda a conexão ser estabelecida
while (WiFi.status() != WL_CONNECTED) {
delay(100); // Aguarda 100ms entre as tentativas de conexão
Serial.print("."); // Exibe um ponto a cada tentativa de conexão
}
Serial.println(" Conectado!"); // Exibe mensagem de sucesso na conexão
Serial.print("IP address: ");
Serial.println(WiFi.localIP()); // Imprime o endereço IP obtido
WiFi.mode(WIFI_STA); // Define o modo WiFi para "estação" (conectar-se a um roteador)
ThingSpeak.begin(client); // Inicializa o cliente ThingSpeak para enviar os dados
}