Su control desde Python es relativamente fácil. Debemos saber el funcionamiento de cada pin antes de hacer nuestro diseño, ya que hay algunos destinados a la comunicación, etc. La única deficiencia es que no tienen ninguna entrada de lectura analógica.
Por otra parte tenemos 17 pines digitales cuyo estado puede ser HIGH (un voltaje entre 2 y 3.3) o LOW (entre 0 y 0.8). Los voltajes entre 0.8 y 2 serán obviados.
Tenemos que tener en cuenta que estamos trabajando con un dispositivo que maneja niveles lógicos de hasta 3.3V, esto significa que en ningún caso deberemos alimentar ninguno de los pines digitales con un voltaje superior.
Interfaz GPIO
- Los niveles de voltaje GPIO son de 3,3 V y no tolera 5 V. No hay protección de sobre-voltaje en la placa.
- Todos los pines GPIO pueden ser reconfigurados para proporcionar funciones alternas, SPI, PWM, I²C y así sucesivamente.
- Todos los pines UART, SPI e I2C pueden reconfigurarse como GPIO si fuese necesario.
- Para el uso del I2C, los pines 5 y 3 (SCL0 y SDA0) deberán de tener una pullup de 1K8 Ohm.
- Cada pin GPIO puede generar una interrupción por cambio de nivel “raising/falling”.
- La histéresis (Schmitt trigger) de entrada en los GPIO, puede estar ON/OFF.
- El slew rate de salida puede ser rápido o limitarse.
- La corriente de salida puede configurarse entre 2mA y 16mA.
- Habrá que poner atención a los cambios simultáneos en las salidas (SSO). Para evitar interferencias, las corrientes de salida deben mantenerse lo más bajas posible.
- El uso de la UART, de fábrica viene configurado como un puerto de "consola" para monitorear el funcionamiento del RasPI a 115200 bits/s.
- El uso de muchos pines I/O simultáneamente puede hacer que suba la tensión de GND.
- Debemos seleccionar siempre la GND más cercana al pin que estemos usando.
- Los pull down internos no funcionan del todo bien (se activan las entradas con ruido).
Sistemas de numeración de pines
Hay 2 sistemas de numeración de los pines GPIO: BCM y BOARD:
- El sistema BCM usa el número de pin GPIO correspondiente.
- En el sistema BOARD la numeración se basa en el orden de los pines de arriba hacia abajo de la placa.
En esta imagen se aprecia mejor la diferencia entre los dos sistemas:
Configuración
Para el control de los pines I/O, la cabecera del programa deberá configurar esas entradas y salidas.
GPIO.setmode(GPIO.BCM) # Establecemos el sistema de numeración de pins BCM GPIO.setwarnings(False) # Deshabilita los avisos
Los comandos para las entradas (podemos añadir Pull_up o Pull_down):
GPIO.setup(btnStop, GPIO.IN, pull_up_down=GPIO.PUD_UP)
GPIO.setup(btnBajar, GPIO.IN, pull_up_down=GPIO.PUD_DOWN)
Los comandos para las salidas (podemos seleccionar el estado inicial):
GPIO.setup(outSubir, GPIO.OUT, initial=GPIO.HIGH)
GPIO.setup(outBajar, GPIO.OUT, initial=GPIO.LOW)
Cerrar procesos:
Es común cuando trabajamos con el módulo GPIO, que por un error del programa, el canal se quede en ejecución al no ser cerrado adecuadamente, generando un error. Esto permite que el programa se ejecute, pero no se pueda acceder al puerto. Para solucionarlo, deberemos cerrar el proceso.
Podemos comprobar si tenemos algún GPIO activo con el siguiente comando:
ls /sys/class/gpio
En caso de haber alguno activo y querer cerrarlo, debemos buscar el número del proceso:
ps aux | grep python
Cuando hayamos identificado el proceso que queremos "matar", lo finalizaremos con la siguiente instrucción:
sudo kill -9 xxxx
Donde xxxx se corresponde con el número de dicho proceso.
Para que no suceda esto, debemos utilizar en todos los programas las siguientes líneas:
try:
main
except: KeyboardInterrupt:
GPIO.cleanup()
El comando "try" engloba todo el programa (main) y se interrumpe si ocurre alguna excepción.
El comando "except" hace que lo que está a continuación se ejecute cuando ocurra una excepción.

No hay comentarios:
Publicar un comentario