24

Todo sobre los GPIO Raspberry Pi

Publicado por el .

 

GPIO Raspberry Pi

Los pines GPIO de la Raspberry Pi son los grandes olvidados, pero que sabiendo como utilizarlos nos abre un mundo de posibilidades. De eso trata este artículo, de abrirte las puertas de este mundo e introducirte en la programación y presentarte las posibilidades de los GPIO. En próximos post también te enseñaremos a conectar Arduino y la Raspberry Pi mediante estos pines para conseguir grandes proyectos uniendo el poder de ambas plataformas.

Introducción a los GPIO y esquemas

GPIO (General Purpose Input/Output) es, como su propio nombre indica, un sistema de E/S (Entrada/Salida) de propósito general, es decir, una serie de conexiones que se pueden usar como entradas o salidas para usos múltiples. Estos pines están incluidos en todos los modelos de Raspberry Pi, para que puedas realizar proyectos interesantes como lo harías con Arduino.

Los GPIO representan la interfaz entre la Raspberry Pi y el mundo exterior. Y con ellos podrás hacer multitud de proyectos, desde hacer titilar un LED hasta otros mucho más sofisticados. Pero para eso debes saber sus características y como se programan. Lo primero variará en función de la revisión de placa que tengas o del modelo.

Todos los pines son de tipo “unbuffered”, es decir, no disponen de buffers de protección, así que deberás tener cuidado con las magnitudes (voltajes, intensidad,…) cuando conectes componentes a ellos para no dañar la placa. Como podrás apreciar en las imágenes posteriores, no todos los pines tienen la misma función:

  • Pines de alimentación: puedes apreciar pines de 5v, 3v3 (limitados a 50mA) y tierra (GND o Ground), que aportan alimentación a estos voltajes para tus circuitos. Te pueden servir como una fuente de alimentación, aunque también puedes utilizar otras fuentes (pilas, fuentes de alimentación externas, etc). Recuerda que son unbuffered y debes tener cuidado para no dañar la placa.
  • DNC (Do Not Connect): son pines que por el momento no tienen función, pero en futuras implementaciones son utilizados para otros fines. Por eso solo los vas a encontrar en modelos más primitivos de la Raspberry Pi. En las actuales placas han sido marcados como GND.
  • GPIO normales: son conexiones configurables que puedes programar para tus proyectos, tal como te enseñaremos más adelante.
  • GPIO especiales: dentro de éstos se encuentran algunos pines destinados a una interfaz UART, con conexiones TXD y RXD que sirven para comunicaciones en serie, como por ejemplo, conectar con una placa Arduino. También podemos ver otros como SDA, SCL, MOSI, MISO, SCLK, CE0, CE1, etc…, los cuales explicaremos su funcionamiento más adelante.

Esquemas de los GPIO según el modelo

Todas las placas y revisiones no disponen de esquemas GPIO iguales. Aquí te ofrecemos todos los esquemas de las diferentes placas que existen por el momento. En las siguientes imágenes podemos apreciar los distintos layouts de los modelos existentes por el momento:

Model B (Rev 1.0)

Layout GPIO Model B Rev1

Model A/B (Rev 2.0)

Layout GPIO Model A y B Rev2

Model A+, B+, y 2

Layout GPIO Model A+, B+ y 2

Como puedes comprobar, existen tres esquemas básicos. Los de la revisión 1.0 del modelo B, los incluidos en la revisión 2.0 del modelo A y B, y los modernos A+, B+ y 2 que comparten el mismo esquema de conexiones.

Introducción a los HATs y Plates

HAT para Raspberry Pi

Aunque dedicaremos otro post a realizar una mega comparativa de HATs (Hardware Attached on Top) y Plates para la Raspberry Pi, con ejemplos de sus usos, vamos a explicar qué son y qué tienen que ver con los GPIO. Si ya estás familiarizado con Arduino, es fácil captar la idea de lo que son estos componentes, puesto que en el mundillo Duino se conocen como Shields o módulos y Plates.

Los Plates son placas agujereadas para montar circuitos fácilmente. Algo así como una protoboard que puede ser conectado a los GPIO de la Raspberry Pi. Son un buen complemento si deseas montar dispositivos electrónicos de montaje superficial. Como ves, su función es idéntica a su equivalente para Arduino.

Raspberry Pi con HAT

En cambio, los HATs son similares a los shields o escudos de Arduino. Es decir, placas de expansión que se pueden conectar a los GPIO para agregar funcionalidades a la placa. Si te fijas en el nombre, coincide con la palabra inglesa “sombrero” y que hace referencia a la forma en que se conectan con la Raspi.

Al ser un complemento nuevo, éstos solo son compatible con los modelos de Raspberry Pi que comparten el mismo esquema de conexiones. Si recuerdas el apartado anterior, éstos son el A+, B+ y la nueva versión 2 de la placa SBC. Pero en el mercado podrás encontrar diferentes fabricantes que suministran este tipo de HATs para Raspberry Pi. Uno de ellos es AdaFruit, que vende tarjetas de expansión denominadas HatADay y que contienen pantallas TFT, GPS, servomecanismos, complementos para robótica, etc…

Introducción al uso de los GPIO

Conexión del LED a los GPIO de la Raspberry Pi
Al igual que Arduino emplea su entorno Arduino IDE para crear sketchs o códigos fuente para programar los proyectos, la Raspberry Pi permite también programar sus GPIO, pero con mayor flexibilidad. Se puede realizar desde tu distribución utilizando multitud de herramientas con diversos lenguajes de programación (Python, Java, C,…), o desde la consola utilizando sencillos scripts y comandos.

Por lo general, la Raspberry Pi utiliza distribuciones Linux. Como buen UNIX, el sistema operativo tratará a todos los elementos, incluido el hardware, como un fichero. Ya sabes que en Windows existen unidades (C:, D:,…) o dispositivos hardware. Pero en un *nix todo son ficheros, como por ejemplo el disco duro (/dev/sda), la unidad de DVD (/dev/dvd), tarjetas SD (/dev/mmcblk0), etc…

Pues bien, los puertos GPIO también serán tratados como un fichero más, aunque no se encuentren en el dierctorio /dev, y por tanto podrás emplear los comandos básicos de la consola para gestionar ficheros. Por ejemplo, si queremos controlar un LED, podríamos entrar en la consola (para nuestros ejemplos hemos empleado Raspbian) y escribir lo siguiente:


echo 17 > /sys/class/gpio/export

Con esta línea crearíamos un fichero con la estructura del GPIO correspondiente para que pueda ser manipulado. Luego se debería de configurar como entrada o salida, según lo que quieras. En nuestro caso como salida, puesto que queremos alimentar al LED para encenderlo:

echo out > /sys/class/gpio/gpio17/direction

Ahora se podría encender o apagar. Para ello le podemos dar valores a la salida que hemos creado. Si le damos valor 1 se encenderá y con valor 0 se apagará:

echo 1 > /sys/class/gpio/gpio17/value
echo 0 > /sys/class/gpio/gpio17/value

Una vez termines el experimento, puedes borrar la entrada para realizar otro ejercicio en el mismo pin o en otro diferente:

echo 17 > /sys/class/gpio/unexport

¿Simple verdad? Pues ahora puedes utilizar tu imaginación y utilizar otros comandos que normalmente utilizas con ficheros y directorios para gestionar los GPIO. Por ejemplo, puedes listar los GPIO que tienes activos con:

cd /sys/class/gpio
ls

También puedes crear scripts para Bash (o el intérprete que utilices). Por ejemplo, continuando con el ejemplo del LED, se puede crear un script que podamos ejecutar en cualquier momento sin tener que poner los comandos uno a uno. Para ello, abre un fichero de texto y escribe el siguiente contenido:

#!/bin/bash
source gpio
gpio mode 17 out
while true; do
gpio write 17 1
sleep 1.3
gpio write 17 0
sleep 1.3
done

Luego guarda el texto en un fichero denominado, por ejemplo, LED.sh y cuando lo desees abrir solo tendrás que situarte en el directorio donde lo hayas guardado y teclear lo siguiente esto para su ejecución:

./LED.sh

Si lo anterior no funciona, puede que debas darle permisos de ejecución al fichero LED.sh. Puedes realizarlo desde el entorno gráfico o con chmod (chmod u+rwx LED.sh). Y el resultado será un LED que titila cada 1.3 segundos. Recuerda que el límite es tu imaginación.

Programación avanzada de los GPIO

Lenguajes de programación

Pues se puede complicar algo más para realizar otros proyectos algo más sofisticados. Sobre todo si utilizamos lenguajes de programación para crear nuestros proyectos. Se pueden utilizar diferentes herramientas y lenguajes de programación. Por ejemplo, el lenguaje de programación C utilizando bibliotecas como WiringPi, pigpio, sysfs, etc…, o compilar nuestros propios códigos fuente con otros lenguajes como C#, Ruby, Java, Perl, BASIC y Python.

Y si no sabes programar, no te preocupes, hasta un niño puede programar los GPIO utilizando lenguajes gráficos como los que aporta Scratch, que se incluye en Raspbian por defecto, pero puedes instalarlo en otras distros sin problema y disfrutar del sistema “drag and drop” con bloques gráficos de Scratch.

C y wiringPi

Una de las mejores maneras de crear programas en lenguaje de programación C es utilizando la biblioteca wiringPI (si tu distro no la tiene instalada, lo primero que debes hacer es descargarla e instalarla, al igual que el compilador gcc u otro que prefieras). Yo utilizaré gcc y la librería wiringPI. Para crear nuestro código fuente debemos enlazar la biblioteca.

Si no los tienes instalados, instala GCC:

sudo apt-get install gcc

Y luego haz lo mismo para la biblioteca wiringPI:

sudo apt-get install git-core

sudo apt-get update

sudo apt-get upgrade

git clone git://git.drogon.net/wiringPi

cd wiringPi

git pull origin

cd wiringPi

./build

Si por ejemplo queremos seguir con nuestro ejemplo de LED que titila, y lo denominamos LED.c. En un editor de texto que prefieras, como por ejemplo gedit, puedes escribir el código fuente y luego guardarlo con el nombre que hemos elegido. El contenido de nuestro programa en C contendrá las siguientes líneas:

/*Código fuente para hacer titilar un LED desde los GPIO*/

#include <stdio.h>
#include <wiringPi.h>

int main (void)
{
printf (“Titilando LED\N”);
if (wiringPiSetup () == -1)
return 1;
pinMode (0, OUTPUT); //0 es el correspondiente del chip al pin 17
for (;;)
{
digitalWrite (0, 1); //Poner en ON o encenderlo
delay (1300); //Retraso de 1.3 segundos
digitalWrite (0, 0); //Poner en Off o apagar
delay (1300); //Retraso para volver a encender...
}
return 0;
}

Para compilarlo, desde el directorio donde se encuentra el código fuente guardado, podemos teclear lo siguiente:

gcc -o LED LED.c -lwiringPi

Si te has decidido por la librería pigpio, utiliza “-lpigpio”. Y para ejecutar el programa que hemos compilado, se hará de forma similar al script. Pero necesitaremos privilegios para iniciar la ejecución del binario llamado LED que hemos generado:

sudo ./LED

Python

Python es el lenguaje preferido para programar los GPIO. Las bibliotecas anteriormente citadas, también pueden ser empleadas con Python. Raspbian ya incluye un módulo denominado RPI.GPIO para poder crear scripts en Python, pero te recomiendo que utilices e instales pigpio, ya que éstos scripts pueden ser ejecutados tanto en Windows, Mac OS X como en Linux. Solo se necesitan los demonios corriendo en la máquina donde quieras ejecutar el código.

Instálalo así:

sudo apt-get install python-dev python-rpi.gpio

El código fuente para realizar el titileo de nuestro LED en Python es el siguiente (haz lo mismo que con el código C, puedes editarlo en un editor de texto):

#!/usr/bin/env python
#LED.py

import time
import pigpio
pi = pigpio.pi()

pi.set_mode (17, pigpio.OUTPUT) #Ponemos el pin 17 como salida

pi.set_servo_pulsewidth (17, 1300) #Iniciamos pulsos cada 1.3 segundos para encender el LED

pi.stop() #Terminamos el programa.

Lo debes guardar con el nombre LED y la extensión “.py” y para ejecutarlo, teclea en el terminal:

sudo pigpiod
./LED.py

Scratch y GPIO

Para usar Scratch con los GPIO podemos utilizar diferentes métodos, como con el resto de lenguajes de programación. Uno es emplear ScratchGPIO, RpiScratchIO, etc… Pero lo primero, si ya tienes Scratch y así será si estás utilizando Raspbian, es instalar el complemento ScratchGPIO:

sudo wget http://goo.gl/Pthh62 -O in stall_scratchgpio5.sh
sudo bash install_scratchgpio5.sh

Por ejemplo, si disponemos de ScratchGPIO, podemos crear el siguiente sketch para hacer titilar el LED:

Scratch sketch para titilar Led

BASIC

Si estás acostumbrado a programar en BASIC o ya eres usuario de placas de desarrollo de Parallax BASIC Stamp (que emplea PBASIC para programar los microcontroladores), te resultará más sencillo programar los pines GPIO en lenguaje BASIC.

Una de las posibilidades es usar RTB (Return to Basic), para instalarlo (en este caso es la versión 2.20):

cd /tmp
wget http://unicorn.drogon.net/rtb-2.20-1.deb
sudo dpkg -i rtb-2.20-1.deb
sudo apt-get -f install

Para ejecutarlo, solo tienes que teclear rtb en el terminal. Y con él teclear el siguiente código fuente renovado, aunque con reminiscencias del BASIC clásico y guardarlo como LED.rtb:

//Titilar LED

PinMode (17, 1) //Pin 17 como salida
CYCLE
DigitalWrite (17, 1) //Pin ON
WAIT (1.3) //Esperamos 1.3 segundos
DigtialWRite (17, 0) //Pin OFF
WAIT (1.3)
REPEAT
END

Espero que te haya servido de ayuda. Cualquier duda u opinión, deja tus comentarios!


