samedi 3 décembre 2022

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

About Mehdi HAMIDA

Moi en quelques mots: je m'appelle Mehdi, j'habite à Lyon, je suis chef de projet technique et papa geek. Je m’intéresse aux nouvelles technologies, à la publicité, la musique, à l’art en général et à la culture 2.0, ainsi qu’à tout ce qui a trait de près ou de loin à Internet : réseaux sociaux, webmarketing, le marketing viral et la veille stratégique.

Check Also

Quand TOR agace les russes

Le ministère de l’Intérieur de la Fédération de Russie a publié un avis sur son site …

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée.