Sei sulla pagina 1di 30

E d ic ió n 7 - N O V 2 0 1 2

¡Apóyanos aún más


comprando una
versión impresa de
esta Revista!
U n a R e v i s t a p a r a R a s p b e r r y Pi

¡ A r d u in o y
R asP i se
co n ect an !
EEnneessttaaeeddiicciióónn....
•• IInntteerrrruuppcciioonneess
•• PPii SSoollaarr
•• MMooddoo TTuurrbboo ¡¡CCóómmoo
•• EEvvoolluucciióónn ddeell PPii ggaannaarrssee uunnaa
•• CC++++ ccaarrccaassaa
PPIINNKK ppaarraa
M
Mááss.... RRaassPPii!!
•• EEnnttrreevviissttaa ccoonn llooss
ddeessaarrrroolllaaddoorreess ddee RRaassppbbiiaann
•• HHaaggaa ssuu pprrooppiioo jjuueeggoo ddee llaa
eessccaalleerraa uussaannddoo PPCCBBss
•• LLoo bbáássiiccoo ddeell GGNNUU m maakkee

hhttttpp::///wwwwww..tthheem
maaggppii..ccoom
m

Raspberry Pi es una marca de Raspberry Pi Foundation.


Esta revista fue creada usando un computador Raspberry Pi.
Bienvenidos a la edición 7,

La Raspberry Pi y Arduino son la pareja perfecta para correr aplicaciones en


tiempo real donde se necesita un poquito más de potencia de CPU para control.
Acoplando dos dispositivos abre la posibilidad al uso de toda la gama de shields
del mundo arduino. Mirando al horizonte vemos algunos proyectos bien
interesantes en el futuro.

Traemos una entrevista con el desarrollador líder de Raspbian (el build de Debian
para Raspberry Pi), competiciones y una selección variada de artículos en
programación.

Si Ud. prefiere recibir una copia impresa de MagPi, visite


http://www.modmypi.com y ¡haga su pedido ahora mismo!

Ash Stone, Editor en jefe de MagPi

Ash Stone Matt '0the0judge0'


Editor en jefe / Administrador / Encabezados Administrador / Website
Jason 'Jaseman' Davies Matthew Timmons-Brown
Escritor / Website / Diseño de página Escritor
Meltwater Gordon Henderson
Escritor / Fotógrafo / Diseño de página Escritor
Chris 'tzj' Stagg Colin Deady
Escritor / Fotógrafo / Diseño de página Escritor / Diseño de página
Ian McAlpine Stewart C. Russell
Diseño de página / Gráficos / Escritor Escritor
Joshua Marinacci W.H.Bell
Diseño de página / Gráficos Escritor
Lix Colin Norris
Diseño de página / Gráficos Editor / Gráficos (Encabezado C Cave)
PaisleyBoy Antiloquax
Diseño de página / Gráficos Escritor
Sam Marshall Richard Ryniker
Diseño de página / Gráficos Escritor
Aaron Shaw Alex Kerr
Diseño de página / Gráficos Escritor
Nick
Diseño de página / Gráficos

2
Contenido
04 PI Y ARDUINO EN ACCION
Programar el arduino usando una Raspberry Pi, por Stewart C. Russell
07 COMPETENCIA DEL MES
Gánese excelentes adiciones a su montaje cortesía de PC Supplies UK
08 PI SOLAR
Al viajar, el sol puede mantener la Pi funcionando, por Meltwater
1 0 LA PLACA “LADDER” DE GORDON
Vaya preparando el soldador, por Gordon Henderson
1 2 GPIO E INTERRUPCIONES
Un repaso por el manejo del GPIO desde la línea de comandos, por Richard Ryniker
1 6 RASPBIAN, LA HISTORIA HASTA AHORA
Una entrevista con Mike Thompson, desarrollador líder de Raspbian, por Colin
1 8 TURBO AJUSTES PARA MAXIMO DESEMPEÑO
Un repaso de cómo afinar la Pi, por Matthew Timmons-Brown
21 EVENTOS DEL MES
Talleres y otros eventos de la comunidad Raspberry
22 PI-EVOLUCION
Una mirada al desarrollo en Raspberry Pi, por Jaseman
24 LAS BASES DE GNU MAKE
Acelerando el desarrollo de código con GNU Make, por W. H. Bell
26 BIENVENIDOS AL CACHE C++
Enfréntese a C++. por Alex Kerr
28 EL SCRATCH PATCH
Aprenda sobre programación defensiva, por Antiloquax.
30 EL TALLER DE PYTHON
Usando argumentos de línea de comandos, por Colin Deady
32 PREGUNTAS Y COMENTARIOS

