/*
Ejemplo de uso de Adafruit IO
3 de noviembre de 2023
*/
#include "DHT.h"
#include "config.h"
const int DHT_PIN = 4;
const int BOTON_PIN = 2;
const int SENSOR_LDR = 32;
const int RELE_PIN = 33;
const int PERIODO = 15000;
unsigned long tiempoActual;
bool estadoPulsador = false;
DHT dht(DHT_PIN, DHT22);
// Adafruit IO Feeds
AdafruitIO_Feed *digitalOut = io.feed("pulsador");
AdafruitIO_Feed *digitalIn = io.feed("rele");
AdafruitIO_Feed *humedadOut = io.feed("humedad");
AdafruitIO_Feed *temperaturaOut = io.feed("temperatura");
AdafruitIO_Feed *luzEsp = io.feed("sensor-de-luz");
void setup() {
pinMode(RELE_PIN, OUTPUT);
pinMode(BOTON_PIN, INPUT);
dht.begin();
Serial.begin(9600);
// Conectar a io.adafruit.com
Serial.print("Conectando a Adafruit IO");
io.connect();
// Configurar un callback para el feed "rele".
digitalIn -> onMessage(manejoRele);
// Esperar a que se conecte
while(io.status() < AIO_CONNECTED) {
Serial.print(".");
delay(500);
}
// Conexion exitosa
Serial.println();
Serial.println(io.statusText());
digitalIn -> get();
}
void loop() {
// La funcion io.run() debe estar presente al inicio del
// loop(). Mantiene al cliente conectado a io.adafruit.com,
// y procesa todos los datos entrantes.
io.run();
// Entradas digitales, lee el pulsador y lo envia al feed
if(digitalRead(BOTON_PIN) == LOW) {
estadoPulsador = !estadoPulsador;
digitalOut-> save(estadoPulsador);
Serial.print("Estado BOTON: ");
Serial.println(estadoPulsador);
}
// Obtener datos desde el sensor cada cinco segundos
if (millis() >= tiempoActual + PERIODO) {
tiempoActual = millis();
float sensor_humedad = dht.readHumidity();
float sensor_temperatura = dht.readTemperature();
int lux = analogRead(SENSOR_LDR);
humedadOut-> save(sensor_humedad);
temperaturaOut-> save(sensor_temperatura);
luzEsp -> save(lux);
Serial.print("Humedad: ");
Serial.println(sensor_humedad);
Serial.print("Temperatura: ");
Serial.println(sensor_temperatura);
Serial.print("Luz: ");
Serial.println(lux);
}
}
// Esta funcion es llamada cada vez que un mensaje del feed
// "rele" es recibido desde Adafruit IO.
void manejoRele(AdafruitIO_Data *data) {
bool datosRecibidos = data -> toPinLevel();
Serial.print("Valor RELE: ");
Serial.println(datosRecibidos);
digitalWrite(RELE_PIN, datosRecibidos);
}