#include <WiFi.h>
#include <PubSubClient.h>
#include <LiquidCrystal_I2C.h>
const char *BROKER_MQTT = "broker.hivemq.com";
const int BROKER_PORT = 1883;
const char *ID_MQTT = "esp32_motor_control";
const char *TOPIC_VELOCIDADE = "fiap/iot/velocidade";
LiquidCrystal_I2C lcd(0x27, 16, 2);
const int botaoPin = 2;
int velocidade = 0;
int estadoBotao = 0;
const char* ssid = "Wokwi-GUEST";
const char* password = "";
WiFiClient espClient;
PubSubClient MQTT(espClient);
void setup() {
lcd.begin(16, 2);
lcd.init();
lcd.backlight();
pinMode(botaoPin, INPUT);
Serial.begin(9600);
delay(100);
WiFi.begin(ssid, password);
Serial.print("Conectando ao Wi-Fi");
while (WiFi.status() != WL_CONNECTED) {
delay(1000);
Serial.print(".");
}
Serial.println("");
Serial.println("WiFi conectado!");
Serial.print("IP obtido: ");
Serial.println(WiFi.localIP());
MQTT.setServer(BROKER_MQTT, BROKER_PORT);
}
void reconnectMQTT() {
while (!MQTT.connected()) {
Serial.print("Tentando conectar ao Broker MQTT...");
if (MQTT.connect(ID_MQTT)) {
Serial.println("Conectado ao broker MQTT!");
} else {
Serial.print("Falha na conexão, tentando novamente em 2 segundos.");
delay(2000);
}
}
}
void loop() {
if (!MQTT.connected()) {
reconnectMQTT();
}
MQTT.loop();
estadoBotao = digitalRead(botaoPin);
if (estadoBotao == HIGH) {
velocidade += 5;
if (velocidade > 255) {
velocidade = 255;
}
lcd.setCursor(0, 0);
lcd.print("Speed: " + String(velocidade) + " km/h");
Serial.println("Acelerando, velocidade: " + String(velocidade));
} else {
velocidade -= 5;
if (velocidade < 0) {
velocidade = 0;
}
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Speed: " + String(velocidade) + " km/h");
Serial.println("Desacelerando, velocidade: " + String(velocidade));
}
ledcWrite(0, velocidade);
String payload = String(velocidade);
MQTT.publish(TOPIC_VELOCIDADE, payload.c_str());
delay(700);
}