mcp3008_read.py

Raspberry Pi 3 Model A+ (2018) — Fiche carte · Fichier : mcp3008_read.py · Langage : Python · Usage : Acquérir un signal analogique (potentiomètre, capteur) alors que le GPIO ne lit que du tout-ou-rien

Le GPIO de la Raspberry Pi est purement numérique : ce script ajoute 8 entrées analogiques 10 bits grâce à un MCP3008 en SPI (bus SPI0). Le potentiomètre se câble sur le canal 0, la conversion 0–1023 devient 0–3,3 V. Sur model-3a-plus, activer SPI (spi_arm) dans config.txt ou raspi-config.

Matériel requis

Une Raspberry Pi 3 Model A+ (format compact, BCM2837B0, Wi-Fi 5 GHz + Bluetooth, un seul port USB, alimentation 5 V/700 mA, GPIO 40 broches). Un circuit MCP3008 (DIP-16), un potentiomètre 10 kΩ, breadboard, fils dupont.

Câblage

MOSI/MISO/SCLK sur GPIO10/9/11 (broches 19, 21, 23), CS0 sur broche 24, VDD 3,3 V, curseur du potentiomètre sur CH0, alim 3,3 V/GND en pont.

Fonctionnement

spidev échange 3 octets ; le MCP3008 renvoie 10 bits de conversion, mis à l'échelle par 3,3/1023. Entrée jamais au-delà de 3,3 V (pas de 5 V !).

Exécution

Copiez le script sur la carte (scp), puis lancez-le avec python3 (ou bash). Raspberry Pi OS inclut gpiozero ; sinon sudo apt install python3-gpiozero. Attention au budget d'alimentation 700 mA pour les périphériques USB.

Variantes

8 canaux disponibles ; moyenne mobile sur 16 lectures pour stabiliser. Brochage SPI sur le schéma officiel J8.

mcp3008_read.py

# mcp3008_read.py — lit un potentiel analogique via ADC SPI MCP3008.
# Deps: sudo apt install python3-spidev (activer spi_arm dans config.txt)
import spidev, time

spi = spidev.SpiDev()
spi.open(0, 0)      # bus SPI0, celecteur CS0
spi.max_speed_hz = 1350000

def read_ch(ch):
    val = spi.xfer2([1, (8 + ch) << 4, 0])
    out = ((val[1] & 0x03) << 8) + val[2]
    return out * 3.3 / 1023.0

try:
    while True:
        print(f"CAN0 = {read_ch(0):0.2f} V")
        time.sleep(1)
except KeyboardInterrupt:
    spi.close()

← Retour à la fiche