3
Raspberry Pi y Arduino
Aunque hay varias placas E/S en desarrollo para la
Raspberry Pi, Arduino está bien establecido. Este artículo
muestra cómo comunicarse con un arduino a través de
Python y el protocolo Firmata.
DIFICULTAD: INTERMEDIA
Este ejemplo combina una salida (Cambiar el Además tendrás que elegir qué puerto serie
brillo de un LED por medio de un control usar en el menú Herramientas/Puerto serial.
deslizante) y una entrada (leer la temperatura Arduino Uno debe estar en /dev/ttyACM0,
de un sensor, LM35 en nuestro caso). placas más viejas suelen usar /dev/ttyUSB0.
Materiales requeridos:
Raspberry Pi
Arduino Para instalar el sketch del Firmata en tu
Conexión a internet Arduino, selecciona File / Examples / Firmata /
Protoboard (O Placa de pruebas) StandardFirmata and click en el botón Upload.
Sensor de temperatura LM35
(http://www.ti.com/product/lm35)
1 LED rojo de 5mm El IDE se bloquea momentáneamente
1 resistencia de 1 20 ohm Ω mientras compila y carga el sketch. Si las
luces del Arduino titilan y un mensaje de
4 cables con terminal macho (here coloured “Carga terminada” aparece en el IDE, éxito!
red, yellow, blue and black) Si aparece cualquier tipo de mensaje de error
1 cable puente para protoboard (1 7.8 mm en rojo, es probable que sea algo con la
or 0.7", here coloured black) conexión del Arduino.
Recomiendo mucho que conectes tu Arduino
Firmata (http://firmata.org) es un protocolo a través de un hub USB con alimentación
serial simple que permite leer y escribir los externa o entregandole energía directamente
puertos de entrada y salida de Arduino desde por medio de un transformador ya que la
una computadora. Es usualmente usado con Raspberry Pi es un poco limitada en lo que
el lenguaje de programación gráfica concierne a dar energía por USB.
“Processing” (http://processing.org) pero
tambien hay soporte para otros lenguajes. Si te trabas con algo probá el sitio
http://www.ladyada.net/learn/arduino/
Instalando el IDE de Arduino y Firmata Instalando pyFirmata
El IDE de Arduino ya está incluido en los pyFirmata es la magia que permite que tu
repositorios de Raspbian, de manera que Arduino con Firmata cargado pueda
podrás instalar todo con: comunicarse con Python. Toma algunos
comandos para instalarlo:
$ sudo apt-get install arduino
$ sudo apt-get install python-serial me
Si es la primera vez que lo ejecutas es posible rcurial
que el IDE te haga crear una carpeta para $ hg clone https://bitbucket.org/tino/p
guardar los programas que hagas (llamados yfirmata
“sketches”). $ cd pyfirmata
$ sudo python setup.py install
Como siguiente paso tendrás que elegir el tipo
de placa Arduino que estés usando desde el Si esto funciona podrás eliminar la carpeta
menú Herramientas/Tarjeta (En este caso usé pyFirmata.
Uno, pero también probé en una vieja placa
Duemilanove). $ cd .. ; sudo rm -r pyfirmata

4
Armando el circuito controlar el brillo del LED con el control
deslizante de la pantalla.
Pon las partes como muestra el diagrama Te darás cuenta que el LED no parece
usando la siguiente tabla como guía: aumentar mucho de brillo más allá del 33%;
no hay una línea directa entre el brillo y el
ARDUINO LM35 voltaje de la entrada PWM.
Si tocas el LM35 vas a ver la lectura de la
+5V +Vs temperatura cambiar. Los sensores LM35 son
un poquito ruidosos, así que vas a notar que
A0 Vout los valores saltar.
Una vez que estés listo, clickea en el botón
GND GND cerrar de la ventana y todo debería salir
limpiamente.
NOTA: Si accidentalmente conectas el LM al El código Python hace tres tareas principales:
revés, pasará de ser un sensor de
temperatura a un remarcable generador de 1 . Prepara la comunicación serial y configura
temperatura -- La quemadura en forma de D los pines de E/S del Arduino.
en mi dedo índice izquierdo me recuerda esto
todos los días… Dos detalles importantes que tenemos que
hacer aquí es preparar un hilo iterador para
detener el desborde del buffer serial de la
ARDUINO LED Raspberry Pi mientras recibe datos del
Arduino, y además esperar a que el Arduino
empiece a enviar datos reales antes de ir al
D3 Ánodo (Pin largo) programa principal.
Cátodo (Pin corto) 2. Definir tres funciones que serán llamadas
por la GUI:
A0 (Conectadoatravésde get_temp() — Esto lee el valor del pin A0 del
laresistenciade120 ohm) Arduino, lo convierte a ° C, y actualiza la
etiqueta de la parte baja de la pantalla.
Ejecutando el código Si estás familiarizado con Arduino, pyFirmata
Copia el programa de la siguiente página y devuelve valores analógicos entre 0,0 y 1 ,0 en
guardalo como arduino_firmata_ty.py. Con lugar de un número entero entre 0 y 1 023.
tu arduino conectado y el circuito cableado, Esta rutina termina pidiéndole al proceso Tk
ejecuta el programa de la siguiente manera: principal que se re programe a si mismo
medio segundo, y de esa forma seguimos
$ python arduino_firmata_tk.py actualizando la temperatura separadamente
del bucle principal.
Le tomará unos pocos segundos a la ventana
en aparecer, y una vez que lo haga, podrás Continúa en la siguiente página...
5
set_brightness() — convierte los valores 0- Este (el método pack), primero dibuja los
1 00 que devuelve el deslizador a un valor elementos, entonces los acomoda juntos,
entre 0.0 y 1 .0 de coma flotante y lo envía (lo como un Tetris, en el marco de la ventana.
escribe) en el pin digital 3 de Arduino.
Una vez hecho esto, programa la primer
cleanup() — todo lo que esta rutina hace es lectura de temperatura (que a su vez
apagar el LED y tratar de cerrar el programa programa la siguiente y así...), finalmente llega
perfectamente. Por cierto, no siempre al mainloop() de Tk, ejecutando el resto del
consigue hacerlo; a veces también tendrás programa, respondiendo a tu control.
que presionar Ctrl-C en la ventana de la
terminal. Indicaciones adicionales
3. Preparar la GUI de Tkinter. Tk (y su versión Este es un ejemplo muy simple de cómo
para Python, Tkinter) es un sistema GUI controlar Arduino desde Python.
bastante viejo, pero es también bastante
simple de usar. Mientras que Firmata puede controlar salidas
más complejas tales como un servo, ya que
Depende de cada control gráfico (widget) se hace cargo de toda la lógica de
para ejecutar una callback (Llamada de procesamiento de Arduino.
retorno) o asignar el valor de una variable
cuando es clickeado o modificado. Cualquier sensor que requiera una
configuración compleja o control en tiempo
Aquí estoy creando un deslizador de 400px de real no va funcionar tan bien.
ancho que llama a la rutina set_brightness()
con el valor actual del control deslizable cada Igualmente, ahora tendrás todo el poder de la
vez que éste cambia. Raspberry Pi conectada a la simple robustez
de Arduino ¡Ni siquiera el cielo es el límite!
Movido Completamente a la derecha, el
deslizador llamaría a set_brightness(1 00), Artículo de Stewart C. Russell
encendiendo el LED con el máximo brillo. Stewart C. Russel vive en Toronto, donde diseña y crea
granjas eólicas y fuentes de energía solar. Cuando no está
Como la ventana es muy simple (Solo un hurgando en el mundo los lugares soleados y con viento, está
control deslizante y una etiqueta) uso el en su casa con radio amateur (Matrícula VA3PID), tocando el
simple método pack() de Tk para ordenar los banjo, jugando con computadoras, o evadiendo la jardinería.
elementos en la ventana. Su sitio web es http://scruss.com/blog

import pyfirmata def set_brightness(x):


from Tkinter import * # set LED
# Scale widget returns 0 .. 100
# Create a new board object, # pyfirmata expects 0 .. 1.0
# specifying serial port; pin3.write(float(x) / 100.0)
# could be /dev/ttyUSB0 for older
# Arduinos def cleanup():
board = pyfirmata.Arduino('/dev/ttyACM0') # clean up on exit
# and turn LED back off
# start an iterator thread so pin3.write(0)
# serial buffer doesn't overflow board.exit()
iter8 = pyfirmata.util.Iterator(board)
iter8.start() # set up GUI
root = Tk()
# set up pins # ensure cleanup() is called on exit
# A0 Input (LM35) root.wm_protocol("WM_DELETE_WINDOW",cleanup)
pin0 = board.get_pin('a:0:i')
# D3 PWM Output (LED) # draw a big slider for LED brightness
pin3 = board.get_pin('d:3:p') scale = Scale(root,
command = set_brightness,
# IMPORTANT! discard first reads orient = HORIZONTAL,
# until A0 gets something valid length = 400,
while pin0.read() is None: label = 'Brightness')
pass scale.pack(anchor = CENTER)

def get_temp(): # place label up against scale widget


# LM35 reading in deg C to label label = Label(root)
label_text = "Temp: %6.1f C" % ( label.pack(anchor = 'nw')
pin0.read() * 5 * 100)
label.config(text = label_text) # start temperature read loop
# reschedule after half second root.after(500, get_temp)
root.after(500, get_temp) # run Tk event loop
root.mainloop()

6
Un Pequeño
Rayo de Sol…
Mientras navegaba buscando dispositivos interesantes para
Raspberry Pi, Me encontré con el siguiente item de
CottonPickersPlace.

Unidad de operación: A. El conector de alimentación micro USB se


conecta directamente dentro del
Este dispositivo solar funciona esencialmente Raspberry Pi (perfectamente acomodado
como un cargador solar para 4 pilas AA cabeza abajo dentro de la base de la
colocadas internamente, las que a su vez son unidad).
capaces de alimentar al propio Raspberry Pi. B. El conector USB de tamaño estándar
El artefacto también sirve como ingenioso puede utilizarse para alimentar en forma
directa a la Raspberry Pi, y si las pilas
soporte para el Raspberry Pi y, están descargadas agrega una fuente
adicionalmente, también puede ser utilizado externa (la carga a través del sol es
para recargar la mayoría de dispositivos necesaria para cargar completamentes las
alimentados por USB. celdas). Este plug también puede ser
utilizado en serie con otra unidad solar
para proveer energía solar adicional y
1 . Los rayos de sol sobre el panel solar. alargar la vida de las pilas (enchufando
2. La corriente generada se utiliza para cargar dentro del lado del conector USB ( C )).
el pack de pilas (solamente inserte 4 pilas C. Un conector USB adicional en el costado
estándar NiCad/NiMh de tamaño AA de la de la unidad provee un punto de carga
auxiliar para teléfonos móviles y otros
capacidad que prefiera). dispositivos USB. Si es necesario, los
3. El pack de pilas almacena la energía y la iDevices de Apple como iPods / iPhones /
provee sin problemas incluso cuando esté iPads están soportados con una versión
poco o nada soleado. mejorada.
4. ¡La Raspberry Pi es alimentada! Salidas típicas
Especificaciones A pleno sol 300 mA+ aprox.
Panel Solar 1 2 celdas de 330 mA por 2 Watts Puesta de sol 200-250mA
policristalino de 1 1 0x1 35mm Nublado 30mA
Caja Impreso mediante impresora 3D BRB- Tiempo estimado de carga
3000 utilizando de material PLA (Polylactic
Acid) biodegradable. Típicamente toma 2 A Pleno Ocaso Nublado
hs 1 5 min para imprimir. La Raspberry Pi
cabe cómodamente en su interior. Celdasde3000 mAh 1 0h 1 3h20m 1 00h
60x90x45mm Celdasde2100 mAh 7h 9h20m 70h
La unidad puede no sobrecargar la celda, y no hay
fugas de carga cuando no se está cargando.

8
TiempodefuncionamientoestimadodelRaspberryPi Conclusiones:
A Pleno Ocaso Nublado Noche La unidad compacta presenta una serie de
Model B características flexibles y presenta una buena
solución para ejecutar el Raspberry Pi con
Celdasde3000 mAh 23h 1 4h30m 7h30m 7h baterías.
Celdasde2100 mAh 1 6h 1 0h1 5m 5h1 5m 4h50m
Model A
El agregado del panel solar extiende bastante
el tiempo de funcionamiento del sistema
Celdasde3000 mAh Charge 40h 11h 1 0h (particularmente si usted vive en un clima muy
Celdasde2100 mAh Charge 28h 7h45m 7h soleado) o permite cargar durante el día y a su
vez el uso nocturno durante horas. Cuando
Modelo B - Consumo de potencia característico estimativo: está enchufado a la red eléctrica ofrece
430 mA dependiendo de lo que está conectado (rango excelente protección contra los cortes de luz,
desde 322 mA en reposo a picos de 480 mA + ) en efecto funciona como una UPS (sistema de
Modelo A - Eben declaró que está alrededor de los 200 mA, alimentación ininterrumpida). La unidad
por lo tanto aceptemos 300 mA como una estimación también provee un medio para trasladar
conservadora. rápidamente el aparato a varios lugares sin
tener que apagar la alimentación (ideal para
Consideraciones de uso: moverse rápidamente a una pantalla grande
Mis propios testeos con algunas viejas celdas para reproducir algunas películas, sin la
de 2500 mAh proporcionaron alrededor de 4 molestia habitual de encontrar un enchufe
horas de uso nocturno, es razonable disponible, arrancar el sistema, etc.).
considerando que las pilas tienen varios años CottonPickersPlace está trabajando en varios
de antigüedad. modelos de paneles grandes que soportan
Usando la cantidad mínima de periféricos y baterías también más grandes, que deben ser
capaz de gestionar las operaciones en 24/7
utilizando el más eficiente Raspberry Pi y/o al mismo tiempo alimentar pantallas de
modelo A (cuando se libere) debería terceros, etc.
extenderse en gran medida el tiempo de uso.
La eficiencia del Raspberry Pi también puede En general, la unidad ofrece gran flexibilidad a
ser mejorada reemplazando el regulador lineal un excelente costo (alrededor de 25 libras
de 3,3 V incorporado con un modelo más incluyendo envío en UK, 49 u$s incluyendo
eficiente en modo de conmutación, una envío para el resto del mundo ). Es muy claro
medida extrema, pero se reportó que puede que se ha puesto mucho tiempo y esfuerzo en
ahorrar alrededor de un 25% de energía (vea cada unidad hecha a mano. CottonPicker ha
http://goo.gl/dqUZL para detalles). puesto claramente la atención en el diseño
para que el costo general permanezca tan
bajo como sea posible sin comprometer en
Aunque el Raspberry Pi puede utilizarse en calidad o características, en mi opinión
muchas situaciones de forma remota, a alcanzando un gran equilibrio.
menudo va a querer utilizarlo con una
pantalla. Actualmente, la mayoría de las ¡Esta puede ser la pieza faltante que usted ha
pantallas requerirán algo o bastante más de estado buscando para completar su proyecto
energía que el propio Raspberry Pi. Esto o también una práctica caja que le permita
puede llegar a mejorarse cuando la fundación cortar el cable de alimentación cuando usted
pueda suministrar pantallas LCD operadas quiera!
directamente por el Raspberry Pi, en última
instancia, requiriendo menos energía que un Artículo original de Meltwater
monitor LCD típico o una TV. Para este fin una
pantalla super eficiente basado en tinta
electrónica podría ser una excelente opción,
crucemos los dedos para que se haga
realidad.
Para una operación remota durante las 24
horas (algo que muchos usuarios de
Raspberry Pi desean), es probable que sean
necesarias 2 o más unidades solares y un sol
a pleno. Adicionalmente, mediante el diseño
de algunos métodos para apagar
remotamente la fuente de alimentación de la
Raspberry Pi y volverla a encender cuando
sea necesario, significaría la viabillidad una
configuración remota desatendida. Tal
sistema podría incluso controlar los niveles de Disponible en:
batería disponibles y en consecuencia
encender la Raspberry Pi o establecer un www.cottonpickersplace.com
periodo de tiempo determinado para las Enlace directo: goo.gl/w9Rs3
operaciones. ¡Nos encantaría oír sobre algún
diseño adecuado!
9
La placa Raspberry Ladder
La placa Raspberry
Ladder es un kit de
piezas destinadas a ser
utilizadas como una
introducción a la
soldadura y a la
programación de GPIO
del Raspberry Pi.
La placa Ladder se basa en mi
juego Ladder original que hice a
principios de este año en un
circuito experimental, cuyos
detalles se pueden encontrar aquí:
https://projects.drogon.net/raspber
ry-pi/gpio-examples/ladder-game/
Esta versión ha sido modificada Prototipo Placa Raspberry Ladder y PCB
para hacerla más útil para otros
proyectos y ojalá te anime a Tandy por £ 7.00 incluyendo los agujeros que se utilizan para el
escribir tus propios juegos gastos de envío. conector de cable-cinta.
pequeños y simulaciones. El http://www.tandyonline.co.uk/elect
software que voy a ofrecer será ronics/kits/raspberry-ladder- En primer lugar tenemos que
una versión de mi juego Ladder kit.html identificar qué resistencias son
original, mi simulador de cruce cuáles. En el juego hay 2 tipos,
Tuxx y una nueva versión de 220Ω y 1 000Ω. Los 220Ω se
"Simon Dice". La soldadura de la versión PCB:
Soldar no es difícil, pero requiere identifican por el color de sus
El kit incluye un PCB hecho práctica. Antes de comenzar, por bandas - Rojo, Rojo, Marrón, y los
profesionalmente, 8 LEDs favor lea este cómic: que son 1 000Ω Marrón, Negro,
estándar (2 de cada uno en azul, http://mightyohm.com/soldercomic Rojo. Sin embargo, si estás
verde, amarillo y rojo), 2 LEDs confundido, entonces fijate que
más pequeños (verde y rojo), 4 hay 1 0 de 220Ω y 4 de 1 000Ω -
interruptores de pulsador, 1 4 Una vez concluida la lectura, echa sólo cuéntalas para ver cuál es
resistencias para los LEDs y un vistazo a la placa y los cuál.
conmutadores, y un breve (a componentes - no quite los
medida) cable plano y conectores componentes de sus paquetes en Comienza con las resistencias de
IDC para conectar la placa a la esta etapa - el kit de Tandy será 4 x 1 000Ω. Dobla las patas al final
Raspberry Pi Ladder. embalado en las bolsas en el de la resistencia e insértalas en el
orden en que usted los necesita, PCB en las 4 ubicaciones. Las
Necesitará un equipo básico de pero vea si puede identificar todo
soldadura, (soldador, estaño, un resistencias pueden ubicarse de
par de cortadores de alambre) y lo primero. Estudia la foto de la cualquier forma, pero se ven mejor
un tiempo de montar la placa. placa totalmente montada para ver si todas se alinean de la misma
Además un poco de spray lo que puedes esperar. manera. Empuja las patas de las
limpiador de PCB puede ser útil resistencias a través de sus
una vez que todo está terminado, Compruebe la PCB - Busca signos agujeros y dóblalas hacia el
pero no es esencial. Si se siente evidentes de daño y determina si exterior, como se muestra en la
cómodo con la soldadura los componentes están montados. página 4 de la historieta anterior.
entonces no debería tomar más de Los símbolos blancos impresos
1 0-1 5 minutos para montar serán de ayuda. Las resistencias Me gusta poner todas las cuatro a
completamente el tablero, pero si tienen pequeños rectángulos, los la vez y luego usar algo como blu-
no es así, se puede hacer por interruptores rectángulos más tak para mantenerlos en su lugar
etapas, e incluso se puede probar grandes (casi cuadrados), y los cuando me pongo a soldar la
cada etapa a medida que avanza.
LEDs tienen círculos con un lado placa, pero puede que desees
Usted puede comprar el kit plano. Hay una corta hilera de 5 hacerlo una a la vez, para
completo incluyendo PCB de agujeros que no se utilizan en este empezar.
proyecto y 2 filas más largas de
10
Montaje: Estos deben mantenerse en la placa Pruebas:
Se necesitan 2 manos, así que durante la soldadura, pero asegúrate El software de prueba utiliza el
asegúrate de que la placa esté de ponerlos en la posición correcta - comando wiringPi GPIO, por lo
asegurada. También es una buena son ligeramente rectangulares, así que necesita wiringPi instalado
idea estar en un lugar bien iluminado que si no parecen encajar, gira un primero.
¡para que puedas ver lo que estás cuarto de vuelta y vuelve a intentarlo.
haciendo! Mira el vídeo para más
ideas, sin embargo, en general, toca Ahora los LEDs. Esperemos que Para wiringPi (si no lo tiene):
con el soldador al mismo tiempo la ahora hayas conseguido $ cd
pata del componente y la pista, acostumbrarte a la soldadura. Dejé $ git clone
espera 1 o 2 segundos, toca la los LEDs hasta ahora por 2 razones - git://git.drogon.net/wiringPi
soldadura con la pista o con el final en primer lugar por lo general es $ cd WiringPi
del estaño - que debería fluir mejor para soldar los componentes $ ./bulid
inmediatamente y llenar todos los bajos primero y luego los más altos, y
huecos. Retire el material de también para darle un montón de
soldadura, y luego (¡esta parte es prácticas de soldadura con las Para el software Raspberry Ladder:
muy importante!) Mantenga el estaño resistencias y los interruptores que $ cd
allí por un segundo o dos. son más resistentes al $ git clone
sobrecalentamiento que los LEDs. git://git.drogon.net/ladder
La mayoría de los componentes se Aún debe estar bien por un máximo $ cd ladder
dañan por exceso de calor, pero no de 1 0 segundos con los LEDs, pero
tenga miedo para mantener el calor espero que ahora puedas ser un poco
allí durante un máximo de 1 0 más rápido y seguro. Y para ejecutar el programa de prueba:
segundos si es necesario. Con la $ ./ladderTest.sh
práctica, usted debería ser capaz de Los LED son sensibles a la forma en Esto debería llevarte a través de
hacer una unión de soldadura en la que entran, así que mira con unos sencillos pasos para
unos 5 segundos. Estaño a la placa y cuidado. Tienen un lado aplanado y comprobar que la tarjeta funciona
al cable del componente, pausa, esto corresponde al lado aplanado en correctamente.
suelda hasta que fluya, pausa, quitar la imagen de la PCB. El lado plano
estaño. Si sientes que no quedó una siempre va hacia la pista negativa del
buena unión, espera un momento circuito, y el otro lado (que tiene una Una versión ligeramente modificada
para que se enfríe y vuelve a pata más larga), siempre va hacia la del programa Tux Crossing también
intentarlo. pista positiva del circuito. está ahí - ejecutarlo con:
$ ./tuxx.sh
Asegúrate de que el estaño esté Tómate tu tiempo al soldarlos - trata
limpio cada vez que lo recoja - utiliza de asegúrate de que todos encajen Y cuando se inicializa, presiona el
una esponja húmeda o el nuevo completamente en el PCB, y que botón de abajo para iniciar la
sistema "limpiado en seco" que se estén alineados en una línea secuencia. ¡Más detalles del
parece a una esponja metálica. ordenada. software y los datos el mes que
viene!
Una vez que hayas soldado los Por último, el conector GPIO. Ajústalo
primeros componentes (¡o 4 en el tablero, asegúralo, suelda un pin
primeros!) entonces es el momento y luego comprueba antes de soldar el La documentación completa se
de acortar los cables. Una vez más, resto. Es posible que desees bajar suministra en el archivo README
este es un trabajo de 2 manos y una línea, a continuación, gira la sobre cómo se conectan los
tienes que sujetar el extremo de la placa y baja por la otra línea. LEDs, y el programa ladderTest
punta cuando se corta - si no lo es un script bash que usted puede
haces, entonces se irá volando y Y hemos terminado. Esperemos que copiar y editar según sea
cuando te golpee dolerá. (Además tu tu placa terminada se vea como la de necesario, también puede ver
pareja, madre, etc, ¡no será feliz la página siguiente. algunos de los programas de
limpiando el desastre de pequeños ejemplo GPIO suministrados con
picos pequeños de metal!) Sostén el Ahora es el momento de conectarla a el paquete wiringPi, pero la
extremo y corta justo al lado de la un Raspberry Pi y ejecutar el software
unión de soldadura y ponla en el verdadera diversión comienza el
de prueba. Nota: la primera vez que próximo mes cuando escribiremos
recipiente de deshechos. enciendas el Raspberry Pi, o lo
reinicies con el tablero Ladder algunos programas más para
Una vez que tengas las 4 primeras conectado, los dos LEDs más esto.
resistencias soldadas, puedes pequeños pueden estar débilmente
progresar a las resistencias de 220Ω. resplandecientes. Esto es de
Comienza con las 2 en la parte esperarse, ya que está siendo
superior de la placa, a continuación, alimentado con corriente de las
las otras 8 en el costado. resistencias I2C pull-up integradas
del Pi que forman parte del bus I2C.
Lo siguiente es los interruptores. Artículo por Gordon
11
Interrupciones y otras actividades
con los pines del GPIO
Cómo compartir los recursos del GPIO entre múltiples
aplicaciones, y el uso de las interrupciones para reemplazar
bucles de control de estado poco económicos.
Después de hacer algunos experimentos Los privilegios de root hacen más fácil
iniciales donde la Raspberry Pi opera con interferir con las actividades del sistema. Si
LEDs y lee switchs, cuando se apaga la uno tiene suerte, el resultado es un kernel
euforia del “Funciona!”, usuarios inteligentes panic inmediato y el sistema se paraliza. En
pueden comprender que tendrán problemas las circunstancias menos afortunadas podría
cuando se encarguen de extender esos llegar a ser instalado un software malicioso
simples programas a entornos más en el sistema: este software puede entonces
complejos. comunicarse mediante una conexión a
internet con criminales que buscan
Aquí discutiré dos de esas cuestiones: cómo información personal o podrían explotar su
compartir recursos de GPIO entre múltiples Raspberry Pi para actividades dañinas.
aplicaciones, y el uso de las interrupciones
para reemplazar bucles de control de estado Linux tiene una función general para
poco eficientes. administrar los recursos de GPIO. Esta, crea
una interfaz conveniente para programas del
Se ha producido con horrible frecuencia usuario, protege los recursos de GPIO
instrucciones del tipo "Ejecute este programa utilizados por administradores de dispositivos
como root." publicadas para el usuario de como I2C y SPI y entrega acceso específico
Raspberry Pi. Esto, a un usuario con a pines, por lo que una aplicación no
experiencia le suena más bien como “Aquí necesita preocuparse de lo que otros
niños: estas son hojas de afeitar. Agárrenlas, programas hacen con los demás pines GPIO.
y vean lo que pueden cortar con ellas.” Esta interfaz de pines individuales es
importante porque sin ella, cada aplicación
Los privilegios de root deben ser vistos como GPIO tendría que preocuparse por los
una última alternativa. Su uso adecuado es aspectos de la pugna con otras aplicaciones
para la instalación del sistema y la que comparten un banco de pines GPIO
configuración - el establecimiento de un (bloqueos, gestión de interrupciones, u otras
entorno protegido donde la falla en un complejidades que fueran necesarias).
programa no pueda afectar a otras
aplicaciones, y no cause fallos al sistema La función de Linux utiliza archivos del
operativo. En el peor caso, un programa que directorio /sys/class/gpio/. Al igual que
se equivoca debe comprometer solamente muchos otros archivos de configuración o de
los recursos asociados a ese programa. control, estos archivos tienen al root como
propietario. Voy a pasar esto por alto, por
Linux posee una gran cantidad de ahora, para hacer más fácil la descripción de
administradores de dispositivos (drivers), la interfaz, pero prometo que más tarde
programas que generalmente forman parte volveré y presentaré una herramienta para
del kernel y hacen de interfaz entre los encapsular la operación de privilegios de una
recursos de hardware y las aplicaciones. manera responsable.
Ejemplos de esto son los archivos de
sistema, que ofrecen funciones simples de
utilizar como open, read y write, mientras Configurando los pines
ellos administran el acceso a hardware y
mantienen la estructura de datos necesaria El comando echo es comúnmente utilizado
para asignar y liberar espacio en disco, en los procedimientos shell para enviar
compartir el acceso de manera adecuada mensajes a la salida estándar, o mediante la
entre múltiples programas, manejar la salida redireccionada para escribir en un
recuperación después de eventos como fallas archivo. Un ejemplo simple:
de energía.
echo Hello there.

12
Imprime la salida “Hola.” Con redirección de Para establecerlo como un pin de salida:
la salida:
echo out
echo Hello there. >archivo_01 >/sys/class/gpio/gpio23/direction

Crea el archivo “archivo_01 ” que contiene el Si el valor de salida debiera ser inicializado
mismo mensaje. primero, antes que el driver de salida sea
habilitado, puede utilizarse para establecer la
El comando echo puede ser utilizado para dirección del pin con un valor inicial, uno de
ejemplificar el uso de GPIO. Usaremos el pin los siguientes:
23 porque es conveniente y fácilmente
accesible en el terminal 1 6 del conector de echo low >/sys/class/gpio/gpio23/
26 contactos del Raspberry Pi. Se encuentra direction
etiquetado como GPIO_GEN4 en el echo high
>/sys/class/gpio/gpio23/direction
diagrama esquemático del Raspberry-Pi
(http://www.raspberrypi.org/wp-content/up-
loads/201 2/04/Raspberry-Pi-Schematics-
R1 .0.pdf).

Please note GPIO reference changes for


pins 3,5,7 & 13 on Revision 2.0

Para establecer la salida del pin en on u off:


Para crear una interfaz de usuario para el pin
23, utilice sudo o, como root, ejecute: echo 1 >/sys/class/gpio/gpio23/value
echo 0 >/sys/class/gpio/gpio23/value
echo 23 >/sys/class/gpio/export
Para invertir la lógica del pin:
Esto provoca que el kernel genere un
directorio /sys/class/gpio/gpio23, el cual echo 1 >/sys/class/gpio/gpio23/
contiene cuatro archivos importantes para active_low
esta discusión: active_low, direction, edge y
value. Los valores iniciales en estos archivos Haga esto antes de leer una entrada o
(si no hubiera conexión externa a este pin) establecer un valor de salida. Cuando
son: active_low contiene 1 (o cualquier valor
distinto de 0) y value es establecido en 1 , el
active_low 0 pin es puesto a nivel bajo, etc.
direction in
edge none
value 0

Continúa en la siguiente página


13
¿Con qué rapidez este mecanismo cambia gpio_control.c puede ser fácilmente
los valores del pin de GPIO? Un simple configurado antes de ser compilado, para
programa en Python permitir el acceso a GPIO a todos los
http://ryniker.ods.org/raspberrypi/MagPi/gpio2 usuarios o solamente los usuarios de un
3-max.py puede generar pulsos a 1 9 kHz. Si grupo. Cada uno de los 54 pines de GPIO
fuera escrito en C (ver pueden ser configurados individualmente
http://ryniker.ods.org/raspberrypi/MagPi/23- para permitir o rechazar las salida.
maxa.c) la frecuencia se incrementa
aproximadamente a 1 20 kHz. La frecuencia El Raspberry Pi utiliza el pin 1 6 de GPIO
real varía a causa de que el Raspberry Pi para controlar el led verde de “status ok”. Si
hace otras cosas que suspenden alguien trata de salir por el pin 1 6 del GPIO la
temporariamente el bucle: la actualización del operación falla porque el kernel está
reloj, la actividad de red, otros procesos de utilizando ese recurso:
usuario o de sistema.
ryniker@raspberrypi:~$ gpio_control
16 export
export failed: Device or resource busy

Otros programas del kernel pueden


adueñarse de pines del GPIO haciéndolos
inaccesibles a los usuarios. Esto es bueno.
Poco daño puede provenir de un usuario
cambiando el LED de estado a encendido o
apagado, pero ¿qué pasa con el controlador
del I2C del kernel? Fácilmente podría sufrir
fallos erráticos si los pines que utiliza son
cambiados de un modo que no puede
El programa entender.
Como prometí anteriormente, aquí está el El kernel recuerda el estado de los pines de
programa GPIO. Por ejemplo, suponga que un pin es
http://ryniker.ods.org/raspberrypi/MagPi/gpi- exportado, establecido como un pin de salida
o_control.c que ejecuta operaciones que por el usuario, luego dejado de exportar. Los
requieren privilegios de root para poder archivos del usuario desaparecen pero el pin
exportar un pin GPIO para el uso por permanece como un pin de salida con el
usuarios comunes. Los comentarios al último valor establecido. Si este pin vuelve a
principio del programa describen como debe ser exportado, los archivos del usuario son
compilarlo e instalarlo. Cuando sea instalado re-escritos para mostrar el estado guardado.
(por el root), debido a su característica de
“setuid”, el programa se ejecuta El comando echo es conveniente para usar
efectivamente con un id de usuario root, por en shell scripts, ocasionalmente en la línea
lo tanto tiene los privilegios necesarios para de comandos, pero Python es mucho más
exportar o dejar de exportar por un pin de fácil para los programadores. La docena de
GPIO. líneas de código en gpio23-max.py debería
proveer de un ejemplo simple.
Los programas que se ejecutan con
privilegios de root deben ser escritos por Ahora que se han enseñado los elementos
programadores realmente paranoicos. La básicos de control de GPIO, esta función se
mayoría del código en gpio_control.c puede utilizar para reemplazar la operación
simplemente verifica que el argumento sea de “bucle infinito”, donde un programa lee
razonable, y trata de ser informativo si repetidamente el valor de una señal de
sucede algo inesperado. entrada y realiza alguna operación cuando
esta cambia, por un programa infinitamente
Para utilizar gpio_control.c para salida por el más eficiente que solamente se ejecuta
pin 23, para que todo el manejo del pin cuando la señal cambia. Con sólo una
comentados anteriormente no requieran entrada y absolutamente nada más que
privilegios de root, simplemente ejecute: hacer hasta que cambie, un loop puede ser
gpio_control 23 export un problema. Sin embargo, este tipo de bucle
consume el 1 00% de los recursos del CPU, y
14
entonces compite agresivamente con todo terminaría siempre de forma inmediata. Si
aquello que pueda querer un poco de otra fuente de interrupción es registrada por
Raspberry Pi. po, podría utilizar esas condiciones.
Se puede introducir un retardo en el bucle de Algunas veces, la ausencia de una señal
esperada puede ser importante. La llamada a
sondeo (poll loop), para esto utilice el po.poll(60000) esperará por una interrupción,
comando “sleep 0.5” para un retraso de pero sólo por 60 segundos (60.000
medio segundo antes de comenzar la milisegundos) antes de retornar una lista
siguiente iteración del bucle. Esto permitiría vacía de señales de interrupción para indicar
que otra actividad se ejecute durante el que se agotó el tiempo de espera.
período de demora. Pero significa que hay un
retraso promedio de un cuarto de segundo El kernel mantiene el archivo value de un pin
antes que se detecte cualquier cambio en la GPIO con dos bytes de contenido: un
entrada. Más corto el retardo, la respuesta es carácter 0 o un 1 para representar el valor
más rápida, pero hay más desperdicio de actual del pin y un carácter de salto de línea.
CPU... Fea elección. La función f.seek(0) reinicializa la posición
actual al comienzo del archivo, para que
A medida que el número de entradas crece y pueda leerse de nuevo el valor del primer
el número de respuestas a esas entradas se carácter.
hace más grande y más variada, a menudo Expandiendo el GPIO
es necesario administrar las tareas con
diferentes prioridades. Las interrupciones son Sólo algunos pines de GPIO son accesibles
el medio para conectar rápidamente una en el Raspberry Pi, pero mucha gente ha
entrada como "hay un precipicio directamente demostrado cómo con integrados baratos
delante del vehículo" a la respuesta como el MCP2301 7 se puede utilizar la
"¡Frenar!". interfaz I2C para expandir este número. Un
diseño como http://shop.ciseco.co.uk/k002-
Otro programa Python slice-of-pi-o/ puede ser utilizado hasta 8
veces para añadir 1 28 pines de E/S digital al
http://ryniker.ods.org/raspberrypi/MagPi/inter- Raspberry Pi. Utilice la interrupción con el
rupt_test23.py quiere ilustrar el manejo de MCP2301 7 con una configuración open-drain
interrupciones del GPIO. Este programa para conectar la señal de interrupción de
configura el pin 23 como múltiples dispositivos a un único pin GPIO.
una entrada, establece el archivo edge a Una resistencia pull-up a 3,3 V para
“both” (ambos flancos) en consecuencia las mantener la entrada en nivel alto hasta que
interrupciones ocurrirán por las transiciones un dispositivo conectado lo conduzca a nivel
“falling” y “rising” (flancos descendentes y bajo. Cuando ocurre una interrupción el
ascendentes), luego abre el archivo value de manejador de interrupciones tiene que leer
los pines. El llamado a select.poll() crea un valores de todos los dispositivos generadores
objeto polling llamado “po”, después de interrupción para descubrir cual de ellos
po.register() agrega el archivo value como tiene la señal de interrupción activa (pueden
una de las fuentes que pueden corresponder ser varios), lanzar el programa de respuesta
a un llamado posterior a po.poll(). Este asociado, luego limpiar todas los solicitudes
programa utiliza una única fuente de de interrupción (por lo que la entrada GPIO
interrupción, pero pueden ser registrados vuelve al estado alto) para permitir que
otros pines GPIO y muchas otras fuentes por ocurra la siguiente interrupción.
el objeto poll. Por ejemplo, un pipe ( ‘|’ ) que
se conecta con otro proceso puede ser una Un resumen de las URL
fuente de interrupción o un socket que recibe
datos a través de una red desde un sistema Esquema del Raspberry P:
remoto. http://www.raspberrypi.org/wp-content/up-
El segundo operando de po.register loads/201 2/04/Raspberry-Pi-Schematics-R1 .0.pdf
especifica cuál de las tres condiciones se Los programas:
reconocerá como interrupción. El valor http://ryniker.ods.org/raspberrypi/MagPi/gpio23-
select.POLLPRI indica que solamente max.py
“priority data to read” puede causar la http://ryniker.ods.org/raspberrypi/MagPi/23-maxa.c
interrupción. Las otras posibles condiciones Expansor de E/S:
(”data available” y “ready for output”) son http://shop.ciseco.co.uk/k002-slice-of-pi-o/
siempre verdaderas para un pin GPIO, por lo
tanto en una operación de poll (sensado)
cuando es activada cualquiera de estas, Artículo originalde RichardRyniker
15
Entrevista con Mike Thompson
La distribución Raspbian de Debian provee el sistema operativo encontrado en la
mayoría de las Raspberry PI. En este número de The MagPi entrevistamos a Mike
Thompson, el fundador de Raspbian.
Q: ¿Por qué decidiste empezar Raspbian? Raspberry Pi y nunca esperé que Raspbian se
convirtiera en la distribución Linux “oficial” de
Leí en enero que la Fundación estaba la Raspberry Pi. Después de lanzar las
planeando usar Fedora y me pregunté si yo primeras imágenes de testeo de Raspbian y
podría hacer lo mismo pero con Debian, ya una significativa parte del repositorio fue
que es mi distribución de Linux favorita para creado, la gente empezó entusiasmarse
procesadores ARM. Durante mucho tiempo he diciendo que ellos esperaban que la
estado interesado en aprender como crear un Fundación eligiera una distribución basada en
sistema operativo y, además, contribuir con la Debian. Yo sabía que la Fundación estaba
comunidad Debian. Raspbian me dio esa enterada de Raspbian por los foros y que si
oportunidad. ellos pensaban que valía la pena podrían
elegir usarla.
Me di cuenta que iba a tomar una buena
cantidad de recursos, tiempo y esfuerzo crear Q: ¿En qué difieren los lanzamientos de
Raspbian. Empecé haciendo preguntas en los Raspbian y de la Fundación?
foros para entender qué se debería tener en
cuenta para llevar a cabo una tarea así. Raspbian es una recopilación de los paquetes
Hurgué por ahí para ver como lograrlo y se fue que componen la distribución Debian ARM
desarrollando de ahí. Wheezy hardfloat pero compilado para
procesadores ARMv6 como el de la
Raspbian es un esfuerzo conjunto entre Peter Raspberry Pi. Estamos usando el trabajo que
Green (Plugwash), que es un desarrollador de la Fundación hizo sobre el kernel sin tocarlo
Debian, y yo. porque las interfaces binarias en el kernel no
tienen componentes de punto de coma
Q: ¿Por qué elegiste la Raspberry Pi flotante. Eso nos ahorró un montón de
habiendo disponible otras placas de relativo esfuerzo permitiéndonos concentrar en la
bajo costo? recompilación de los paquetes.
Tengo un interés personal en sistemas Linux Alex Bradbury, el desarrollador líder de la
de bajo costo y me anima que la Fundación Fundación, trabajó en la imagen de Raspbian
Raspberry Pi haya demostrado el deseo y la de la Fundación. Como Raspbian es
necesidad que existe en el mercado por un esencialmente un clon de Debian él tomó los
sistema como la Raspberry Pi. A la larga sería mismos scripts que había usado para la
interesante llegar a ver ese tipo de placas a imagen basada en Debian, hizo cambios
un precio de entre US$5-1 0. Puede que tome menores y los usó para crear su propia
unos años llegar a eso, pero las cosas pueden imagen basada en Raspbian. Creo que
volverse mucho más interesantes en el mundo estaba agradecido de ver que nosotros
cuando haya acceso a gran escala de seguimos estrictamente la distribución
computadoras baratas y relativamente Debian, por lo tanto el proceso para crear una
sofisticadas como la Raspberry Pi. versión de Debian optimizada para la
Raspberry Pi basada en nuestros paquetes de
Q: ¿Cómo llegaste de tener una versión Raspbian fue bastante simple.
funcional de Raspbian a ser el Sistema
Operativo (SO en adelante) oficial de la Q: ¿Qué tan conveniente resultó ser la placa
Fundación Raspberry Pi? Freescale iMX53 que compraste en marzo
como plataforma de creación?
Peter Green y yo estábamos bastante
encaminados en el proyecto cuando a Todavía estamos usando 8 placas Freescale
mediados de junio tuvimos pistas de que la iMX53 para compilar los paquetes de
Fundación estaba interesada en Raspbian. Raspbian. Son sistemas bastante rápidos con
Cuando yo empecé, mi expectativa era crear un procesador ARMv7 de 1 Ghz con 1 GB de
una alternativa a Fedora que sea usada, RAM. Cuando compilamos, algunos de los
quizás, por el 1 0-20% de los usuarios de paquetes requieren un montón de memoria

16
RAM para crear las enormes estructuras de software. Reemplazando el CPU con un
enlazadas, y nosotros usamos archivos de procesador que soporte ARMv7 o agregando
intercambio (Swap) de 1 ,5-2GB así que más memoria [Nota del editor: la Pi acaba de
estamos excediendo la memoria disponible. empezar a salir con 51 2MB de RAM!] sería
Una típica PC moderna con 4GB de RAM grandioso ya que algunas personas están
puede tomarle cerca de 1 hora compilar un llegando a los límites de la placa, por ejemplo
paquete grande, pero en esos sistemas ARM con la navegación web en un GUI de
puede tomar más de 30 horas. Tener 8 escritorio.
sistemas disponible para compilaciones en
paralelo fue necesario en mayo y junio cuando Creo que, en general, la eficiencia de software
estuvimos compilando el total de 1 8000 ha ido por el buen camino, especialmente con
paquetes fuente que equivale a poco menos aplicaciones GUI. Yo siempre valoré el uso
de 38000 paquetes binarios para Raspbian. ágil y eficiente de memoria para computar.
Si sólo tuviéramos un sistema, hoy en día Desafortunadamente la realidad es que un
todavía estaríamos compilando paquetes. montón de RAM y un CPU poderoso es
Estamos usando versiones modificadas de las necesario hoy para la mayoría de las
herramientas de Debian para compilación aplicaciones con GUI. Nosotros todavía
para distribuir el compilado de paquetes a deberíamos alentar a la gente a aprender a
través de los 8 sistemas. programar eficientemente con recursos
limitados. Si sistemas como la Raspberry Pi
Yo llegué a este proyecto con muy poca hubieran estado disponibles ocho años atrás
experiencia en creación de sistemas podríamos haber visto un ágil sector de
operativos y tuve que aprender todo lo software de productividad requiriendo menos
necesario. Afortunadamente para mi, Peter recursos en general, en todas las plataformas.
Green se unió al proyecto y su experiencia
con Debian y sus herramientas de Comparado con Turbo Pascal que salió para
compilación fue esencial para hacer Raspbian CP/M (Un sistema operativo) a principios de
posible. Fui desarrollador de software toda mi 1 980, y después Turbo C, ambos tenían un
carrera pero nunca encaré algo de esta entorno de desarrollo pequeño, rápido y
escala. Ahora entiendo por qué las compañías totalmente integrado. Los entornos nuevos
de software tienen ingenieros especializados basados en GUIs consumen una enorme
en compilaciones de proyectos enormes cantidad de recursos y no siempre funcionan
bien, sí lo hacen en la Raspberry Pi. Es triste
Q: ¿Qué tan dependiente fuiste del trabajo que hoy en día no haya un equivalente real a
hecho por la comunidad Linux? Turbo Pascal o Turbo C en la Raspberry Pi ya
que esos sistemas desaparecieron cuando
Extremadamente dependiente. Raspbian no llegaron las GUIs. Yo creo que hay una gran
habría sido posible si el grupo de Debian que oportunidad para volver a usar ese tipo de
creó armhf (ARM Hard Float) no hubiese herramientas para los, comparativamente,
hecho el trabajo preliminar 1 8 meses antes, bajos recursos de la Raspberry Pi.
aunque ellos implementaron ARMv7 y no
ARMv6. Peter Green y yo pensamos que Q: ¿Qué trabajo queda por hacer en
Raspbian debe ser lo más parecido a una Raspbian?
versión oficial de Debian como sea posible sin
ser una versión oficial. Mientras Ahora estamos mayormente en modo de
mantengamos ese compromiso con mantenimiento. Cuando Debian saca
Raspbian, se mantendrá una base sólida para actualizaciones de paquetes nosotros los
la Fundación Raspberry Pi y la comunidad. bajamos, recompilamos para Raspbian, y los
enviamos al repositorio. Personalmente, yo
Posteriormente, manteniendo Raspbian tan conseguí mi objetivo con Raspbian de crear
similar a Debian reducimos el riesgo de que una versión que soporte ARMv6 de la versión
sólo dos personas trabajen en ello. Peter hardfloat de Debian.
Green se aseguró que todo lo que hicimos sea
completamente abierto. Si nosotros Estoy feliz que Raspbian haya habilitado
dejáramos de trabajar mañana nuestro tantas cosas en la comunidad Raspberry Pi.
trabajo está ahí afuera, espejado en 30-40 Además es grandioso que haya podido
servidores alrededor del mundo. Cualquiera devolver algo a la extensa comunidad Linux y
con el conocimiento en compilar Debian espero que esto dé lugar a miles de nuevos
puede fácilmente tomar eso y seguir usuarios de Debian en el futuro.
manteniéndolo. Por lo tanto Raspbian es de
poco riesgo para la Fundación. Mike Thompson es un Ingeniero en Computación viviendo en
San Francisco Bay Area. Tiene un diverso conocimiento en
Q: ¿Hay algun otra mejora de rendimiento diseño de sistemas embebidos, desarrollo aplicaciones para
que pueda lograrse en Raspbian? dispositivos móviles, desarrollo de aplicaciones para PC y
diseño de sistemas de gran escala para internet. Es un
emprendedor serial que previamente co-fundó dos
Yo creo que llegamos al máximo en la parte compañías y es el fundador y principal desarrollador de
Raspbian, el principal SO para la Raspberry Pi.

17
¿Te gustaría obtener más potencia de Pi?
¡Ve por el Turbo!
Los procesadores de las Raspberry Pi tienen esto permite hacer overclock y overvolt de tu
una velocidad de reloj de 700Mhz. Esto Raspberry Pi sin perder la garantía.
significa que realizan 700.000.000 ciclos por
segundo. La velocidad de reloj de un Consideraciones sobre la fuente de energía
procesador es un indicador de cuán rápido
puede realizar operaciones. Se mide tanto en Es importante, al hacer overclock, el uso de
megahertz (Mhz) como en gigahertz (Ghz) una buena fuente de energía. En mi caso
con 1 000Mhz equivaliendo a 1 Ghz. Entonces, utilizo un cargador para Kindle el cual es de
cuantos más Mhz, más rápido operará el alta calidad y provee una potencia de 850mA.
procesador. Los cargadores originales de Apple iPhone
también son una buena opción y proveen 1 A
¿Qué son el overclock y el overvolt? de potencia. Ten cuidado con los cargadores
para iPhone fabricados por terceros. La
Mientras que 700Mhz es la velocidad de Fundación Raspberry Pi ha encontrado que
fábrica para el procesador de la Raspberry Pi, algunos de estos no funcionan según las
hay formas de obtener un mejor rendimiento... especificaciones.
Overclocking... y gracias a la última versión de
Raspbian, lograrlo es más fácil que nunca! PRECAUCIÓN: has una copia de respaldo
El Overclocking es el proceso mediante el Antes de comenzar, vale la pena mencionar
cuál se hace funcionar a un componente o que hay una posibilidad de que al hacer
computadora más rápido que su velocidad de overclock los datos en tu memoria SD se
fábrica, sin embargo esto puede implicar un dañen. Asegurate de tener una copia de
perjuicio incrementando la inestabilidad y la respaldo de cualquier documento importante y
vida útil del procesador. Pero para la también de tu archivo /boot/config. txt .
Raspberry Pi, estos efectos adversos son tan La forma más sencilla de hacer esto es
insignificantes que ¡serías un tonto si NO copiando los archivos a una memoria USB o
realizas un Overclocking! subiendolos a algún servicio de
almacenamiento online como Dropbox.
El Overclocking también requiere energía
adicional. Si quieres llevar la velocidad de
tu Raspberry Pi a 900Mhz y más,
necesitarás proveerle de energía adicional
a través del “Overvolting”. Cuan lejos
puedes llegar con el Overclock depende
de varios factores; tu Raspberry Pi, la
calidad de tu fuente de energía y
posiblemente también de tu memoria SD.
Debido a la tolerancia de fabricación, el
fabricante garantiza el mejor rendimiento
en 700Mhz. Pero cada Raspberry Pi es
diferente y por lo tanto cada una tiene
límites diferentes.
Alternativamente podría crear una imagen
Existen varias configuraciones de overclock y completa de la memoria SD utilizando el
overvolt. Estas se encuentran detalladas en mismo programa Win32DiskImager usando
http: //elinux. org/RPi_config. txt# inicialmente para crear la memoria SD con
Overclocking_options aunque la última Raspbian. Esta vez, en lugar de escribir la
imagen de Raspbian contiene una simple memoria SD desde una imagen, creará una
opción de configuración. Lo importante es que imagen de respaldo leyendo la memoria.
18
Conecte su memoria SD a un lector de ¿Acabo de romper mi Pi?
memorias SD en su computadora con
Windows y ejecute Win32DiskImager. Ingrese ¿Pero qué pasa si mi Raspberry Pi no vuelve
un nombre para dicha imagen y haga click a iniciar? Esto significa que la configuración
sobre Read. Cuando el respaldo esté de overclock ha excedido los límites
completo, el tamaño del archivo con la imagen operativos de tu Raspberry Pi, pero no te
de respaldo debería ser muy similar al tamaño preocupes, es fácil de resolver. Primero
de su memoria SD. desconecta la energía de tu Raspberry Pi,
espera unos segundos y vuelve a conectarla.
Overclocking Inmediatamente mantén presionada la tecla
<SHIFT> en tu teclado. Observa el texto en tu
Para modificar las configuraciones de pantalla. Verás lo siguiente:
overclock inicie la Raspberry Pi. Desde la
terminal, escriba el comando: [ ok ] Checking if shift key is held down: Yes.
Not switching scaling governor.
$ sudo raspi-config
Esto significa que la configuración de
Luego debería aparecer una caja azul, como overclock fue ignorada e iniciará con
la mostrada anteriormente. Este es el mismo normalidad. Si has tenido mala suerte, es
menú de configuración que aparece al iniciar posible que el sistema de archivos de tu
una imagen de Raspbian por primera vez. Lo memoria SD se haya corrompido y tengas que
primero a hacer será actualizar la herramienta restaurar tu imagen de respaldo. Si la has
raspi-config. Utilice las teclas de dirección encendido exitosamente, puedes abrir la
para desplazarse hacia abajo y seleccionar la terminal y escribir el comando:
opción “update”. Espera a que raspi-config se
vea como en su última versión. Una vez que $ sudo raspi-config
haya finalizado podemos comenzar con el
overclock. Esta vez, al elegir una configuración de
overclock, intenta con una opción menor.
Ahora desplázate hacia abajo y selecciona
una opción de “overclock”. Al momento Si operas tu Raspberry Pi vía SSH o algún
existen cinco opciones para elegir; None otro medio de acceso remoto (headless) y no
(Ninguna), Modest (Modesta), Medium puedes mantener presionada la tecla
(Intermedia), High (Alta) o Turbo. <SHIFT> durante el inicio, entonces
Usa las flechas de dirección para elegir tu necesitas modificar la configuración de
configuración de overclock preferida. Lo mejor overclock manualmente utilizando un lector de
memorias SD en otra computadora.
Querrás editar el archivo
/boot/config. txt . En Linux o
Apple Mac puedes utilizar sus editores
de texto predeterminados. En
Windows resultará extraño editar el
archivo config.txt usando Notepad.
Una mejor alternativa se obtiene
descargando el programa gratuito
TextPad desde
http: //www. textpad. com. Las
entradas que necesitarás modificar
son arm_freq, core_freq,
sdram_freq and over_voltage .
Use the image to the left as a
reference for the values you should
use.
es comenzar con Turbo para ver si es estable.
Sino intenta con High, seguida de Medium y Has seleccionado una configuración de
luego Modest. Luego de hacer tu elección, sal overclock y la Raspberry Pi parece haber
de raspi-config y reinicia. Esto último es iniciado nuevamente y sin problemas. ¿Cómo
necesario para que la nueva configuración se sabrás si esto será confiable?
aplique. Los cambios se graban en el archivo
/boot/config. txt .

Continúa en la siguiente página...


19
Pruebas de confiabilidad Monitoreo
Hay un par de pruebas que puedes realizar Al hacer overclock es muy útil conocer al
para determinar si la Raspberry Pi será momento la frecuencia y la temperatura de la
confiable. No hay nada divertido en tener un CPU. Puedes hacer esto fácilmente en LXDE.
sistema rápido pero poco confiable. Si tienes Haciendo Click-derecho sobre la barra de
instalado el Quake 3 esto es una buena tareas en la parte inferior de la pantalla y
prueba para las configuraciones de overclock seleccionando Add / Remove Panel
del CPU y el GPU. Otra prueba muy fácil que Items (Agregar / Quitar Items del Panel). La
uso es simplemente realizando un upgrade de ventana de Panel Preferences (Preferencias
la imagen de Raspbian. Para esto debes del Panel) aparecerá y la solapa Panel
iniciar tu Raspberry Pi, abrir una terminal y Applets debería estar seleccionada. Has Click
escribir los siguientes comandos: sobre el botón Add (Agregar). Selecciona
CPUFreq frontend y has Click sobre el
$ sudo apt-get update botón Add. Repite este proceso pero esta vez
$ sudo apt-get upgrade -y seleccionando Temperature Monitor .
Podrás encontrar útil el agregar otros applets
Esta es una buena prueba de las tales como Volume Control y Network
configuraciones de overclock de la CPU y la Status Monitor .
SDRAM. Dependiendo del número de
actualizaciones esto podría demorar 30 Otro test simple sería iniciar Midori y visitar
minutos, pero al final tendrías la versión final http: //www. raspberrypi. org . Mientras
del sistema.. esté cargando, mantén el puntero del mouse
sobre el applet CPUFreq frontend. Verás
Una vez completado, reinicia la Raspberry Pi. el cambio entre 700Mhz y tu configuración
Esta vez querrás prestar especial atención a actual de overclock.
los mensajes que aparecerán durante el inicio.
Busca mensajes “mmc” o cualquier tipo de
mensajes relacionado con errores en el
sistema de archivos. Adicionalmente, busca
mensajes [ warn ] (advertencia) y [ fail ] Para ver videos sobre overclock además de
(falla). El hallazgo de estos mensajes sugiere otros temas relacionados con la Raspberry Pi,
debilidades potenciales, por lo que deberías por favor visita mi canal en YouTube:
intentar con la configuración de overclock http: //www. youtube. com/user/TheRa
menor. spberryPiGuy .
Si cuentas son diferentes memorias SD vale Por Matthew Timmons-Brown
la pena probar con cada una. He probado tres e Ian McAlpine
Raspberry Pis con nueve memorias SD
diferentes, en un rango de velocidades desde

¿Sabías
Clase 2 hasta Clase 1 0. Cada Raspberry Pi
era Revisión 1 con USB polyfuses
reemplazados por conexiones cableadas.

qué...?
Recibieron energía desde el mismo
concentrador USB el cual tuvo una fuente de
energía de 2A. Una de las Raspberry Pi
funcionó correctamente hasta la configuración
de overclock Medium; los otros dos lograron
hasta la configuración High. Pero ninguno de Mientras ordenaba la edición impresa de
los tres Raspberry Pi lograron pasar la prueba MagPi desde http: //www. modmypi. com,
de confiabilidad funcionando con la me enteré que venden un kit de
configuración Turbo. refrigeración. “The Raspberry Pi Heat Sink
Kit” consta de tres pequeños disipadores
Lo interesante fue que las dos Raspberry Pis de calor más una cinta térmica, que ayuda
que lograron funcionar con la configuración a mejorar la confiabilidad del sistema. Hay
High, solo lo hicieron con siete de las 9 un disipador de calor para el SoC, GPU y
memorias SD. Fallaron con dos de las el regulador de energía.
memorias; una Trascend 4GB Clase 6 y una
Lexar 1 6GB Clase 6. Sin embargo, tus En mis propias pruebas la temperatura de
resultados podrían ser diferentes.
la CPU cayó desde una máxima de 61 ° C,
sin usar el disipador, hasta una máxima de
sólo 52° C con el disipador de calor.

20
E V O L UC I Ó N - P I
El ritmo de desarrollo alrededor de la Raspberry Pi es difícil
de mantener...

Si fuiste de los primeros en tener una Raspberry Pi, lo anuncian que la Raspberry Pi vendrá con el doble de
más probable es que hayas empezado con “Debian memoria, ¡y por el mismo precio!
Squeeze”, un sistema operativo basado en Linux.
Pasaste tiempo aprendiendo como descargar la Finalmente llega un mejor versión de Wheezy, pero
imagen, y grabarla en una tarjeta SD. Entonces ahora se convirtió en algo llamado ‘Raspbian Wheezy’,
probablemente fuiste introducido a LXDE, la interfaz que es mucho más rápida, y tiene muchos bugs
gráfica liviana x-window. Se veía similar a Windows solucionados. Ah, esperá un segundo, llega otra
pero las cosas eran un poquito diferentes. Tuviste versión de Raspbian, que es aún más rápida, y me
entonces que aprender a usar un administrador de
paquetes, el comando ‘apt-get’, ‘aptitude’ o quizás entero que hay otra versión planeada para ser lanzada
‘synaptic’, para poder descargar e instalar nuevos en las próximas semanas.
paquetes de aplicaciones.
Ahora, si sos de los que odian los cambios, a este
Conseguiste una decente colección de útiles punto ya estarás golpeando la cabeza contra la pared,
aplicaciones instaladas, cuando descubriste que hay y preguntándote si, después de todo, esto de la
una nueva versión de Squeeze disponible, que es computación es realmente para vos.
mejor que la anterior, así que empezás todo otra vez.
No mucho después aparece otro sistema operativo, En computación las cosas a menudo pasan muy
Debian ‘Wheezy’ Beta. Pero habías escuchado que rápido, y lidiar con el flujo constante de actualizaciones
hubo algunos problemas con esa versión, y no sabías si es algo a lo que te tenés que acostumbrar. Si no
quedarte con Squeeze o pasarte a Wheezy. Fue todo puedes adaptarte al cambio, te vas a quedar atrás.
muy confuso.
Probablemente el ritmo de desarrollo irá más lento
Mientras, muchas otras personas todavía esperaban hasta cierto punto una vez que los fundamentos estén
pacientemente para que su pedido de Raspberry Pi sea en su lugar. Pero nosotros no estamos ahí aún. Podés
procesado. Finalmente el pequeño paquete llegó y te esperar, con la versión educacional de la Pi, que las
pusiste muy feliz. Entonces aprendiste que estaba placas vendrán con una caja incluida, y probablemente
disponible una nueva y mejorada versión de la Pi, que algún tipo de manual de instrucciones, así como una
tenía agujeros de montaje y varios otros ajustes, y te imagen mejorada, junto con muchos extras. A pesar de
preguntaste si la tuya sería considerada un “viejo esto, no debemos esperar que las cosas se estanquen
sombrero”. Entonces, para hacer las cosas aún peor, en esa etapa. Una serie de complementos de hardware
y accesorios le seguirán, incluyendo cámaras, pantallas

22
y otros dispositivos electrónicos que se enchufarán a tu Después usé ‘sudo apt-get update’ y ‘sudo apt-get
Pi. Lo más probable es que para ese entonces, tu install xine-ui’ para tener Xine. Xine es un reproductor
actual Raspberry Pi de 256MB y sin caja a la que le multimedia que yo había pasado por alto tiempo atrás
faltan agujeros de montura quede prácticamente sin (Mientras hacíamos el número 3 de MagPi). Se veía
valor. prometedor, pero era demasiado lento para ser util, y
pensé que quizás con el nuevo SO y el overclock, esta
Lo que tenemos que recordar es: El propósito de la Pi vez podría funcionar mejor.
es aprender los principios de programación, o
interconexión, o solo computación general, y aunque Afortunadamente mi nueva Pi finalmente había llegado
muchas cosas cambian, los principios fundamentales de RS Components (Después de 6 meses de espera),
no. La raspberry Pi es un dispositivo para aprender, y y era capaz de manejar el ‘Modo Turbo’ completo.
para experimentar. No es un accesorio de moda o un Desafortunadamente llegó una semana después de
gadget de lujo. La Pi es más bien un ítem barato y que saliera la versión de 51 2MB, y además carecía de
desechable. Existe gente que vende su iPhone 4 solo agujeros de montura.
porque hay un iPhone 5 disponible. Va haber dueños
de Raspberrys Pi que que caigan en esa misma
trampa, pero la gente que más provecho le sacará a su Yo tenía una vieja revisión de la Pi que Antiloquax me
Pi serán aquellos que dejen de preocuparse por esas había enviado amablemente, pero que no podía
cosas y dediquen más tiempo a jugar con cualquier manejar el Modo Turbo. Falló en arrancar y era
versión que tengan, y aprendan de su experiencia. inestable en cualquiera de los niveles de overclock..

Con esto en mente, me di cuenta que mi propia Xine fue capaz de ejecutarse y reproducir muchos
tarjeta SD estaba vencida , y pensé que sería mejor formatos que testeé, aunque había algo raro al abrir los
echar un vistazo a la version Wheezy 1 8/09/201 2 de archivos. Solo después de clickear el botón ‘play next
Raspbian: chapter >|’ seleccionaba el archivo correcto para
reproducir, de otro modo aparecía el mensaje ‘There is
no MRL’. Xine pudo reproducir av, mp3, mp4, mov así
En el número 5, escribí un artículo comparando Debian como wmv, wma y.... mpeg. SI, MPEG, aunque
Squeeze y Wheezy, y una de las desventajas que empezaba a saltar frames si intentaba reproducir un
descubrí fue que aunque Wheezy era bastante más video a un zoom mayor que el 1 00%. Yo no pagué por
rápida, puntuaba muy pobremente en reproducción el codec MPEG. Xine fue bastante inestable y con tenia
multimedia. Así que decidí que primero vería si algo bugs, sin embargo el reproductor de línea de comando
habría mejorado en la actualización. ‘omxplayer’ funcionó mejor, pero soportando menos
formatos. Todavía es una mejora masiva sobre la
Primero descargué el la imagen zipeada de 439MB versión anterior de Raspbian Wheezy, y creo que ésta
desde http://raspberrypi.org/downloadas. Me tomó es digna candidata para poner a descansar a Squeeze
cerca de 45 minutos usando el enlace de descarga de una vez por todas.
directa desde mi PC con Windows. Entonces, otros 45
minutos para escribir la imagen en la tarjeta SD usando Me tomé un descanso con los reproductores
Win32DiskImager. Tengo una MicroSD clase 4 que es multimedia e instalé Scribus, el programa de
bastante lenta, pero funciona bien para esto. publicación que usamos para hacer la MagPi. Cargué
uno de los documentos de Python Pit del número 6, y
Lo próximo fue conectar la tarjeta MicroSD (dentro de noté que fue considerablemente más rápido gracias al
un adaptador a SD normal) en mi Pi y arrancar la overclocking. Fue particularmente mejor cambiando
Raspi. hasta la pantalla de configuración . entre capas, haciendo zoom y haciendo click derecho
para mostrar el cuadro de propiedades.
Curiosamente, esta vez no tuve que cambiar los
valores de overscan para mi monitor (Como siempre Finalmente instalé unos pocos juegos de arcade:
tuve que hacerlo con versiones anteriores de Debian). ‘beneth-a-steel-sky’, ‘geki2’m ‘geki3’, ‘pangzero’ y
‘xsoldier’. Todos funcionaron perfectamente.
Elegí expandir el rootfs así puedo hacer uso de los
1 6gb de la tarjeta. También configuré la zona horaria a Distribuciones actualizadas no son necesariamente
Londres y activé el modo Turbo a 1 000Mhz. Salí del mejores en general. A veces es mejor abstenerse de
actualizar hasta que los bugs hayan sido subsanados,
menú y reinicié. pero enterrar la cabeza en la arena e ignorar la marcha
del progreso es una mala idea también. Siempre
Después de iniciar sesión, inicié LXDE tipeando ‘startx’. mantente atento a lo que pasa en la comunidad para
El escritorio se ve casi idéntico a la versión anterior, evitar perder las actualizaciones buenas y los ajustes
aunque la imagen se ve más definida. Abrí un una de rendimiento.
ventana LXTerminal y escribí ‘sudo amixer cset
numid=3 1 ’ para dirigir el audio a la salida analógica.
Artículo por Jaseman

23
Making code development faster

Los fundamentos de GNU Make


make es la parte central del armado de paquetes de código compilado y documentación en un sistema Linux. Cuando
ejecutas make , éste lee uno o más archivos de texto, los cuales contienen las dependencias y targets. Los targets son
ejecutados sólo si el archivo no existe o si es más nuevo que el archivo de salida. La sintaxis permite además
múltiples dependencias, de manera que algunos archivos son requeridos para poder construir otros. Comencemos
con un ejemplo

# Crea el archi vo nuevoArchi vo. txt si no est· presente


nuevoArchi vo. txt:
touch nuevoArchi vo. txt

Análogamente a los lenguajes de scripting, los comentarios comienzan con un numeral(#). El target
nuevoArchi vo. txt no tiene espacios o tabs al comienzo de la línea y es seguido por dos puntos(:). Las
dependencias del target pueden ser añadidas luego de los dos puntos. Cada acción viene dada por una línea que
comienza con un tab. Si se utilizan espacios, make generará un error indicándolo.
Por defecto make busca un archivo llamado Makefi l e . Por lo tanto usa nano (described in the issue 3 C cave
article) para crear un archivo llamado Makefi l e que contenga el ejemplo arriba descrito. Entonces tipea make
La primera vez que make es tipeado, ejecuta el target, el cual utiliza el comando touch para crear un archivo vacío
con el nombre indicado. La segunda vez que make es tipeado, encuentra que el archivo existe por lo que ninguna
acción es ejecutada.
Para un ejemplo con múltiples dependencias, puede ser utilizado un pequeño ejemplo en C. En un nuevo directorio
crea tres archivos: mai n. c

#i ncl ude " pri ntStri ng. h"


i nt mai n() {
pri ntStri ng();
return 0;
}

pri ntStri ng. c

#i ncl ude <stdi o. h>


voi d pri ntStri ng() {
pri ntf(" Construi do con make! \n" );
}

pri ntStri ng. h

voi d pri ntStri ng();

24
A continuación, crea un archivo llamado Makefi l e que contenga lo siguiente:

pri ntStri ng: mai n. o pri ntStri ng. o


gcc -o pri ntStri ng mai n. o pri ntStri ng. o

mai n. o:
gcc -c mai n. c

pri ntStri ng. o:


gcc -c pri ntStri ng. c

cl ean:
rm -f *. o

Esta vez tipeando make provocará que cada archivo . c sea compilado en un archivo . o , entonces los archivos . o
son enlazados juntos para formar un ejecutable llamado pri ntStri ng . El target pri ntStri ng es el primer target
del archivo y es por lo tanto el target por defecto. Cuando make es ejecutado chequea que las dependencias de
pri ntStri ng , las cuales son mai n. o y pri ntStri ng. o existan y no sean más nuevas que el target
pri ntStri ng . Si los archivos no existen, entonces el target es ejecutado para generarlos. Cualquier otro target que
no sea el target por defecto puede ser ejecutado tipeando el nombre del target luego del comando make , por ejemplo,
make cl ean

Escribir makefi l es en el cual cada nombre de cada archivo tiene que ser especificado puede ser muy agotador. Por
lo que pueden ser utilizadas variables automáticas en vez de targets específicos.
pri ntIt: mai n. o pri ntStri ng. o
gcc -o $@ $^

%. o: %. c
gcc -c $< -o $@

cl ean:
rm -f *. o

Este Makefi l e hace exactamente las mismas acciones que el definido anteriormente. La variable automática $@ es
el nombre del target, $^ son los nombres de las dependencias y, $< es el nombre del primer pre requisito. Por cada
archivo . o requerido por el target por defecto, make intenta el wildcard %. c . Si el archivo . c no existe make reportará
un error.
Los Wildcards también puede ser utilizados para definir una lista de archivos . c presentes en el directorio de trabajo:
OBJ ECTS = $(patsubst %. c, %. o, $(wi l dcard *. c))

pri ntIt: $(OBJ ECTS)


gcc -o $@ $^

%. o: %. c
gcc -c $< -o $@

Siendo OBJ ECTS una variable. En este caso, todos los archivos . c presentes en el directorio de trabajo son usados
para construir un ejecutable llamado pri ntIt . El comando wi l dcard lista todos los archivos que coincidan con el
patrón *. c . Entonces patsubst remueve el . c y los reemplaza por el . o . El resultado es asignado a la variable
OBJ ECTS . Prueba usando touch para actualizar cada time stamp e intenta volver a ejecutar make y verás lo que
pasa.
Los Makefi l es pueden tener muchas capas de dependencias. Para las distribuciones de software en múltiples
plataformas, los Makefiles son típicamente generados a partir de plantillas (templates) con la herramienta autoconf.
Artículo Original por W. H. Bell
25
¡BIENVENIDO AL
CACHE DE C++!
Una introducción al lenguaje de programación C++ - uno de
los más populares utilizados en la actualidad.
El C++ es un lenguaje de programación, como lo son Python o Java. Es un poco más avanzado,
pero es muy popular, muchos videojuegos de la actualidad y muchos otros programas están
escritos en C++. Es rápido y fácilmente portable, lo que significa que el mismo código es
generalmente transferible entre máquinas Linux, Windows y Mac OS. Si usted está listo para el
desafío, ¡siga leyendo!
Pruebe escribiendo lo siguiente:
#i ncl ude <i ostream>
usi ng namespace std;

i nt mai n()
{
//Sal i da de un mensaj e. .
cout << " Hol a, bi enveni do a C++" << endl ;
return 0;
}

Asegúrese de guardarlo como “hola.cpp” - la parte donde dice .cpp indica que es un archivo
fuente de C++.
Después de compilar y ejecutar, usted debe ver impreso en pantalla el mensaje que está entre las
comillas. Pruebe cambiándolo, recompilando y ejecutando y mire lo que sucede. Al principio esto
puede verse bastante desalentador, pero observe debajo y en la siguiente página donde hay una
explicación de los términos desconocidos.
De esta manera hemos escrito nuestro primer programa, ¿cómo
sabemos lo que va a hacer y lo que significa todo?Aquí voy a explicar los
aspectos importantes del programa:
#include <iostream>
Esta es nuestra sentencia de inclusión. Es utilizada para importar librerías las cuales contienen la
información necesaria para entender los comandos que le dan. La librería iostream contiene
información sobre sobre el manejo de entradas y salidas.
int main()
Esta es la función principal. Todos los programas necesitan una función main y todo lo que está
dentro de la función main es ejecutado. Todas las funciones comienzan con ‘{‘ y finalizan con ‘}’.
//Mensaje de salida
En C++, cualquier cosa que comience con ‘//’ es un comentario, y al igual que los comentarios en
otros lenguajes, estos son ignorados por el compilador.
cout y endl
Estos son nuestros comandos. El comando cout le indica al programa que envíe a la salida todo lo
que se encuentra entre ‘<<’ y el ‘>>’. endl simplemente significa salto de línea.

26
;
Algunos lenguajes utilizan estos puntos y comas. Para entenderlo, piense como hace para escribir
en un lenguaje normal como el castellano. Nosotros finalizamos las indicaciones con un punto
final. Esta es una idea similar, cada vez que queremos que el programa pase a realizar algo nuevo
finalizamos con un punto y coma. En consecuencia podemos utilizar los espacios en blanco (que
son los espacios y saltos de línea) como queramos.
return 0;
Hace que el programa entienda que la función main ha finalizado, lo que significa que el programa
ha terminado. Esto hace que se finalice la ejecución pasado este punto.
Con esta información, vamos a pasar a otros ejemplos más. Pruebe lo siguiente:
#i ncl ude <i ostream>
usi ng namespace std;

i nt mai n()
{
//Defi ne 2 vari abl es
i nt a, b;
a = 1;
b = 2;

//Envi a a l a sal i da l a suma de estas vari abl es


cout << " a + b = " << a + b << endl ;
return 0;
}

Aquí, hemos definido dos variables: a y b. Ellas son de tipo int, que significa que son números
enteros. Hemos creado los dos y luego enviaremos a la salida la suma de ambos.
Por supuesto, esto está muy bien, pero la salida siempre será 3 hasta que cambiemos el código,
por lo cual no resulta demasiado útil. En lugar de eso podemos modificar el programa para tomar
el ingreso del usuario y sumarlo. Pruebe esto:
#i ncl ude <i ostream>
usi ng namespace std;

i nt mai n()
{
//Defi ne 2 vari abl es
i nt a, b;

//Sol i ci ta y al macena el i ngreso de datos del usuari o


cout << " Ingrese el pri mer numero: " ;
ci n >> a;

cout << " Ingrese el segundo numero: " ;


ci n >> b;

//Envi a a l a sal i da l a suma de l as vari abl es


cout << a << " + " << b << " = " << a + b << endl ;
return 0;
}

Esto le permitirá obtener el ingreso del usuario y sumar ambos.

Artículo original de Alex Kerr


27
Bases Defensivas
Este mes vamos a comenzar con algo de “programación
defensiva”; en otras palabras, tratando de escribir un
programa que pueda interceptar errores .
Este convierte un número
desde decimal a la base de
salida, tomando los dígitos
desde la cadena “DIGITS”
(ver siguiente página).

Perdón, los scripts están en un orden raro este mes - ¡el espacio está escaso!

El Script "get_base"
Esta parte del código permite establecer la base
numérica de entrada y de salida para que lo use el
programa. No se permite el ingreso de un número menor
a 2 o mayor a 16. Esto puede ayudar a resolver algunos
resultados realmente extraños (e incorrectos).

¡Acertijo Hexa!
Si sólo DEAD people (gente muerta) entiende
el hexadecimal. ¿Cuanta gente entiende
hexadecimal?
(La respuesta en la siguiente página)

28
Aquí comienza el programa principal.
Después que el script “get_base” tiene las
bases de entrada y salida, el script
“get_number” comprueba que has
ingresado un número válido en la base de
entrada elegida.
El script “get_number” también elabora la
representación decimal (base 10) de su
número, luego está listo para llamar a
“to_base_out”.

Scratch On!
Esta porción significa que si se está
haciendo en base 4 (por ejemplo),
los únicos dígitos permitidos son 0,
1, 2 y 3.

Como Scratch no posee un bloque “x elevado a la


y”, yo estoy utilizando logaritmos:
10 (log x)*y = xy

¿Trabado?
Podés bajar todos los scripts desde:
http://tinyurl.com/Scratchbases

Respuesta al acertijo:
57005 personas entienden el hexadecimal.

29
El mes anterior El Taller de Python mostró
cómo obtener ajustes de configuración
desde un un archivo de texto externo.
Este mes se presenta una nueva opción.
El uso de argumentos de línea de
comando proporciona un buen control del
programa al momento de su ejecución.

Esta línea usada para renderizar un Pygame utiliza el


módulo argparse de Python:
http://docs.python.org/dev/library/argparse.html
En LXTerminal ejecuta el comando:
python lines.py -h

Esto mostrará todos los argumentos disponibles. Por ejemplo:


python lines.py -s 3 -t 4

generará una figura de mayor tamaño que el


predeterminado (-s 2) y con líneas ligeramente más
densas (-t 5). Experimenta con las opciones disponibles.
# Generador de líneas usando argumentos de línea de comando
# Por Colin Deady - 03 de Octubre de 2012
# coding=UTF-8

import os, pygame, argparse, sys


from pygame.locals import *

# inicialize pygame (para renderizar la imagen)


pygame.init()

# Definición de las 2 funciones a usar:


# 1) fnAppend2Log escribirá una línea en el archivo de registro
def fnAppend2Log( line2write ):
logfile = open('lines.log', 'a')
logfile.write(line2write + '\n')
logfile.close()

# 2) fnPlotLines renderizará un cuarto de la figura.


# Utiliza las coordenadas previas como nuevas coordenadas iniciales
def fnPlotLines(quarter, sX, sY, eX, eY, incSX, incSY, incEX, incEY ):
fnAppend2Log(quarter + ' quarter co-ordinates:')

# calcula y cicla a través de las coordenadas de la línea


for i in range(0,iterations, args.step):
nSX = sX + (incSX * i) # start X
nSY = sY + (incSY * i) # start Y
nEX = eX + (incEX * i) # end X
nEY = eY + (incEY * i) # end Y

# draw dibuja una línea entre el par de coordenadas.


pygame.draw.line(screen,(lineColour),(nSX,nSY),(nEX,nEY),1)

PYTHON VERSIÓN: 2.7.3rc2


PYGAME VERSIÓN: 1 .9.2a0
O.S.: Debian 7

30
# construye una cadena para el título de la ventana y el archivo de registro
coordText = '('+str(nSX)+','+str(nSY)+')-
('+str(nEX)+','+str(nEY)+')'
# renderiza la imagen por líneas (takes longer)?
if args.renderlines == 'y':
pygame.display.update();
pygame.display.set_caption(coordText)

# escribe coordenadas en el registro


fnAppend2Log(coordText)

# devuelve las coordenadas finales


return (nSX, nSY, nEX, nEY);

# definición de argumentos de línea de comando:


parser = argparse.ArgumentParser(description='Render shape')
parser.add_argument('-s', action='store', dest='scale', type=int,
default=2, help='Render size, default=2, 200x200px)')
parser.add_argument('-t', action='store', dest='step', type=int,
default=5,
help='Lower step values for denser lines (default=5)')
parser.add_argument('-r', action='store', dest='renderlines',
choices=('y','n'), default='y',
help='Render line by line (Y) or finished object (n)')
args = parser.parse_args()

# definición de las variables necesarias


sz = 100*args.scale # tamaño en pixeles horiz x vert de un cuarto de imagen
iterations = sz +5 # número de líneas a renderizar por cuarto
lineColour = 0,0,255 # el color de la línea a dibujar (azul)

# abre una pantalla de pygame en la que dibuja los objetos


# el tamaño de la imagen es dos veces el del objeto a renderizar, porque renderiza 4 cuartos
screen = pygame.display.set_mode([sz*2,sz*2],0,32)

# Dibuja las líneas, cuarto a cuarto, devolviendo los pares de coordenadas


# Las coordenadas iniciales son iguales a las finales, del último cuadro
sx, sy, ex, ey = fnPlotLines('Top left', sz, 0, sz, sz, 0, 1, -1, 0 )
sx, sy, ex, ey = fnPlotLines('Bottom left', ex, ey, sx, sy, 1, 0, 0, 1 )
sx, sy, ex, ey = fnPlotLines('Bottom right', ex, ey, sx, sy, 0, -1, 1, 0 )
sx, sy, ex, ey = fnPlotLines('Top right', ex, ey, sx, sy, -1, 0, 0, -1 )

# si el renderizado línea a línea fue suprimido entonces mostrará la imagen final


if args.renderlines == 'n':
pygame.display.update();

# graba la imagen renderizada en un archivo


pygame.image.save(screen, 'lineimage.png')

# muestra el resultado en 10 segundos


pygame.time.wait(10000)

Trata de añadir un argumento adicional para opcionalmente deshabilitar


la escritura en el archivo de registro. Esto mejorará el tiempo de
renderización. Pista: así como has agregado el argumento necesitarás
agregar dos estructuras IF ya que el registro será escrito por dos partes
diferentes del código.
Algunas otras ideas para argumentos de línea de comando:
- permitir al usuario que indique un nombre de archivo para la imagen de salida
- Especificar los colores de fondo y de las líneas a partir de una lista predefinida
(negro, blanco, rojo, verde, azul)
- Tener un modo de demostración que cicle el código, permitiendo mostrar
muchas imágenes con colores aleatorios
31
Tiempo de preguntas y comentarios
P: ¿En relación con los artículos Gracias por hacer una versión P: Como usuario nuevo de
del Skutter, Uds. mencionan que impresa de MagPi (disponible en Raspberry Pi, estoy muy
puede montarse un brazo http://www.modmypi.com). Yo interesado en su excelente
robótico. Podrían por favor siempre había impreso cada magazín. No he tenido mayor
especificar cuál brazo robótico y ejemplar dado que prefiero leerlo dificultad en leer las ediciones
dónde puedo conseguirlo? en papel. Imaginen la sorpresa desde la No.1 hasta la No.6 en mi
Richard cuando descubrí que solo costaba computador desktop que usa
£2.49 lo cual es mucho más Linux Mint 13. Imagínense mi
R: Skutter es una larga serie de barato que la impresión de 32 decepción cuando encontré que
artículos. El primero de ellos fue páginas a full color que hacía yo de esas 6 ediciones, sólo la
publicado en la edición No.1 de mismo! edición No.3 podía ser abierta en
MagPi y en él damos alguna Ian mi Raspberry Pi. No estoy
información al respecto: "El kit familiarizado con el programa
para el brazo robótico llamado MuPDF que usa Raspbian, así
OWI Edge está actualmente que pensé que lo mejor era
disponible en Maplin electronics y instalar y probar con el MuPDF
emplea una simple interfaz USB en mi maquina con Linux Mint. El
para controlarlo." resultado es que cada edición de
http://www.maplin.co.uk/robotic- MagPi abre perfectamente bien
arm-kit-with-usb-pc-interface- usando MuPDF en mi máquina
266257 con Linux. Probablemente esto no
sea de su incumbencia técnica,
pero pienso que deberían saber
P: ¿Será posible ver el magazín que un número creciente de
en un iPad en el futuro cercano o usuarios de Raspberry Pi no
definitivamente no será posible? pueden leer su magazín.
John Lloyd

R: El site Issuu que usamos sólo R: Este problema se extiende a


recién ha empezado a soportar otros archivos PDF. MuPDF
HTML5, así que ahora debería parece trabajar bien para algunos
trabajar en iPads y en iPhones usuarios y para otros no.
etc. Otra opción es que descargue Personalmente removí MuPDF y
el PDF y lo lea con iBooks. he estado usando xPDF el cual
Actualmente estamos trabajando trabaja bien con todo. Ud. puede
en una versión que sea hacer lo mismo siguiendo estos
independiente de la aplicación de comandos:
visualización. $ sudo apt-get remove MuPDF
$ sudo apt-get install xPDF

editor@themagpi.com
The MagPi is a trademark of The MagPi Ltd. Raspberry Pi is a trademark of the Raspberry Pi foundation. The MagPi magazine is
collaboratively produced by an independent group of Raspberry Pi owners, and is not affiliated in any way with the Raspberry Pi
Foundation. It is prohibited to commercially produce this magazine without authorization from The MagPi Ltd. Printing for non
commercial purposes is agreeable under the Creative Commons license below. The MagPi does not accept ownership or responsibility
for the content or opinions expressed in any of the articles included in this issue. All articles are checked and tested before the release
deadline is met but some faults may remain. The reader is responsible for all consequences, both to software and hardware, following
the implementation of any of the advice or code printed. The MagPi does not claim to own any copyright licenses and all content of the
articles are submitted with the responsibility lying with that of the article writer.
This work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 3.0 Unported License. To view a copy of this
license, visit:
http://creativecommons.org/licenses/by-nc-sa/3.0/
Alternatively, send a letter to Creative Commons, 444 Castro Street, Suite 900, Mountain View, California, 94041 , USA.

32

Potrebbero piacerti anche