Download Recetario de Raspberry Pi 2ª Parte
Document related concepts
no text concepts found
Transcript
Elektor•Post Proyecto N° 5 Recetario de Raspberry Pi 2ª Parte Nunca viene mal algo de ayuda en la cocina En la anterior entrega de este .POST electro-culinario mostrábamos cómo instalar Raspbian y preparar nuestra Raspberry Pi para dar los primeros pasos. Tal como prometimos , en esta edición echaremos un vistazo al puerto de expansión de la Raspberry y a cómo programar los pines GPIO. Si has tenido ocasión de leer la edición de Elektor de marzo de 2013 quizá ya estés familiarizado con ellos, pues en la placa de prototipos para Raspberry Pi [1], éste se trata a fondo. Puerto de expansión de la RPi: doblemente delicioso Para los hackers de hardware, el puerto de expansión de la Raspberry Pi sin duda será lo más valioso de la placa en sí, después de su asequible precio, claro está. El puerto de expansión se encuentra en la esquina cerca del conector de vídeo compuesto. Es de tipo pin-header, con dos filas de 13 pines cada una, con la separación estándar de 0.1’’ (2.54 mm), por lo que es fácil trabajar con él. Los 26 pines de este puerto ofrecen tres tipos de señales: • Alimentación: +5 V DC y 3.3 V DC*, así como la línea de masa a 0 V (Hemos de tener en cuenta que la línea de 3.3 V sólo es capaz de suministrar una corriente de hasta 50 mA) • Entradas/salidas: “General Purpose Input/Output” (GPIO), señales de las entradas/salidas de propósito general • Puertos de comunicación: UART, SPI e I2C El puerto de expansión dispone de 17 entradas/salidas de propósito general (GPIO). A la mayoría se les puede asignar una función alternativa. Mediante éstas pueden implementarse puertos UART, SPI e I2C (véase la tabla 1). Cada pista de una GPIO es capaz de suministrar entre 2 y 16 mA, dependiendo de la configuración de la potencia de salida, que se define en el correspondiente registro de configuración y, tras el reset, se fija por defecto en 8 mA. La revisión 2 de la Raspberry Pi incorpora un segundo conector de expansión más reducido, P5 (ver la tabla 2). Éste añade otras cuatro señales GPIO, pero lo que es más importante (en especial para los audiófilos), permite el acceso al puerto de audio PCM del chip Broadcom 2835. Aparte de añadir este nuevo puerto de expansión, en la revisión 2 se modificaron ligeramente las señales de P1, siendo el puerto I2C0 sustituido por I2C1. Un detalle pequeño pero que habremos de tener en cuenta, sobre todo si consideramos conectar dispositivos I2C a nuestra Pi. Tony Dixon (Reino Unido) Instalando la librería GPIO de Python Programaremos nuestros ejemplos en Python. Afortunadamente Python ya está instalado por defecto en la distribución Raspbian, pero para acceder a las GPIOs tendremos que incorporar la librería adecuada para gestionar las entradas/salidas de hardware. Existen algunas librerías que podemos utilizar, pero optamos elektor post | Proyecto N° 5 | 1 Elektor•Post Proyecto N° 5 Tabla1. Asignación de pines del puerto de expansión Pin Pin Placa revisión 1 Placa revisión 2 Función Alternativa RPi.GPIO Función Alternativa Función P1-02 5,0 V - - P1-01 3,3 V - 3,3 V - P1-04 5,0 V - - P1-03 GPIO0 I2C0_SDA GPIO2 I2C1_SDA Alternativa P1-06 GND - - P1-05 GPIO1 I2C0_SCL GPIO3 I2C1_SCL P1-08 GPIO14 UART0_TXD RPi.GPIO8 P1-07 GPIO4 GPCLK0 GPIO4 GPCLK0 P1-10 GPIO15 UART0_RXD RPi.GPIO10 P1-09 GND - GND - P1-12 GPIO18 PWM0 RPi.GPIO12 P1-11 GPIO17 RTS0 GPIO17 RTS0 P1-14 GND - - P1-13 GPIO21 P1-16 GPIO23 RPi.GPIO16 P1-15 GPIO22 P1-18 GPIO24 RPi.GPIO18 P1-17 3,3 V - 3,3 V - P1-20 GND - P1-19 GPIO10 SPI0_MOSI GPIO10 SPI0_MOSI P1-22 GPIO25 RPi.GPIO22 P1-21 GPIO9 SPI0_MISO GPIO9 SPI0_MISO P1-24 GPIO8 SPI0_CE0_N RPi.GPIO24 P1-23 GPIO11 SPI0_SCLK GPIO11 SPI0_SCLK P1-26 GPIO7 SPI0_CE1_N RPi.GPIO26 P1-25 GND - GND - - GPIO27 GPIO22 Nota: I2C0_SDA y I2C0_SCL (GPIO0 & GPIO1), y I2C1_SDA y I2C1_SCL (GPIO2 & GPIO3) incorporan resistencias de pull-up de 1.8 kΩ (1k8) a 3.3 V (3V3). Tabla 2. Asignación de pines del puerto P5 Pin Función Alternativa P5-01 5,0 V P5-02 3,3 V P5-03 GPIO28 P5-04 GPIO29 PCM_FS P5-05 GPIO30 PCM_DIN P5-06 GPIO31 PCM_DOUT P5-07 GND P5-08 GND PCM_CLK por la RPi.GPIO de Python, la cual nos dará acceso a los pines de las GPIOs. Si aún no hemos descargado las herramientas de desarrollo para Python o la propia librería GPIO, podemos hacerlo mediante LXTerminal (véase la figura 1) en nuestra Pi. Comencemos descargando las herramientas de desarrollo, para ello introducimos: Figura 1. LXTerminal. Una vez descargado, procedemos a extraer los archivos. Escribimos: tar -zxf RPi.GPIO-0.5.0a.tar.gz Se creará un nuevo directorio con los archivos de Python. Ahora introducimos: cd RPi.GPIO-0.5.0a sudo apt-get install python-dev Después instalaremos la librería GPIO de Python [1] mediante la siguiente línea: wget http://pypi.python.org/ packages/source/R/RPi.GPIO/RPi.GPIO- Y después instalamos el paquete mediante: sudo python setup.py install Ahora deberíamos tener la librería RPi.GPIO de Python correctamente instalada. 0.5.0a.tar.gz elektor post | Proyecto N° 5 | 2 Elektor•Post Proyecto N° 5 Programa de ejemplo: blinky.py Tras instalar RPi.GPIO pasaremos a codificar un pequeño programa de prueba para encender un LED. En la figura 2 puede verse el montaje. Hemos utilizado una pequeña placa de prototipos (MiniPiio ProtoBoard [2]) para nuestra Pi, cableando un LED y una resistencia de 680 Ω entre GPIO17 (pin 11) y 0 V. Tras colocar los componentes debidamente hacemos doble click en el icono del IDE en el escritorio de nuestra Pi para iniciar el shell y el IDE (figura 3). Hacemos click en “file” y creamos un nuevo programa. Esto abrirá el editor. Ahora, en dicho editor llamado “IDLE” (figura 4) introducimos el programa mostrado en el Listado 1. Hemos de asegurarnos que guardamos el programa una vez listos, posteriormente pasamos de nuevo a LXTerminal e introducimos el siguiente comando para convertir nuestro programa en un ejecutable: chmod +x blinky.py Tras esto podremos ejecutar el programa mediante el siguiente comando: Listado blinky.py Figura 2. Pi con protoboard. # !/usr/bin/python import time import RPi.GPIO as GPIO # Configure Pi’s GPIO pins GPIO.setmode (BCM) GPIO.setup (17,GPIO.OUT) sudo ./blinky.py Consejo: si arrancamos IDLE desde una sesión en LXTerminal con sudo delante del nombre del programa, es decir sudo idle, contaremos con los permisos necesarios para ejecutar nuestro código para RPi.GPIO directamente desde IDLE. # Program loop while True : GPIO.output (17,True) time.sleep (1) GPIO.output (17,True) time.sleep (1) Figura 3. Shell de Python. Numeración de pines en RPi.GPIO RPi.GPIO tiene dos formas de numerar los pines GPIO en la Raspberry Pi. Por lo tanto, nuestro programa para RPi.GPIO siempre ha de especificar un sistema de numeración determinado, ya sea GPIO.setmode(GPIO. BOARD) o GPIO.setmode(GPIO.BCM). E l p r i m e r o u t i l i z a e l s i s t e m a G P I O. setmode(GPIO.BOARD), el cual se refiere a los números de los pines del puerto de expansión P1 de la placa Raspberry Pi. La ventaja es que no tendremos que cambiar el código si en un futuro se modifican las señales del conector de expansión. El segundo sistema de numeración es GPIO. setmode(GPIO.BCM), el cual utiliza como refe- elektor post | Proyecto N° 5 | 3 Elektor•Post Proyecto N° 5 rencia los nombres de las señales del chip Broadcom 2835 directamente. Como esto a veces puede llevar a confusión, la tabla 3 cómo concuerdan entre sí los números de pines de P1, los nombres de las señales GPIO y GPIO.setmode. (130110) Enlaces de Internet [1] www.elektor.es/120483 [2] https://pypi.python.org/pypi/RPi.GPIO Figura 4. Editor IDLE. [3] www.dtronixs.com Tabla 3. GPIO.setmode(GPIO.BCM) en GPIO.setmode(GPIO.BOARD) Pin Función GPIO.setmode GPIO.BCM GPIO.BOARD P1-01 3,3 V - - P1-02 5,0 V - - P1-03 GPIO0/2* 0/2 3 P1-04 5.0V - - P1-05 GPIO1/3* 1/3 5 P1-06 GND - - P1-07 GPIO4 4 7 P1-08 GPIO14 14 8 P1-09 GND - - P1-10 GPIO15 15 10 P1-11 GPIO17 17 11 P1-12 GPIO18 18 12 P1-13 GPIO21/27* 21 13 P1-14 GND - - P1-15 GPIO22 22 15 P1-16 GPIO23 23 16 P1-17 3,3 V - - P1-18 GPIO24 24 18 P1-19 GPIO10 10 19 P1-20 GND - - P1-21 GPIO9 9 21 P1-22 GPIO25 25 22 P1-23 GPIO11 11 23 P1-24 GPIO8 8 24 P1-25 0V - - P1-26 GPIO7 7 26 Nota: * cambios en la revisión 2. elektor post | Proyecto N° 5 | 4