#include <WiFi.h>
#include <PubSubClient.h>
// Variáveis/constantes----------------------------------------------------
//Credenciais WiFi
const char* ssid = "Wokwi-GUEST"; //Rede wifi
const char* pass = ""; //senha
//Endereço broker
const char* mqtt_server = "test.mosquitto.org";
//Variáveis para recebimento das mensagens
String wokwi_payload;
String wokwi_topic;
//Cria um cliente que pode se conectar a um endereço IP e porta de internet especificados,
//conforme definido em client.connect().
WiFiClient ClienteWokwi;
//Esta biblioteca permite que você envie e receba mensagens MQTT.
PubSubClient client(ClienteWokwi);
const int LED = 4;
//Função callback chamada quando uma mensagem for recebida para subscrições:
void callback(char* topic, byte* payload, unsigned int length) {
String c_payload;
for (int i = 0; i < length; i++) {
c_payload +=((char)payload[i]);
}
wokwi_topic = topic;
wokwi_payload=c_payload;
Serial.print("Mensagem recebida [");
Serial.print(topic);
Serial.print("- ");
Serial.print(wokwi_payload);
Serial.println("] ");
}
//Função que verifica se foi estabelecida conexão
void reconnect() {
while (!client.connected()) {
Serial.print("Estabelecendo conexao MQTT...");
if (client.connect("ClienteWokwi")) {
Serial.print(mqtt_server);
Serial.println(" conectado com sucesso!");
client.subscribe("MAP-LED");
} else {
Serial.print("failed, rc=");
Serial.print(client.state());
Serial.println(" tentando novamente em 5 segundos");
// Aguardando 5 segundos
delay(1000);
}
}
}
//Função verifica a mensagem recebida e aciona os pinos
void recebe_dados()
{
if(wokwi_payload=="A")
{
digitalWrite(LED, HIGH);
}
if(wokwi_payload=="a")
{
digitalWrite(LED, LOW);
}
}
void setup() {
pinMode(LED, OUTPUT);
Serial.begin(115200);
WiFi.begin(ssid, pass); //config wifi
while(WiFi.status() != WL_CONNECTED){ //conectando...
delay(100);
Serial.print(".");
}
Serial.println("WiFi Connectado!");
Serial.println(WiFi.localIP()); //informa endereço IP
client.setServer(mqtt_server, 1883);
client.setCallback(callback);
}
void loop() {
if (!client.connected()) {
reconnect();
}
recebe_dados();
//Uma vez conectado client.loop() deve ser chamada periodicamente para manter conexão
//e aguardar recebimento de mensagens
client.loop();
}