#include "DHTesp.h"
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 20, 4);
#define DHT22_ID 0
#define LDR_ID 1
typedef struct {
byte deviceID;
float value1;
float value2;
} SENSOR;
QueueHandle_t qh = xQueueCreate(8, sizeof(SENSOR));
void TaskDHT22(void *ptParam) {
const byte dhtPin = 32;
DHTesp dhtSensor;
dhtSensor.setup(dhtPin, DHTesp::DHT22);
SENSOR dht22Sensor;
dht22Sensor.deviceID = DHT22_ID;
while (1 ) {
vTaskDelay(250);
TempAndHumidity data = dhtSensor.getTempAndHumidity();
Serial.println("Temp: " + String(data.temperature, 2) + "°C");
Serial.println("Humidity: " + String(data.humidity, 1) + "%");
dht22Sensor.value1 = data.temperature;
dht22Sensor.value2 = data.humidity;
if (xQueueSend(qh, &dht22Sensor, portMAX_DELAY) != pdPASS) {
Serial.println("DHT22: cola llena");
}
}
}
void TaskLDR(void *ptParam) {
const float GAMMA = 0.7;
const float RL10 = 50;
const byte ldrPIN = 27;
pinMode(ldrPIN, INPUT);
SENSOR ldrSensor;
ldrSensor.deviceID = LDR_ID;
while (1 ) {
vTaskDelay(500);
int analogValue = analogRead(ldrPIN);
float voltage = analogValue / 4095. * 5;
float resistance = 2000 * voltage / (1 - voltage / 5);
float lux = pow(RL10 * 1e3 * pow(10, GAMMA) / resistance, (1 / GAMMA));
Serial.print("LDR Light Sensor lux : ");
Serial.println(lux);
ldrSensor.value1 = lux;
ldrSensor.value2 = 0.0;
if (xQueueSend(qh, &ldrSensor, portMAX_DELAY) != pdPASS) {
Serial.println("LDR: Cola llena");
}
}
}
void lcdTask(void *ptParam) {
lcd.init();
lcd.backlight();
lcd.setCursor(0, 0);
lcd.print(" Hardware IoT ");
SENSOR data;
while (1) {
if (xQueueReceive(qh, &data, portMAX_DELAY) == pdPASS) {
switch (data.deviceID) {
case DHT22_ID:
lcd.setCursor(0, 1);
lcd.print("Temp: " + String(data.value1, 2) + " c");
lcd.setCursor(0, 2);
lcd.print("Humidity: " + String(data.value2, 1) + "%");
break;
case LDR_ID:
lcd.setCursor(0, 3);
if (data.value1 > 50) {
lcd.print("Brillo: ");
} else {
lcd.print("Oscuro: ");
}
//lcd.setCursor(0, 3);
lcd.print(String(data.value1, 2) + " lux");
break;
default:
Serial.println("LCD: No se reconoce");
break;
}
} else {
Serial.println("LCD: Cola Vacia");
};
vTaskDelay(1000);
}
}
void setup()
{
Serial.begin(115200);
xTaskCreatePinnedToCore(TaskDHT22, "DHT22", 1024 * 4, NULL, 1, NULL,1);
xTaskCreatePinnedToCore(TaskLDR, "LDR LIGHT", 1024 * 4, NULL, 1, NULL,1);
xTaskCreatePinnedToCore(lcdTask, "lcd", 1024 * 8, NULL, 2, NULL,1);
}
void loop() {}