Toujours plus avec ma Framboise #RaspberryPi

Un détecteur d’ouverture de portes, de mouvements, une sonde température, humidité, un moteur pas à pas, et voilà, il ne reste plus de GPIO de libre. Et si je veux ajouter un LCD, je fais comment?

Si comme moi, le nombre de GPIO disponibles sur le Raspberry Pi ne vous convient pas, il est possible d’en rajouter.
La puce MCP23017 permet d’ajouter 16 GPIO. Quant à la puce MCP23008, elle permet d’en rajouter 8.
Ces puces se connectent au Raspberry Pi en utilisant des GPIO “spéciaux”, dédiés au protocole I²C.

Ces deux puces coûtent $1.95 pour le MCP23008, et $2.95 pour le MCP23017 (chez Adafruit, mais on peut trouver encore moins cher).  Seule différence, le MCP23008 se présente sous forme d’une puce à 16 broches, en 2*8, alors que le MCP23017 est une puce à 28 broches, en 2*14. Donc je vous conseillerais le MCP23017.

MCP23017Coté câblage, c’est assez simple. J’ai utilisé le tutoriel d’Adafruit sur l’utilisation du MCP23017.

Le MCP23017 est alimenté par du 3.3V : VDD (9) sur la puce et 3V3 sur le RaspBerry
La masse du Raspberry : VSS (10) sur la puce et GND sur le RaspBerry
Le GPIO SDA : SDA (13) sur la puce et SDA0 sur le RaspBerry
Et pour finir, le GPIO SCL :  : SCL (12) sur la puce et SCL0 sur le RaspBerry

MCP23017_montage

Le MCP23017 a donc 16 pins, de A0 jusqu’à A7 et de B0 jusqu’à B7.
A0 est nommé 0 dans la librairie, et A7 est appellé 7. Ainsi, B0 sera le GPIO 8 et, de la même manière, B7 sera la pin 15

Coté code, il faudra récuperer la librairie de Adafruit. Quant au code python pour utiliser ce chip, il pourra être le suivant ( pareil, cela provient de Adafruit, je n’invente rien) :

# Use busnum = 0 for older Raspberry Pi's (256MB)
mcp = Adafruit_MCP230XX(busnum = 0, address = 0x20, num_gpios = 16)
# Use busnum = 1 for new Raspberry Pi's (512MB with mounting holes)
# mcp = Adafruit_MCP230XX(busnum = 1, address = 0x20, num_gpios = 16)

# Set pins 0, 1 and 2 to output (you can set pins 0..15 this way)
mcp.config(0, OUTPUT)
mcp.config(1, OUTPUT)
mcp.config(2, OUTPUT)

# Set pin 3 to input with the pullup resistor enabled
mcp.pullup(3, 1)
# Read pin 3 and display the results
print "%d: %x" % (3, mcp.input(3) >> 3)

# Python speed test on output 0 toggling at max speed
while (True):
mcp.output(0, 1) # Pin 0 High
mcp.output(0, 0) # Pin 1 Low

A propos de Mehdi HAMIDA

Avec plus de 20 ans d’expérience dans la tech, je me suis spécialisé dans la gestion des données, le cloud (AWS, Snowflake) et l'architecture IT. Avant ça, j’étais expert technique et chef de projet sur des missions stratégiques. Je m'appelle Mehdi HAMIDA, et aujourd’hui, je partage simplement mes découvertes et connaissances à travers ce blog.

Lire aussi

Harry Potter : Wizards Unite

Le studio Niantic, qui a conçu Ingress et Pokémon Go (mais surtout Ingress), a annoncé …

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *