#include <HX711.h>
#include <WiFi.h>
#include <Wire.h>
#include <WiFiClientSecure.h>
#include <PubSubClient.h>
const int ld_sck = 4;
const int ld_cell = 2;
float results;
HX711 scale;
//WiFi Setup Config
const char* ssid = "Wokwi-GUEST";
const char* password = "";
//MQTT Broker Config
const char *mqtt_broker = "broker.emqx.io";
const char *topic = "esp/test";
const char *mqtt_username = "esp32";
const char *mqtt_password = "symbotic";
const int mqtt_port = 1883;
WiFiClient wifiClient;
PubSubClient mqttClient(wifiClient);
// Initialize WiFi
void initWiFi() {
Serial.println("Initializing WiFi...");
WiFi.mode(WIFI_STA);
Serial.print("Connecting to WiFi: ");
Serial.println(ssid);
WiFi.begin(ssid, password, 6);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.println("WiFi connected");
}
void mqttConnect()
{
mqttClient.setServer(mqtt_broker, mqtt_port);
while (!mqttClient.connected())
{
String client_id = "esp32-client";
client_id += String(WiFi.macAddress());
Serial.printf("The client %s connects to the public MQTT broker\n", client_id.c_str());
if (mqttClient.connect(client_id.c_str(), mqtt_username, mqtt_password))
{
Serial.println("Public EMQX MQTT broker connected");
}
else
{
Serial.print("failed with state ");
Serial.print(mqttClient.state());
delay(2000);
}
}
}
void setup() {
Serial.begin(115200);
initWiFi();
scale.begin(ld_cell, ld_sck);
}
void loop() {
if(!mqttClient.connected())
{
mqttConnect();
}
mqttClient.loop();
if(scale.is_ready())
{
scale.set_scale();
Serial.println("Remove Weight...");
delay(5000);
scale.tare();
Serial.println("Done...");
Serial.println("Ready! Add Weight");
delay(5000);
float reading = scale.get_units(10);
//results = reading/419.8;
Serial.println(results);
}
//MQTT Server
mqttClient.publish(topic, String(results).c_str(),true);
delay(10);
}