FEATHER-MICROPYTHON-MCP23017

De MCHobby - Wiki
Sauter à la navigation Sauter à la recherche

Introduction

Bien que le MCP23017 soit souvent utilisé sous 5V, il est fonctionne aussi lorsqu'il est alimenter en 3.3V.

Les niveaux logiques SDA et SCL seront également compatible avec l'ESP8266 puisqu'ils utiliseront également une logique 3.3V .

Il faut avouer que l'ESP8266 manque cruellement de GPIO, le MCP23017 sera le bienvenu pour ajouter facilement des GPIO à votre ESP8266.

Grâce au MCP23017 et au bus I2C, il ne faudra sacrifier que deux GPIOs sur votre ESP8266 pour en gagner 16 autres GPIOs.

 

Les GPIOs, numérotés de 0 à 15, correspondent aux broches GPA0->GPA7 (0 à 7) puis GPB0->GPB7 (8 à 15).

Adresses I2C

L'adresse par défaut du MCP23017 est 0x20 (lorsque les 3 broches d'adresses A0, A1, A2 sont raccordés à la masse).

L'appel du constructeur utilisera l'adresse par défaut (0x20) mais celle-ci peut être modifiée à l'aide du paramètre address passé au constructeur.

MPC23017( i2c, address=0x26 )

En combinant les bit d'adresse A0, A1 et A2, il est possible d'avoir différentes adresses. Et donc d'avoir plusieurs MCP23017 présents sur le bus.

 

Installer la bibliothèque

La bibliothèque contient un pilote pour le MCP23017 et MCP23008 destiné à être utilisé avec MicroPython sur les cartes ESP8266.

Ce pilote utilise le bus I2C. Son utilisation requière l'installation d'une bibliothèque spécifique. Vous trouvez celle-ci ici:

Vous devrez copier les fichiers suivant sur votre carte MicroPython

  • mcp230xx.py dans le répertoire racine.

Pour savoir comment copier vos fichiers sur votre carte MicroPython Feather ESP8266 Huzza, vous pouvez vous référer aux ressources suivantes:

Ampy

Outil simplifié de transfert de fichiers et de contrôlez de carte depuis une connexion série. ESP8266 compatible.

RSHell

Transférez des fichiers et contrôlez votre carte depuis une simple connexion série. ESP8266 compatible.

 

Puis utiliser le code suivant pour faire fonctionner votre senseur. Tester le code dans une session REPL ou WebREPL.

Brancher

 

Branchement du MCP23017

Broche du MCP23017 Connecté sur
9 3.3V
10 GND
12 ESP8266 GPIO5 [I2C SCL]
13 ESP8266 GPIO4 [I2C SDA]
18 3.3V (activation du module)

Il faut également ajouter des résistances pull-up sur le bus

Broche ESP8266 destination
GPIO5 [I2C SCL] --( R 10kOhms )--> 3.3V
GPIO4 [I2C SDA] --( R 10kOhms )--> 3.3V

Les 3 broches d'adresses du MCP23017 (broches 15, 16, 17) sont placées à la masse.

Utiliser

Dans l'exemple suivant, les LEDs branchées sur les sorties 0 et 1 du MCP23017 clignoterons en alternance.

from time import sleep
from machine import I2C, Pin
from mcp230xx import MCP23017

# Création bus I2C et MCP23017
i2c = I2C( sda=Pin(4), scl=Pin(5), freq=20000 )
mcp = MCP23017( i2c=i2c )

# Configurer les broches 0 et 1 en sortie
mcp.setup( 0, Pin.OUT )
mcp.setup( 1, Pin.OUT )

for i in range( 10 ):
    # Activer sortie 0
    mcp.output( 0, True )
    sleep( 0.5 )
    mcp.output( 1, True )
    sleep( 0.5 )
    # Désactiver sortie 1
    mcp.output( 0, False )
    sleep( 0.5 )
    mcp.output( 1, False )
    sleep( 0.5 )

L'exemple suivant affiche le message "Press!" lorsque le bouton branché sur l'entrée 3 est pressé.

