#include <EspMQTTClient.h>
#include <ArduinoJson.h>
#include <DallasTemperature.h>
#define ONE_WIRE_BUS 4 // Pino de dados 1-Wire
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
WiFiClient espClient;
EspMQTTClient client(
"Wokwi-GUEST", //Rede wi-fi
"", // Senha wi-fi
"mqtt.tago.io", // Broker
"Default", // Usuário
"d46235f5-cda8-4cfc-9508-7339a4bb6404", // Token da plataforma Tago.io
"ESP32_Tutorial" // Identificação única
);
// Define a função de callback associada ao delay
void delayedFunction() {
// MQTT (Publish) e controle (alteração de valores)
Serial.println("Publicando topico temperatura_ds18b20 caso conexao OK...");
Serial.println(dadosJson);
client.publish("temperatura_ds18b20", dadosJson);
// chama novamente função de callback
client.executeDelayed(5000, delayedFunction);
}
// Setup
void setup() {
client.enableMQTTPersistence();
client.setMqttReconnectionAttemptDelay(2000);
client.setWifiReconnectionAttemptDelay(3000);
client.setKeepAlive(20);
client.enableDebuggingMessages(true);
client.setMaxPacketSize(256);
client.executeDelayed(5000, delayedFunction);
sensors.begin();
pinMode(PUSH_BUTTON_PIN, INPUT); // Botão de push (opcional, pode ser removido)
Serial.begin(115200);
}
// Loop
void loop() {
client.loop();
// Leitura da temperatura do sensor DS18B20
sensors.requestTemperatures(); // Solicita temperaturas de todos os sensores
delay(500);
float temperatura = sensors.getTemperatureC(sensors.getDeviceAddresses()[0]); // Lê a temperatura do primeiro sensor encontrado
// Insere os dados no JSON
dados[0]["variable"] = "temperatura_ds18b20";
dados[0]["unit"] = "°C";
dados[0]["value"] = temperatura;
// conversão da estrutura de dados (JSON)
serializeJson(dados, dadosJson);
}
// MQTT (Função que recebe dados do Subscribe)
void onMessageReceived(const String& msg) {
// ... (não relevante para este caso)
}
// MQTT (Subscribe)
void onConnectionEstablished() {
Serial.println("Conexao com tago.io estabelecida, assinando topicos...");
Serial.println("Assinando o topico liga_desliga_led sem função de callback....");
client.subscribe("liga_desliga_led", [] (const String &payload) {
});
Serial.println("Assinando o topico comando_botao_push_button sem função de callback....");
client.subscribe("comando_botao_push_button", [] (const String &payload) {
});
}