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