Comme la résistance Pull-Up sur l'entrée 3 est activée :

  • L'entrée 3 est au niveau BAS lorsque le bouton est pressé!
  • L'entrée 3 est au niveau HAUT lorsque l'on ne touche pas le bouton.

Pour lire l'état de l'entrée 3, il faut utiliser mcp.input(3) .

from time import sleep,time
from machine import I2C, Pin
from mcp230xx import MCP23017

# Création bus I2C et MCP23017
i2c = I2C( sda=Pin(4), scl=Pin(5), freq=20000 )
mcp = MCP23017( i2c=i2c )
 
mcp.setup( 3, Pin.IN ) # broche 3 en entrée
mcp.pullup( 3, True )  # Activer la résistance pull-up sur entrée 3

Print( "Appuyer sur bouton" )
start = time()
while (time()-start) < 20: # pendant 20 sec max
    # mcp.input(3) retourne état de la broche
    print( '%s : etat = %s' % (time(), '...' if mcp.input(3) else 'Press!') )
    sleep( 0.5 )

Il est également possible de modifier l'état de plusieurs broches en une seule opération en utilisant un dictionnaire { 0 : True, 1 : False }

from machine import I2C, Pin
from mcp230xx import MCP23017

# Création bus I2C et MCP23017
i2c = I2C( sda=Pin(4), scl=Pin(5), freq=20000 )
mcp = MCP23017( i2c=i2c )

# controle de quelques broches en sortie
pins = [10, 11, 12, 13, 14, 15]
valeurs = {}
for pin_num in pins:
    mcp.setup( pin_num, Pin.OUT )
    valeurs[pin_num] = True
# activer toutes les broches en une seule opération
mcp.output_pins( valeurs )

De même, il est possible de lire l'état de plusieurs broches avec un seul appel

from time import sleep
from machine import I2C, Pin
from mcp230xx import MCP23017

# Création bus I2C et MCP23017
i2c = I2C( sda=Pin(4), scl=Pin(5), freq=20000 )
mcp = MCP23017( i2c=i2c )

# Surveille plusieurs broches d'entrée et affiche les différentes valeurs grâce à {{fname|mcp.input_pins(pins_list)}}
pins = [3,4,5,6]
for pin_num in pins:
    mcp.setup(pin_num, Pin.IN)
    mcp.pullup(pin_num, True)
while True:
    print( mcp.input_pins(pins) )
    sleep( 1 )

Durant l'exécution du script, les messages suivants apparaissent dans la console. Chaque broche mentionnée lors de l'appel de mcp.input_pins() retourne une valeur True ou False en fonction de l'état de la broche.

[True, True, True, True]
[True, True, True, True]
[True, True, True, True]
[False, True, True, True]
[False, True, True, True]
[False, True, True, True]
[False, True, True, True]
[True, True, True, True]

Crédit

Travail dérivé de Adafruit_MCP230xx.py disponible sur https://github.com/adafruit/Adafruit_Python_GPIO

Le port MicroPython réalisé par ShrimpingIt sur son GitHub https://github.com/ShrimpingIt/micropython-mcp230xx (merci à ShrimpingIt pour son magnifique travail)

Modifié Meurisse D. (MC Hobby) pour:

  • Recevoir le bus I2C en paramètre (compatibilité avec les autres bibliothèques dans ce dépôt).
  • Epuration (éliminer les constantes non utilisée, compacter le code, réduction des commentaires).
  • Schéma de raccordement Feather ESP8266
  • Exemples

Où acheter


Tutoriel réaliser par Meurisse D. pour MC Hobby SPRL

Toute référence, mention ou extrait de cette traduction doit être explicitement accompagné du texte suivant : «  Traduction par MCHobby (www.MCHobby.be) - Vente de kit et composants » avec un lien vers la source (donc cette page) et ce quelque soit le média utilisé.

L'utilisation commercial de la traduction (texte) et/ou réalisation, même partielle, pourrait être soumis à redevance. Dans tous les cas de figures, vous devez également obtenir l'accord du(des) détenteur initial des droits. Celui de MC Hobby s'arrêtant au travail de traduction proprement dit.