# Partie XII

## <span style="color: rgb(55, 190, 140);">**À quoi sert un convertisseur analogique-numérique (ADC) ?**</span>

**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 variable** 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**.

### <span style="color: rgb(115, 100, 100);">Pourquoi préférer une lecture analogique pour la sonde SEN0193 ?</span>

<span style="color: rgb(115, 100, 100);">[![mcp3008-ip-convertisseur-analogique-numerique.jpg](https://doc.arles-linux.org//uploads/images/gallery/2025-08/scaled-1680-/vn2tk31LLmQER9KQ-mcp3008-ip-convertisseur-analogique-numerique.jpg)](https://doc.arles-linux.org//uploads/images/gallery/2025-08/vn2tk31LLmQER9KQ-mcp3008-ip-convertisseur-analogique-numerique.jpg)</span>La sonde Gravity SEN0193, selon le modèle 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**.

#### <span style="color: rgb(110, 115, 50);">Avantages de l’analogique :</span>

- 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**.

### <span style="color: rgb(115, 100, 100);">Présentation du MCP3008</span>

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.

### <span style="color: rgb(115, 100, 100);">Branchement du MCP3008</span>

<span style="color: rgb(115, 100, 100);">[![mcp3008.jpeg](https://doc.arles-linux.org//uploads/images/gallery/2025-08/scaled-1680-/sBpIKUcjyfLKBSYb-mcp3008.jpeg)](https://doc.arles-linux.org//uploads/images/gallery/2025-08/sBpIKUcjyfLKBSYb-mcp3008.jpeg)</span>La **puce MCP3008** doit être placée sur le breadboard **à cheval sur la “tranchée centrale”**, de manière à ce que **chaque broche soit positionnée sur une rangée indépendante**, ce qui permet un câblage propre et organisé.

<table border="1" id="bkmrk-mcp3008-fonction-bra" style="border-collapse: collapse; width: 100%; height: 298px;"><colgroup><col style="width: 33.3333%;"></col><col style="width: 33.3333%;"></col><col style="width: 33.3333%;"></col></colgroup><thead><tr style="height: 29.8px;"><td class="align-center" style="height: 29.8px;">MCP3008</td><td class="align-center" style="height: 29.8px;">Fonction</td><td class="align-center" style="height: 29.8px;">Branchement sur la breadboard</td></tr></thead><tbody><tr style="height: 29.8px;"><td style="height: 29.8px; text-align: justify;">16 (VDD)</td><td style="height: 29.8px; text-align: justify;">Alimentation</td><td style="height: 29.8px; text-align: justify;">Jumper vers la ligne rouge (3.3V)</td></tr><tr style="height: 29.8px;"><td style="height: 29.8px; text-align: justify;">15 (VREF)</td><td style="height: 29.8px; text-align: justify;">Référence</td><td style="height: 29.8px; text-align: justify;">Jumper vers la ligne rouge (3,3V)</td></tr><tr style="height: 29.8px;"><td style="height: 29.8px; text-align: justify;">14 (AGND)</td><td style="height: 29.8px; text-align: justify;">Masse analogique</td><td style="height: 29.8px; text-align: justify;">Jumper vers la ligne noire (GND)</td></tr><tr style="height: 29.8px;"><td style="height: 29.8px; text-align: justify;">13 (CLK)</td><td style="height: 29.8px; text-align: justify;">Horloge SPI</td><td style="height: 29.8px; text-align: justify;">GPIO11 du Raspberry Pi</td></tr><tr style="height: 29.8px;"><td style="height: 29.8px; text-align: justify;">12 (DOUT)</td><td style="height: 29.8px; text-align: justify;">Données vers le Raspberry Pi</td><td style="height: 29.8px; text-align: justify;">GPIO9 du Raspberry Pi</td></tr><tr style="height: 29.8px;"><td style="height: 29.8px; text-align: justify;">11 (DIN)</td><td style="height: 29.8px; text-align: justify;">Données du Raspberry Pi</td><td style="height: 29.8px; text-align: justify;">GPIO10 du Raspberry Pi</td></tr><tr style="height: 29.8px;"><td style="height: 29.8px; text-align: justify;">10 (CS)</td><td style="height: 29.8px; text-align: justify;">Chip select</td><td style="height: 29.8px; text-align: justify;">GPIO5 du Raspberry Pi</td></tr><tr style="height: 29.8px;"><td style="height: 29.8px; text-align: justify;">9 (DGND)</td><td style="height: 29.8px; text-align: justify;">Masse numérique</td><td style="height: 29.8px; text-align: justify;">Jumper vers la ligne noire (GND)</td></tr><tr style="height: 29.8px;"><td style="height: 29.8px; text-align: justify;">1 (CH0)</td><td style="height: 29.8px; text-align: justify;">Canal analogique 0</td><td style="height: 29.8px; text-align: justify;">Sortie A0 de la sonde</td></tr></tbody></table>

<table border="1" id="bkmrk-broche-nom-r%C3%B4le-%2F-ex" style="border-collapse: collapse; width: 100%; height: 382px;"><colgroup><col style="width: 16.9249%;"></col><col style="width: 18.5936%;"></col><col style="width: 64.4815%;"></col></colgroup><thead><tr style="height: 29.8px;"><td class="align-center" style="height: 29.8px;">Broche</td><td class="align-center" style="height: 29.8px;">Nom</td><td class="align-center" style="height: 29.8px;">Rôle / Explication</td></tr></thead><tbody><tr style="height: 29.8px;"><td style="height: 29.8px; text-align: justify;">16</td><td style="height: 29.8px; text-align: justify;">VDD</td><td style="text-align: justify; height: 29.8px;">Tension d’alimentation **du circuit numérique** (généralement **3,3V ou 5V**).</td></tr><tr style="height: 46.6px;"><td style="height: 46.6px; text-align: justify;">15</td><td style="height: 46.6px; text-align: justify;">VREF</td><td style="text-align: justify; height: 46.6px;">Tension de **référence** pour la conversion analogique. **On la relie à VDD**. La précision des mesures dépend de cette valeur.</td></tr><tr style="height: 29.8px;"><td style="height: 29.8px; text-align: justify;">14</td><td style="height: 29.8px; text-align: justify;">AGND</td><td style="text-align: justify; height: 29.8px;">**Masse (GND)** pour la partie **analogique** (capteurs). À relier au GND du circuit.</td></tr><tr style="height: 46.6px;"><td style="height: 46.6px; text-align: justify;">13</td><td style="height: 46.6px; text-align: justify;">CLK</td><td style="text-align: justify; height: 46.6px;">**Horloge SPI** : le Raspberry Pi envoie un signal ici pour cadencer les échanges de données.</td></tr><tr style="height: 29.8px;"><td style="height: 29.8px; text-align: justify;">12</td><td style="height: 29.8px; text-align: justify;">DOUT</td><td style="text-align: justify; height: 29.8px;">**Data OUT** : les **données numériques sortent** du MCP3008 vers le Raspberry Pi.</td></tr><tr style="height: 46.6px;"><td style="height: 46.6px; text-align: justify;">11</td><td style="height: 46.6px; text-align: justify;">DIN</td><td style="text-align: justify; height: 46.6px;">**Data IN** : le Raspberry Pi **envoie des commandes vers le MCP3008** (ex : “lis le canal 0”).</td></tr><tr style="height: 46.6px;"><td style="height: 46.6px; text-align: justify;">10</td><td style="height: 46.6px; text-align: justify;">CS</td><td style="text-align: justify; height: 46.6px;">**Chip Select** (ou CE = Chip Enable). Sert à dire “je parle maintenant à ce composant SPI”.</td></tr><tr style="height: 29.8px;"><td style="height: 29.8px; text-align: justify;">9</td><td style="height: 29.8px; text-align: justify;">DGND</td><td style="text-align: justify; height: 29.8px;">**Masse (GND)** pour la partie **numérique** (Raspberry Pi). À relier au GND.</td></tr><tr style="height: 46.6px;"><td style="height: 46.6px; text-align: justify;">1 à 8</td><td style="height: 46.6px; text-align: justify;">CH0 à CH7</td><td style="text-align: justify; height: 46.6px;">**Canaux analogiques d’entrée** (pour capteurs). Le MCP3008 peut lire **jusqu’à 8 capteurs analogiques**. CH0 est le plus utilisé.</td></tr></tbody></table>

- <div style="text-align: justify;">🟥 VDD + VREF = alimentent la puce et définissent la précision.</div>
- <div>🟦 AGND + DGND = masses nécessaires pour les parties analogiques et numériques.</div>
- <div>📡 CLK, DOUT, DIN, CS = communication SPI avec le Raspberry Pi.</div>
- <div style="text-align: justify;">🌱 CH0 à CH7 = brancher ici les capteurs analogiques, comme l’humidité du sol SEN0193.</div>

### <span style="color: rgb(115, 100, 100);">Le protocole SPI</span>

C’est un **protocole de communication** utilisé pour faire dialoguer un microcontrôleur (comme le Raspberry Pi) avec des composants externes

C’est un **bus rapide**, synchrone (horloge partagée), **plein-duplex** (on peut envoyer et recevoir en même temps).

Le protocole SPI utilise 4 fils :

<table border="1" id="bkmrk-nom-du-fil-fonction-" style="border-collapse: collapse; width: 100%;"><colgroup><col style="width: 17.0479%;"></col><col style="width: 49.579%;"></col><col style="width: 33.3731%;"></col></colgroup><thead><tr><td class="col0 leftalign align-center">Nom du fil</td><td class="col1 leftalign align-center">Fonction</td><td class="col2 align-center">Correspondance sur le Raspberry Pi</td></tr></thead><tbody><tr><td style="text-align: justify;">`MOSI`</td><td style="text-align: justify;">Master Out Slave In : le Pi envoie les données vers le capteur</td><td style="text-align: justify;">GPIO10 (Pin 19)</td></tr><tr><td style="text-align: justify;">`MISO`</td><td style="text-align: justify;">Master In Slave Out : le Pi lit les données du capteur</td><td style="text-align: justify;">GPIO9 (Pin 21)</td></tr><tr><td style="text-align: justify;">`SCLK` ou `CLK`</td><td style="text-align: justify;">Clock : le signal d’horloge synchronise les échanges</td><td style="text-align: justify;">GPIO11 (Pin 23)</td></tr><tr><td style="text-align: justify;">`CS` ou `CE`</td><td style="text-align: justify;">Chip Select : active le capteur concerné</td><td style="text-align: justify;">Par exemple GPIO5 (Pin 29)</td></tr></tbody></table>

### <span style="color: rgb(115, 100, 100);">Activer le protocole SPI</span>

```bash
sudo raspi-config
```

<span style="color: rgb(115, 100, 100);">[![interface-option.png](https://doc.arles-linux.org//uploads/images/gallery/2025-08/scaled-1680-/GNHBJyYtVCdf4gfT-interface-option.png)](https://doc.arles-linux.org//uploads/images/gallery/2025-08/GNHBJyYtVCdf4gfT-interface-option.png)</span>

 Aller dans l'interface d'administration du Raspberry Pi :

- <div>Aller dans Interfaces</div>
- <div>Activer SPI</div>
- <div>Redémarrer</div>

### <span style="color: rgb(115, 100, 100);">Installation de la bibliothèque</span>

 Pour pouvoir installer la bibliothèque, commençons pas entrer dans notre environnement virtuel :

```bash
source meteo/bin/activate
```

 Installation de la bibliothèque :

```bash
pip3 install Adafruit_CircuitPython_MCP3xxx
```