Rpi3 + SPI + mcp3008

Bonjour à tous le forum !
Je viens de m’acheter mon première raspberry avec pour idée de faire un peu de domotique.
jusqu à maintenant tous coulais de source ^^
Mais depuis quelques jours j’ai un petit soucis…
Je me suis mis en tête d’utiliser un convertisseur de donnée numérique/analogique MCP3008

pour celà j’ai suivi plusieurs tuto qui pour moi je trouve était très bien expliquer

voici les sources :

sauf que une fois que je lance le script python j’ai toutes les valeurs des 8 channels à 0…
pourtant j’ai bien une tension différentes à la sortie chaque capteur analogique

J’ai contrôler :

  • le branchement, plus d’une fois ( et à l’aide de wiringpi )pour savoir si j’utilisai les mauvais gpio…
  • que le spi sois actif et à chaque démarrage
  • J’ai vérifier que le librairie d’adafruit soit bien installer…

Voici le schéma de câblage utilisé :

1er test (script python/spidev):

#!/usr/bin/python
# -*- coding: utf-8 -*-

# Lecture de valeurs analogiques par un MCP3008 branché au Raspberry Pi
# Un potentiomètre est branché au canal 0 du MCP3008, un autre est branché
# au canal 1.
# http://electroniqueamateur.blogspot.com/2014/03/lecture-de-capteurs-analogiques-sur-le.html
 
import spidev
import time
import os
import sys

# Ouverture du bus SPI
spi = spidev.SpiDev()
spi.open(0,0)  # car j'utilise la pin CE0:  serait spi.open(0,1) si j'utilisais la pin CE1
spi.max_speed_hz = 7629
# Fonction qui lit l'information en provenance du MCP3008
# L'argument channel est le numéro de canal du MCP3008:  entier de 0 à 7
def ReadChannel(adcnum):
 if((adcnum > 7) or (adcnum < 0)):
  return -1
 r = spi.xfer2([1,(8+adcnum)<<4,0])
 adcout = ((r[1]&3 << 8) + r[2])
 return adcout

 
# Lecture du premier capteur, branché au canal 0 du MCP3008
valeur1 = ReadChannel(0)
valeur2 = ReadChannel(1)
valeur3 = ReadChannel(2)
valeur4 = ReadChannel(3)
valeur5 = ReadChannel(4)
valeur6 = ReadChannel(5)
valeur7 = ReadChannel(6)
valeur8 = ReadChannel(7)

# Affichage des résulats à l'écran
print( "Valeur 1: " + str( valeur1 ))
print( "Valeur 2: " + str( valeur2 ))
print( "Valeur 3: " + str( valeur3 ))
print( "Valeur 4: " + str( valeur4 ))
print( "Valeur 5: " + str( valeur5 ))
print( "Valeur 6: " + str( valeur6 ))
print( "Valeur 7: " + str( valeur7 ))
print( "Valeur 8: " + str( valeur8 ))

# Pause syndicale:  on attend une seconde avant la prochaine prise de mesure.
time.sleep(1)

2eme test : avec le script simpletest.py fourni par adafruit dans la librairie MCP3008

# Simple example of reading the MCP3008 analog input channels and printing
# them all out.
# Author: Tony DiCola
# License: Public Domain
import time

# Import SPI library (for hardware SPI) and MCP3008 library.
import Adafruit_GPIO.SPI as SPI
import Adafruit_MCP3008


# Software SPI configuration:
CLK  = 11
MISO = 9
MOSI = 10
CS   = 8
mcp = Adafruit_MCP3008.MCP3008(clk=CLK, cs=CS, miso=MISO, mosi=MOSI)

# Hardware SPI configuration:
# SPI_PORT   = 0
# SPI_DEVICE = 0
# mcp = Adafruit_MCP3008.MCP3008(spi=SPI.SpiDev(SPI_PORT, SPI_DEVICE))


print('Reading MCP3008 values, press Ctrl-C to quit...')
# Print nice channel column headers.
print('| {0:>4} | {1:>4} | {2:>4} | {3:>4} | {4:>4} | {5:>4} | {6:>4} | {7:>4} |'.format(*range(8)))
print('-' * 57)
# Main program loop.
while True:
    # Read all the ADC channel values in a list.
    values = [0]*8
    for i in range(8):
        # The read_adc function will get the value of the specified channel (0-7).
        values[i] = mcp.read_adc(i)
    # Print the ADC values.
    print('| {0:>4} | {1:>4} | {2:>4} | {3:>4} | {4:>4} | {5:>4} | {6:>4} | {7:>4} |'.format(*values))
    # Pause for half a second.
time.sleep(0.5)

mais la je suis a court d’idée…