#include <WiFi.h>
#include <PubSubClient.h>
#include <LiquidCrystal_I2C.h>
const char *ssid = "Wokwi-GUEST"; // SSID da rede
const char *password = ""; // Senha da rede
const char *mqttServer = "localhost";
const int mqttPort = 1883;
const int btnAUp = 14;
const int btnADown = 12;
const int btnBUp = 4;
const int btnBDown = 2;
const int btnReset = 15;
int scoreA = 0;
int scoreB = 0;
WiFiClient espClient;
PubSubClient client(espClient);
LiquidCrystal_I2C lcd(0x27, 16, 2);
void connectWiFi()
{
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED)
{
delay(500);
}
}
void connectMQTT()
{
while (!client.connected())
{
if (client.connect("ESP32_Placar"))
{
// Conectado
}
else
{
delay(5000);
}
}
}
void publishScore()
{
String payload = "{\"scoreA\": " + String(scoreA) + ", \"scoreB\": " + String(scoreB) + "}";
client.publish("/esp32_placar/attrs", payload.c_str());
}
void updateDisplay()
{
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Time A: " + String(scoreA));
lcd.setCursor(0, 1);
lcd.print("Time B: " + String(scoreB));
}
void setup()
{
Serial.begin(115200);
Serial.println("COMECOU");
pinMode(btnAUp, INPUT_PULLUP);
pinMode(btnADown, INPUT_PULLUP);
pinMode(btnBUp, INPUT_PULLUP);
pinMode(btnBDown, INPUT_PULLUP);
pinMode(btnReset, INPUT_PULLUP);
Serial.println("BUTTONS");
lcd.init();
lcd.backlight();
Serial.println("LCD");
updateDisplay();
connectWiFi();
Serial.println("WIFI");
client.setServer(mqttServer, mqttPort);
connectMQTT();
publishScore();
}
void loop()
{
if (!client.connected())
connectMQTT();
client.loop();
Serial.println("AAAA");
if (digitalRead(btnAUp) == LOW)
{
Serial.println("AUp");
scoreA++;
delay(300);
publishScore();
updateDisplay();
}
if (digitalRead(btnADown) == LOW)
{
Serial.println("AD");
scoreA = max(0, scoreA - 1);
delay(300);
publishScore();
updateDisplay();
}
if (digitalRead(btnBUp) == LOW)
{
Serial.println("BUp");
scoreB++;
delay(300);
publishScore();
updateDisplay();
}
if (digitalRead(btnBDown) == LOW)
{
Serial.println("BD");
scoreB = max(0, scoreB - 1);
delay(300);
publishScore();
updateDisplay();
}
if (digitalRead(btnReset) == LOW)
{
Serial.println("Reset");
scoreA = 0;
scoreB = 0;
delay(300);
publishScore();
updateDisplay();
}
}