/********************************************************************************************
   Balance connectée avec ESP32 ou ESP8266 et HX711
   La masse mesurée par la balance s'affiche dans une page web.

   Pour plus d'infos:
   https://electroniqueamateur.blogspot.com/2020/11/balance-connectee-base-desp32esp8266.html

********************************************************************************************/

// inclusion des bibliothèques utiles

#include "HX711.h"

const int broche_DT = 5;
const int broche_SCK = 4;

HX711 balance;

// pour la communication WiFi
#if defined ARDUINO_ARCH_ESP8266  // s'il s'agit d'un ESP8266
#include <ESP8266WiFi.h>
#include <ESP8266WebServer.h>
#elif defined ARDUINO_ARCH_ESP32  // s'il s'agit d'un ESP32
#include "WiFi.h"
#include <WebServer.h>
#endif

#include <WiFiClient.h>

const char* ssid     = "**********";
const char* password = "**********";

#if defined ARDUINO_ARCH_ESP8266  // s'il s'agit d'un ESP8266
ESP8266WebServer server(80);
#elif defined ARDUINO_ARCH_ESP32  // s'il s'agit d'un ESP32
WebServer server(80);
#endif

void handle_root() {

String mesure = String(balance.get_units(10));

  // C'est ici qu'on construit la page web:

  server.send(200, "html", "<head>  <title>ESP8266 / ESP32</title> <meta http-equiv=Refresh content=2></head> "
              "<body> <H1>Balance ESP8266 / ESP32</H1>"
              "<p>Masse mesur&eacute;e: " + mesure + " grammes</p>"
              "<p>Visitez <a href=http://electroniqueamateur.blogspot.ca/>&Eacute;lectronique en Amateur</a>!</p></body>");

  delay(100);
}

void setup(void)
{
  // Affichage dans le moniteur série:
  Serial.begin(115200);

  // Connexion au réseau WiFi
  WiFi.begin(ssid, password);
  Serial.print("\n\r \n\rConnection au reseau en cours");

  // On attend la connexion
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  Serial.println("");
  Serial.print("Nom du reseau WiFi: ");
  Serial.println(ssid);
  Serial.print("Adresse IP de la page web: ");
  Serial.println(WiFi.localIP());

  server.on("/", handle_root);

  server.begin();
  Serial.println("Le serveur web est en fonction.");

  Serial.println("Initialisation de la balance...");

  balance.begin(broche_DT, broche_SCK);

  while (!balance.is_ready())
  {
    ;
  }

  balance.set_scale(382); //le paramètre dépend de votre cellule de charge.
  balance.tare(); //ajustement du zéro

  Serial.println("La balance est prete!");

}

void loop(void)
{
  server.handleClient();
}