You are on page 1of 11

2013

Biblioman
www.aquihayapuntes.com
18/09/2013
Raspberry Pi: Programando el
puerto GPIO con Qt Creator
Raspberry Pi: Programando el puerto GPIO con Qt Creator

Biblioman www.AquiHayApuntes.com Pgina 2

Introduccin
Este es un tutorial que recopila las pruebas y video tutoriales que he realizado con Qt y el
control del puerto GPIO de la Raspberry Pi por medio de sencillas interfaces grficas creadas
con Qt creator. El tutorial describe paso a paso y con vdeos demostrativos la instalacin y
configuracin de Qt creator en la Raspberry Pi con el sistema operativo Raspbian previamente
instalado as como el cdigo fuente de los ejemplos.
Instalacin y configuracin de Qt Creator
Qt es un entorno de programacin que apareci hace ya unos cuantos aos y que hoy en da
se sigue abriendo camino con paso firme y ganando popularidad da a da siendo una
alternativa multiplataforma para el desarrollo de aplicaciones con o sin interfaz grfica. Podis
ver su evolucin histrica en la wikipedia
Al ser multiplataforma podemos reutilizar el cdigo fuente y compilarlo en diferentes
plataformas y arquitecturas sin apenas modificaciones. El siguiente vdeo tutorial es una
introduccin de cmo podemos utilizar Qt y sus herramientas de desarrollo en un sistema
embebido como es la Raspberry PI.

http://www.youtube.com/watch?v=tGGR9jogIBo





Raspberry Pi: Programando el puerto GPIO con Qt Creator

Biblioman www.AquiHayApuntes.com Pgina 3

Programando el puerto GPIO de la Raspberry Pi con Qt Creator.
La Raspberry Pi dispone de un puerto de expansin de entradas y salidas de propsito general
conocido como GPIO y que se accede a l a travs de un conector de cabecera rotulado como
P1 en la placa. Todos los pines menos los de alimentacin y masa son reconfigurables y por
tanto podremos adaptarlos a nuestras necesidades, aunque por defecto una serie de pines
estn configurados para la conexin de las interfaces UART, I2C y SPI. La disposicin y
funciones de sus pines para la placa perteneciente a la Rev 2 es la que se muestra en la figura
de abajo, los pines GPIO 4, GPIO 17, GPIO 27, GPIO 22, GPIO18, GPIO23, GPIO 24 y GPIO 25 son
los que viene configurados por defecto para entradas y salidas digitales.

Nota: La Rev.2 de la placa incluye otro conector con ocho pines de expansin que estn a la
izquierda del principal y que no tiene soldado ningn zcalo y que por detrs de la placa viene
rotulado como P5 (ese conector no lo utilizaremos en estos ejemplos), al final del artculo
viene un enlace donde se explica en detalle todos los conectores de la Raspberry Pi.
Hay que tener en cuenta tambin que el puerto GPIO de la Raspberry Pi no est protegido ante
cortocircuitos y sobretensiones. Los pines son compatibles con niveles de 3.3V y como mximo
la corriente que pude circular por cada pin es de 50 mA por tanto si queremos conectar
dispositivos que funcionan a niveles de 5V o que consuman una corriente mayor deberemos
hacerlo a travs de un Buffer o cualquier otro circuito que nos adapte los niveles de tensin y
de corriente, de no hacerlo as podremos provocar daos en el hardware de nuestra raspberry
Pi.



Raspberry Pi: Programando el puerto GPIO con Qt Creator

Biblioman www.AquiHayApuntes.com Pgina 4

Un ejemplo de ON/OFF de una bombilla de 220 V AC.
http://www.youtube.com/watch?v=WdA-mIvBBTw
Raspberry Pi: Programando el puerto GPIO con Qt Creator

Biblioman www.AquiHayApuntes.com Pgina 5

Esquema de conexin

