#include <PubSubClient.h> //
#include <EspMQTTClient.h> //Função client
#include <ArduinoJson.h> //Json
//copia biblioteca -> library manager -> + -> nome da biblioteca
#define BTN 5 // Define porta botão
#define BUZ 23 // Define porta sonorizador (piezo)
//Variaveis
char mensagemJson[100]; // Vetor pra guardar botão pres.
int lastState = 1; // Estado anterior do botão
int currentState; // Estado atual do botão
EspMQTTClient client( //função cliente (2 em 1): liga wi-fi e conecta com broker
"Wokwi-GUEST", //Rede wi-fi
"", //Senha da rede
"mqtt.tago.io", //Broker
"Default", //Usuario
"a99fbbbe-9da7-4042-947c-ddc9cda10e0a", //Senha
"Esp8266" //Topico
);
void setup() {
pinMode(BTN, INPUT); // Configura o pino do botão como entrada com pull-up
pinMode(BUZ, OUTPUT); // Configura o pino do sonorizador como saída
}
void mensagemRecebida(const String &topic){ // Responsavel por receber dados do brooker
Serial.println(topic); //
if(topic == "som"){ // mensagem "on"
tone(BUZ, 1000); //
delay(100);
noTone(BUZ); // Para o som
}else{ //
noTone(BUZ);
}
}
void onConnectionEstablished(){ //funcao se incrver no subscrive
client.subscribe("nickolas-topico-sub", mensagemRecebida); //Aperta este no celular e vem na tela do PC
}
void loop() {
currentState = digitalRead(BTN); //Monitoramento do Botão
DynamicJsonDocument dados(1024); // Pacote Json
dados["variable"] = "botao"; //
dados["value"] = currentState; //
serializeJson(dados, mensagemJson); // Empacota e envia (publica)
if(lastState == HIGH && currentState == LOW){
Serial.println("Botão pressionado");
client.publish("mensagemJson", mensagemJson);
noTone(BUZ); // Para o som
}else if(lastState == LOW && currentState == HIGH){
Serial.println("Botão despressionado");
client.publish("mensagemJson", mensagemJson);
tone(BUZ, 1000);
delay(100);
noTone(BUZ);
}
lastState = currentState;
client.loop(); //MQTT ficar em loop
}