mcp3008_read.py
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-b-rev2, activer SPI (spi_arm) dans config.txt ou raspi-config.
Matériel requis
Une Raspberry Pi Model B révision 2 (BCM2835, connecteur GPIO 26 broches, ports Ethernet/USB déplacés en bord de carte). 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 ou clé USB), puis lancez-le avec python3 (ou bash). Sous Raspbian, installez gpiozero avec sudo apt install python3-gpiozero. Le brochage complet du connecteur 26 broches figure sur le schéma officiel Raspberry Pi.
Variantes
8 canaux disponibles ; moyenne mobile sur 16 lectures pour stabiliser. Brochage SPI sur le schéma officiel P1.
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()