MicroPython: Utiliser un MCP23017 sur ESP8266

Cela fait un moment que nous avions préparé une entrée sur le projet GitHub esp8266-upy pour le support du MCP23017 sur un ESP8266 sous MicroPython.

A propos du MCP23017
Le MCP23017 est GPIO Extender, il permet d'ajouter 16 I/O digitale!  Sur un ESP8266 (Wemos ESP8266, Feather ESP8266 ou autres ESP8266), qui en a si peu, c'est une véritable aubaine!
Le MCP23017 est capable d'activer des résistances pull-up interne, ce qui est très pratique lorsque l'on utilise l'I/O en entrée avec un bouton.

Vous pourrez donc lire des entrées, commander des LED ou du matériel comme un L293 ou ULN2803... bref réaliser plein de choses utiles.

Brancher un MCP23017 sur ESP8266
MCP23017 sur ESP8266 - Source: ce projet GitHub de shop.mchobby.be
Le code
Notre GitHub contient une bibliothèque MCP23xxx adaptée pour fonctionner sur une MicroPython standard.
Commander une sortie se fait comme suit
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 )

Utiliser une entrée
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 )

Il est même possible de lire plusieurs entrées en même temps (voir la page sur GitHub).

Jusqu'à 144 Entrées/Sorties
Le MCP23017 dispose de 3 broches d'adresses, ce qui permet d'utiliser plusieurs MCP23017 en même temps sur le même bus I2C.
Lignes d'adresses du MCP23017
L'adresse par défaut du MCP2307 est 0x20... En utilisant la table d'adressage, il est possible d'indiquer l'adresse du module sur le bus (par ex: 0x26) en créant l'objet MCP23017. Par exemple:

MPC23017( i2c, address=0x26 )

3 bits d'adresses représentent 9 possibilités différentes, donc un total de 9 x 16 GPIO = 144 I/O... qui à dit que l'ESP8266 avait peut d'entrées/sorties :-)
Tutoriel
Voir la page du GitHub dédicacé au MCP23017 sous MicroPython. La page contient d'autres informations utiles.

Où acheter
MC Hobby propose le matériel documenté sur son WebShop (shop.mchobby.be).