24 comentarios

  1.   Antonio Rosado dijo

    Buenas!

    Estoy montando una Raspberry Pi y necesito configurar los puertos GPIO, al menos uno de ellos, para que cuando la Raspberry esté apagada se apague esa salida GPIO que estará conectada a un relé que desactivara un concentrador USB.

    Básicamente es para que no este siempre encendido en disco duro sin necesidad de desconectar con un interruptor.

    Espero tu respuesta.

    Saludos!

    1.    Isaac PE dijo

      Hola,

      Cuando se apaga la Raspberry Pi, los GPIO dejan de suministrar, así que literalmente los GPIO se apagan con la Raspberry Pi. Se podría hacer de forma similar al primer ejemplo de apagado y encendido del LED con comandos de nuestro ejemplo, pero en este caso un script para mantener siempre encendido uno de los pines GPIO que esté conectado a un relé tipo NA. Así cuando se apague el GPIO al apagar la Raspberry Pi, el relé hará que se desconecte la alimentación del HUB USB. Para que inicie el script junto con el sistema operativo y no tengas que programarlo con cada inicio, basta con crear el script dentro de del directorio /etc/init.d y asignarle permisos de ejecución. Después le indicas al sistema que quieres que ese script se inicie con el sistema operativo y para eso tecleas: “sudo update-rc.d nombre_script.sh defaults”. Si lo prefieres hay otra forma más fácil, que es agregar el código del script al final (pero antes del comando exit 0) del fichero /etc/rc.local y guardar los cambios…

      No se si me he explicado. La idea es que mientras el sistema esté encendido, un pin esté suministrando voltaje al relé que estará cerrando el circuito para que el disco duro tenga alimentación. Y cuando se apague el sistema, el script dejará de funcionar y por tanto el pin dejará de tener corriente y por tanto el relé se abrirá y cortará el suministro.

      Saludos.

  2.   Antonio Rosado dijo

    Buenas!

    De nuevo por aquí! XD

    No me esperaba una contestación tan eficaz (no es común).

    He realizado los pasos del ejemplo ejecutando los comandos y ha funcionado a la perfección.

    El problema viene al crear el bash que pones en el ejemplo. Cuando lo ejecuto me pone:

    source: line 2: gpio: not found
    -sh: ./led.sh:: not found

    Tengo OpenElec. No se si puede tener algo que ver.

    Antes de seguir tus pasos quiero primero probar que funciona todo Ok con el ejemplo del Led.

    Espero tu ayuda.

    Saludos!

    1.    Isaac PE dijo

      Hola,

      Sí. Que sea OpenElec tiene mucho que ver, puesto que carece de las bibliotecas necesarias al ser una distro orientafa al Mediacenter.

      He estado pensando y te sugiero un experimento (no se si funcionará porque esto que te voy a decir no lo he probado…). El circuito sería igual al que te propuse en el comentario anterior, pero no tendrás ni que hacer script ni iniciarlos con el sistema ni nada de eso…mucho más sencillo.

      Intenta medir el voltaje del GPIO correspondiente a 5v, por ejemplo. Si cuando la Raspi está encendida tiene tensión y cuando la apagas deja de suministrar… Pues ya lo tienes!!! Conectas ahí el relé y listo.

      Como te digo no dispongo de mi Raspi ahora para probarlo. Pero es una idea que se me ha ocurrido para que continues con OpenElec.

      Pruebalo y nos cuentas.

      Saludos y espero haberte ayudado.

      1.    Antonio Rosado dijo

        Buenas!

        Si porque muchas cosas están limitadas y te lo muestra. No se puede tener todo 🙂

        Creo recordar que al tener alimentado por el USB la RaspberryPi, el pin que me comentas se queda con voltaje aunque este apagada la Raspberry. Pero voy a probarlo por si acaso en la versión es diferente.

        Ayer estuve probando y al final en el bash lo que puse es esto:

        #!/bin/bash
        echo 17 > /sys/class/gpio/export
        echo out > /sys/class/gpio/gpio17/direction
        echo 1 > /sys/class/gpio/gpio17/value

        si lo ejecuto funciona perfectamente. No se si estará correctamente bien hecho esto XD

        Pero estuve buscando el rc.local y el init.d pero no aparece por ningún lado!!

        Solo me queda configurarlo para que inicie y listo.

        ¿Sugerencias?

        Saludos!

        1.    Isaac PE dijo

          Hola,

          Estoy de viaje y no puedo tener mi Raspi para comprobar unas cosas y ayudarte mejor.

          Lo único que se me ocurre ahora provisionalmente es que si necesitas un centro multimedia y a la vez quieres evitar las restricciones de OpenElec es que instales Raspbian y Kodi.

          Saludos!!!

  3.   Antonio Rosado dijo

    Buenas!

    No te preocupes, ya me has ayudado mucho.

    Ayer estuve investigando por los directorios porque como tengo ya configurado ambilight en algún sitio tenia que estar el script que hace que arranque todo el tinglado y di con un archivos “autostart.sh” y al abrirlo, sorpresa! Dentro estaba el script que buscaba.

    Pues puse la ruta del script del relé y reinicie y funcionando!

    Ahora solo queda seguir soldando y montando todo.

    Estoy metiendo en una caja de Xbox 360 con XBMC (OpenElec) + RaspPi (Centro de juegos) 🙂

    Ya me queda poco para montar todo el hardware, luego queda perfeccionar el software.

    Muchas gracias por todo!!

    Saludos!!

  4.   Antonio Rosado dijo

    Buenas!

    Después de pelearme con la RPi2 no consigo hacer funcionar correctamente el relé y estoy desesperado.

    Me pasa algo muy curioso. Cuando alimento el modulo de los relés los led de estado lucen pero muy poco.

    Ejecuto:

    echo 23 > /sys/class/gpio/export

    y en el momento que ejecuto

    echo out > /sys/class/gpio/gpio23/direction

    el rele se me activa, sin ejecutar ningún otro comando. Luego hago un unexport pero el rele no se apaga hasta que reinicie la RPi.

    Se te ocurre algo?

    Saludos!

    1.    Isaac PE dijo

      Hola,

      En cuanto a lo de los comandos es raro. No se a qué puede ser debido sin echarle un vistazo a tu sistema e investigar un poco…porque no es mormal que ocurra.

      Lo de los LEDs que lucen poco sí que puede pasar y se debe a que el interruptor (en este caso el relé) no aisla del todo bien y está pasando un pequeño voltaje que es suficiente para que los sensibles LEDs se iluminen un poco. La solución es conectar un terminal de un condensador a cada polo o hilo de los que salen del relé y van a los LEDs. Con eso debería bastar.

      Saludos. Si tienes más problemas y te podemos “echar un cable”, nunca mejor dicho, por aquí estamos…

      1.    Carlos dijo

        A mi pasa lo mismo, pero para apagar el relé lo soluciono poniendo el gpio en in

  5.   Carlos dijo

    Buenas.. Quisiera saber como configurar los timer internos que posee la tarjeta directamente desde lenguaje C.

  6.   drsistemas dijo

    muchas gracias por la introduccion !

  7.   Javier Cespedes dijo

    Buenas noches.

    La raspberry pi se le puede conectar una celda de cargar ? es que estoy haciendo un proyecto de una bascula .

    Tu me recomendaria instalarle windows 10 lot a la raspberry o la dejo mejor con rasbian ?

    Cual de los lenguaje de programación es mejor para la raspberry pi ?

    1.    Alberto Navarro dijo

      Buenas Javier!

      Si, le puedes conectar una batería normal de 5v. Si estás empezando, mejor usar Raspbian junto con Python.

      Saludos!

  8.   leonel dijo

    Hola, como estas. estoy incursionando en raspberry y en arduino, tengo conocimiento basico en estos temas. me encuentro con un inconveniente, que primero espero poder explicarme bien. paso a detallar:
    Estoy queriendo armar una maquina de video juegos con raspberry pi, tengo un joystick analogico que necesito usar con la raspberry pi, pero debo transformar las dos salidas analogicas a 4 contactos que entren a la GPIO de las raspberry, tenia pensado hacerlo con un arduino, pero me encuentro que los switch de los botones que ingresan a la GPIO, son switch que cortar un contacto de tierra, es decir, a la GPIO le entra una tierra, en cambio con el arduino le estaria enviando un valor +.
    me explique bien?
    que me pueden recomendar hacer???
    en sintesis, tengo una serie de botones que entran a la GPIO como una masa, y tengo 4 contactos positivos, que una solucion seria poner 4 reles, pero quiero evitar usar los reles.
    ma ayudarian?
    gracias y saludos desde argentina.

  9.   Roberto dijo

    Hola! Necesito conectar una basicstamp a una pi2 ayuda!

  10.   david dijo

    Se puede desactivar una entrada gpio con una orden de otro gpio y como lo puedo hacer.
    Es decir si conecto un sensor a una entrdade gpio como hacer que influlla en otra para activar o desactivar el otro.

    1.    Isaac PE dijo

      Hola,

      Mediante comandos Python y operadores lógicos. Pero qué es lo que tienes pensado? Dame más info para poderte ayudar mejor…

      Un saludo!

  11.   gina ospina dijo

    cuantos sensores puedo conectar a la vez a mi raspberry pi 3

    1.    Isaac PE dijo

      Hola,

      Tantos como te permita el suministro y los límites físicos de la Pi. Consulta los manuales de tu versión y encontrarás información detallada sobre la carga soportada.

      Un saludo!

  12.   Christian dijo

    Hola, excelente explicación, que me recomendarías para realizar una interfaz gráfica que corra en raspberry y pueda comunicarme con salidas y entradas de la tarjeta.

    Saludos

    1.    Isaac PE dijo

      Hola,

      Bueno, puedes mirar algo de Qt y GTK+. Sobre esto hay un gran debate sobre cuál elegir, porque supongo que trabajarás con Python. Pero si tu proyecto va a usar C, entonces elige GTK+ y con C++ puedes optar por Qt.

      Un saludo!!!

  13.   gina ospina dijo

    hola, quien me puede colaborar…tengo un sensor estoy trabajando con la raspberry pi 3 y quiero capturar los datos y guardarlos en un archivo .txt, estoy programando en c# , cual seria el codigo para guardar estos datos…gracias

  14.   Alejandro dijo

    Hola Isacc me a ayudado mucho este post a entender mejor el uso del gpio, mira a ver si puedes iluminarme.
    Tengo una Raspberry Pi2, una Raspberry Pi Me shield makeblock la cual va conectada a una modificación de arduino uno llamado Makeblock Orion.
    Con estos tres elementos deseo enviar señales desde un móvil, tableta u ordenador mediante wifi a la raspberry Pi2 e interpretar esas señales para luego poder enviarlas mediante el gpio a la Makeblock orion a través del shield.
    ¿Podrías iluminarme con la comunicación entre las dos placas y el shield?
    He probado unas demo que makeblock tiene para la comunicación entre Raspberry Pi2 y la placa orion usando la shield, pero no hay ejemplos de como hacer dicha comunicación wifi entre un pc/movil/tablet mediante ip usando a la raspberry Pi2 y esa señal unirla a la comunicación entre placas usando el shield.
    Agradecería cualquier ayuda.
    Un saludo

A inventar!