#include <PubSubClient.h>
#include <WiFi.h>
const char* ssid = "Wokwi-GUEST";
const char* password = "";
const char *MQTT_SERVER="broker.hivemq.com";
const uint16_t MQTT_PORT =1883;
WiFiClient wifiClient;
PubSubClient mqttClient(wifiClient);
const int relay=15;
void CallBackMqtt(char* topic, byte* payload, unsigned int lenght)
{
Serial.print("Callback -");
Serial.print("Message");
String messageTemp;
for(int i=0; i<lenght; i++)
{
Serial.print((char)payload[i]);
messageTemp+=(char)payload[i];
}
Serial.println();
if(String(topic)=="/actuators/relay"){
Serial.print("Cambiando la salida a: ");
if(messageTemp=="on"){
Serial.println("on");
digitalWrite(relay, HIGH);
}
else if (messageTemp=="off"){
Serial.println("off");
digitalWrite(relay, LOW);
}
}
}
void SetupMqtt()
{
mqttClient.setServer(MQTT_SERVER,MQTT_PORT);
mqttClient.setCallback(CallBackMqtt);
}
void ConnectToMqtt()
{
Serial.println("Connecting yo MQTT Broker ...");
while(!mqttClient.connected())
{
char clientId[100]="\0";
sprintf(clientId,"ESP32Client-%04X",random(0xffff));
Serial.println(clientId);
if(mqttClient.connect(clientId))
{
Serial.println("Connected to MQTT broker");
mqttClient.subscribe("/actuators/relay");
}
}
}
void ConnectToWiFi()
{
Serial.println("Connecting to Wifi");
Serial.println(ssid);
WiFi.begin(ssid, password,6);
while(WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.print("Se ha conectado al wifi con la ip: ");
Serial.println(WiFi.localIP());
Serial.print("conectado a: ");
Serial.println(ssid);
}
void setup() {
Serial.begin(115200);
ConnectToWiFi();
SetupMqtt();
pinMode(relay, OUTPUT);
Serial.println("Setup end");
}
void loop() {
if (!mqttClient.connected())
{
ConnectToMqtt();
}
mqttClient.loop();
static uint64_t last_time;
uint64_t now=millis();
if(now - last_time>1*1000)
{
last_time=now;
}
}