Ligne 4 : |
Ligne 4 : |
| {{bloc-etroit|text=Nous vous avons montré comment brancher le MCP23017... nous n'allons pas vous laisser là avec le circuit et un "bonne chance". | | {{bloc-etroit|text=Nous vous avons montré comment brancher le MCP23017... nous n'allons pas vous laisser là avec le circuit et un "bonne chance". |
| | | |
− | Nous allons maintenant nous pencher sur la bibliothèque pour le MCP23008 et MCP23017 disponible sur le [https://github.com/adafruit/Adafruit-Raspberry-Pi-Python-Code dépôt GitHub Python pour Raspberry produit par d'AdaFruit]. Le plus facile, c'est d'utiliser [http://wiki.mchobby.be/index.php?title=Pi-WebIde WebIDE], l'environnement super pratique d'AdaFruit, qui pointe déjà automatiquement sur le dépôt GitHub d'AdaFruit. | + | Nous allons maintenant nous pencher sur la bibliothèque pour le MCP23008 et MCP23017 disponible sur le [https://github.com/adafruit/Adafruit_Python_GPIO dépôt GitHub Python pour Raspberry produit par d'AdaFruit]. Le plus facile, c'est d'utiliser [http://wiki.mchobby.be/index.php?title=Pi-WebIde WebIDE], l'environnement super pratique d'AdaFruit, qui pointe déjà automatiquement sur le dépôt GitHub d'AdaFruit. |
| | | |
| Une fois que vous avez ouvert WebIDE dans votre Navigateur, vous pouvez simplement cliquer sur les répertoires et noms suivants dans la barre de navigation à gauche: | | Une fois que vous avez ouvert WebIDE dans votre Navigateur, vous pouvez simplement cliquer sur les répertoires et noms suivants dans la barre de navigation à gauche: |
Ligne 16 : |
Ligne 16 : |
| {{ADFImage|Rasp-Hack-MCP230XX-Librairie-01.jpg}} | | {{ADFImage|Rasp-Hack-MCP230XX-Librairie-01.jpg}} |
| | | |
− | Si vous ne disposez de WebIDE, vous pouvez [https://github.com/adafruit/Adafruit-Raspberry-Pi-Python-Code télécharger toute la bibliothèque directement depuis le dépôt GitHub d'AdaFruit] | + | Si vous ne disposez de WebIDE, vous pouvez [https://github.com/adafruit/Adafruit_Python_GPIO télécharger toute la bibliothèque directement depuis le dépôt GitHub d'AdaFruit] |
| | | |
| Le fichier Adafruit_MCP230xx.py contient à la fois: | | Le fichier Adafruit_MCP230xx.py contient à la fois: |
Ligne 41 : |
Ligne 41 : |
| nano mcp23017_test.py | | nano mcp23017_test.py |
| | | |
− | ==== Le code ===
| + | === Le code === |
| Une fois dans l'éditeur nano, encodez le code suivant: | | Une fois dans l'éditeur nano, encodez le code suivant: |
| | | |
− | <nowiki>#!/usr/bin/python
| + | <syntaxhighlight lang="python"> |
| + | #!/usr/bin/python |
| # -*- encoding: utf8 -*- | | # -*- encoding: utf8 -*- |
| from Adafruit_MCP230xx import * | | from Adafruit_MCP230xx import * |
Ligne 71 : |
Ligne 72 : |
| while (True): | | while (True): |
| mcp.output(0, 1) # Mettre la broche 0 à l'état HAUT/High | | mcp.output(0, 1) # Mettre la broche 0 à l'état HAUT/High |
− | time.sleep(1); | + | time.sleep(1) |
| mcp.output(0, 0) # Mettre la broche 0 à l'état BAS/Low | | mcp.output(0, 0) # Mettre la broche 0 à l'état BAS/Low |
− | time.sleep(1);</nowiki> | + | time.sleep(1) |
| + | </syntaxhighlight> |
| | | |
| Sauvez le code et quitter nano | | Sauvez le code et quitter nano |
| | | |
− | === Exécuter === | + | === Rendre exécutable === |
| Avant d'exécuter le programme de test, il faut rendre le fichier exécutable | | Avant d'exécuter le programme de test, il faut rendre le fichier exécutable |
| | | |
| sudo chmod +x mcp23017_test.py | | sudo chmod +x mcp23017_test.py |
| | | |
− | Vous pouvez finalement exécuter le programme à l'aide de la commande | + | === Exécuter === |
| + | Vous pouvez finalement exécuter le programme à l'aide de la commande suivant. Attention: Il faut utiliser un sudo pour permettre au programme d'accéder au GPIO. |
| | | |
| sudo ./mcp23017_test.py | | sudo ./mcp23017_test.py |
| | | |
− | {{ambox|text=Il faut utiliser un sudo pour permettre au programme d'accéder au GPIO}}
| + | |
| + | == Error accessing 0x20 == |
| + | Lors de nos tests, avons obtenu le message d'erreur suivant: |
| + | <nowiki>Error accessing 0x20:check your I2C address |
| + | Error accessing 0x20:check your I2C address |
| + | Error accessing 0x20:check your I2C address |
| + | Error accessing 0x20:check your I2C address |
| + | Error accessing 0x20:check your I2C address |
| + | Error accessing 0x20:check your I2C address</nowiki> |
| + | |
| + | Ce dernier se produit lorsque la bibliothèque n'est pas capable de détecter correctement la révision de votre Pi... mais c'est un problème très facile à contourner. |
| + | |
| + | Lorsque la bibliothèque ne sait pas détecter la révision du pi, elle utilise le Bus I2C sur la broche numéro 0 (correspondant au Raspberry-Pi 256Mb). Le hic, c'est que la majorité des Raspberry actuels sont des modèles 51Mb Modèle B Révision 2 utilisant le Bus I2C sur la broche numéro 1. |
| + | |
| + | Par conséquent, essayer d'adresser le périphérique I2C à l'adresse 0X20 sur la mauvaise broche du bus I2C ne peut que produire une erreur. |
| + | |
| + | === Fixons le bus à utiliser === |
| + | Pour résoudre le problème, il suffit simplement de fixer la broche du bus I2C. |
| + | |
| + | Editez le fichier Adafruit_I2C.py avec la commande |
| + | |
| + | nano Adafruit_I2C |
| + | |
| + | et modifiez le paramètre '''busnum''' de la ligne suivante |
| + | |
| + | def __init__(self, address, busnum=-1, debug=False): |
| + | |
| + | pour la fixer de la valeur -1 (auto-détection) à '''la valeur 1''' (valeur correspondant au Raspberry 512Mb modèle B rev 2) |
| + | |
| + | def __init__(self, address, busnum=1, debug=False): |
| + | |
| + | Voila, il ne reste qu'à sauver et retester votre programme ''mcp23017_test.py'' |
| | | |
| == Créer une instance de Adafruit_MCP230xx == | | == Créer une instance de Adafruit_MCP230xx == |
− | Pour créer une instance de la classe "wrapper" qui permet d'accéder au MCP230xx, vous devez retirer le commentaire d'une des deux se trouvant au début du code ci dessous. Il y deux lignes d'initialisation possible parce qu'il y a deux versions du Raspberry Pi. La première version (avant la révision Modèle B et 512MB SDRAM) utilisait la ligne I2C0, tandis que le dernier modèle B (avec 512MB SDRAM) utilise la ligne I2C1. | + | Pour créer une instance de la classe "wrapper" qui permet d'accéder au MCP230xx, vous devez retirer le commentaire d'une des deux se trouvant au début du code ci dessous. |
| | | |
− | C'est la raison de l'existence du premier paramètre '''busnum'''.
| + | La bibliothèque détecte automatiquement la révision du Raspberry Pi et utilise la ligne I2C adéquate. En effet, la première version (avant la révision Modèle B et 512MB SDRAM) utilisait la ligne I2C0, tandis que le dernier modèle B (avec 512MB SDRAM) utilise la ligne I2C1. |
| | | |
| Le paramètre '''address''' permet d'indiquer l'adresse du MCP23017 en notation hexadécimal. En partant du principe que les 3 lignes d'adresses du MCP23017 sont branchées à la masse/GND, l'adresse du MCP23017 est 0x20 (qui est l'adresse de base). | | Le paramètre '''address''' permet d'indiquer l'adresse du MCP23017 en notation hexadécimal. En partant du principe que les 3 lignes d'adresses du MCP23017 sont branchées à la masse/GND, l'adresse du MCP23017 est 0x20 (qui est l'adresse de base). |
Ligne 97 : |
Ligne 131 : |
| Le paramètre '''num_gpios''' indique le nombre de broches d'entrée/sortie (GPIO) disponible sur le module MCP230xx. Puisqu'il s'agit d'un MCP23017, nous avons donc 16 broches. | | Le paramètre '''num_gpios''' indique le nombre de broches d'entrée/sortie (GPIO) disponible sur le module MCP230xx. Puisqu'il s'agit d'un MCP23017, nous avons donc 16 broches. |
| | | |
− | <nowiki># Utiliser busnum = 0 pour les Raspberry plus ancien (avant la version 512MB) | + | <nowiki>mcp = Adafruit_MCP230XX(address = 0x20, num_gpios = 16) |
− | #mcp = Adafruit_MCP230XX(busnum = 0, address = 0x20, num_gpios = 16)
| + | # Si vous utilisez un MCP23008, vous devez utiliser la ligne suivante |
− |
| + | # mcp = Adafruit_MCP230XX(busnum = 1, address = 0x20, num_gpios = 8)</nowiki> |
− | # Utiliser busnum = 1 pour les nouveaux Raspberry (avec 512MB de RAM) | |
− | mcp = Adafruit_MCP230XX(busnum = 1, address = 0x20, num_gpios = 16)</nowiki> | |
| | | |
− | === Addresse du MCP230xx === | + | === Les adresses du MCP230xx === |
| Comme indiqué ci-dessus, l'adresse par défaut d'un MCP23017 est 0X20 si toutes les lignes d'adresses sont raccordées à la masse. | | Comme indiqué ci-dessus, l'adresse par défaut d'un MCP23017 est 0X20 si toutes les lignes d'adresses sont raccordées à la masse. |
| | | |
Ligne 181 : |
Ligne 213 : |
| mcp.output(0, 0)</nowiki> | | mcp.output(0, 0)</nowiki> |
| | | |
− | C'est tout ce qu'il faut faire! Le code d'exemple essaye de basculer la broche GPIO aussi vite que possible... et si vous y branchez un oscilloscope vous devriez voir quelquechose comme ce qui suit:
| + | == Exemple en vidéo == |
| + | Voici la vidéo correspondant au programme de test ''mcp23017_test.py''. |
| + | |
| + | {{#Widget:Iframe |
| + | |url=https://www.youtube.com/embed/TCdfEBJeh_A |
| + | |width=420 |
| + | |height=315 |
| + | |border=0 |
| + | }} |
| + | |
| + | Dans l'exemple suivant, le code d'exemple essaye de basculer la broche GPIO aussi vite que possible... et si vous y branchez un oscilloscope vous devriez voir quelque-chose comme ce qui suit: |
| | | |
| {{#Widget:Iframe | | {{#Widget:Iframe |
− | |url=http://www.youtube.com/embed/zBuMJ-R40N0 | + | |url=https://www.youtube.com/embed/zBuMJ-R40N0 |
| |width=420 | | |width=420 |
| |height=315 | | |height=315 |