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-3b, activer SPI (spi_arm) dans config.txt ou raspi-config.
Matériel requis
Une Raspberry Pi 3 Model B (BCM2837 quad-core 1,2 GHz, Wi-Fi 2,4/5 GHz + Bluetooth 4.1, 4 ports USB, 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. Le brochage 40 broches est documenté sur le site officiel Raspberry Pi.
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()