#include <WiFi.h>
#include <PubSubClient.h>
#define BUILTIN_LED 27
// Actualícelos con valores adecuados el BROKER
const char* mqtt_server = "io.adafruit.com"; // Broker
const int port = 1883; // Puerto del Broker
const char user[] = "txemita"; // USER del Broker
const char pass[] = "aio_jjHu23qODtRQEmPhLjGeEkxuEycH"; // PASSWORD del Broker
const char clientid[] = "mepicanloscocos"; // un identificador distinto para cada placa
WiFiClient espClient;
PubSubClient client(espClient);
long lastMsg = 0;
char msg[50];
int value = 0;
boolean estado1 = 0;//para los pulsadores
boolean estado2 = 0;//para los pulsadores
void setup() {
pinMode(BUILTIN_LED, OUTPUT); // Initializar el pin BUILTIN_LED como salida
Serial.begin(115200);
setup_wifi(); //Conectarnos a la red WIFI
client.setServer(mqtt_server, port); //Fijar Broker
client.setCallback(callback); //Definir function callback
}
//*****************************************
//* Conectándonos a una red WiFi *
//*****************************************
void setup_wifi() {
delay(10);
Serial.println();
Serial.print("Conectando a ");
Serial.println("Wokwi-GUEST");
WiFi.begin("Wokwi-GUEST", "", 6);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.println("WiFi conectada");
Serial.println("IP address: ");
Serial.println(WiFi.localIP());
}
//*****************************************
//* CALLBACK *
//*****************************************
// CALLBACK a ejecutar cuando se recibe un mensaje
// en este ejemplo, muestra por serial el mensaje recibido
void callback(char* topic, byte* payload, unsigned int length) {
Serial.print("Mensaje recivido [");
Serial.print(topic);
Serial.print("] ");
/*
for (int i = 0; i < length; i++) {
Serial.print((char)payload[i]);
}
Serial.println();
*/
String content = "";
for (size_t i = 0; i < length; i++)
{
content.concat((char)payload[i]);
}
Serial.println(content);
// Encender el LED si se recibió un 1 como primer carácter
if ((char)payload[0] == '1') {
digitalWrite(BUILTIN_LED, LOW); // Encienda el LED (tenga en
// cuenta que LOW es el nivel de voltaje
// pero actualmente el Led está encendido; esto es porque
// es active a nivel bajo en el ESP-01)
} else {
digitalWrite(BUILTIN_LED, HIGH); // Poner el LED en off haciendo el voltaje HIGH
}
}
//*****************************************
//* Realiza las SUSCRIPCION a los topic *
//*****************************************
//en este ejemplo, solo a "cursoIoT/aldc/pulsador"
void SuscribeMqtt()
{
client.subscribe("txemita/f/led1"); //Este es topic al que me suscribo
}
//*****************************************
//* En caso de fallo se reconecta *
//*****************************************
void reconnect() {
// Bucle hasta que estemos conectados
while (!client.connected()) {
Serial.print("Intentando la conexión MQTT...");
// Intentando conexión
if (client.connect(clientid,user,pass)) {
Serial.println("conectado");
SuscribeMqtt(); //Realiza suscripciones
} else {
Serial.print("failed, rc=");
Serial.print(client.state());
Serial.println(" try again in 5 seconds");
// Wait 5 seconds before retrying
delay(5000);
}
}
}
void loop() {
//En caso de fallo se reconecta
if (!client.connected()) {
reconnect();
}
client.loop(); //Esto debe llamarse regularmente para permitir que el cliente
//procese los mensajes entrantes y mantenga su conexión con el servidor.
//Conectarse cada 2 segundos
long now = millis();
if (now - lastMsg > 2000) {
lastMsg = now;
++value;
itoa(value,msg,10); //convertir de entero es string
client.publish("txemita/f/contador", msg);
}
}