/* 
  Ejemplo de uso de Arduino IoT Cloud
  Utiliza la biblioteca Arduino IoT Cloud y sus dependencias
  https://github.com/arduino-libraries/ArduinoIoTCloud
  
  Las siguientes variables son automaticamente generadas y actualizadas cuando ocurren
  cambios en la cosa (Thing).

  float humedad;
  float temperatura;
  bool luces;

  Las variables marcadas como READ/WRITE ademas tienen una función asociada que son
  llamadas cuando ocurren cambios en sus valores desde el Dashboard.
*/

#include "thingProperties.h"
#include <WiFi.h>
#include "DHT.h"

const int DHT_PIN = 4;
const int RELE = 33;
const int PERIODO = 2000;

unsigned long tiempoActual;

DHT dht(DHT_PIN, DHT22);

void setup() {

  pinMode(RELE, OUTPUT);
  dht.begin();

  Serial.begin(9600);
  delay(1500);

  // Definido en el archivo thingProperties.h
  initProperties();

  // Conectar a Arduino IoT Cloud
  ArduinoCloud.begin(ArduinoIoTPreferredConnection);

  /* 
    La siguiente función permite obtener información relacionada 
    con el estado de la red y la conexión a la nube de IoT. Cuanto 
    mayor sea el número, más información granular obtendrá. El 
    valor predeterminado es 0 (solo errores). El máximo es 4.
 */
  setDebugMessageLevel(2);
  ArduinoCloud.printDebugInfo();
}

void loop() {

  ArduinoCloud.update();

  // Obtener datos desde el sensor cada dos segundos
  if (millis() >= tiempoActual + PERIODO) {
    humedad = dht.readHumidity();
    temperatura = dht.readTemperature();
    tiempoActual = millis();

    Serial.print("Humedad: ");
    Serial.println(humedad);
    Serial.print("Temperatura: ");
    Serial.println(temperatura);
  }
}

/*
  La variable "luces" es del tipo READ_WRITE, por lo que la
  función onLucesChange() es ejecutada cada vez que un nuevo
  valor es recibido desde Arduino IoT Cloud.
*/
void onLucesChange() {

  // Mostrar el valor recibido y cambiar el estado del rele
  Serial.print("onLucesChange(): ");
  Serial.println(luces);
  digitalWrite(RELE, luces);
}
NOCOMNCVCCGNDINLED1PWRRelay Module