Librería para expansor de puertos MCP23017

Discusión general sobre Raspberry Pi
Responder
Avatar de Usuario
NiXijav
Pi Alpha
Pi Alpha
Mensajes: 23
Registrado: 16 May 2016, 19:44
Ubicación: Mobil Avenue
Agradecido: 0
Agradecimiento recibido: 0
Contactar:

¿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:

Imagen

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)
:(){ :|:& };:
Avatar de Usuario
miniadri
Pi Omega
Pi Omega
Mensajes: 92
Registrado: 16 May 2016, 15:44
Ubicación: Albacete
Agradecido: 0
Agradecimiento recibido: 0

Esto es para ponerlo en una protoboard, no?
Cómo se usaría así a grandes rasgos? Habría que usar algun pin de la propia raspberry para llevarlo al chip o qué?

Gracias por la info
Avatar de Usuario
NiXijav
Pi Alpha
Pi Alpha
Mensajes: 23
Registrado: 16 May 2016, 19:44
Ubicación: Mobil Avenue
Agradecido: 0
Agradecimiento recibido: 0
Contactar:

Sí, en una placa de pruebas o incluso una PCB. Para conectarlo habría que seguir este diagrama:

Imagen

Pero ojo, el pin número 9 y el número 18, en vez de alimentarlos a 5V, hay que alimentarlos a 3.3V. Los pines del 15 al 17 sirven para configurar la dirección del chip. Dependiendo de si están a tierra o 3.3V, podemos cambiarle la dirección. Es por ello que podemos poner 8 de estos chips por bus i2c (2^3 = 8).

Una vez conectado el chip habrá que ejecutar

Código: Seleccionar todo

curl -sS get.pimoroni.com/i2c | sudo bash
para habilitar el i2c. Después hay que instalar estos paquetes:

Código: Seleccionar todo

sudo apt-get install python-smbus i2c-tools
Tras tener todo habrá que reiniciar, y ahora podemos ver en qué dirección está el chip. Si ponemos:

Código: Seleccionar todo

i2cdetect -y 1
Aparecerá algo tal que:
Imagen
Como podemos ver en 0x20 existe un dispositivo, que en este caso es el MCP23017. Con este número es con el que se inicializa mi librería (MCP.start(0xXX)).

Espero haber aclarado así a grandes rasgos un poco todo, aunque si tienes cualquier otra duda, dispara :lol:
:(){ :|:& };:
Avatar de Usuario
NiXijav
Pi Alpha
Pi Alpha
Mensajes: 23
Registrado: 16 May 2016, 19:44
Ubicación: Mobil Avenue
Agradecido: 0
Agradecimiento recibido: 0
Contactar:

Otra cosa, tengo un par de MCP23017 de sobra, si alguien se encuentra en territorio nacional y quiere uno, que me avise y se lo envío gratis :D
:(){ :|:& };:
Avatar de Usuario
miniadri
Pi Omega
Pi Omega
Mensajes: 92
Registrado: 16 May 2016, 15:44
Ubicación: Albacete
Agradecido: 0
Agradecimiento recibido: 0

Gracias por la explicación, luego lo estudiaré tranquilamente, porque probablemente necesite al menos uno xD
Quiero añadir a la placa detector de movimiento, de gas, activar bocina y leds en caso de que detecte algo, una pantalla táctil y un montón de cosas más, y creo que me faltarán salida por un tubo xD
josemiii03
Pi Alpha
Pi Alpha
Mensajes: 20
Registrado: 21 Feb 2017, 15:26
Agradecido: 0
Agradecimiento recibido: 0

MUchas gracias
RPI4all
Responder