#include <Wire.h>
#include <WiFi.h>
#include <WiFiClient.h>
#include <PubSubClient.h>
#define ssid "Wokwi-GUEST"
#define password ""
#define mqttBroker "broker.hivemq.com"
#define RELAY_PIN 18
#define LDR A0
#define LIGHT_SENSOR_PIN 34
#define RELAY_PIN 16
String mensagemRecebida;
float luminosidade = 0;
WiFiClient wiFiClient;
PubSubClient mqttClient(wiFiClient);
unsigned long tempoUltimaMensagem = 0;
void conectarWiFi() {
Serial.print("Conectando à rede Wi-Fi...");
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(1000);
Serial.print(".");
}
Serial.println(" Conectado!");
}
void conectarMQTT() {
Serial.print("Conectando ao broker MQTT...");
String clientId = "inteli_Rizzi_26";
while (!mqttClient.connect(clientId.c_str())) {
delay(1000);
Serial.print(".");
}
Serial.println(" Conectado!");
mqttClient.subscribe("prova_M4_inteli");
}
void verificarConexoes() {
if (WiFi.status() != WL_CONNECTED) {
Serial.println("Conexão Wi-Fi perdida. Reconectando...");
conectarWiFi();
}
if (!mqttClient.connected()) {
Serial.println("Conexão MQTT perdida. Reconectando...");
conectarMQTT();
}
}
void setup() {
Serial.begin(9600);
Serial.println("Iniciando...");
WiFi.mode(WIFI_STA);
conectarWiFi();
mqttClient.setServer(mqttBroker, 1883);
pinMode(RELAY_PIN, OUTPUT);
pinMode(LIGHT_SENSOR_PIN, INPUT);
}
void loop() {
verificarConexoes();
mqttClient.loop();
String ledAzul = "";
String ledVermelho = "";
char payload[16];
luminosidade = analogRead(LIGHT_SENSOR_PIN);
const unsigned long agora = millis();
if ((agora - tempoUltimaMensagem) >= 1000L)
{
Serial.print("Luminosidade: ");
Serial.println(luminosidade);
tempoUltimaMensagem = agora;
sprintf(payload, "%d", (int)luminosidade, ledAzul, ledVermelho), // Use %d para inteiros
Serial.print("Enviando dados...");
Serial.println(payload);
if (mqttClient.publish("prova_M4_inteli", payload))
{
Serial.println("Dados enviados!");
}
else
{
Serial.println("Erro ao enviar os dados!");
}
Serial.println();
Serial.println("Aguardando para repetir o processo...");
Serial.println();
}
if (luminosidade >= 1467){
digitalWrite(RELAY_PIN, HIGH);
ledAzul = "Led azul ligado";
ledVermelho = "Led vermelho desligado";
} else{
digitalWrite(RELAY_PIN, LOW);
ledAzul = "Led azul desligado";
ledVermelho = "Led vermelho ligado";
}
}