IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Bibliothèques tierces Python Discussion :

Module MCP230xx


Sujet :

Bibliothèques tierces Python

  1. #1
    Membre confirmé
    Femme Profil pro
    Etudiante
    Inscrit en
    Mai 2016
    Messages
    87
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Etudiante

    Informations forums :
    Inscription : Mai 2016
    Messages : 87
    Par défaut Module MCP230xx
    Bonjour,

    J'utilise comme composant le MCP 23008. J'ai tenté d'installer la librairie comme indiqué dans le site: https://github.com/adafruit/Adafruit_Python_GPIO..

    En télechargant le fichier et en faisant sudo python setup.py install.

    Mais dés que je lance un exemple de programme (wiki), permettant la configuration et la mise à l'état bas ou haut des pin du GPIO, j'obtiens un message d'erreur.

    Quand j'importe le module par :
    • import Adafruit_GPIO.MCP230xx, j'ai comme message: "NameError: name 'Adafruit MCP230xx"


    • from Adafruit_MCP230xx import * , j'ai comme message erreur: "ImportError: No module named Adafruit_MCP230xx"


    Voici le code que je test:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
     
    #!/usr/bin/python
    # -*- encoding: utf8 -*-
    from Adafruit_MCP230xx import *
     
    # ***************************************************
    # Utiliser num_gpios=8 pour un MCP23008 
    # ou  num_gpios=16 pour un MCP23017!
    # ***************************************************
    # mcp = Adafruit_MCP230XX(address = 0x20, num_gpios = 8) # MCP23008
    mcp = Adafruit_MCP230XX(address = 0x20, num_gpios = 16) # MCP23017
     
    # Déclarer les broches 0, 1 et 2 comme sortie (vous pouvez faire de même pour les broches de 0 à 15)
    mcp.config(0, mcp.OUTPUT)
    mcp.config(1, mcp.OUTPUT)
    mcp.config(2, mcp.OUTPUT)
     
    # Déclarer la broche 3 comme entrée (input) et activer la résistance pullup
    mcp.config(3, mcp.INPUT)
    mcp.pullup(3, 1)
     
    # Lire l'état de la broche 3 et afficher le résultat
    print "Pin 3 = %d" % (mcp.input(3) >> 3)
     
    # Changer l'état de la broche 0 
    print "Clignoter la broche 0 (CTRL+C pour quitter)"
    while (True):
      mcp.output(0, 1) # Mettre la broche 0 à l'état HAUT/High
      time.sleep(1)
      mcp.output(0, 0) # Mettre la broche 0 à l'état BAS/Low
      time.sleep(1)
    Comment aboutir à une bonne installation de ce module?

    En vous remerciant.

    Cordialement.

  2. #2
    Expert confirmé

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 307
    Par défaut
    Salut,

    Dans les exemples il est toujours question de from Adafruit_GPIO import quelque chose et pas ton Adafruit_MCP230xx

    Ce que tu peux faire pour tester ton installation c'est télécharger le dossier tests et essayer les divers scripts qui y sont.

    En plus tu auras ainsi des exemples d'usage de la lib.

  3. #3
    Membre confirmé
    Femme Profil pro
    Etudiante
    Inscrit en
    Mai 2016
    Messages
    87
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Etudiante

    Informations forums :
    Inscription : Mai 2016
    Messages : 87
    Par défaut
    Bonjour,

    J'ai télecharger le dossier test mais il ny avait aucun exemple pour le produit MCP23. Ensuite j'ai ouvert le fichier .py MCP23xx mais je n'ai pas trouver comment envoyer des infos sur le GPIO pour le configurer en mode sortie.


    J'ai continuer mes recherches et j'ai trouver ce site http://www.nathan.chantrell.net/2012...xpander-board/ qui propose un exemple de .py en exécutable puis ajout de paramétre: ./mcp23017.py -b a -o 0 -s high. Afin de pouvoir mettre la pin du GPio à l'état haut ou bas.

    Le probléme est que je ne sais pas comment l'appliquer dans un programme .py en génerale sans passer nécessairement par ce mode d'exécution : ./mcp23017.py -b a -o 0 -s high.

    Pourriez vous m'aider?


    En vous remerciant.

  4. #4
    Expert confirmé

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 307
    Par défaut
    D'où tiens-tu ce "Adafruit_MCP230xx" ? Je suppose que tu as lu cette info quelque part.

    Ensuite, si ça existe, il faut peut-être remplacer les deux x par quelque chose.

    Sur le deuxième lien (nathan.chanterell) tu dis avoir trouvé un script python. Bien, mais plutôt que de le lancer comme exécutable importe-le dans ton code, éventuellement après hacking de circonstance.

    Malheureusement, pas moyen d'accéder à ce site.

  5. #5
    Membre confirmé
    Femme Profil pro
    Etudiante
    Inscrit en
    Mai 2016
    Messages
    87
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Etudiante

    Informations forums :
    Inscription : Mai 2016
    Messages : 87
    Par défaut
    Merci pour votre retour.

    Oui j'ai lu cette information dans un site pour la configuration de ce module... : http://arduino103.blogspot.fr/2014/0...erry-avec.html

    Je reposte le lien: https://nathan.chantrell.net/2012060...xpander-board/

    Quand je le lance en mode exécutable, je suis obligé d'indique ces paramétres: ./mcp23017.py -b a -o 0 -s high

    Mais comment appliquer de code sans passer par l'exe.

    importe-le dans ton code
    C'est à dire?

    En vous remerciant.

  6. #6
    Expert confirmé

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 307
    Par défaut
    D'après ce que je vois, dans ton premier script c'est ceci que tu dois importer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    from Adafruit_GPIO.MCP230xx import MCP230xxBase
    J'ai regardé le deuxième lien.
    Ce que fait ce code est relativement simple et se résume à ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
     
    bank = 0x12 ou 0x13
    output = ?
    state = "hight" ou "low" ou "read"
     
    import smbus
    bus = smbus.SMBus(1)
    address = 0x20 # I2C address of MCP23017 a adapter sans doute selon ton modèle
    bus.write_byte_data(0x20, 0x00, 0x00) # Set all of bank A to outputs 
    bus.write_byte_data(0x20, 0x01, 0x00) # Set all of bank B to outputs
     
    # On lit la valeur courante du registre
    value =  bus.read_byte_data(address, register)
    # ensuite on exécute 
    if state == "high":
        if (value >> output) & 1 :
            print "Output GP"+bank.upper()+str(output), "is already high."
        else:
            value += (1 << output)
            bus.write_byte_data(address, register, value)
    elif state == "low":
        if (value >> output) & 1 :
            value -= (1 << output)
            bus.write_byte_data(address, register, value)
        else:
            print "Output GP"+bank.upper()+str(output), "is already low."
    elif state == "read":
        if (value >> output) & 1 :
            print "high"
        else:
            print "low"
    Tu dois donc définir les trois données de départ bank, output et state.

    N'oublie pas que smbus doit être installé

    https://pypi.python.org/pypi/smbus-cffi/0.5.1

  7. #7
    Membre confirmé
    Femme Profil pro
    Etudiante
    Inscrit en
    Mai 2016
    Messages
    87
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Etudiante

    Informations forums :
    Inscription : Mai 2016
    Messages : 87
    Par défaut
    Merci pour votre aide.

    J'ai exécuté ce programme:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    #!/usr/bin/python
    # -*- coding: utf-8 -*-
     
     
    import smbus
    register=0x09
    #output = 4
     
    bus = smbus.SMBus(1)
    address = 0x20 # I2C address of MCP23008
     
    value =  bus.read_byte_data(address, register)
     
    #Etat haut
    bus.write_byte_data(address,register,0)
     
    #Etat bas
    #bus.write_byte_data(address,register,1)
    Mais cela ne fait qu'activer le GPIO0 (des leds y sont connectées pour visualiser l'etats des poins), j'ai tenter de modifier la valeur de l'output mais rien ne change....

    Comment réussir à activer les autres pin du GPIO? En sachant qu'il y a 8 GPIO.

  8. #8
    Expert confirmé

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 307
    Par défaut
    Ben, je n'en sais fichtre rien, je peux te conseiller au niveau python mais pas GPIO.

    Quand on lit ceci: bus.write_byte_data(address,register,0) on est tenté de penser que register est le bit que tu veux activer.

    Où as-tu trouvé l'info du registre (register=0x09), ce 0x09 sort d'où ?

    Il existe ce pdf qui traite du même sujet, aussi avec des leds pour simuler le device:
    http://eduscol.education.fr/sti/site...-6-rpi-i2c.pdf

    Edit: Sur ton premier lien on lit ceci:
    Select which bank you want to operate A or B, which output 0-7 and whether you want to set it high or low and click submit, eg. to set GPA0 high select A, 0 and high.
    output définit donc le registre que tu veux mettre au niveau haut ou bas.

  9. #9
    Membre confirmé
    Femme Profil pro
    Etudiante
    Inscrit en
    Mai 2016
    Messages
    87
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Etudiante

    Informations forums :
    Inscription : Mai 2016
    Messages : 87
    Par défaut
    Merci pour vos recherches.

    Concernant l'information du register, dans le second lien, le registre utilisé est soit 0x13 soit 0x09, en testant le programme avec 0x13 je n'ai eu aucun allumage de led ... par élimination j'ai utilisé le registre 0x09. (Je sais que ce n'est pas la bonne méthode mais je débute...)

    Après des recherches, j'ai trouvé un exemple, voici ma version modifié:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
     
    #!/usr/bin/python
    # -*- coding: utf-8 -*-
     
    import smbus
    import time
     
    bus = smbus.SMBus(1)
    address = 0x20 # I2C address of MCP23008
    bus.write_byte_data(0x20, 0x00, 0x00) # Set all of bank A to outputs 
     
     
    #Programme pour allumage led gpo->gp8 
    delay=1
    for x in range (0,8):
        bus.write_byte_data(address, 0x09,1<<x)
        time.sleep(delay)
        bus.write_byte_data(address, 0x09,0)
    Ce code permet d'allumer au fue et à mesure les led du GPIO0 au GPIO8.

    Le probléme est que je ne comprends pas cette partie: bus.write_byte_data(address, 0x09,1<<x)

    A quoi correspond la notation 1<<x dans python?

    Cdt

  10. #10
    Expert confirmé

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 307
    Par défaut
    Suffit de tester dans un terminal

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    >>> for i in range(8):
    ...     print 1<<i
    ... 
    1
    2
    4
    8
    16
    32
    64
    128
    >>>
    Donc comme l'indiquent les deux crochets vers la gauche on déplace le 1 binaire d'un rang vers la gauche.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Module FTP.pm ?
    Par MSP dans le forum Modules
    Réponses: 4
    Dernier message: 04/08/2003, 15h49
  2. module Find
    Par martijan dans le forum Modules
    Réponses: 8
    Dernier message: 09/07/2003, 11h07
  3. cherche module ou langage pour récupérer des données audio..
    Par Ry_Yo dans le forum Langages de programmation
    Réponses: 5
    Dernier message: 12/05/2003, 17h44
  4. PerlDoc sur une fonction d'un module
    Par lesouriciergris dans le forum Modules
    Réponses: 2
    Dernier message: 13/03/2003, 20h50

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo