# Projet — Balance connectée WiFi (HX711 + ESP32)

## Objectif

L'ESP32 lit la cellule de charge via le HX711, crée un réseau WiFi auquel un smartphone se connecte, et affiche le poids en temps réel sur une page web servie par l'ESP32.

**Comportement réseau :**
- L'ESP32 crée un point d'accès WiFi (mode AP)
- Dès connexion du smartphone, un portail captif redirige automatiquement vers la page de pesée
- La page se met à jour en temps réel via Server-Sent Events (SSE) — pas de rechargement

---

## Matériel nécessaire

| Élément                              | Quantité |
|--------------------------------------|----------|
| ESP32 DevKit V1 (ESP-WROOM-32)       | 1        |
| Module HX711                         | 1        |
| Cellule de charge (1–50 kg)          | 1        |
| Câbles Dupont                        | 8        |
| Alimentation USB 5 V / 1 A minimum   | 1        |

---

## Bibliothèques requises

À installer via le gestionnaire de bibliothèques Arduino ou PlatformIO :

| Bibliothèque          | Auteur           | Usage                          |
|-----------------------|------------------|--------------------------------|
| `HX711`               | bogde            | Lecture du capteur             |
| `ESPAsyncWebServer`   | Mathieu Carbou   | Serveur web asynchrone         |
| `AsyncTCP`            | Mathieu Carbou   | Dépendance d'AsyncWebServer    |

`WiFi`, `DNSServer` et `Preferences` sont intégrés au SDK ESP32 (pas d'installation nécessaire).

> ⚠️ Utiliser impérativement la version **Mathieu Carbou** (et non `me-no-dev`) — la version originale provoque une erreur de compilation avec le SDK ESP32 v3.x. Voir l'annexe d'installation pour le détail.

---

## Alimentation

### ESP32 DevKit V1

| Entrée              | Tension    | Remarque                                             |
|---------------------|------------|------------------------------------------------------|
| Connecteur micro-USB | **5 V**   | Voie normale — régulateur AMS1117 embarqué → 3,3 V  |
| Broche **VIN**      | **5 V**    | Même régulateur que l'USB                            |
| Broche **3V3**      | **3,3 V**  | Bypass régulateur — source externe régulée requise   |

Le module ESP-WROOM-32 fonctionne en **3,3 V** en interne. Le DevKit intègre un régulateur AMS1117-3,3 V qui convertit le 5 V (USB ou VIN) en 3,3 V.

Pendant les émissions WiFi, l'ESP32 peut consommer jusqu'à **~500 mA en pic**. Utiliser une alimentation USB d'au moins **1 A**.

### Alimentation du module HX711

> **Brancher VCC du HX711 sur la broche `3V3` de l'ESP32**, même si le module accepte le 5 V.

| Option                      | Avantage                        | Risque                                                        |
|-----------------------------|---------------------------------|---------------------------------------------------------------|
| HX711 VCC → **3V3** (recommandé) | DOUT à 3,3 V : compatible GPIO ESP32 | Tension d'excitation cellule légèrement plus faible |
| HX711 VCC → **5V / VIN**   | Excitation cellule plus forte   | DOUT à 5 V → **endommage les GPIO ESP32 (max 3,3 V)**         |

Le module HX711 bleu (le plus courant) accepte 3,3 V sans problème. La différence de sensibilité entre 3,3 V et 5 V est négligeable pour un usage de pesée classique.

---

## Câblage

### Cellule de charge → HX711

| Fil cellule de charge | Fonction    | Broche HX711 |
|-----------------------|-------------|--------------|
| Rouge                 | Excitation+ | E+           |
| Noir                  | Excitation− | E−           |
| Blanc                 | Signal−     | A−           |
| Vert                  | Signal+     | A+           |

> ⚠️ Les couleurs varient selon le fabricant — vérifier la fiche technique de la cellule.

### HX711 → ESP32

| Broche HX711 | Broche ESP32 | Rôle              |
|--------------|--------------|-------------------|
| VCC          | **3V3**      | Alimentation      |
| GND          | GND          | Masse             |
| DT (DOUT)    | GPIO 4       | Données série     |
| SCK (PD_SCK) | GPIO 5       | Horloge série     |

> Les GPIO 4 et 5 peuvent être changés dans le code (`PIN_DOUT`, `PIN_SCK`).

---

## Fichiers

- [Code complet ESP32](HX711%20ESP32%20-%20balance%20connectée%20WiFi%20-%20code.cpp)
- [Schéma de câblage HX711](HX711-%20Amplificateur%2024-bits%20pour%20cellule%20de%20charge%20-%20schema%20de%20cablage.md)
- [Datasheet HX711](HX711-%20Amplificateur%2024-bits%20pour%20cellule%20de%20charge%20-%20datasheet.md)
- [Annexe — Installation Arduino IDE (Windows 10)](HX711%20ESP32%20-%20balance%20connectée%20WiFi%20-%20annexe%20installation%20Arduino%20IDE.md)

---

## Calibration (depuis la page web)

La calibration se fait directement depuis la page web, sans toucher au code ni à l'ordinateur.
Le facteur calculé est sauvegardé en mémoire non-volatile (NVS) de l'ESP32 et rechargé automatiquement à chaque démarrage.

**Procédure (une seule fois, ou après remplacement de la cellule) :**

1. Connecter le smartphone au réseau `Balance-ESP32` et ouvrir la page
2. **Vider complètement la balance**
3. Appuyer sur **Tare (zéro)** → attendre la confirmation verte
4. Poser une **masse connue** (ex. une bouteille d'eau de 500 ml ≈ 500 g)
5. Saisir la valeur en grammes dans le champ, puis appuyer sur **Calibrer**
6. La confirmation et le facteur calculé s'affichent → la balance est opérationnelle

> Si le poids affiché est négatif quand on pose une charge, inverser les fils A+ / A− sur le HX711.

Le facteur est conservé même après une coupure de courant. Une nouvelle calibration n'est nécessaire que si la cellule de charge ou le module HX711 est remplacé.

---

## Utilisation

1. Alimenter l'ESP32
2. Sur le smartphone, aller dans les paramètres WiFi
3. Se connecter au réseau **`Balance-ESP32`** (sans mot de passe)
4. Une notification « Se connecter au réseau » apparaît → appuyer dessus
   - Ou ouvrir un navigateur et aller sur `http://192.168.4.1`
5. La page de pesée s'affiche et se met à jour automatiquement toutes les 500 ms

---

## Dépannage

| Symptôme                          | Cause probable                              | Solution                                       |
|-----------------------------------|---------------------------------------------|------------------------------------------------|
| Poids toujours à 0                | Cellule non câblée ou HX711 non alimenté    | Vérifier câblage et alimentation               |
| Valeur négative                   | Polarité A+ / A− inversée                  | Inverser les fils ou le signe du facteur       |
| Poids instable / bruit            | Câblage long ou alimentation bruyante       | Raccourcir les fils, filtrer alimentation      |
| Réseau WiFi invisible             | ESP32 pas encore démarré                    | Attendre 5 s après mise sous tension           |
| Page non affichée automatiquement | Comportement variable selon OS smartphone   | Ouvrir manuellement `http://192.168.4.1`       |
| Valeurs bloquées                  | HX711 en attente (DOUT haut)               | Vérifier broche SCK, redémarrer l'ESP32        |
