#include "WiFi.h" //
#include "PubSubClient.h" //
const char* ssid = "Wokwi-GUEST"; //
const char* password = ""; //
const char* mqttServer = "broker.hivemq.com"; //
int port = 1883; //
String stMac; //
char mac[50]; //
char clientId[50]; //
WiFiClient espClient; //
PubSubClient client(espClient); //
#define ledPin 13
void setup() {
Serial.begin(115200);
randomSeed(analogRead(0)); //
delay(10);
Serial.print("\nConectando a: ");
Serial.println(ssid);
wifiConnect();
Serial.println("\WiFi conectado");
Serial.println("Dirección IP");
Serial.println(WiFi.localIP());
Serial.println(WiFi.macAddress());
stMac = WiFi.macAddress();
stMac.replace(":","_");
Serial.println(stMac);
client.setServer(mqttServer, port);
client.setCallback(callback);
pinMode(ledPin, OUTPUT);
}
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(("Intentando conexión MQTT..."));
long r = random(1000);
sprintf(clientId, "clientid-%Id",r);
if(client.connect(clientId)){
Serial.print(clientId);
Serial.println("Conectado");
client.subscribe("topicName_led");
client.publish("topicName_pub","Hello world, ESP32 conectado!");
}else{
Serial.print("Falló, rc= ");
Serial.print(client.state());
Serial.println("Siguiente intento en 5 segundos");
delay(5000);
}
}
}
void callback(char* topic, byte* message, unsigned int lenght){
Serial.print("Llegó un mensaje en el tópico: ");
Serial.print(topic);
Serial.print(". Mensaje: ");
String stMessage;
for(int i=0; i < lenght; i++){
stMessage=stMessage + (char)message[1];
}
Serial.println(stMessage);
if(String(topic) == "topicName_led"){
if(stMessage == "nn"){
digitalWrite(ledPin, HIGH);
client.publish("topicName_pub","Encendido");
}else if(stMessage == "fff"){
digitalWrite(ledPin, LOW);
client.publish("topicName_pub","Apagado");
}
}
}
void loop() {
delay(50);
if(!client.connected()){
mqttReconnect();
}
client.loop();
}