#include <HX711.h>
#include <WiFi.h>
#include <PubSubClient.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
// Pinos do HX711 no ESP32
#define DOUT 32
#define CLK 33
// Wi-Fi (Wokwi simula Wi-Fi livre, sem senha)
const char* ssid = "Wokwi-GUEST";
const char* password = "";
// MQTT Broker testclient.cool
const char* mqtt_server = "test.mosquitto.org";
const char* mqtt_topic = "wokwi/balanca/peso";
// Objetos
WiFiClient espClient;
PubSubClient client(espClient);
HX711 scale;
LiquidCrystal_I2C lcd(0x27, 16, 2); // Endereço I2C do LCD 0x27
void setup_wifi() {
delay(10);
Serial.println();
Serial.printf("Conectando ao Wi-Fi %s", ssid);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("\nWi-Fi conectado");
Serial.print("IP: ");
Serial.println(WiFi.localIP());
}
void reconnect() {
while (!client.connected()) {
Serial.println("Conectando ao broker MQTT...");
if (client.connect("ESP32ClientWokwi")) {
Serial.println("Conectado ao MQTT!");
} else {
Serial.print("Falha na conexão, rc=");
Serial.print(client.state());
Serial.println(" tentando novamente em 5s");
delay(5000);
}
}
}
void setup() {
Serial.begin(115200);
setup_wifi();
client.setServer(mqtt_server, 1883); // Usando testclient.cool como broker
// Inicializa HX711
scale.begin(DOUT, CLK);
scale.set_scale(2100/5000.f); // Calibração de exemplo
scale.tare();
// Inicializa LCD
Wire.begin(21, 22);
lcd.begin(16, 2);
lcd.setBacklight(1);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Balança iniciada");
}
void loop() {
if (!client.connected()) {
reconnect();
}
client.loop();
long peso = scale.get_units(10); // Média de 10 leituras
// Exibe no serial
Serial.print("Peso (g): ");
Serial.println(peso);
// Exibe no LCD
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Peso (g):");
lcd.setCursor(0, 1);
lcd.print(peso);
// Publica no MQTT
char payload[20];
snprintf(payload, sizeof(payload), "%ld", peso);
client.publish(mqtt_topic, payload);
delay(1000);
}
//https://testclient-cloud.mqtt.cool/