//Incluir bibliotecas
#include "WiFi.h"
#include "DHTesp.h"
#include "ThingSpeak.h"

//Definicoes e constantes
char SSIDName[] = "Wokwi-GUEST"; //nome da rede WiFi
char SSIDPass[] = ""; //senha da rede WiFI

const int DHT_PIN = 15; //terminal do sensor de temperatura e umidade

unsigned long myChannelNumber = 1234567; //numero do canal no ThingSpeak
const char * myWriteAPIKey = "SRA0JGZCRGHBS1F3"; //APIKey do ThingSpeak

//Variaveis globais e objetos
DHTesp dhtSensor; //instancia o objeto dhtSensor a partir da classe DHTesp
float Temperatura; //variavel para guardar o valor da temperatura em Celsius
float Umidade; //variavel para guardar o valor da umidade em porcentagem
WiFiClient client; //instancia o objeto client a partir da classe WiFiClient
int httpCode; //variavel para guardar o codigo de retorno HTTP do ThingSpeak

//Setup
void setup() {
  Serial.begin(9600);
  dhtSensor.setup(DHT_PIN, DHTesp::DHT22); //inicializa o sensor
  ThingSpeak.begin(client); //inicializa o cliente ThingSpeak
  Serial.print("Conectando-se ao Wi-Fi");
  WiFi.begin(SSIDName, SSIDPass); //inicializa WiFi
  while (WiFi.status() != WL_CONNECTED) { //repete enquanto nao estabelece conexao
    delay(100);
    Serial.print(".");
  }
  Serial.println();
  Serial.println("Conectado!");
  Serial.print("IP: ");
  Serial.println(WiFi.localIP()); //imprime o endereco IP
}

//Loop
void loop() {
  //Coleta dados da temperatura e umidade
  TempAndHumidity data = dhtSensor.getTempAndHumidity();
  Temperatura = data.temperature; 
  Umidade = data.humidity;

  Serial.print("Temperatura: ");
  Serial.println(Temperatura);
  Serial.print("Umidade: ");
  Serial.println(Umidade);
 
  // Write value to Field 1 of a ThingSpeak Channel
  httpCode = ThingSpeak.writeField(myChannelNumber, 1, Temperatura, myWriteAPIKey);

  if (httpCode == 200) {
    Serial.println("Channel write successful.");
  }
  else {
    Serial.println("Problem writing to channel. HTTP error code " + String(httpCode));
  }

  // Wait 5 seconds to update the channel again
  delay(5000);
}