Comentario
El circuito es muy sencillo, como comento en el vdeo se utilizan dos adaptadores de niveles:
por un lado el Buffer 74LS126 cuyo datasheet lo podis descargar desde aqu.
Y que permite adaptar los 3.3 V de la Raspberry Pi a los 5v necesarios para el rel de potencia y
el otro adaptador es el propio rel que a travs de sus contactos nos permite encender o
apagar una bombilla de 220 V AC de 60 W de potencia.

Raspberry Pi: Programando el puerto GPIO con Qt Creator

Biblioman www.AquiHayApuntes.com Pgina 6

El esquema de la placa del circuito impreso donde va soldado el rel de potencia es el
siguiente:









Aunque el mdulo se puede conseguir fcilmente por Internet y a muy buen precio.
Cdigo fuente
GPIO.pro
#-------------------------------------------------
#
# Project created by QtCreator 2013-06-29T18:24:51
#
#-------------------------------------------------
QT += core gui
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
TARGET = GPIO__1
TEMPLATE = app
SOURCES += main.cpp\
mainwindow.cpp
HEADERS += mainwindow.h
FORMS += mainwindow.ui
RESOURCES += \
iconos.qrc
mainwindows.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT

public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();

Raspberry Pi: Programando el puerto GPIO con Qt Creator

Biblioman www.AquiHayApuntes.com Pgina 7

private slots:

void on_Encender_clicked();
void on_Apagar_clicked();
void on_actionConfigurar_triggered();
void on_actionSalir_triggered();
private:
Ui::MainWindow *ui;
};
#endif // MAINWINDOW_H


main.cpp
#include <QApplication>
#include "mainwindow.h"
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w;
w.show();

return a.exec();
}

mainwindows.cpp

#include "mainwindow.h"
#include "ui_mainwindow.h"
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::on_Encender_clicked()
{
system("echo 0 >/sys/class/gpio/gpio23/value");
}
void MainWindow::on_Apagar_clicked()
{
system("echo 1 >/sys/class/gpio/gpio23/value");
}
void MainWindow::on_actionConfigurar_triggered()
{
system("echo 23 >/sys/class/gpio/export");
system("chmod 777 -R /sys/class/gpio/gpio23 ");
system("echo out >/sys/class/gpio/gpio23/direction");
}
void MainWindow::on_actionSalir_triggered()
{
system("echo 23 >/sys/class/gpio/unexport");
exit(0);
Raspberry Pi: Programando el puerto GPIO con Qt Creator

Biblioman www.AquiHayApuntes.com Pgina 8

}
Comentario
El cdigo es muy sencillo y no necesita ninguna librera adicional, se utilizan comandos del
sistema operativo que seguro que muchos de vosotros los habris utilizado ya, pero quizs
escribindolos desde la consola de comandos de Linux.
Nota: al final del artculo hay un enlace donde se explican los comandos utilizados.
Qt permite la llamada a comandos del sistema a travs de la funcin system().Por tanto solo
hay que incluir esa funcin con los comandos del sistema que queramos dentro de las
funciones de la seales clic de los botones que incluyamos en la interfaz grfica que diseemos
y que en este ejemplo es la siguiente:

Fcil no? ..
Configurando el puerto serie de la Raspberry Pi.
A diferencia de la Beagleboard en la Raspberry Pi la UART viene por defecto configurada para
ser utilizada como entrada y salida de datos de la consola de comandos del sistema operativo
(esto es til como debugger para saber que est ocurriendo en nuestra Raspberry Pi cuando
por ejemplo no tengamos salida de vdeo). Esto significa que para poder utilizar el puerto serie
como usuario en nuestras aplicaciones, previamente deberemos de configurarlo para ello. En
el siguiente video tutorial se describe dicho proceso paso a paso:
Raspberry Pi: Programando el puerto GPIO con Qt Creator

Biblioman www.AquiHayApuntes.com Pgina 9


http://www.youtube.com/watch?v=udMGUW5W4nI

