#include <ESP32Servo.h>
#include <ArduinoJson.h>
#include "EspMQTTClient.h"
#define PIN_TRIG 2
#define PIN_ECHO 15
#define PIN_SERVO 17
Servo meuservo;
EspMQTTClient client(
"Wokwi-GUEST",
"",
"mqtt.tago.io",
"Evandro",
"567736fd-7cdc-49ab-9151-b8c6b0c11b09",
"Mini Projeto - LAB365",
1883
);
char distancia[100];
long ultimoEnvioDistancia = 0;
bool estadoBotao = false;
bool leituraBotao;
bool leituraBotaoAnterior;
long ultimoPressionamentoBotao = 0;
void setup() {
Serial.begin(115200);
meuservo.attach(PIN_SERVO);
pinMode(PIN_TRIG, OUTPUT);
pinMode(PIN_ECHO, INPUT);
pinMode(4, OUTPUT);
pinMode(18, INPUT);
pinMode(19, OUTPUT);
pinMode(25, OUTPUT);
leituraBotao = digitalRead(18);
}
void onConnectionEstablished(){
Serial.println("Conexão Estabelecida");
client.subscribe("mini-projeto/servo", testaServo);
client.subscribe("mini-projeto/led", testaLed);
client.subscribe("mini-projeto/push-button-dashboard", acionamentoPushButtonDashboard);
}
void loop() {
bool wifi = client.isConnected();
if(wifi == true){
digitalWrite(19, HIGH);
}else{
digitalWrite(19, LOW);
}
if(estadoBotao == true){
digitalWrite(25, HIGH);
}else{
digitalWrite(25, LOW);
}
acionamentoBotao();
if(millis() - ultimoEnvioDistancia >= 5000 && estadoBotao){
testaDistancia();
ultimoEnvioDistancia = millis();
}
client.loop();
}
void acionamentoPushButtonDashboard(String valor){
Serial.println(valor);
if(valor == "true"){
estadoBotao = true;
}else{
estadoBotao = false;
}
}
void acionamentoBotao(){
char botao[100];
leituraBotaoAnterior = leituraBotao;
leituraBotao = digitalRead(18);
if(leituraBotaoAnterior == HIGH && leituraBotao == LOW && millis() - ultimoPressionamentoBotao > 50){
estadoBotao = !estadoBotao;
Serial.print("Alterou o estado para: ");
Serial.println(estadoBotao);
StaticJsonDocument<300> dadosBotao;
dadosBotao["variable"] = "push_button";
dadosBotao["value"] = estadoBotao;
serializeJson(dadosBotao, botao);
client.publish("mini-projeto/push-button", botao);
}
}
void testaServo(String valor){
Serial.println(valor);
meuservo.write(valor.toInt());
}
void testaLed(String valor){
Serial.print("LED -> ");
Serial.println(valor);
if(valor == "ON"){
digitalWrite(4, HIGH);
}else{
digitalWrite(4, LOW);
}
}
void testaDistancia(){
digitalWrite(PIN_TRIG, HIGH);
delayMicroseconds(10);
digitalWrite(PIN_TRIG, LOW);
// Leia o resultado:
int duration = pulseIn(PIN_ECHO, HIGH);
Serial.print("Distância em CM: ");
int dist = duration / 58;
Serial.println(dist);
StaticJsonDocument<300> dadoDistancia;
dadoDistancia["variable"] = "sensor_distancia";
dadoDistancia["value"] = dist;
serializeJson(dadoDistancia, distancia);
client.publish("mini-projeto/distancia", distancia);
Serial.println("Dado enviado!");
}