Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
¡ 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
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.
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
6
Un Pequeño
Rayo de Sol…
Mientras navegaba buscando dispositivos interesantes para
Raspberry Pi, Me encontré con el siguiente item de
CottonPickersPlace.
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).
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 .
¿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
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
24
A continuación, crea un archivo llamado Makefi l e que contenga lo siguiente:
mai n. o:
gcc -c mai n. 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))
%. 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;
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;
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.
¿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.
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)
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