#include <WiFi.h>
#include <PubSubClient.h>
#include "DHTesp.h"
const int DHT_PIN = 15;
DHTesp dhtSensor;
int led1 = 25;
int led2 = 26;
//MQTT
String clientId = "myClient1";
String broker = "broker.emqx.io";
int port = 1883;
long prev;
WiFiClient wifiClient;
PubSubClient wifiMQTT(wifiClient);
void mqttCallback(char* topic, byte* payload, unsigned int length) {
Serial.print("topic:");
Serial.println(topic);
String strTopic = String(topic);
String mqttdata = "";
for (int i = 0; i < length; i++) {
mqttdata += (char)payload[i];
}
Serial.print(mqttdata);
if (strTopic.equals("led1")) {
if (mqttdata.equals("on")) {
digitalWrite(led1, HIGH);
}
if (mqttdata.equals("off")) {
digitalWrite(led1, LOW);
}
}
if (strTopic.equals("led2")) {
if (mqttdata.equals("on")) {
digitalWrite(led2, HIGH);
}
if (mqttdata.equals("off")) {
digitalWrite(led2, LOW);
}
}
}
void setup() {
Serial.begin(115200);
pinMode(led1, OUTPUT);
pinMode(led2, OUTPUT);
dhtSensor.setup(DHT_PIN, DHTesp::DHT22);
Serial.print("Connecting to WiFi");
WiFi.begin("Wokwi-GUEST", "");
while (WiFi.status() != WL_CONNECTED) {
delay(100);
Serial.print(".");
}
Serial.println(" Connected!");
wifiMQTT.setServer(broker.c_str(), port);
wifiMQTT.setCallback(mqttCallback);
clientId += (String)random(1, 1000);
Serial.print("MQTT id: ");
Serial.println(clientId);
if ( wifiMQTT.connect(clientId.c_str())) {
Serial.println("MQTT Connected!");
//TopicSubscribe
wifiMQTT.subscribe("led1");
wifiMQTT.subscribe("led2");
}
else {
Serial.println("MQTT error!");
}
prev = millis();
}
void loop() {
if ( millis() - prev > 1000UL ) { // formateador UL al final del literal
prev = millis(); // almacenando en prev
TempAndHumidity data = dhtSensor.getTempAndHumidity();
Serial.println("Temp: " + String(data.temperature, 2) + "°C");
Serial.println("Humidity: " + String(data.humidity, 1) + "%");
Serial.println("---");
wifiMQTT.publish("temperatura", String(data.temperature, 2).c_str());
wifiMQTT.publish("humedad", String(data.humidity, 2).c_str());
}
wifiMQTT.loop();
}