Conectar sensores analógicos a Raspberry Pi con MCP3008: cableado, configuración SPI y código Python
¿Listo para leer señales analógicas con tu Raspberry Pi? Esta guía recorre el cableado de un MCP3008 ADC, habilitar SPI, instalar librerías necesarias y ejecutar un script Python básico para obtener datos de sensores.
Paso 1: Cableado del MCP3008
- Alimentación (3,3 V) – VDD y VREF a pin 3,3 V de Raspberry Pi (rojo).
- Tierra – AGND y DGND a GND de Raspberry Pi (negro).
- Conexiones SPI –
- CLK → Pin 23 de Pi (GPIO11) – naranja.
- DOUT → Pin 21 de Pi (GPIO9) – amarillo.
- DIN → Pin 19 de Pi (GPIO10) – azul.
- CS → Pin 24 de Pi (GPIO8) – violeta.
- Entradas analógicas – Conecta el cable de señal de tu sensor a uno de los pines A0–A7 del MCP3008 (lado izquierdo del chip). Usa 3,3 V para V+ y GND para G–.
Asegúrate de que la muesca semicircular del chip mire en la misma dirección que en el diagrama. Para un MCP3004 el layout es idéntico salvo que el chip tiene solo cuatro entradas analógicas.
Paso 2: Habilitar SPI en la Raspberry Pi
- Abre terminal y ejecuta:
sudo raspi-config
- Navega a Advanced Options → SPI y habilítalo.
- Reinicia la Pi:
sudo reboot
- Tras reiniciar, verifica que existan dispositivos SPI:
ls /dev/
Deberías verspidev0.0yspidev0.1. - Si faltan, actualiza tu sistema:
sudo apt-get update && sudo apt-get upgrade
luego instala el firmware más reciente:sudo wget https://goo.gl/1BOfJ -O /usr/bin/rpi-update sudo chmod +x /usr/bin/rpi-update sudo rpi-update sudo reboot
Desbloquear I²C (si es necesario)
A veces I²C está en lista negra, impidiendo que SPI funcione. Abre el archivo de lista negra:
sudo nano /etc/modprobe.d/raspi-blacklist.conf
Elimina o comenta cualquier línea que contenga blacklist i2c-bcm2708, luego reinicia.
Paso 3: Instalar librería Python SPI
- Instala prerrequisitos:
sudo apt-get install python-dev git
- Clona el repositorio py-spidev:
git clone https://github.com/doceme/py-spidev
- Instala la librería:
cd py-spidev sudo python setup.py install
Paso 4: Código Python de ejemplo
Crea mcp3008.py en tu directorio home:
nano ~/mcp3008.py
Pega el siguiente script:
# mcp3008.py
import spidev
import time
# Abre bus SPI 0, dispositivo 0
spi = spidev.SpiDev()
spi.open(0, 0)
spi.max_speed_hz = 1350000
def read_channel(channel):
if channel < 0 or channel > 7:
return -1
adc = spi.xfer2([1, (8 + channel) << 4, 0])
data = ((adc[1] & 3) << 8) + adc[2]
return data
try:
while True:
value = read_channel(0) # Leer canal 0
print(f"Channel 0: {value}")
time.sleep(1)
except KeyboardInterrupt:
spi.close()
print("Program terminated")
Ejecuta el script con:
python3 ~/mcp3008.py
Deberías ver un flujo continuo de valores ADC crudos (0–1023). Convierte estos a voltaje o unidades de sensor usando la hoja de datos del MCP3008.
Referencias
Proceso de manufactura
- Raspberry Pi y HDC2010: Guía completa de configuración I2C para sensor de temperatura y humedad
- Construya un registrador de temperatura con Raspberry Pi y sensor I2C de 5 $
- Perfilado preciso de temperatura en Raspberry Pi con Python, SQLite y LabVIEW
- Sensor infrarrojo TMP006 con Raspberry Pi: librería Python y guía de configuración
- Construya un sensor de temperatura remoto con Raspberry Pi y Python – Guía paso a paso
- Construya una estación meteorológica con Raspberry Pi que envíe datos diarios por email
- Monitorización meteorológica remota con Raspberry Pi 3 y PubNub
- Conexión del sensor ultrasónico HC‑SR04 a Raspberry Pi 3 – Guía completa
- Integración de TI SensorTag con Blynk vía Node‑RED en Raspberry Pi Zero
- Controle un LED con Sensor PIR de Movimiento en Raspberry Pi
- Fundamentos de C#: Entrada y salida esenciales