Programando el puerto serie de la Raspberry Pi con Qt.
Para poder programar el puerto serie con Qt necesitamos utilizar libreras adicionales. Qt
creator no dispone de un componente en la tabla de herramientas como tienen otros IDES de
programacin como por ejemplo Microsoft Visual Studio, para arrastrarlo a la interfaz grafica
de nuestra aplicacin y simplemente configurarlo con los parmetros necesarios para
empezar a trabajar con l. Esto que en un principio puede parecer un inconveniente en
realidad no lo es, ya que te da ms flexibilidad a la hora de elegir la librera que quieres utilizar
en t proyecto. Cuando yo empec a programar el puerto serie con Qt en la BeagleBoard una
de las libreras ms extendida para la gestin del puerto serie con Qt era qextserialport. Ms
adelante cuando Nokia abandono Qt y Digia se quedo por completo con todo su desarrollo
tanto para las libreras libres como para las comerciales sus desarrolladores decidieron dar
soporte a QtSerialPort que a su vez est basada en la librera QSerialDevice.
Hoy en da ambas libreras estn actualizadas y funcionan bien tanto en Qt4 como en Qt5 y
disponen de ejemplos tanto de consola como con interfaz grfica para empezar a usarlas y
entender su funcionamiento. En el siguiente vdeo se muestra como crearnos una interfaz
grfica en la Raspberry Pi para comunicarnos con un terminal de puerto serie en un PC de
escritorio.
Raspberry Pi: Programando el puerto GPIO con Qt Creator

Biblioman www.AquiHayApuntes.com Pgina 10


http://www.youtube.com/watch?v=uxSIS9K4PdI
Fuentes de informacin
Gobernar un Microcontrolador desde la BeagleBoard
http://qt-project.org/wiki/QtSerialPort
http://elinux.org/RPi_Low-level_peripherals
http://elinux.org/GPIO
http://code.google.com/p/qextserialport/
http://www.raspberrypi.org/
BCM2835 Datasheet
Mi conclusin
Los desarrolladores de Raspberry Pi decidieron poner como lenguaje oficial de la Raspberry Pi
Phyton un lenguaje muy poderoso sin duda pero basado en script, aunque hay programas para
hacer interfaces grficas con Phyton los sistemas operativos disponibles y optimizados para la
Raspberry Pi no incluyen ninguno. Bajo mi punto de vista s que es verdad que un sistema
embebido con limitados recursos hardware no es ideal para correr complejas aplicaciones
grficas ya que se comeran todos los recursos del sistema solo para presentar y refrescar la
interfaz grfica del usuario, pero tambin es verdad que a veces podemos necesitar crear
pequeas aplicaciones con un entorno grfico como las mostradas en este artculo y en ese
caso Qt va muy bien bajo mi punto de vista.

Me gustara que los desarrolladores de la Raspberry dieran mas soporte a Qt tanto en la
actualizacin de las libreras de Qt en sus repositorios como un mayor apoyo a la hora de
utilizar compiladores cruzados. He creado esta versin en .pdf del artculo para que los que
opinen igual que yo lo podis distribuir libremente y as el uso de Qt en la Raspberry pueda
llegar a ms gente que an no lo conozca. No s, quizs si furamos muchos los que
pensramos as algn da veamos alguna distribucin para la Raspberry Pi con Qt instalado.
Raspberry Pi: Programando el puerto GPIO con Qt Creator

Biblioman www.AquiHayApuntes.com Pgina 11


Si conocis otra alternativa mejor para crear aplicaciones con interfaz grfica para la raspberry
podis comentarlo en el siguiente subforo de mi pgina web o en alguno de los enlaces que
aparecen abajo. T opinin s que importa.

Un saludo y hasta la prxima.

Autora
Autor de este artculo: Biblioman
Versin: 1.01
Pgina Web: http:\\www.aquihayapuntes.com
Email: email.Biblioman@gmail.com
Canal YouTube: http://www.youtube.com/user/biblioman09

You might also like