#include <HardwareSerial.h>
#include "DHTesp.h"
HardwareSerial Server(1);
HardwareSerial Client(2);
DHTesp dhtSensor;
#define Sender_Txd_pin 13
#define Sender_Rxd_pin 12
#define Receiver_Txd_pin 27
#define Receiver_Rxd_pin 14
#define DHT_SENSOR_PIN 15
#define MQ2_SENSOR_PIN 36
#define PIR_SENSOR_PIN 2
#define TEMPERATURE_HIGH_LEVEL 56
#define TEMPERATURE_HALF_LEVEL 26
#define HUMIDITY_HIGH_LEVEL 67
#define HUMIDITY_HALF_LEVEL 33
#define GAS_HIGH_LEVEL 3000
#define GAS_HALF_LEVEL 1500
void setup() {
Serial.begin(115200);
Server.begin(115200, SERIAL_8N1, Sender_Txd_pin, Sender_Rxd_pin);
Client.begin(115200, SERIAL_8N1, Receiver_Txd_pin, Receiver_Rxd_pin);
dhtSensor.setup(DHT_SENSOR_PIN, DHTesp::DHT22);
}
void loop() {
Serial.println("\n1. Sensor de temperatura");
Serial.println("2. Sensor de humedad");
Serial.println("3. Sensor PIR");
Serial.println("4. Sensor de gas");
Serial.println("Entre valor de sensor que quiere sensar:\n");
while (!Serial.available());
char option = Serial.read();
esp32ClientSendToServer(option);
esp32Server();
esp32ClientReadFromServer();
cleanBuffers();
delay(2000);
}
void esp32ClientSendToServer(char option) {
Client.print(option);
}
void esp32Server() {
while (!Server.available());
String sensor = "";
String sensorValue = "";
boolean valid = true;
char option = Server.read();
switch (option) {
case '1':
sensor = "TEMPERATURA";
sensorValue = readTemperatureValue();
break;
case '2':
sensor = "HUMEDAD";
sensorValue = readHumidityValue();
break;
case '3':
sensor = "PIR";
sensorValue = readPIRValue();
break;
case '4':
sensor = "GAS";
sensorValue = readGasValue();
break;
default:
valid = false;
break;
}
if (valid) {
String response = "El sensor de " + sensor + " esta en un valor " + sensorValue;
Server.println(response);
} else {
Server.println("Ingrese una opcion correcta");
}
}
String readTemperatureValue() {
float temperature = dhtSensor.getTemperature();
if (temperature < TEMPERATURE_HALF_LEVEL) {
return "BAJO";
} else if (temperature < TEMPERATURE_HIGH_LEVEL) {
return "MEDIO";
}
return "ALTO";
}
String readHumidityValue() {
float humidity = dhtSensor.getHumidity();
if (humidity < HUMIDITY_HALF_LEVEL) {
return "BAJO";
} else if (humidity < HUMIDITY_HIGH_LEVEL) {
return "MEDIO";
}
return "ALTO";
}
String readPIRValue() {
int pirValue = digitalRead(PIR_SENSOR_PIN);
if (pirValue == HIGH) {
return "ALTO";
}
return "BAJO";
}
String readGasValue() {
int gasValue = analogRead(MQ2_SENSOR_PIN);
if (gasValue < GAS_HALF_LEVEL) {
return "BAJO";
} else if (gasValue < GAS_HIGH_LEVEL) {
return "MEDIO";
}
return "ALTO";
}
void esp32ClientReadFromServer() {
while (!Client.available());
String result = Client.readStringUntil('\n');
if (result.length() > 0) {
Serial.println("Respuesta del servidor:");
Serial.println(result);
} else {
Serial.println("No se recibió respuesta del servidor");
}
}
void cleanBuffers() {
while (Serial.available()) Serial.read();
while (Client.available()) Client.read();
while (Server.available()) Server.read();
}