mcp3008_read.py

Raspberry Pi 4 Model B (2019) — 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-4b, activer SPI (spi_arm) dans config.txt ou raspi-config.

Matériel requis

Une Raspberry Pi 4 Model B (BCM2711 quad-core 1,5 GHz, USB-C 5 V/3 A, double micro-HDMI, Wi-Fi 5 GHz, 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 Bookworm inclut gpiozero ; sinon sudo apt install python3-gpiozero. Utilisez une alimentation USB-C 5 V/3 A pour éviter les bridages.

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