mcp3008_read.py

Raspberry Pi 2 Model B (2015) — Ficha de la placa · Archivo : mcp3008_read.py · Lenguaje : Python · Uso : Acquérir un signal analogique (potentiomètre, capteur) alors que le GPIO ne lit que du tout-ou-rien

El GPIO de la Raspberry Pi es solo digital: este script añade ocho entradas analogicas de 10 bits con un MCP3008 en SPI (bus 0). El potenciómetro va al canal 0 y la conversion 0–1023 pasa a 0–3,3 V. En la model-2b, active SPI (spi_arm) en config.txt o raspi-config.

Hardware

Una Raspberry Pi 2 Model B (SoC quad-core BCM2836/2837, conector GPIO de 40 pines, Ethernet 100 Mbit/s, alimentación micro-USB). Un circuito MCP3008 (DIP-16), un potenciómetro de 10k, breadboard, cables dupont.

Cableado

MOSI/MISO/SCLK a GPIO10/9/11 (pines 19, 21, 23), CS0 al pin 24, VDD 3,3 V, el cursor del potenciómetro a CH0, puente 3,3 V/GND.

Funcionamiento

spidev intercambia 3 bytes; el MCP3008 devuelve 10 bits escalados por 3,3/1023. Nunca supere 3,3 V en las entradas.

Ejecución

Copia el script en la placa (scp) y ejecútalo con python3 (o bash). Raspberry Pi OS incluye gpiozero; si no, sudo apt install python3-gpiozero. El brochage de 40 pines está documentado en el sitio oficial de Raspberry Pi.

Variantes

Hay 8 canales; media movil de 16 lecturas para estabilizar. Broche en el esquema oficial de 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()

← Volver a la ficha