//Taller 1 de sensor de Temperatura y Humedad, Version Online
//Maria Jose Salinas 2420211033 Anthony Garcia 2420211001
#include <WiFi.h>
#include "PubSubClient.h"
#include <DHT.h>
const char* ssid = "Wokwi-GUEST";
const char* password = "";
const char* mqttServer = "test.mosquitto.org";
int port = 1883;
const int mqttPort = 1883;
String stMac;
char mac[50];
char clientId[50];
WiFiClient espClient;
PubSubClient client(espClient);
const int ledPin = 2; // Pin del Led
const int rele = 15; // Pin del Rele
#define DHTPIN 5 // Pin donde está conectado el sensor DHT22
#define DHTTYPE DHT22
// Definir el pin al que está conectado el potenciómetro
//const int POTENTIOMETER_PIN = 15;
DHT dht(DHTPIN, DHTTYPE);
float temperature; // Variable para almacenar la temperatura
float humidity; // Variable para almacenar la Humedad
//float pot;
String ms; // Mensaje de estado del para encender rele
void setup() {
Serial.begin(115200);
randomSeed(analogRead(0));
delay(10);
Serial.println();
Serial.print("Connecting to ");
Serial.println(ssid);
wifiConnect();
Serial.println("");
Serial.println("WiFi connected");
Serial.println("IP address: ");
Serial.println(WiFi.localIP());
Serial.println(WiFi.macAddress());
stMac = WiFi.macAddress();
stMac.replace(":", "_");
Serial.println(stMac);
client.setServer(mqttServer, port);
dht.begin();
client.setCallback(callback);
pinMode(ledPin, OUTPUT);
//pinMode(POTENTIOMETER_PIN, INPUT);
pinMode(rele, OUTPUT);
client.publish("mi_tema","Mi mensaje a publicar");
//Suscribirse a un tema
client.subscribe("tema_a_suscribir");
}
void connectToMQTT(){
while(!client.connected()) {
Serial.println("Conectando a MQTT...");
if(client.connect("ESP8266Client")) {
Serial.println("Conectado a MQTT");
}else {
Serial.print("Fallo, rc = 0");
Serial.print(client.state());
Serial.println("Intente de nuevo en 5 segundos...");
delay(5000);
}
}
}
void wifiConnect() {
WiFi.mode(WIFI_STA);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
}
void mqttReconnect() {
while (!client.connected()) {
Serial.print("Attempting MQTT connection...");
long r = random(1000);
sprintf(clientId, "clientId-%ld", r);
if (client.connect(clientId)) {
Serial.print(clientId);
Serial.println(" connected");
client.subscribe("topicName/led");
} else {
Serial.print("failed, rc=");
Serial.print(client.state());
Serial.println(" try again in 2 seconds");
delay(2000);
}
}
}
//Receptor de Informacion del MQTT
void callback(char* topic, byte* payload, unsigned int length) {
Serial.print("Mensaje recibido en el tema: ");
Serial.print(topic);
Serial.print(". mensaje: ");
String stMessage;
for (int i = 0; i < length; i++) {
Serial.print((char)payload[i]);
stMessage += (char)payload[i]; // recibe el mensaje del MQTT
}
Serial.println();
// Encendido y Apagado LED
if (String(topic) == "topicName/led") {
Serial.print("Changing output to ");
if(stMessage == "on"){
Serial.println("on");
digitalWrite(ledPin, HIGH);
}
else if(stMessage == "off"){
Serial.println("off");
digitalWrite(ledPin, LOW);
}
}
}
void loop() {
delay(2000); //Ajuste intervalo lectura del sensor
//int potValue = analogRead(POTENTIOMETER_PIN);
// Mapear el valor del potenciómetro al rango de temperatura deseado
//pot = map(potValue, 0, 1023, 0, 50); // Simula temperaturas de 0°C a 50°C
// Imprimir la temperatura simulada
//Serial.print("Temperatura simulada: ");
//Serial.print(potValue);
//Serial.println(" °C");
//Lectura de temperatura desde el sensor DHT22
temperature = dht.readTemperature();
humidity = dht.readHumidity();
if (client.connected()) {
String temperatureString = String(temperature, 2);
String humidityString = String(humidity, 2);
//String potString = String(pot, 2);
//enciende rele de acuerdo a los niveles de temperatura
if (int(temperature) > 50) {
digitalWrite(rele, HIGH);
ms = "Temperatura paso los 50°C ";
Serial.print(ms);
}else {
digitalWrite(rele, LOW);
ms = "Temperatura esta bajo los 50°C ";
Serial.print(ms);
}
//Mandar info al MQTT
client.publish("topicName/temperature", temperatureString.c_str());
client.publish("topicName/humidity", humidityString.c_str());
client.publish("topicName/estado", ms.c_str());
//client.publish("topicName/pot", potString.c_str());
}
if(!client.connected()) {
mqttReconnect();
}
client.loop();
}