Modifications

Sauter à la navigation Sauter à la recherche
6 231 octets ajoutés ,  16 mars 2019 à 22:38
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 ==
Cette bibliothèque est un pilote pour le convertisseur ADS1115 et ADS1015 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:
   −
{{download-box|Téléchargez la bibliothèque ADS1x15|https://github.com/mchobby/esp8266-upy/blob/master/ads1015-ads1115/ads1x15.py}}
+
{{download-box|Téléchargez la bibliothèque MCP230xx|https://github.com/mchobby/esp8266-upy/blob/master/mcp230xx/mcp230xx.py}}
    
Vous devrez copier les fichiers suivant sur votre carte MicroPython
 
Vous devrez copier les fichiers suivant sur votre carte MicroPython
* {{fname|ads1x15.py}} dans le répertoire racine.
+
* {{fname|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:
 
Pour savoir comment copier vos fichiers sur votre carte MicroPython Feather ESP8266 Huzza, vous pouvez vous référer aux ressources suivantes:
Ligne 37 : Ligne 58 :     
== Brancher ==
 
== Brancher ==
[[Fichier:FEATHER-MICROPYTHON-MCP23017-brancher.jpg|640px]]
+
[[Fichier:FEATHER-MICROPYTHON-MCP23017-brancher.jpg|800px]]
 +
 
 +
Branchement du MCP23017
 +
 
 +
{| class="wikitable" border="1"
 +
|-
 +
| align="center" | Broche du MCP23017
 +
| align="center" | Connecté sur
 +
|- style="font-size: 90%"
 +
| align="left" | 9
 +
| align="left" | 3.3V
 +
|- style="font-size: 90%"
 +
| align="left" | 10
 +
| align="left" | GND
 +
|- style="font-size: 90%"
 +
| align="left" | 12
 +
| align="left" | ESP8266 GPIO5 [I2C SCL]
 +
|- style="font-size: 90%"
 +
| align="left" | 13
 +
| align="left" | ESP8266 GPIO4 [I2C SDA]
 +
|- style="font-size: 90%"
 +
| align="left" | 18
 +
| 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">
 
<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 )
 +
 
 +
# 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>
 
</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">
 +
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>
 +
 +
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 ==
29 918

modifications

Menu de navigation