/*
Murilo Casa Grande
Pedro Luiz Carvalho
*/
#include <WiFi.h>
#include "DHTesp.h"
#include "ThingSpeak.h"
#include <Adafruit_GFX.h>
#include <Adafruit_ILI9341.h>
#define TFT_DC 2
#define TFT_CS 15
#define DHT_PIN 22
#define LDR 34
Adafruit_ILI9341 tft = Adafruit_ILI9341(TFT_CS, TFT_DC);
const char* WIFI_NOME = "Wokwi-GUEST";
const char* WIFI_PASSWORD = "";
const int meuNumeroCanal = 2706612;
const char* minhaApiKey = "OTQWL0JF5W7RPPKT";
const char* servidor = "api.thingspeak.com";
DHTesp dhtSensor;
WiFiClient client;
int L, H, T; // Lum, Umid, Temp,
void setup() {
Serial.begin(115200);
Serial.println("Iniciando...");
tft.begin();
tft.setRotation(0);
tft.fillScreen(ILI9341_BLACK);
tft.setTextSize(3);
tft.setCursor(10, 150);
tft.setTextColor(ILI9341_WHITE);
tft.println("iniciando...");
delay(500);
tft.fillScreen(ILI9341_BLACK);
pinMode(LDR, INPUT);
dhtSensor.setup(DHT_PIN, DHTesp::DHT22);
WiFi.begin(WIFI_NOME, WIFI_PASSWORD);
while (WiFi.status() != WL_CONNECTED){
delay(1000);
Serial.println("Wifi nao conectado!");
tft.setTextSize(2);
tft.setCursor(10, 20);
tft.setTextColor(ILI9341_WHITE);
tft.println("WiFi nao conectado!");
delay(500);
}
Serial.println("Wifi conectado!");
tft.fillScreen(ILI9341_BLACK);
tft.setTextSize(2);
tft.setCursor(20, 20);
tft.setTextColor(ILI9341_WHITE);
tft.print("WiFi conectado!");
Serial.println("IP Local: " + String(WiFi.localIP()));
tft.setCursor(20, 40);
tft.println("IP Local: ");
tft.setCursor(20, 60);
tft.println(String(WiFi.localIP()));
delay(500);
WiFi.mode(WIFI_STA);
ThingSpeak.begin(client);
analogReadResolution(10);
tft.fillScreen(ILI9341_WHITE);
delay(100);
tft.fillScreen(ILI9341_BLACK);
}
void loop() {
TempAndHumidity dados = dhtSensor.getTempAndHumidity();
ThingSpeak.setField(1,T);
ThingSpeak.setField(2,H);
ThingSpeak.setField(3,L);
int x = ThingSpeak.writeFields(meuNumeroCanal,minhaApiKey);
int luminosidade = analogRead(LDR);
L = map(luminosidade, 1023, 0, 0, 100); // Mapeia de 0-1023 para 0-100%
H = dados.humidity;
T = dados.temperature;
Serial.println("Temperatura: " + String(T) + "°C");
Serial.println("Umidade: " + String(H) + "%");
Serial.println("Lumunosidade: " + String(L) + "%");
grafico();
if(x == 200){
Serial.println("Dados enviados com sucesso!");
tft.setTextColor(ILI9341_BLACK);
tft.setCursor(10, 10);
tft.println("Dados enviados com sucesso!");
}else{
Serial.println("Erro de envio " + String(x));
tft.setTextColor(ILI9341_RED);
tft.setCursor(10, 10);
tft.print("Erro de envio: ");
tft.println(String(x));
}
Serial.println("---");
delay(10000);
tft.fillScreen(ILI9341_BLACK);
}
void grafico(){
int b1 = T;
b1 = map(b1, -40, 80, 0, 250);
int b2 = H;
b2 = map(b2, 0, 100, 0, 250);
int b3 = L;
b3 = map(b3, 0, 100, 0, 250);
int i1 = 70 + (250 - b1);
int i2 = 70 + (250 - b2);
int i3 = 70 + (250 - b3);
tft.setTextSize(2); //Tamanho da fonte da letra
tft.setCursor(20, (i1 - 20)); //Posiciona o cursor
tft.setTextColor(ILI9341_RED); //Cor da fonte da letra
tft.print("Tmp"); //Escreve a indicação de Temperatura
tft.setCursor(20, (i1 - 40)); //Posiciona o cursor
tft.setTextColor(ILI9341_RED); //Cor da fonte da letra
tft.print(T);
tft.print("C");
tft.setCursor(100, (i2 - 20)); //Posiciona o cursor
tft.setTextColor(ILI9341_GREEN); //Cor da fonte da letra
tft.print("Umi"); //Escreve a indicação de Umidade
tft.setCursor(100, (i2 - 40)); //Posiciona o cursor
tft.setTextColor(ILI9341_GREEN); //Cor da fonte da letra
tft.print(H);
tft.print("%");
tft.setCursor(180, (i3 - 20)); //Posiciona o cursor
tft.setTextColor(ILI9341_BLUE); //Cor da fonte da letra
tft.print("Lum"); //Escreve a indicação de Umidade
tft.setCursor(180, (i3 - 40)); //Posiciona o cursor
tft.setTextColor(ILI9341_BLUE); //Cor da fonte da letra
tft.print(L);
tft.print("%");
tft.fillRect(20, i1, 40, b1, ILI9341_RED);
tft.fillRect(100, i2, 40, b2, ILI9341_GREEN);
tft.fillRect(180, i3, 40, b3, ILI9341_BLUE);
}