====== À quoi sert un convertisseur analogique-numérique (ADC) ? ======
{{ :raspberry:mcp3008-ip-convertisseur-analogique-numerique.jpg?200|}}
###
**Le Raspberry Pi**, contrairement à un Arduino, **n’a pas d’entrée analogique**. Il ne peut lire que **des valeurs numériques** (0 ou 1, HIGH ou LOW). Or, certains capteurs — comme la **sonde d’humidité du sol Gravity SEN0193** — peuvent envoyer une **tension variabl**e représentant un niveau d’humidité, et non un simple "sec" ou "humide".
###
👉 C’est là qu’intervient le **convertisseur analogique-numérique (ADC)**, comme le **MCP3008**.
===== Pourquoi préférer une lecture analogique pour la sonde SEN0193 ? =====
La sonde Gravity SEN0193, selon sa version, peut fonctionner en deux modes :
  * **Numérique** : elle renvoie simplement 1 (sol sec) ou 0 (sol humide). C’est tout.
  * **Analogique** : elle renvoie une **valeur continue** entre 0 et 3.3V, que le MCP3008 convertit en une valeur entre **0 et 1023**.
==== Avantages de l’analogique : ====
  * Permet un **suivi plus fin et progressif de l’humidité** (utile pour déclencher l’arrosage à un seuil précis).
  * Donne la **possibilité de créer des graphiques, des seuils personnalisés**, des alertes...
  * Ouvre la voie à une gestion **intelligente et économe de l’eau**.
===== Présentation du MCP3008 =====
###
Le **MCP3008** est une petite puce qui permet de convertir jusqu’à **8 signaux analogiques** en valeurs numériques que le Raspberry Pi peut comprendre, via le protocole **SPI**.
###
Il se connecte au Raspberry Pi **via la breadboard** pour simplifier les branchements.
===== Branchement du MCP3008 =====
###
La **puce MCP3008** doit être connectée au breadboard **à cheval sur la "tranchée centrale"**, tu assures que **chaque broche du MCP3008 est sur une rangée indépendante**, ce qui permet de câbler proprement
###
{{ :raspberry:mcp3008.webp |}}
| MCP3008   | Fonction           | Branche sur la breadboard                |
| --------- | ------------------ | ---------------------------------------- |
| 16 (VDD)  | Alimentation       | Un jumper vers la ligne rouge (3.3V)     |
| 15 (VREF) | Référence          | Ligne rouge aussi                        |
| 14 (AGND) | Masse analogique   | Ligne bleue (GND)                        |
| 9 (DGND)  | Masse numérique    | Ligne bleue (GND)                        |
| 13 (CLK)  | Horloge SPI        | Vers GPIO11 du Pi                        |
| 12 (DOUT) | Données vers Pi    | GPIO9                                    |
| 11 (DIN)  | Données du Pi      | GPIO10                                   |
| 10 (CS)   | Chip Select        | GPIO5                                   |
| 1 (CH0)   | Canal analogique 0 | Vers la sortie AO de ta sonde analogique |
| Broche    | Nom           | Rôle / Explication                                                                                                                          |
| --------- | ------------- | ------------------------------------------------------------------------------------------------------------------------------------------- |
| **16**    | **VDD**       | Tension d’alimentation **du circuit numérique** (généralement **3,3V ou 5V**).                                                              |
| **15**    | **VREF**      | Tension de **référence** pour la conversion analogique. En général, **on la relie à VDD**. La précision des mesures dépend de cette valeur. |
| **14**    | **AGND**      | **Masse (GND)** pour la partie **analogique** (capteurs). À relier au GND du circuit.                                                       |
| **13**    | **CLK**       | **Horloge SPI**. Le Raspberry Pi envoie un signal ici pour cadencer les échanges de données.                                                |
| **12**    | **DOUT**      | **Data OUT** : les données **numériques sortent** du MCP3008 vers le Raspberry Pi.                                                          |
| **11**    | **DIN**       | **Data IN** : le Raspberry Pi envoie des commandes **vers le MCP3008** (ex : "lis le canal 0").                                             |
| **10**    | **CS**        | **Chip Select** (ou CE = Chip Enable). Sert à dire "je parle maintenant à ce composant SPI".                                                |
| **9**     | **DGND**      | **Masse (GND)** pour la partie **numérique** (Raspberry Pi). À relier au GND général.                                                       |
| **1 à 8** | **CH0 à CH7** | **Canaux analogiques d’entrée** (pour capteurs). Le MCP3008 peut lire **jusqu’à 8 capteurs analogiques**. CH0 est le plus utilisé.          |
  * 🟥 VDD + VREF = alimentent la puce et définissent la précision.
  * 🟦 AGND + DGND = masses nécessaires pour les parties analogiques et numériques.
  * 📡 CLK, DOUT, DIN, CS = communication SPI avec le Raspberry Pi.
  * 🌱 CH0 à CH7 = brancher ici les capteurs analogiques, comme l’humidité du sol SEN0193.
===== Le protocole SPI =====
###
C’est un **protocole de communication** utilisé pour faire dialoguer un microcontrôleur (comme le Raspberry Pi) avec des composants externes
###
Le protocole SPI utilise 4 fils :
| Nom du fil      | Fonction                                                       | Correspondance sur le Raspberry Pi |
| --------------- | -------------------------------------------------------------- | ---------------------------------- |
| `MOSI`          | Master Out Slave In : le Pi envoie les données vers le capteur | GPIO10 (Pin 19)                    |
| `MISO`          | Master In Slave Out : le Pi lit les données du capteur         | GPIO9 (Pin 21)                     |
| `SCLK` ou `CLK` | Clock : le signal d’horloge synchronise les échanges           | GPIO11 (Pin 23)                    |
| `CS` ou `CE`    | Chip Select : active le capteur concerné                       | Par exemple GPIO5 (Pin 29)         |
C’est un **bus rapide**, synchrone (horloge partagée), **plein-duplex** (on peut envoyer et recevoir en même temps).
===== Activer le protocole SPI =====
{{ :raspberry:interface_option.png?400|}}
Aller dans l'interface d'administration du Raspberry Pi :
sudo raspi-config
  * Aller dans Interfaces
  * Activer SPI
  * Redémarrer
===== Installation de la bibliothèque =====
Pour pouvoir installer la bibliothèque, commençons pas entrer dans notre environnement virtuel : 
source meteo/bin/activate
Installation de la bibliothèque :
pip3 install Adafruit_CircuitPython_MCP3xxx
----
Suite vers [[jardin_couleur|Utilisation de couleurs dans le terminal avec rich]]