#include <PubSubClient.h>
#include <WiFi.h>
#include <stdlib.h>
#define PIN_LED_VERDE 15 // GPIO que está ligado o LED
#define PIN_LED_AMARELO 16 // GPIO que está ligado o LED
#define PIN_LED_VERMELHO 17 // GPIO que está ligado o LED
// Defina as constantes para o WiFi
const char *SSID = "Wokwi-GUEST";
const char *PASSWORD = "";
// Defina as constantes para o broker MQTT
const char *BROKER_MQTT = "test.mosquitto.org";
const int BROKER_PORT = 1883;
// Defina o ID MQTT
#define ID_MQTT "esp47"
// Defina os tópicos MQTT
#define TOPIC_SUBSCRIBE_LED "R467895D"
#define TOPIC_PUBLISHER "RAFAEL"
#define PUBLISH_DELAY 2000 // Atraso da publicação (2 segundos)
#define TOPIC_SUBSCRIBE_LED "topic_on_off_led.1"
unsigned long publishUpdate;
// Variáveis globais
WiFiClient espClient;
PubSubClient MQTT(espClient);
// Protótipos de funções
void initWiFi();
void initMQTT();
void callbackMQTT(char *topic, byte *payload, unsigned int length);
void reconnectMQTT();
void reconnectWiFi();
void checkWiFIAndMQTT();
void callbackMQTT(char *topic, byte *payload, unsigned int length){
String msg;
// Obtem a string do payload recebido
for (int i = 0; i < length; i++) {
char c = (char)payload[i];
msg += c;
}
Serial.printf("Chegou a seguinte string via MQTT: %s do topico: %s\n", msg, topic);
if (msg.equals("1")) {
digitalWrite(PIN_LED_VERDE, HIGH);
Serial.print("LED ligado por comando MQTT");
}
if (msg.equals("0")) {
digitalWrite(PIN_LED_VERDE, LOW);
Serial.print("LED desligado por comando MQTT");
}
if (msg.equals("3")) {
digitalWrite(PIN_LED_AMARELO, HIGH);
Serial.print("LED ligado por comando MQTT");
}
if (msg.equals("2")) {
digitalWrite(PIN_LED_AMARELO, LOW);
Serial.print("LED desligado por comando MQTT");
}
if(digitalRead(PIN_LED_AMARELO) && digitalRead(PIN_LED_VERDE) ){
digitalWrite(PIN_LED_VERMELHO, HIGH);
}else {
digitalWrite(PIN_LED_VERMELHO, LOW);
}
}
void setup(){
Serial.begin(115200);
// Configura o pino do LED como output e inicializa em nível baixo
pinMode(PIN_LED_VERDE, OUTPUT);
digitalWrite(PIN_LED_VERDE, LOW);
// Configura o pino do LED como output e inicializa em nível baixo
pinMode(PIN_LED_AMARELO, OUTPUT);
digitalWrite(PIN_LED_AMARELO, LOW);
// Configura o pino do LED como output e inicializa em nível baixo
pinMode(PIN_LED_VERMELHO, OUTPUT);
digitalWrite(PIN_LED_VERMELHO, LOW);
// Inicializa a conexão Wi-Fi
initWiFi();
// Inicializa a conexão com o broker MQTT
initMQTT();
}
void loop(){
if ((millis() - publishUpdate) >= PUBLISH_DELAY) {
publishUpdate = millis();
// Verifica o funcionamento das conexões WiFi e ao broker MQTT
checkWiFIAndMQTT();
// Envia as strings ao dashboard MQTT
int Valor = rand();
MQTT.publish(TOPIC_PUBLISHER, String(Valor).c_str());
// Keep-alive da comunicação com broker MQTT
MQTT.loop();
}
}
// Implementações das funções
void initWiFi(){
delay(10);
Serial.println("Conexao WI-FI");
Serial.print("Conectando-se na rede: ");
Serial.println(SSID);
Serial.println("Aguarde");
reconnectWiFi();
}
void initMQTT(){
MQTT.setServer(BROKER_MQTT, BROKER_PORT);
MQTT.setCallback(callbackMQTT);
}
void reconnectMQTT(){
while (!MQTT.connected())
{
Serial.println("Tentando se conectar ao Broker MQTT...");
if (MQTT.connect(ID_MQTT))
{
Serial.println("Conectado com sucesso ao broker MQTT!");
MQTT.subscribe(TOPIC_SUBSCRIBE_LED);
}
else
{
Serial.println("Falha ao reconectar no broker. Nova tentativa em 2 segundos.");
delay(2000);
}
}
}
void checkWiFIAndMQTT(){
if (!MQTT.connected())
reconnectMQTT();
reconnectWiFi();
}
// TESTE 123
void reconnectWiFi(){
if (WiFi.status() == WL_CONNECTED)
return;
WiFi.begin(SSID, PASSWORD);
while (WiFi.status() != WL_CONNECTED)
{
delay(100);
Serial.print(".");
}
Serial.println();
Serial.print("Conectado com sucesso na rede ");
Serial.print(SSID);
Serial.println("IP obtido: ");
Serial.println(WiFi.localIP());
}Loading
franzininho-wifi
franzininho-wifi