Ligne 1 : |
Ligne 1 : |
| == Introduction == | | == Introduction == |
− | xxx
| + | 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. |
| + | |
| + | [[Fichier:FEATHER-MICROPYTHON-MCP23017-brochages.png|480px]] |
| + | |
| + | Les GPIOs, numérotés de 0 à 15, correspondent aux broches GPA0->GPA7 (0 à 7) puis GPB0->GPB7 (8 à 15). |
| + | |
| === Adresses I2C === | | === Adresses I2C === |
− | xxx
| + | 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 {{fname|address}} passé au constructeur. |
| + | |
| + | <syntaxhighlight lang="python"> |
| + | MPC23017( i2c, address=0x26 ) |
| + | </syntaxhighlight> |
| + | |
| + | 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. |
| + | |
| + | [[Fichier:FEATHER-MICROPYTHON-MCP23017-I2C-Address.png|320px]] |
| | | |
| == Installer la bibliothèque == | | == Installer la bibliothèque == |
− | La bibliothèque contient un pilote pour le MCP23017 et MCP2308 destiné à être utilisé avec MicroPython sur les cartes ESP8266. | + | 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: | | Ce pilote utilise le bus I2C. Son utilisation requière l'installation d'une bibliothèque spécifique. Vous trouvez celle-ci ici: |
Ligne 61 : |
Ligne 82 : |
| | align="left" | 3.3V (activation du module) | | | align="left" | 3.3V (activation du module) |
| |} | | |} |
| + | |
| + | Il faut également ajouter des résistances pull-up sur le bus |
| + | |
| + | {| class="wikitable" border="1" |
| + | |- |
| + | | align="center" | Broche ESP8266 |
| + | | align="center" | destination |
| + | |- style="font-size: 90%" |
| + | | align="left" | GPIO5 [I2C SCL] |
| + | | align="left" | --( R 10kOhms )--> 3.3V |
| + | |- style="font-size: 90%" |
| + | | align="left" | GPIO4 [I2C SDA] |
| + | | align="left" | --( R 10kOhms )--> 3.3V |
| + | |} |
| + | |
| + | Les 3 broches d'adresses du MCP23017 (broches 15, 16, 17) sont placées à la masse. |
| | | |
| == Utiliser == | | == Utiliser == |
| + | Dans l'exemple suivant, les LEDs branchées sur les sorties 0 et 1 du MCP23017 clignoterons en alternance. |
| + | |
| + | <syntaxhighlight lang="python"> |
| + | 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 ) |
| + | </syntaxhighlight> |
| + | |
| + | 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 {{fname|mcp.input(3)}} . |
| + | |
| + | <syntaxhighlight lang="python"> |
| + | 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 ) |
| + | </syntaxhighlight> |
| + | |
| + | Il est également possible de modifier l'état de plusieurs broches en une seule opération en utilisant un dictionnaire {{fname| { 0 : True, 1 : False } }} |
| + | |
| + | <syntaxhighlight lang="python"> |
| + | 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 ) |
| + | </syntaxhighlight> |
| + | |
| + | De même, il est possible de lire l'état de plusieurs broches avec un seul appel |
| | | |
| <syntaxhighlight lang="python"> | | <syntaxhighlight lang="python"> |
− | xxx
| + | 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 ) |
| </syntaxhighlight> | | </syntaxhighlight> |
| + | |
| + | Durant l'exécution du script, les messages suivants apparaissent dans la console. Chaque broche mentionnée lors de l'appel de {{fname|mcp.input_pins()}} retourne une valeur {{fname|True}} ou {{fname|False}} en fonction de l'état de la broche. |
| + | |
| + | <nowiki>[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]</nowiki> |
| + | |
| + | == Crédit == |
| + | Travail dérivé de Adafruit_MCP230xx.py disponible sur [https://github.com/adafruit/Adafruit_Python_GPIO https://github.com/adafruit/Adafruit_Python_GPIO] |
| + | |
| + | Le port MicroPython réalisé par ShrimpingIt sur son GitHub [https://github.com/ShrimpingIt/micropython-mcp230xx 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 == | | == Où acheter == |