Librería para expansor de puertos MCP23017
Publicado: 17 May 2016, 00:27
¿Están todos los pines del GPIO de tu Raspberry Pi ocupados y te gustaría meter más? La solución es el MCP23017, un chip que proporciona 16 entradas o salidas digitales, por lo que podrás conectar todo tipo de dispositivos adicionales (leds, botones...). Además podrás conectar 8 de estos chips en un mismo bus, proporcionando un total de 128 pines utilizando tan solo 2 pines en tu Raspberry Pi.
http://www.microchip.com/wwwproducts/en/MCP23017
Utilizarlo puede ser un poco dolor de cabeza, ya que para configurar el chip es necesario utilizar siempre direcciones y registros internos del chip. Para simplificar la tarea he creado esta pequeña librería https://github.com/ResonantWave/mcp23017_lib.
Una vez conectado el chip, la librería proporcionará un set de comandos muy similar al de RPi.GPIO, la librería más usada para los GPIOs en Python.
La asignación de pines sigue el siguiente esquema:

Y a continuación un pequeño ejemplo de uso, que configurará el pin #2 como una entrada, con la resistencia pull-up interna activada, y el pin #1 como una salida. Cuando el pin #2 esté en estado alto, el pin #1 se encenderá.
http://www.microchip.com/wwwproducts/en/MCP23017
Utilizarlo puede ser un poco dolor de cabeza, ya que para configurar el chip es necesario utilizar siempre direcciones y registros internos del chip. Para simplificar la tarea he creado esta pequeña librería https://github.com/ResonantWave/mcp23017_lib.
Una vez conectado el chip, la librería proporcionará un set de comandos muy similar al de RPi.GPIO, la librería más usada para los GPIOs en Python.
La asignación de pines sigue el siguiente esquema:

Y a continuación un pequeño ejemplo de uso, que configurará el pin #2 como una entrada, con la resistencia pull-up interna activada, y el pin #1 como una salida. Cuando el pin #2 esté en estado alto, el pin #1 se encenderá.
Código: Seleccionar todo
import mcp23017_lib as MCP
MCP.start(0x26)
MCP.setup(2, MCP.IN, MCP.PUHIGH)
MCP.setup(1, MCP.OUT)
while 1:
if(MCP.read(2)):
MCP.write(1, MCP.HIGH)
else:
MCP.write(1, MCP.LOW)