#include <LiquidCrystal_I2C.h>
#include "DHTesp.h"
#include <WiFi.h>
#include <PubSubClient.h>
// Sensor pins
int pinu = 5;
int pind = 19;
int pint = 18;
int pinc = 17;
int proximidad = 35;
int dhtpp = 23;
const float GAMMA = 0.7;
const float RL10 = 50;
void publicar();
void luminosidad();
void humedadytemp();
void proxi();
void nombre();
// Sensor objects
DHTesp dht;
LiquidCrystal_I2C lcd(0x27, 16, 2);
int s0,s1;
void setup_wifi();
void procesar_mensajes(char *topic, byte *mensaje, unsigned int
longitud);
// WiFi and MQTT settings
const char* ssid = "Wokwi-GUEST";
const char* password = ""; // contraseña
const char* broker = "broker.mqtt-dashboard.com"; // MQTT direccion broker
int puerto = 1883; // MQTT broker port
const char* id_cliente = "maxolivares"; // idclient del mqtt
const char* topico1 = "hola"; // topico al que me estoy suscribiendo
const char* topico2 = "adios"; // topico al que publico
WiFiClient BoardESP32;
PubSubClient client_mqtt(BoardESP32);
//se conecta con el broker y a wifi
void setup_wifi() {
delay(50);
Serial.println();
Serial.print("Connecting to ");
Serial.println(ssid);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(100);
Serial.print(".");
}
Serial.println("");
Serial.println("WiFi connected - ESP IP address: ");
Serial.println(WiFi.localIP());
}
void setup() {
Serial.begin(115200);
//inicializa sensor
dht.setup(dhtpp, DHTesp::DHT22);
setup_wifi();
// Conexion al broker
client_mqtt.setServer(broker, puerto);
if (client_mqtt.connect(id_cliente)) {
Serial.println("Connected to MQTT Broker!");
} else {
Serial.println("Connected to MQTT failed...");
}
// Activar la rutina para recibir mensajes
client_mqtt.setCallback(procesar_mensajes);
// Suscribirse a un tópico
if (client_mqtt.subscribe(topico1)) {
Serial.printf("Suscrito a topico %s\n", topico1);
}
// inicializa sensor de movimiento
pinMode(proximidad, INPUT);
// inicializa the LCD
lcd.init();
lcd.backlight();
}
void loop() {
client_mqtt.loop();
// mensajes del mqtt y llamadas a funciones
if (s0 == 0 && s1 == 0) {
nombre();
} else if (s0 == 0 && s1 == 1) {
humedadytemp();
} else if (s0 == 1 && s1 == 0) {
proxi();
}else if (s0 == 1 && s1 == 1) {
luminosidad();
}
}
void humedadytemp() {
TempAndHumidity data = dht.getTempAndHumidity();
float humedad = data.humidity;
float temperatura = data.temperature;
Serial.println("Humedad: " + String(humedad) + "%");
Serial.println("Temp: " + String(temperatura) + "°C");
Serial.println("---");
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Humedad:"+ String(humedad));
lcd.setCursor(0, 1);
lcd.print("Temperatura: " +String(temperatura));
delay(1000);
}
void proxi() {
int movimiento = digitalRead(proximidad);
Serial.println("Presencia: " + String(movimiento, 1) + "!!!");
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Presencia: ");
lcd.setCursor(0, 1);
lcd.print(String(movimiento == 0 ? "Sin movimiento" : "Movimiento"));
delay(1000);
}
void nombre() {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Nombre: Max");
lcd.setCursor(0, 1);
lcd.print("Mat: A01285066");
delay(1000);
}
void luminosidad() {
float luxValue = sendSensor();
Serial.println("Luminosidad: " + String(luxValue, 2));
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Luminosidad: "+String(luxValue));
delay(3000);
}
float sendSensor() {
int analogValue = analogRead(36);
float voltage = analogValue * 5 / 4095.0;
float resistance = 2000 * voltage / (1 - voltage / 5);
float lux = pow(RL10 * 1e3 * pow(10, GAMMA) / resistance, (1 / GAMMA));
return lux;
}
void publicar() {
int EdoSensor = 23;
char EdoSensorString[5];
itoa(EdoSensor, EdoSensorString, 10);
client_mqtt.publish(topico2, EdoSensorString);
}
void procesar_mensajes(char* topic, byte* mensaje, unsigned int longitud) {
char mensaje_local[100] = {0};
Serial.print("Topic: ");
Serial.println(topic);
Serial.print("Mensaje recibido: ");
for (int i = 0; i < longitud; i++) {
Serial.write(mensaje[i]);
mensaje_local[i] = mensaje[i];
}
s0 = int(mensaje_local[0]) - 48;
s1 = int(mensaje_local[1]) - 48;
Serial.print("SW0=");
Serial.print(s0);
Serial.print(" SW1=");
Serial.print(s1);
Serial.println();
Serial.println();
int DatoRecibido = strtol(mensaje_local, 0, 10);
Serial.print("Dato recibido tipo long: ");
Serial.println(DatoRecibido);
}
Loading
esp32-devkit-c-v4
esp32-devkit-c-v4
lcd1:GND
lcd1:VCC
lcd1:SDA
lcd1:SCL
ldr1:VCC
ldr1:GND
ldr1:DO
ldr1:AO
pir1:VCC
pir1:OUT
pir1:GND
dht1:VCC
dht1:SDA
dht1:NC
dht1:GND
vcc1:VCC
r1:1
r1:2
r2:1
r2:2
r3:1
r3:2
r4:1
r4:2