//Lauren Gabrielle Fogaça 202210184
//Henrique Scudeller de Oliveira 202210324
//Gabriel Martinelli Galvão Andreello Simoni 202210183
//Ricardo Altever Alves Lessa 202210295
#include <WiFi.h>
#include <HTTPClient.h>
#include <DHT.h>
#include <LiquidCrystal_I2C.h>
// Configurações WiFi
const char* ssid = "Wokwi-GUEST";
const char* password = "";
// Configurações ThingSpeak
const char* server = "api.thingspeak.com";
String apiKey = "B656ILQFWZTX4VHC"; // Substitua pelo seu Write API Key
// Configurações dos sensores
#define DHT_PIN 15
#define DHT_TYPE DHT22
#define TRIG_PIN 4
#define ECHO_PIN 2
// Configuração do LCD
LiquidCrystal_I2C lcd(0x27, 16, 2);
DHT dht(DHT_PIN, DHT_TYPE);
// Variáveis para controle de tempo
unsigned long lastTime = 0;
unsigned long timerDelay = 30000;
void setup() {
// Inicialização dos pinos
pinMode(TRIG_PIN, OUTPUT);
pinMode(ECHO_PIN, INPUT);
// Inicialização dos componentes
lcd.init();
lcd.backlight();
dht.begin();
// Conexão WiFi
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(1000);
}
lcd.init();
lcd.backlight();
lcd.setCursor(0, 0);
lcd.print(" Escola de Eng. ");
lcd.setCursor(0, 1);
lcd.print(" de Piracicaba ");
delay(1000);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print(" Sistemas ");
lcd.setCursor(0, 1);
lcd.print(" Embarcados ");
delay(1000);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print(" Projeto 03 ");
lcd.setCursor(0, 1);
lcd.print("----------------");
delay(1000);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("# Produtor #");
lcd.setCursor(0, 1);
lcd.print("# Publisher #");
delay(1000);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Lauren Gabrielle");
lcd.setCursor(0, 1);
lcd.print(" Fogaca ");
delay(1000);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print(" Henrique S. ");
lcd.setCursor(0, 1);
lcd.print(" de Oliveira ");
delay(1000);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Ricardo Altever");
lcd.setCursor(0, 1);
lcd.print(" Alves Lessa ");
delay(1000);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print(" Gabriel M. G. ");
lcd.setCursor(0, 1);
lcd.print(" Andreello ");
delay(1000);
}
void loop() {
if ((millis() - lastTime) > timerDelay) {
float temperature = dht.readTemperature();
float tempF = (temperature * 9.0 / 5.0) + 32.0;
float distance = readDistance();
float distanceInch = distance / 2.54;
if (isnan(temperature)) {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Erro DHT22!");
delay(1000);
return;
}
displayData(temperature, tempF, distance, distanceInch);
// Envio para ThingSpeak
if (WiFi.status() == WL_CONNECTED) {
HTTPClient http;
http.begin("http://api.thingspeak.com/update");
http.addHeader("Content-Type", "application/x-www-form-urlencoded");
String postData = "api_key=" + apiKey;
postData += "&field1=" + String(temperature);
postData += "&field2=" + String(tempF);
postData += "&field3=" + String(distance);
postData += "&field4=" + String(distanceInch);
int httpResponseCode = http.POST(postData);
if (httpResponseCode < 0) {
lcd.setCursor(0, 1);
lcd.print("Erro Envio! ");
}
http.end();
}
lastTime = millis();
}
delay(1000);
}
float readDistance() {
digitalWrite(TRIG_PIN, LOW);
delayMicroseconds(2);
digitalWrite(TRIG_PIN, HIGH);
delayMicroseconds(10);
digitalWrite(TRIG_PIN, LOW);
long duration = pulseIn(ECHO_PIN, HIGH);
float distance = duration * 0.034 / 2;
return distance;
}
void displayData(float tempC, float tempF, float distCm, float distInch) {
static int displayMode = 0;
static unsigned long displayTimer = 0;
if (millis() - displayTimer > 3000) {
displayMode++;
if (displayMode > 3) displayMode = 0;
displayTimer = millis();
}
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Recuperar dados");
lcd.setCursor(0, 1);
lcd.print(" dos Sensores ");
delay(1000);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Temperatura: ");
lcd.setCursor(0, 1);
lcd.print(tempC, 1);
lcd.print(" C");
delay(1000);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Temperatura: ");
lcd.setCursor(0, 1);
lcd.print(tempF, 1);
lcd.print(" F");
delay(1000);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Distancia: ");
lcd.setCursor(0, 1);
lcd.print(distCm, 1);
lcd.print("cm");
delay(1000);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Distancia: ");
lcd.setCursor(0, 1);
lcd.print(distInch, 1);
lcd.print("pol");
delay(1000);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print(" Enviar Dados ");
lcd.setCursor(0, 1);
lcd.print(" ao Broken ");
delay(1000);
}