Estación ARCADE · gias de marketing, administración de medios sociales y producción multimedia...

33
Crea tu propia ODROID ARCADE Estación Crea tu propia • Timbre IOT: Recibe una imagen de quien llama a tu puerta • Home datacenter: Pon en practica tu proyectos con facilidad ODROID LineageOS • RemotePI Board • HIFI Shield 2 • Desarrollo Android Magazine ODROID ODROID ARCADE Estación Un completo tutorial para el montaje Año cuatro Núm. #39 Mar 2017

Transcript of Estación ARCADE · gias de marketing, administración de medios sociales y producción multimedia...

Page 1: Estación ARCADE · gias de marketing, administración de medios sociales y producción multimedia impresa, web, vídeo y cine. Ges-tionando múltiples cuentas con agencias y productores

Crea tu propia

ODROIDARCADEEstacioacuten

Crea tu propia

bull Timbre IOTRecibe una imagen de quien llama a tu puerta

bull Home datacenter Pon en practica

tu proyectos con facilidad

ODROIDLineageOS bull RemotePI Board bull HIFI Shield 2 bull Desarrollo Android

MagazineODROID

ODROIDARCADEEstacioacuten

Un completo tutorial para el montaje

Antildeo cuatroNuacutem 39Mar 2017

Queacute defendemosNos esmeramos en presentar una tecnologiacutea punta futura joven teacutecnica y para la sociedad de hoy

Nuestra filosofiacutea se basa en los desarrolladores Con-tinuamente nos esforzamos por mantener estrechas relaciones con eacutestos en todo el mundo

Por eso siempre podraacutes confiar en la calidad yexperiencia que representa la marca distintiva de nuestros productos

Simple moderno y uacutenicoDe modo que tienes a tu alcance lo mejorpara hacer todo lo que imagines

Realizamos envios de ODROID-C2and ODROID-XU4 a los paiacuteses de la UE Ven y visita nuestra tienda online

Direccioacuten Max-Pollin-Straszlige 1 85104 Pfoumlrring Alemania

Teleacutefono amp Faxtelf +49 (0) 8403 920-920email servicepollinde

Nuestros productos ODROID se pueden encon-trar en httpbitly1tXPXwe

EDITORIAL

ODROID Magazine que se publica mensualmente en httpmagazineodroidcom es la fuente de todas las cosas ODROIDianas bull Hard Kernel Ltd bull 704 Anyang K-Center Gwanyang Dongan Anyang Gyeonggi South Korea 431-815 bull fabricantes de la familia ODROID de placas de desarrollo quad-core y la primera arquitectura ARM ldquobigLITTLErdquo del mundo basada en una uacutenica placa Para informacioacuten sobre coacutemo enviar articulos contacta con odroidmagazinegmailcom o visita httpbitly1ypImXsUacutenete a la comunidad ODROID con miembros en maacutes de 135 paiacuteses en httpforumodroidcom y explora las nuevas tecnologiacuteas que te ofrece Hardkernel en httpwwwhardkernelcom

Atodo el mundo le encanta los juegos especialmente a los ingenieros de Hardkernel Nuestro proyecto estrella de este mes es un proyecto personalizado creado por Brian

John y Charles que resalta el potencial de la plataforma ODROID como emulador de consolas y sistema de juego versaacutetil Usando

la libreriacutea WiringPi y la popular im-agen de juegos GameStation Turbo de ODROID disentildearon una Arcade Box que es impresionante y te per-

mite ejecutar tus juegos favoritos a res-oluciones de 1080p iexclPuedes construir

la tuya propia y tendraacutes conversacioacuten para rato en tu proacutexima partida de juegos

Miltos ha creado un timbre remoto muy uacutetil para ver quieacuten llama a tu puerta enviando un correo electroacutenico

con una imagen John nos muestra coacutemo construir un Home Data Cen-ter con un ODROID-XU4 y Bo continuacutea sus croacutenicas de cientiacutefico loco con un sensor de ultrasonidos para su vehiacuteculo Tobias presenta OpenFodder un clon de Cannon Fodder que captura la belleza del juego original Nanik analiza el uso de la red en Android y Bruno nos trae otra entrega de su famosa serie de juegos Android Causality

Manuel Adamuz Editor EspantildeoiTengo 31 antildeos y vivo en Sevilla Espantildea aunque naciacute en Granada Estoy casado con una mujer maravillosa y tengo un hijo Hace unos antildeos trabajeacute como teacutecnico informaacutetico y programador pero mi trabajo actual estaacute relacionado con la gestioacuten de calidad y las tecnologiacuteas de la informacioacuten ISO 9001 ISO 27001 ISO 20000 Soy un apasionado de la informaacutetica especialmente de los microordenadores como el ODROID Raspberry Pi etc Me encanta experimentar

con estos equipos y traducir ODROID Magazine Mi esposa dice que estoy loco porque soacutelo pienso en ODROID Mi otra aficioacuten es la bicicleta de montantildea a veces participo en competiciones semiprofesionales

Andrew Ruggeri Editor AdjuntoSoy un ingeniero de sistemas Biomeacutedicos anclado en Nueva Inglaterra que actualmente trabaja en la industria aeroespacial Un microcontrolador 68HC11 de 8 bits y el coacutedigo ensamblador son todo lo que me interesa de los sistemas embebidos Hoy en diacutea la mayoriacutea de los proyectos en los que trabajo estaacuten en lenguajes C y C ++ o en len-guajes de alto nivel como C y Java Para muchos proyectos utilizo placas ODROID pero auacuten sigo intentando utili-zar los controladores de 8 bits cada vez que puedo (soy un fan de ATMEL) Aparte de la electroacutenica soy un amante de

la fotografiacutea analoacutegica y desarrollo la peliacutecula friki con la que disfruto intentando hablar en idiomas extranjeros

Venkat Bommakanti Editor AdjuntoSoy un apasionado de los ordenadores desde la bahiacutea de San Francisco en California Procuro incorporar muchos de mis intereses en proyectos con ordenadores de placa reducida tales como pequentildeos modificaciones de hardware carpinteriacutea reutilizacioacuten de materiales desarrollo de software y creacioacuten de grabaciones musicales de aficionados Me encanta aprender continuamente cosas nuevas y trato de compartir mi alegriacutea y entusiasmo con la comunidad

Josh Sherman Editor AdjuntoSoy de la zona de Nueva York y ofrezco mi tiempo como escritor y editor para ODROID Magazine Suelo experi-mentar con los ordenadores de todas las formas y tamantildeos haciendo trizas las tablets convirtiendo Raspberry Pi en PlayStations y experimentado con los ODROIDs y otros SoCs Me encanta trabajar con los elementos baacutesicos y asiacute poder aprender maacutes y disfrutar ensentildeando a otros escribiendo historias y guiacuteas sobre Linux ARM y otros proyectos experimentales divertidos

Nicole Scott Art EditorNicole es una experta en Produccioacuten Transmedia y Estrategia Digital especializa en la optimizacioacuten online y estrate-gias de marketing administracioacuten de medios sociales y produccioacuten multimedia impresa web viacutedeo y cine Ges-tionando muacuteltiples cuentas con agencias y productores de cine desde Analytics y Adwords a la edicioacuten de viacutedeo y maquetacioacuten DVD Nicole ayuda a sus clientes con todos los aspectos de la visibilidad online Posee un ODROID-U2 varios ODROID-U3 y Xu4rsquos y espera poder utilizar las uacuteltimas tecnologiacuteas tanto para a nivel personal como

empresarial El sitio web de Nicole lo puedes encontrar en httpwwwnicolecscottcom

James LeFevour Editor ArtiacutesticoSoy un especialista en medios digitales que disfruta trabajando como freelance en marketing de redes sociales y admin-istracioacuten de sitios web Cuanto maacutes aprendo sobre las posibilidades de ODROID maacutes me ilusiona probar cosas nuevas con eacutel Me traslade a San Diego desde el Medio Oeste de los EEUU Continuo muy enamorado de muchos de los aspectos que la mayoriacutea de la gente de la Costa Oeste ya da por sentado Vivo con mi encantadora esposa y nuestro

adorable conejo mascota el cual mantiene mis libros y material informaacutetico en constante peligro

Bruno Doiche Editor Artiacutestico SeniorJugoacute a alrededor de 20 juegos este mes pero soacutelo encontroacute uno que valiera la pena

NUESTRO MARAVILLOSO PRESONAL ODROIDIAN

Rob Roy Editor JefeSoy un programador informaacutetico que vive y trabaja en San Francisco CA en el disentildeo y desarrollo de aplicaciones web para clients locales sobre mi cluster ODROID Mis principales lenguajes son jQuery angular JS y HTML5CSS3 Tambieacuten desarrollo SO precompilados Kernels personalizados y aplicaciones optimizadas para ODROID basadas en las versiones oficiales de Hardkernel por los cuales he ganado varios Premios Utilizo mi ODROIDs para diversos

fines como centro multimedia servidor web desarrollo de aplicaciones estacioacuten de trabajo y como plataforma de juegos Puedes echar un vistazo a mi coleccioacuten de 100 GB de software ODROID kernel precompilados e imaacutegenes en

httpbitly1fsaXQs

INDICE

hoMe DAtA ceNter - 20

JUeGoS liNUx opeN foDDer - 12

JUeGoS ANDroiD cAUSAlity - 14

MANUAl xU4 - 19

hifi ShielD 2 - 18

DeSArrollo ANDroiD - 29

ArcADebox - 23

liNeAGeoS - 11

coNocieNDo UN oDroiDiAN - 32

reMote pi - 15

tiMbre - 6

SeNSor UltrASoNico - 30

En este proyecto vamos a convertir el ODROID-C2 (httpbitLy 1oTJBya) en un inteligente timbre IoT que tomaraacute una foto de quienquiera que lo haga sonar

y la enviaraacute por correo electroacutenico al titular de una cuenta de Gmail Ademaacutes el dispositivo archivaraacute las fotos por fecha y hora dando la posibilidad de comprobar cualquier actividad sospechosa o simplemente para mantener un registro de todas las personas que tocan el timbre Es faacutecil ver que este ldquointeli-genterdquo timbre que utiliza un ODROID-C2 como piedra an-gular es una poderosa herramienta de seguridad y vigilancia el cual seraacute muy uacutetil para cualquier vivienda

Requisitos de hardwarebull ODROID-C2 (httpbitly1oTJBya)bull Webcam ODROID (httpbitly2iBHKPD)bull Adaptador Wi-fi (httpbitly1M4LdiC)bull 1x mini placa de pruebasbull 1x Resistencia 1 KΩbull 1x Resistencia 10 KΩbull 1x Pulsadorbull ~8x cables dumpon (el kit Tinkering C httpbit

ly1YNPN6kes una buena opcioacuten para este y futuros proyectos)

Requisitos de Softwarebull Ubuntu 1604 v20 de Hardkernel (httpbit

ly2cBibbk)bull Python 27 or 33 (preinstalado en Ubuntu)bull Libreriacutea WiringPi para controlar los pines GPIO del

ODROID-C2 Puedes aprender a instalarla con la guiacutea que hay disponible en httpbitly2ba6h8o

Montando el dispositivo IoT Para cablear las conexiones usamos los cables macho a hem-

bra y macho a macho Dupont El extremo hembra del cable Dupont macho a hembra se conecta al cabezal macho del ODROID-C2 y el otro extremo a los orificios de la placa de pruebas Ve consultando el esquema de distribucioacuten de los pines

de Hardkernel a medida que vayas creando las conexiones Este esquema lo puedes encontrar en httpbitly2aXAlmt El pin fiacutesico 1 es VCC y proporciona 33V a nuestro circuito co-nectamos el pin en la primera liacutenea vertical de nuestra placa de pruebas cerca del borde Puesto que vamos a utilizar el pin 6 como puesta a tierra comuacuten eacuteste lo conectaremos a la segunda liacutenea vertical de nuestra placa de pruebas El resto del circuito es muy simple puedes seguir el esquema de la Figura 1

La Webcam ODROID la tienes que conectar al ODROID-C2 a traveacutes de uno de los puertos USB disponibles en la placa El timbre se controla con el pin 15 tal y como puedes ver en la figura Ahora que tenemos el hardware listo iexclVamos a sumergirnos en el coacutedigo y hacer que el timbre suene ldquointeli-gentementerdquo

SoftwareLa parte central del coacutedigo ha sido extraiacuteda de un proyecto

Github disponible en httpbitly2jEXRbR No obstante este coacutedigo de ejemplo ha sido modificado en gran medida

TIMBRE IOTRECIBE un AvISO POR CORREO ELECTROnICO DE LA PERSOnA quE LLAMA A Tu PuERTApor Miltiadis Melissas (miltos)

TIMBRE

figura 1 - esquema del timbre

ODROID MAGAZINE 6

para conseguir que funcione correcta-mente en el ODROID-C2 Lo maacutes importante de todo es que el re-mapeo desde RPiGPIO a la libreriacutea WiringPi2 ya estaacute terminado puesto que Wiring-Pi2 es compatible con el ODROID-C2 Consulta la excelente guiacutea GPIO pro-porcionada por Hardkernel en httpbitly2jEUjWX Todo el coacutedigo esta descrito en los siguientes apartados de-limitado entre lsquoltgtrsquo con su correspon-diente descripcioacuten debajo

El coacutedigo baacutesicode odroidbellpy

ltimport wiringpi2 as odroidgt

Empezaremos importando la libreriacutea wiringpi2 Las instrucciones para in-stalar esta libreriacutea y poder controlar los pines GPIO del ODROID-C2 la puedes encontrar en httpbitly2ba6h8o

ltimport timegt

Importamos el moacutedulo time

ltimport osgt

Importamos el moacutedulo os

ltimport globgt

Importamos el moacutedulo glob

ltimport sysgt

TIMBRE

figura 2 - el sistema completo c2

Importamos el moacutedulo sys

ltodroidwiringPiSetup()gt

Hemos configurado el moacutedulo wi-ringPi2 conforme a la tabla que nos proporciona Hardkernel en httpbitly2aXAlmt

ltButton = 3gt

Este es en realidad el pin fiacutesico 15 seguacuten la tabla de httpbitly2aXAlmt

ltodroidpinMode(Button0)gt

Fijamos el pulsador como entrada

ltodroid

pullUpDnControl(Button1)gt

Activamos la resistencia de parada y arrastre En este caso parado tal y como lo indica el argumento 1

loop

Estamos entrando en un bucle ya que los dispositivos IoT siempre estaacuten en modo de espera

ltprint(ldquoProgram Runningrdquo)gt

La uacutenica finalidad de esto es la moni-torizacioacuten

oses

while Trueloops forever till

keyboard interrupt (ctr + C)gt

ltif odroiddigitalRead(Button)

== False when button is un-

pressedgt

ltsysstderrwrite(ldquordquo)gt

Si no se presiona el timbre imprimi-mos puntos en la pantalla usando la li-breriacutea sys

lttimesleep(1)gt

Se comprueba si se ha tocado el pul-sadortimbre cada segundo

ltelsegt

ltprint(ldquoButton Pressedrdquo)gt

Se ha presionado el pulsadortimbre

------| photo amp Bell

|------

Get FileName

ltnow = timestrftime(ldquoDatem-

d-yTimeH-M-Srdquo)gt

Declaramos la variable now con la fe-cha y hora que usaremos en la foto

Make command to run odroidC2

sh

ltcommand = ldquobash odroidC2sh

ldquo + str(now)gt

Invocamos el script shell odroidC2sh (ver a continuacioacuten)

-- odroidC2sh is an Shell

script that

-- is responsible for tak-

ing the photo and

-- making the Doorbell

Noise

--- We insert the ldquoNowrdquo ar-

gument so the python

--- script knows what the

filename of the

--- picture will be so it

can pass it on into the

ODROID MAGAZINE 7

ltmpv ringtonemp3gt

Finalmente haremos sonar el timbre usando un programa llamado mpv que ya estaacute incluido en Ubuntu 1604 v20 de Hardkernel (httpbitly2cBibbk) En otras palabras usamos el Mplayer para reproducir este archivo

Configurar el coacutedigo de Gmail

La mayoriacutea de la gente tiene una cuenta de Gmail Si no la tienes es muy faacutecil crearte una y lo maacutes importante de todo es gratis En realidad para que este script de Gmail funcione correctamente necesitamos dos cuentas de correo elec-troacutenico el correo electroacutenico del remi-tente y la cuenta de correo electroacutenico del destinatario y siempre es asiacute Por supuesto puede enviar un correo elec-troacutenico desde y hacia la misma cuenta pero es maacutes elegante crear una segunda cuenta de correo electroacutenico con el fin de estar al tanto de las fotos con el registro de la fecha y hora por separado Tambieacuten recomiendo que la cuenta de correo elec-troacutenico del destinatario sea la que utilices en tu dispositivo moacutevil para que el dis-positivo te avise cada vez que alguien lla-me a tu puerta No olvides permitir que ldquo las aplicaciones menos segurasrdquo tengan acceso a tu cuenta de Gmail (httpbitly124TgWN)

Vamos a examinar el script python llamado IoTOdroidpy

ltfrom emailmimetext import MIM-

ETextgt

ltfrom emailmimemultipart import

MIMEMultipartgt

Usamos esos dos moacutedulos porque necesitamos enviar un correo electroacutenico limpio con un remitente un receptor y un asunto

ltfrom emailmimeapplication im-

port MIMEApplicationgt

Tambieacuten importamos el moacutedulo re-

Script shell OdroidC2sh

El script OdroidC2sh es respon-sable de tomar la foto y hacer sonar el timbre La funcioacuten del argumento lsquoNowrsquo es pasar el nombre del archivo de la foto al script de Gmail En otras palabras es el conector entre nuestro coacutedigo baacutesico odroidbellpy y el script Odroid-IoTNo-tifierpy El script OdroidC2sh es muy simple

ltcd photosgt

Cambiamos desde directorio actual al directorio ltphotosgt

ltecho ldquoTaking the Photordquogt

ltnow=$1gt

ldquoNowrdquo es la fecha y hora de registro del nombre del archivo

ltechogt

ltfswebcam -d devvideo0 $now

jpggt

Este es el comando baacutesico para tomar la foto Utilizamos el comando fsweb-cam Si la aplicacioacuten fswebcam no estaacute instalada en tu sistema puedes instalarla con el siguiente comando

$ sudo apt-get install fswebcam

La sintaxis del comando es obvia toma una foto y usa la fecha y hora de registro como nombre de archivo Cada vez que se pulse el pulsador OdroidC2sh es activado por odroidbellpy El paraacute-metro -d determina el recurso a utilizar en nuestro caso devvideo0

ltecho ldquoPic Takenrdquogt

ltechordquordquogt

ltecho ldquoRinging Bellrdquogt

ltecho ldquordquogt

ltcd gt

Cambia de nuevo al directorio padre

--- email script (so it

knows what file to email

run command

ltossystem(command)gt

A continuacioacuten invocamos el co-mando system para ejecutar el script de correo electroacutenico

diagnostics

ltprint(ldquoFilenamerdquo now)gt

Imprimimos el ldquofilenamerdquo de la foto con la fecha y hora actuales

----| Email |----

ltprint(ldquoEmailrdquo)emailgt

ltemailcommand = lsquosudo python

IoTOdroidpy ldquoThis person is at

your doorrdquorsquo + lsquo ldquophotosrsquo + now +

lsquojpgrdquorsquogt

Enviamos la foto a la cuenta de Gmail del titular con la fecha y hora y el asunto ldquoThis person is at your doorrdquo

ltossystem(emailcommand) run-

ning the Email script withgt

-- the subject as ldquoSomeone

is ringing the doorbellrdquo and the

filename

-- We made before at the

-Photo amp Bell- section

Y finalmente lo enviamos

-- End Diagnostic Info

print(ldquoDone Processrdquo)

Todo estaacute hecho asiacute que el script fi-naliza su trabajo

-space out for next ldquoPress of

Buttonrdquo

ltprint(ldquordquo)gt

ltprint(ldquordquo)gt

Hacemos hueco para el siguiente ci-clo (proacutexima llamada al timbre)

TIMBRE

ODROID MAGAZINE 8

figura 3 - Alerta de correo electroacutenico de que alguien estaacute en la puerta

ltserverstarttls()gt

Configuramos y entramos en modo TLS TLS significa Transport Layer Se-curity (Seguridad de la capa de trans-porte) de modo que cualquier comando SMTP que siga este modo seraacute cifrado

ltserverlogin(lsquoltFrom

EmailgtrsquorsquoltFrom passwordgtrsquo)gt

Es hora de entrar en tu cuenta de Gmail de modo que necesitamos las credenciales correctas

ltserversendmail(msg[lsquoFromrsquo]

emaillist msgas_string())gt

Usando el anterior comando final-mente enviamos el correo electroacutenico Procura evitar el spoofing e introduce aquiacute tu direccioacuten de correo electroacutenico real El paraacutemetro emaillist es el que

hemos definido antes y el uacuteltimo paraacute-metro (msaas_string ()) el mensaje en forma de cadena con el archivo adjunto que es en este caso la foto El resultado lo puedes apreciar en la Figura 3

Testeando y ejecu-tando el coacutedigo

Desde el terminal (CTRL-T) eje-cutamos odroidbellpy con privilegios sudo

$ sudo python odroidbellpy

En este momento el dispositivo IoT se pone en modo de espera y apa-

ltmsg[lsquoReply-torsquo] = lsquoxyzgmail

comrsquogt

Correo electroacutenico del destinatario

ltmsgpreamble = lsquoMultipart

massagenrsquogt

El atributo preamble contiene el tex-to principal extra-blindado de los docu-mentos MIME por eso lo incluimos aquiacute

ltpart = MIMEText(ldquoHello The

doorbell is ringing A photo of

the person ringing the doorbell

has been attachedrdquo)gt

El cuerpo del mensaje

ltmsgattach(part)gt

ltpart =

MIMEApplication(open(str(sys

argv[2])rdquorbrdquo)read())gt

ltpartadd_header(lsquoContent-

Dispositionrsquo lsquoattachmentrsquo

filename=str(sysargv[2]))gt

Adjuntamos la foto al mensaje

ltserver = smtplibSMTP(ldquosmtp

gmailcom587rdquo)gt

Especificamos el servidor smtp que queremos usar y el puerto que utiliza el servidor de Gmail con el puerto 587 Tambieacuten puede usar el puerto 465 aunque no es mala idea comprobar con Google el puerto correcto por si acaso ha cambiado

ltserverehlo()gt

Especificamos el servidor smtp que queremos usar y el puerto que utiliza el servidor de Gmail con el puerto 587 Tambieacuten puede usar el puerto 465 aunque no es mala idea comprobar con Google el puerto correcto por si acaso ha cambiado

sponsable del archivo adjunto MIME MIME representa las Extensiones Mul-tiuso para el Correo en Internet Es una forma de identificar los archivos en In-ternet seguacuten su naturaleza y formato

ltimport smtplibgt

ltfrom smtplib import SMTPgt

Esta es la baacutesica y nativa libreriacutea en Python para enviar correos electroacutenicos de modo que no hay necesidad de insta-lar libreriacuteas externas smtplib Desde esta libreriacutea importamos la funcioacuten SMTP

ltimport sysgt

Importamos el moacutedulo de funcio-nes y paraacutemetros especiacuteficas del sistema puesto que necesitaremos el script ltargvgt de este moacutedulo (ver a continuacioacuten)

ltrecipients = [lsquoltYourEmailgtrsquo]gt

Tu direccioacuten de correo electroacutenico ya que tuacute eres el destinatario de las fotos

ltemaillist = [elemstrip()

split(lsquorsquo) for elem in recipi-

ents]gt

Hacemos una lista de correo elec-troacutenico en la que separaremos y quita-remos los caracteres pertinentes de cada elemento de la lista de destinatarios

ltmsg = MIMEMultipart()gt

Definimos el variable message (msg) como una Extensioacuten Multiuso para el Correo en Internet llamando a la fun-cioacuten MIMEMultipart

ltmsg[lsquoSubjectrsquo] = str(sys

argv[1])gt

El asunto del nuestro mensaje

ltmsg[lsquoFromrsquo] = lsquoltFrom Emailgtrsquogt

Tu direccioacuten de correo electroacutenico

TIMBRE

ODROID MAGAZINE 9

import wiringpi2 as odroid

import time

import os

import glob

import sys

odroidwiringPiSetup()

Button = 3

odroidpinMode(Button0)

odroidpullUpDnControl(Button1)

loop

print(ldquoProgram Runningrdquo)

while Trueloops forever till

keyboard interupt (ctr + C)

if odroiddigitalRead(Button)

== False when button not

pressed

sysstderrwrite(ldquordquo)

timesleep(1)

else

print(ldquoButton Pressedrdquo)

------| photo amp Bell

|------

Get FileName

now = timestrftime(ldquoDatem-

d-yTimeH-M-Srdquo)

Make command to run

odroidC2sh

command = ldquobash odroidC2sh ldquo

+ str(now)

-- odroidC2sh is an Shell

script that

-- is responsible for tak-

ing the photo and

-- making the Doorbell

Noise

--- We insert the ldquoNowrdquo ar-

gument so the python

--- script knows what the

file name of the

--- picture will be so it

can pass it on into the

--- email script (so it

knows what file to email

figura 4 ndash el script python del timbre en ejecucioacuten

run command

ossystem(command)

diagnostics

print(ldquoFilenamerdquo now)

----| Email |----

print(ldquoEmailrdquo)email

emailcommand = lsquosudo python

IoTOdroidpy ldquoSomeone is ringing

the doorbellrdquorsquo + lsquo ldquophotosrsquo +

now + lsquojpgrdquorsquo

ossystem(emailcommand) run-

ning the Email script with

-- the subject as ldquoSomeone

is ringing the doorebellrdquo and the

filename

-- We made before at the

-Photo amp Bell- section

-- End Diagnostic Info

print(ldquoDone Processrdquo)

-space out for next ldquoPress

of Buttonrdquo

print(ldquordquo)

print(ldquordquo)

OdroidC2sh

binsh

cd photos

echo ldquoTaking the Photordquo

now=$1 Now is the filename time

stamp

take pic

fswebcam -d devvideo0 $nowjpg

echo ldquoPic Takenrdquo

echordquordquo

ring Bell

echo ldquoRinging Bellrdquo

echo ldquordquo

echo ldquordquo

cd

mpv ringtonemp3

IoTOdroidpy

from emailmimetext import MIM-

EText

from emailmimeapplication im-

port MIMEApplication

rece en pantalla el mensaje ldquoProgram is runningrdquo Al mismo tiempo aparecen puntos ldquordquo en la pantalla uno a uno indicando al usuario que el dispositivo estaacute funcionando con normalidad Cu-ando alguien pulsa el botoacuten (timbre) el script OdroidC2sh se ejecuta con una doble finalidad Primero toma una in-

stantaacutenea de la persona que hace sonar el timbre En segundo lugar enviacutea el correo electroacutenico a traveacutes de IoTOdroidpy a la cuenta de Gmail del propietario con la fecha y hora de registro de la foto que se adjunta Despueacutes vuelve al modo de espera y el timbre IoT suena

Notas finalesPor supuesto este proyecto se podriacutea

mejorar de muchas formas Por ejemplo se podriacutea antildeadir un LED en el timbre IOT que indicara su correcto funciona-miento Un dispositivo maacutes complejo similar a eacuteste podriacutea usarse como timbre comercial con la ayuda de un moacutedulo placa releacute Tampoco seriacutea complicado incluir la posibilidad de que grabase una pequentildea grabacioacuten de viacutedeo junto con las fotos haciendo que el timbre ldquointeli-genterdquo sea auacuten maacutes inteligente Ademaacutes como dice el viejo refraacuten ldquoiexclla perfeccioacuten es el eterno enemigo de lo funcionalrdquo

Coacutedigo deltimbre IoT

Aquiacute tienes una copia de todo el coacute-digo Al final de este artiacuteculo tienes un enlace a la paacutegina github que tambieacuten contiene el coacutedigo

Odroidbellpy

TIMBRE

ODROID MAGAZINE 10

from emailmimemultipart import

MIMEMultipart

from smtplib import SMTP

import smtplib

import sys

recipients = [lsquoabcgmailcomrsquo]

emaillist = [elemstrip()

split(lsquorsquo) for elem in recipi-

ents]

msg = MIMEMultipart()

msg[lsquoSubjectrsquo] = str(sysargv[1])

msg[lsquoFromrsquo] = lsquoxyzgmailcomrsquo

msg[lsquoReply-torsquo] = lsquoabcgmailcomrsquo

msgpreamble = lsquoMultipart

massagenrsquo

part = MIMEText(ldquoHello There is

someone ringing your doorbell A

picture of this person has been

atachedrdquo)

msgattach(part)

part =

MIMEApplication(open(str(sys

argv[2])rdquorbrdquo)read())

partadd_header(lsquoContent-

Dispositionrsquo lsquoattachmentrsquo

filename=str(sysargv[2]))

msgattach(part)

server = smtplibSMTP(ldquosmtp

gmailcom587rdquo)

serverehlo()

serverstarttls()

serverlogin(lsquoxyzgmail

comrsquorsquoyourpassword herersquo)

serversendmail(msg[lsquoFromrsquo]

emaillist msgas_string())

El coacutedigo del proyecto estaacute disponible en httpbitly2jMAdMY usando el siguiente comando

$ git clone

httpsgithubcommiltiadisme-

lissas

IoTOdroidC2Doorbellgit

TIMBRE

A finales de 2016 los usuarios de Cyanogenmod se horrorizaron cuando Cyanogen anuncioacute la

cancelacioacuten de sus servicios dejando a todos los usuarios que dependiacutean de Cyanogenmod sin soporte Sin em-bargo en poco tiempo llegariacutea una so-lucioacuten en forma de LineageOS Si eres un usuario del ODROID-XU3 XU4 es el momento perfecto para colaborar con la versioacuten de LineageOS en los foros ODROID

Caracteriacutesticas- Android 711 Nougat lineageoS 141- Kernel 3109- openGl eS 112030 (aceleracioacuten por GpU)- opencl 11 ep (aceleracioacuten por GpU)- funcioacuten multiusuario habilitada (hasta 8 usuarios)- ethernet integrado y soporte para ether-net Gigabit USb 30 - Soporte para rtl8188cUS rtl8191SU y USb Wireless ralinkt- Soporte bluetooth USb (ble A2dp Sink)- Soporte para dongle GpS USb- Anclaje a red USb - punto de acceso Wi-fi portaacutetil- Soporte DAc USb nativo para Android

LInEAGEOS-141 ODROID-Xu3Xu4OLvIDATE DE CyAnOGEn EL fuTuRO ESTA AquIpor voodik editado por bruno Doiche

LINEAGEOS

- Soporte para Webcam USb UVc- Soporte hDMi-cec- Selinux

Problemas conocidosEn este momento soacutelo admite moacutedu-

los Bluetooth de bajo consumo v40 (BLE) Consulta el Moacutedulo Bluetooth 2

Coacutemo instalarloEn primer lugar necesitas preparar

tu emmcsd con imaacutegenes especiales de auto-instalacioacuten

La puedes encontrar aquiacutehttpophmdrjrnetvoodik5422

ODROID-XU3AndroidCM-141-ATV

Alpha-01_110217

Graba la imagen en tu eMMCsd a traveacutes de Win32DiskImager y arranca el dispositivo Tendraacute que esperar paci-entemente durante el primer arranque ya que el proceso de actualizacioacuten puede llegar a tardar hasta 20 minutos

Coacutedigo fuente Kernel

$ git clone httpsgithubcom

voodikandroid_kernel_hardkernel

_odroidxu3 -b cm-140_5422

ODROID MAGAZINE 11

SNES 3DO y Sega Genesis El juego teniacutea diferentes escenarios para jugar la selva la nieve y el desierto

Open Fodder ofreciacutea 23 misiones que se dividiacutean en varias fases En total suponiacutea superar 72 niveles para llevar

Este mes me gustariacutea hablar de un juego llamado Open Fodder se trata de un remake del claacutesico

juego de Amiga Cannon Fodder desar-rollado por Sensible Software en 1993 Utiliza los datos del juego original Can-non Fodder para conseguir una experi-encia muy similar al juego original en tu ODROID

Muchos de los populares juegos de Linux de hoy en diacutea como Stratagus y Freeciv son en realidad remakes de claacutesicos juegos de DOS de mediados y finales de los 90 y Open Fodder no es diferente El remake de Cannon Fodder es un juego disparos accioacuten y estrategia donde controlas a un pequentildeo grupo de soldados que avanza a traveacutes de varias docenas de niveles para matar a los sol-dados enemigos destruir tanques echar abajo edificios y derrotar a tus enemigos El juego fue lanzado por primera vez para Amiga en 1993 y fue exportado por sus desarrolladores a MS-DOS Atari Jaguar

a tu escuadroacuten a la victoria Cuando se lanzoacute el juego fue muy elogiado por varias revistas de juego Amiga con pun-tuaciones que llevaban al 95 por ciento y fue considerado como uno de los mejo-res juegos lanzados en 1993 En general siguioacute siendo uno de los mejores juegos jamaacutes creado para la plataforma Amiga durante sus 11 antildeos de vida

Desde un punto de vista maacutes poliacutetico el juego lleva impliacutecito un intenso men-saje sobre la guerra en siacute misma puesto que juegas y llevar a tus soldados a una muerte inevitable Cada misioacuten se inicia

JuEGOS LInuXOPEn fODDERpor tobias Schaaf (meveric)

JUEGOS LINUX

figura 1 - el logotipo de cannon fodder en el cual estaacute basado open fodder

figuras 2 3 y 4 - los niveles de selva desierto y nieve en open fodder

figuras 5 y 6 - A medida que avanzas en el juego tu larga liacutenea de reclutas se con-vierte gradualmente en cruces alineadas como en un cementerio

ODROID MAGAZINE 12

nas segundas partes ademaacutes de algunas misiones de bonificacioacuten Cannon Fod-der 2 salioacute un antildeo maacutes tarde pero fue maacutes bien un ldquodisco de datosrdquo con ex-pansiones que una secuela ya que en su mayor parte presentaba maacutes misiones en lugar de nuevas caracteriacutesticas Tambieacuten estaba el X-Mas de Amiga que ofreciacutea algunas misiones diferentes basadas en el juego Cannon Fodder

Ejecutando Open Fodder

Open Fodder es un remake del motor del juego Cannon Fodder que lleva el juego a los sistemas operativos modernos Al igual que otras migraciones del motor del juego (como OpenTTD) puede uti-lizar los datos del juego original con esta versioacuten del motor para ejecutar el juego en tus dispositivos modernos Esta mi-gracioacuten tambieacuten cuenta con una versioacuten exportada para los dispositivos ARM lo que significa que podemos ejecutarlo igualmente en nuestros ODROIDs

Todaviacutea estaacute en desarrollo pero ya funciona bastante bien Como de cos-tumbre se puede instalar desde mi repo-sitorio y puesto que soacutelo requiere SDL2 y SDL2 Mixer como dependencias prin-cipales deberiacutea funcionar en Debian y

con un nuevo grupo de reclutas que se alinean esperando a unirse al combate Los soldados desechables (de ahiacute el nom-bre de cannon fodder Carne de Cantildeon) poco a poco se convierten en cruces alin-eadas dando forma a un cementerio mil-itar a medida que vas completando cada misioacuten formaacutendose maacutes y maacutes filas con-forme vas enterrando a tus predecesores Sin embargo los desarrolladores le di-eron un cierto toque de humor ya que los primeros soldados de tu escuadroacuten (y por tanto los casi seguro que moriraacuten) llevan de hecho los nombres de las seis personas que componiacutean el equipo de desarrollo del juego

Si nos fijamos bien el juego incor-poraba algunos detalles bastante intere-santes Por un lado tiene su propia can-cioacuten ldquo War never been so much funrdquo que suena durante la intro del juego iexclUno de los desarrolladores del juego Jon Hare compuso la muacutesica junto con el compositor Richard Joseph Si teniacuteas el Amiga CD32 tambieacuten recordaraacutes una pista adicional que incluiacutea un video en el cual los desarrolladores se disparaban entre siacute con armas de juguete (httpbitly2l67bFy) iexclSin duda se divirtieron bastante desarrollando este juego

Cannon Fodder tambieacuten tuvo algu-

JUEGOS LINUX

Ubuntu por igual las puedes encontrar en mi lista principal de paquetes para armhf y jessiemain para arm64

Se puede instalar con este comando en un dispositivo ODROID que ejecute Debian suponiendo que ya tengas con-figurados mis repositorios o esteacutes usando una de mis imaacutegenes de Debian (httpbitly13v98ly)

$ apt-get install

openfodder-odroid

He alterado ligeramente el juego para que siempre se ejecute en modo pantalla completa aunque si lo deseas puedes cambiar al modo de ventana simple-mente pulsando F11 cuando tenga el juego activado

Convirtiendo los datos del juego

Por siacute sola mi versioacuten de Open Fod-der viene con el especial Amiga X-Mas ademaacutes de varios niveles demo dis-ponibles de forma gratuita Si quieres jugar el juego real tendraacutes que importar los datos desde un CD Cannon Fodder

Si estaacute usando un ODROID para ju-gar al Open Fodder puedes localizar las carpetas de los datos del juego en la car-peta $HOMEopenfodderData Por ejemplo homeodroidopenfodderDataDos_CD es una de esas carpetas de datos del juego Existen varias carpe-tas de datos del juego que puedes usar dependiendo de la versioacuten que tengas del juego Cannon Fodder

Dos_CDAunque el juego es compatible con

muchas y diferentes fuentes del juego actualmente soacutelo Dos_CD parece ser una versioacuten de Open Fodder ldquototal-mente compatiblerdquo con muy pocos er-rores y problemas El resto de fuentes del juego pueden tener problemas

Aquiacute tienes un consejo raacutepido Aunque se llama Dos_CD cogeraacute cu-alquier versioacuten de DOS de Cannon Fodder que puedas encontrar Si tienes

figura 7 - Sensible Software - los desarrolladores de cannon fodder

ODROID MAGAZINE 13

WHDLoad en un Amiga (o WinUAE) para extraer los archivos del juego y co-piarlos en la carpeta DataAmigardquo No lo he probado pero si tienes la ldquoCannon Fodder Collectionrdquo de Amiga CD32 no oficial puedes copiar el contenido de FodderNew en esta carpeta lo que tendraacute como resultado niveles completamente diferentes Puede considerarse como una versioacuten maacutes compleja del juego aunque a la vez maacutes divertida Por lo tanto bien poner los archivos originales de Amiga aquiacute o bien los archivos FodderNew de la ldquoCannon Fodder Collectionrdquo

Dos2_CDDos2_CD es en realidad la carpeta

de la versioacuten DOS de Cannon Fodder 2 pero tambieacuten funciona con la versioacuten GoG Desafortunadamente tiene algu-nos problemas el maacutes grave es que el juego no tiene ninguacuten tipo de sonido o muacutesica Aparte de esto todo parece fun-cionar correctamente pero desconozco coacutemo reaccionaraacute en niveles posteriores La carpeta Data tambieacuten incluye las car-petas WAV Plus AmigaFormat_XMAS y Custom En WAV se almacenan los efectos de sonido por defecto para to-dos los juegos (Cannon Fodder) Plus es una demo del nuacutemero 31 la revista Amiga Power y AmigaFormat_XMAS es el Amiga Format Christmas Special Tambieacuten hay una carpeta Custom que te permite jugar otros juegos y mapas pero necesitan la versioacuten (CD) de DOS o de lo contrario no apareceraacuten

Notas finalesOpen Fodder es un buen proyecto

que te permite ejecutar este increiacuteble juego en sistemas modernos Realmente me gusta y estoy deseando ver coacutemo pro-gresa Espero que las versiones de Amiga y Cannon Fodder 2 sean pronto total-mente compatibles Tal vez incluso poda-mos ver mejoras graacuteficas con el tiempo Me gustariacutea ver graacuteficos maacutes modernos ya que el juego es bastante antiguo y los graacuteficos no son los maacutes idoneos para res-oluciones 1080p

la versioacuten de disco de Cannon Fodder simplemente copia el CF_ENGDAT en la carpeta Dos_CD La versioacuten original de CD DOS teniacutea un archivo llamado cf_cddat Cambiar el nombre a CF_ENGDAT y copiarlo a la carpeta Dos_CD Si tienes la versioacuten GoG del juego soacutelo tiene que copiar CF_ENG DAT a la carpeta Dos_CD iexclEsta es una forma raacutepida y legal de conseguir el juego si estaacutes interesado

Aseguacuterate de que el nombre del ar-chivo este en mayuacutescula ya que el juego tiene en cuenta esta cuestioacuten Intenta que coincida todo para asegurarte de que las cosas funcionen sin problemas

Amiga_CDAmiga CD32 tambieacuten contaba con

una versioacuten de este juego Esta es la ver-sioacuten que incluye el video al que hemos hecho referencia anteriormente En el CD de Amiga CD32 hay una carpeta llamada Fodder El contenido de esta carpeta debe copiarse a la carpeta Ami-ga_CD Puedes extraer la segunda pista del CD y almacenarla como Track2flv en la misma carpeta con la finalidad de tener el archivo de video

Me topeacute con algunos problemas cu-ando haciacutea esto y descubriacute nuevamente que el juego buscaba muchos archivos en mayuacutesculas asiacute que utiliceacute el siguiente comando para copiar todos los archivos y tenerlos tambieacuten en mayuacutesculas en la carpeta Amiga_CD$ for files in `ls` do cp $files

`echo $files | tr lsquo[lower]rsquo

lsquo[upper]rsquo` done

Asiacute funcionaba bien pero teniacutea algu-nos fallos Por ejemplo la animacioacuten del helicoacuteptero al inicio de cada misioacuten no apareciacutea y el cursor cuando se guarda un archivo se distorsionaba Aparte de esto no he visto problemas importantes en la versioacuten Amiga CD32

AmigaLa Informacioacuten de desarrollador de

Open Fodder dice ldquoUsar el instalador

JUEGOS LINUXJUEGOS ANDROID

CAuSALITy un JuEGO DE ROMPE-CABEzAS COn PARA-DOJAS DE vIAJES En EL TIEMPO por bruno Doiche

Configura tuacute mismo los entornos extrantildeos e insoacutelitos y

ayuda a un grupo de astronautas varados a encon-trar una ruta hacia un lugar seguro Cada nivel al que te enfrentas representa un nuevo reto donde necesitas llevar a tu astronauta a una salida que coincida con su color Los maacutergenes de tiempo son cortos aunque es muy divertido Aunque formas parte de tan soacutelo una fraccioacuten de tiempo de la vida de tu personaje iexclten cuidado pasaraacutes un montoacuten de tiempo enganchado a este juego

httpsplaygooglecomstoreappsdetailsid=comlojugamesandroidCausality

el entorno 3D isomeacutetrico es magniacute-fico a menudo no superaba el nivel porque los graacuteficos me cautivaban

ODROID MAGAZINE 14

tePi necesitan estar conectados a otros distintos en el ODROID-C2 porque parece haber un conflicto La interfaz UART ocupa estos pines y el estado por defecto del ODROID (1=high en Pin 8) no es lo que espera la RemotePi (GPIO debe entrar en el valor por defecto 0=low para cortar la energiacutea tras el apagado) Pero puesto que necesitas utilizar cables de todos modos para conectar la Remot-ePi esto no supondraacute ninguacuten problema ya que simplemente puedes reconectar los cables a otros pines GPIO

Como evitamos el circuito de ali-mentacioacuten del ODROID encendieacutendo-lo a traveacutes de GPIO tambieacuten pasamos por alto la proteccioacuten ante subidas de tensioacuten 2526A del dispositivo pero no te preocupes La RemotePi tambieacuten tiene proteccioacuten ante subidas de tensioacuten que deberiacutea coincidir con el mismo val-or que en el caso de la RemotePi board para la Raspberry Pi 3 Sin embargo la RemotePi para la Raspberry Pi 2 es de soacutelo 2A Esto estaacute bien porque el valor es menor a los 26A del ODROID de modo el polyfuse de la RemotePi se ac-tivariacutea antes si conectas demasiados dis-

La RemotePi board (httpbitly2l8JcWU) que convierte cu-alquier mando a distancia en un

interruptor de encendido para tu orde-nador de placa reducida puede ser com-patible con el ODROIDC2 si sigues esta guiacutea Si utilizas tu dispositivo como centro multimedia esta placa te propor-cionara un receptor de infrarrojos y un circuito de alimentacioacuten asiacute como un botoacuten de encendido Puedes encender y apagar tu ODROID completamente a traveacutes de una sentildeal infrarrojos (IR) y simplemente presionar el botoacuten de en-cendido para apagarlo y reiniciarlo con seguridad La placa RemotePi es respon-sable del modo espera que absorbe una miacutenima energiacutea mientras el ODROID estaacute completamente apagado Por uacutel-timo la placa alimenta tu dispositivo a traveacutes de GPIO lo cual requiere un cable microUSB para conectarlo a la Re-motePi en lugar de utilizar un adaptador de corriente normal

Configuracioacuten de hardware

Puesto que la RemotePi estaba pen-sada originalmente para la Raspberry Pi 2 necesitaraacutes utilizar cables adiciona-les en lugar de colocarla justamente en cima del C2 para evitar interferir con el disipador de calor asiacute que debes re-cablear algunos pines Es necesario utili-zar cables con el diaacutemetro adecuado para los pines de 5V y puesta a tierra ya que la corriente podriacutea estar entre los 2A y 26A dependiendo de cuaacutentos dispositi-vos USB conectes a tu dispositivo

Los pines GPIO 8 y 10 de la Remo-

positivos no alimentados de forma exter-na que no es una buena idea en un SBC al fin al cabo No obstante debido a esta diferencia de amperaje una RemotePi para la Raspberry Pi 3 seriacutea la mejor op-cioacuten para este proyecto

Como resultado del nuevo cableado el firmware de RemotePi ya no se puede configurar de forma normal aunque nunca he usado esta funcioacuten Si fuera necesario configurar o actualizar el firm-ware necesitaraacutes volver a conectar los pines 8 y 10 de la RemotePi a los pines 8 y 10 del ODROID durante la actu-alizacioacuten del firmware y luego deshacer los cambios una vez que la actualizacioacuten haya finalizado Otra posibilidad es simplemente conectar una Raspberry Pi para actualizar el firmware Esto suena a un montoacuten de problemas pero en re-alidad simplemente es extender la con-exioacuten del cabezal y cambiar una liacutenea en el script principal y dos liacuteneas en otro script opcional si haces uso de ello

Re-cableando laconexioacuten GPIO

Dado que la RemotePi estaacute disentildeada

REMOTEPI BOARD PARA EL ODROID-C2por inifity85

REMOTEPI

figura 1 - remotepi board

ODROID MAGAZINE 15

ergiacutea completamenteIrswitchsh (solo cambia el script

original de MSL Digital de GPIOpin1 = 14 a GPIOpin1 = 225)

binbash

prevent restarting XBMC at

shutdown This is only used for

OpenElec before V5

LOCKDIR=rdquovarlockrdquo

LOCKFILE=rdquoxbmcdisabledrdquo

this is the GPIO pin receiving

the shut-down signal

Raspberry Pi pin8 GPIOpin1=14

Odroid-C2 pin26 GPIOpin1=225

GPIOpin1=225

functions

add_omit_pids()

omit_pids=rdquo$omit_pids -o $1rdquo

safe_shutdown ()

for OpenElec before V5

touch ldquo$LOCKDIR$LOCKFILErdquo

for OpenElec V5 and later

systemctl stop kodi

add_omit_pids $(pidof connmand)

add_omit_pids $(pidof dbus-dae-

mon)

killall5 -15 $omit_pids

for seq in `seq 1 10` do

usleep 500000

clear gt devtty1

killall5 -18 $omit_pids || break

done

sync

umount -a gtdevnull 2gtamp1

poweroff -f

echo ldquo$GPIOpin1rdquo gt sysclass

gpioexport

echo ldquoinrdquo gt sysclassgpio

gpio$GPIOpin1direction

while true do

sleep 1

power=$(cat sysclassgpio

gpio$GPIOpin1value)

if [ $power = 0 ] then

echo ldquooutrdquo gt sysclassgpio

gpio$GPIOpin1direction

echo ldquo1rdquo gt sysclassgpio

una carcasa personalizada de modo que el receptor integrado podriacutea estar oculto y no ser uacutetil En ese caso puedes desac-tivar el IR del ODROID en favor del re-ceptor externo GPIO-IR en la RemotePi y conectar el pin 12 Tienes disponible maacutes informacioacuten sobre el cambio al receptor GPIOIR en LibreELEC en httpbitly2lpDl27

Scripts de apagado para LibreELEC

Los dos scripts tratados a continu-acioacuten pueden descargarse desde la paacutegina de soporte de MSL Digital Solutions en httpbitly2kMxyVG En esta paacutegina tambieacuten encontraras una guiacutea para utili-zar estos scripts en otros sistemas opera-tivos como Volumio y RuneAudio

El script irswitchsh se usa para el apagado seguro a traveacutes de sistema In-frarrojos Tras pulsar el correspondiente botoacuten el sistema se apagaraacute de forma se-gura luego RemotePi esperaraacute a que el GPIO225 alcance el estado 0 (low) que aparece tras el cierre exitoso del sistema Finalmente cortaraacute la energiacutea

El script shutdownsh se usa para el apagado seguro a traveacutes de la interfaz del programa o script Despueacutes de navegar hasta el botoacuten de apagado en la GUI el sistema se apagaraacute de forma segura luego RemotePi esperaraacute a que el GPIO225 alcance el estado 0 (low) que apareceraacute tras apagarse el sistema de forma adec-uada y segura Finalmente cortaraacute la en-

originalmente para una Raspberry Pi desgraciadamente no es soacutelo enchufar y usar Necesitaraacutes volver a cablear dos pines usando los cables de todos los pines tal y como se muestra en la Figura 2 Re-cablea el pin 8 de la RemotePi al pin 26 del ODROID-C2 y el pin 10 de la RemotePi al pin 7 del ODROID-C2

Si no quieres utilizar el receptor IR de la RemotePi para el mando a distan-cia de LibreELEC puedes dejar desco-nectado el pin 12 La placa continuaraacute encendieacutendose y apagaacutendose a traveacutes del comando de control remoto IR pero el control de la GUI de LibreELEC seraacute asumido por el receptor de infrarrojos integrado en el ODROID Sin embargo si has comprado una RemotePi con un receptor IR y un LED externo es posible que hayas decidido colocarla dentro de

REMOTEPI

figura 3 - la remotepi ha sido recableada y montada en una carcasa personalizada

figura 2 - re-cableado Gpio

ODROID MAGAZINE 16

Centro Multimedia por ejemplo Esos comandos de apagado se equiparaacuten a eventos internos similar a cuando nave-gas por el menuacute de apagado de Kodi Sin utilizar este segundo script el sistema se cerraraacute con seguridad pero la placa Re-motePi no recibiriacutea ninguna indicacioacuten para monitorizar el GPIO225 de modo que no cortariacutea la energiacutea tras apagarse el sistema correctamente

Usando el receptor IR de la RemotePi

Si deseas utilizar el receptor IR de la RemotePi en lugar del receptor IR ODROID integrado tendraacutes que des-activar el sistema IR integrado y activar el receptor IR GPIO Para hacer esto en Ubuntu puede consultar el artiacuteculo de la Wiki de Hardkernel en httpbitly2l8KrWg Para Libre-ELEC echa un vistazo a mi mini-guiacutea en httpbitly2lLKj2A Para preguntas comentari-os o sugerencias visita el hilo original en httpbitly2mgFGKk

gpio$GPIOpin1value

sleep 3

safe_shutdown

fi

done

Shutdownsh (solo cambia GPIOpin =15 a GPIOpin =249 y GPIOpin1 =14 a GPIOpin1 =225)

binbash

if [ ldquo$1rdquo = ldquorebootrdquo ] then

Raspberry Pi pin10 GPIOpin=15

Odroid-C2 pin7 GPIOpin=249

GPIOpin=249

Raspberry Pi pin8 GPIOpin1=14

Odroid-C2 pin26 GPIOpin1=225

GPIOpin1=225

echo ldquo$GPIOpinrdquo gt sysclass

gpioexport

execute shutdown sequence on

pin

echo ldquooutrdquo gt sysclassgpio

gpio$GPIOpindirection

echo ldquo1rdquo gt sysclassgpio

gpio$GPIOpinvalue

usleep 125000

echo ldquo0rdquo gt sysclassgpio

gpio$GPIOpinvalue

usleep 200000

echo ldquo1rdquo gt sysclassgpio

gpio$GPIOpinvalue

usleep 400000

echo ldquo0rdquo gt sysclassgpio

gpio$GPIOpinvalue

set GPIO 14 high to feedback

shutdown to RemotePi Board

because the irswitchsh has

already been terminated

echo ldquo$GPIOpin1rdquo gt sysclass

gpioexport

echo ldquooutrdquo gt sysclassgpio

gpio$GPIOpin1direction

echo ldquo1rdquo gt sysclassgpio

gpio$GPIOpin1value

usleep 4000000

fi

El script shutdownsh es uacutetil si a vec-es usas las aplicaciones remotas Android Yatse o Kore o hotkeys para apagar tu

REMOTEPI

ODROID Talk Subreddit

httpwwwredditcomrodroid

ODROID Magazine

estaacute en Reddit

ODROID MAGAZINE 17

El HiFi Shield 2 (39$ httpbitly2lHSlZJ) es un Con-vertidor Digital a Analoacutegico de Alta definicioacuten (DAC) para el ODROID-C2 y el ODROID-C1+ Se trata de

una placa de sonido especial para el ODROID-C2 y C1 + que estaacute optimizada para mejorar la calidad de reproduccioacuten del sonido Ofrece un sonido muy bien equilibrado consistente intenso amplio y muy bien dimensionado por niveles Hemos analizado la calidad de audio de la salida HiFi Shield 2 DAC con un equipo estaacutendar de la industria del sonido llamado Au-dio Precision Audio Precision es un analizador de audio de alto rendimiento optimizado para la produccioacuten de audio digital

Usando el chip DAC PCM5242 de uacuteltima generacioacuten de Texas Instrument conocido como Burr-Brown el HiFi Shield 2 soporta formatos de audio de 16 24 y 32 bits con una ra-tio THD+N miacutenima (0002) y una dinaacutemica ideal (114dB +) ademaacutes de sorprendentes tasas de muestreo de 384 kHz La interfaz dedicada SPDIF soporta una definicioacuten de hasta 192kHz24bit a traveacutes de una salida oacuteptica (Toslink)

Si hacemos uso del puerto de expansioacuten I2S en el C2C1+ no es necesario ocupar un puerto USB permitiendo al usu-ario seleccionar el sistema de reproduccioacuten de audio que desee como Volumio y Debian (DietPi) para reproducir sonido HiFi

HIFI SHIELD 2

HIfI SHIELD 2EL MEJOR SOnIDO quE PODRAS COnSEGuIR En AnDROIDeditado por rob roy (robroy)

oDroiD-c2 y hifi Shield 2 Audio pb +J

primer plano de la placa con anotaciones

Distribucioacuten de los 7 pines i2S del c2c1+

la salida de audio es estaacutendar la salida de color rojo corresponde al canal de audio iz-quierdo y la salida de color blanco correspon-de al canal de audio derecho

ODROID MAGAZINE 18

Detalles

La guiacutea de configuracioacuten de UbuntuLinux para ODROID-C2 estaacute disponible en httpbitly2brrGdG y para ODROID-C1+ en httpbitly2lI7AC7 El sistema operativo oficial Volumio 2 se puede descargar desde httpbitly2kOJNAV y la imagen DietPi basada en Debian se encuentra en httpbitly2ls45yM Puede ver los esquemas en httpbitly2mnukV4

Diagrama por bloques del hifi Shield2

Caracteriacutesticasbull El control de volumen a traveacutes de la interfaz

i2c es una gran caracteriacutestica para mantener una buena calidad del sonido con varios voluacutemenes de salida de audio

bull Los puertos de salida incluyen terminales esteacute-reo rcA chapados en oro

bull La fuente de alimentacioacuten tiene habilitado un regulador de interferencias de ruido ultra-bajo lo cual reduce el ruido de la fuente de alimentacioacuten y aumenta en gran medida el ratio sentildealruido

bull La interfaz I2S permite la descodificacioacuten di-recta de la entrada digital a la salida analoacutegica utili-zando la sincronizacioacuten del reloj maestro

bull La superficie de la PCB estaacute chapada en oro so-bre 2 onzas de cobre lo cual garantiza la continui-dad de la sentildeal y reduce la reflexioacuten y deflacioacuten de la sentildeal

bull Dispone de almohadillas soldadas a la salida de audio balanceada (sentildeal diferencial)

bull La interfaz SPDIF dedicada es nueva admite una definicioacuten de hasta 192khz24bit a traveacutes de una nueva salida oacuteptica (toslink)

bull Este HiFi shield no es compatible con Android y hardkernel no tiene planes para hacerlo compatible y asiacute poder habilitar el controlador i2S en el Kernel y el hAl de Android

El Manual de usuario del ODROID-XU4 disponible en httpbitly1U9Q8yg ha sido revisado hace poco para incluir algunos de los perifeacutericos maacutes recientes como

la Expansion Board SmartPower2 y oCam Puesto que ahora Hardkernel tambieacuten ofrece Ubuntu 1604 todos los ejemplos de coacutedigo se han actualizado para que sean compatibles con el nuevo sistema operativo Si tiene comentarios preguntas o sugerencias visita el hilo de los foros ODROID en httpbitly1RykBrT

MAnuAL Xu4ACTuALIzADOREvISADO PARA uBunTu 1604 y LOS PERIfERICOS MAS RECIEnTESeditado por rob roy (robroy)

MANUAL XU4

el manual del oDroiD-xU4 incluye informacioacuten detallada de los diferentes sistemas operativos software y perifeacutericos disponibles para el oDroiD-xU4

ODROID MAGAZINE 19

El DevOps es complicado Los grandes proyectos de soft-ware como Mesos y Kubernetes desarrollan equipos como los que se encuentran en la mayoriacutea de las empre-

sas y organizaciones tecnoloacutegicas como CoreOS con la finali-dad de ayudar a los desarrolladores a poner sus aplicaciones en funcionamiento Sin embargo iquestcuaacutel seriacutea una buena solucioacuten para un desarrollador en solitario o una pequentildea red domeacutesti-ca iquestCoacutemo podemos usar el coacutedigo a nivel de infraestructura

Uso un portaacutetil Macintosh OSX para desarrollo pero para las aplicaciones de larga duracioacuten o aplicaciones que se ejecu-tan por la noche necesito un entorno remoto siempre activo ya que mi portaacutetil estaraacute fuera de liacutenea o en el tren conmigo mientras voy y vengo del trabajo Tiene su sentido no utilizar el ordenador como un entorno para la puesta en funcionamiento de aplicaciones

El ODROID-XU4 es un ordenador ideal para un entor-no de implementacioacuten remoto ya que es econoacutemico flexible cuenta con excelentes especificaciones teacutecnicas y puede ejecutar Linux Este artiacuteculo tiene por objetivo explicar coacutemo almacenar coacutedigo de implementacioacuten en tu repositorio de proyectos asiacute como automatizar las implementaciones y ejecuciones

Arch LinuxArch Linux es una distribucioacuten de Linux gratuita de coacutedigo

abierto que fue lanzada en 2002 Estaacute centrada en la elegancia la integridad del coacutedigo el minimalismo y la simplicidad y cuenta con que el usuario haga un esfuerzo en comprender el funcionamiento del sistema Arch Linux utiliza en particular un modelo de revisioacuten continua de modo que todo lo que se necesitas para conseguir el software del sistema maacutes reciente es actualizar el sistema de forma perioacutedica

Arch Linux puede ser algo difiacutecil de asimilar ya que uti-liza herramientas diferentes a las de una distribucioacuten Debian El gestor de paquetes se activa a traveacutes de ldquopacmanrdquo en lugar de ldquoapt-getrdquo y existe un gestor complementario de paquetes muy popular llamado ldquoyaourtrdquo Muchos de los servicios o her-ramientas maacutes comunes no se instalan por defecto

Arch Linux esta hecho principalmente para procesadores x86 pero un proyecto llamado Arch Linux ARM (ALARM) tiene una distribucioacuten ARM de Arch Linux para arquitectu-ras AArch64 ARMv8 y ARMv7 Hardkernel el fabricante de ODROIDs es de hecho un patrocinador del proyecto Arch Linux ARM

HOME DATA CENTER

HOME DATA CEnTERIMPLEMEnTACIOn DEL CODIGO COn ARCHLInuXpor John Skilbeck

Configurar la redDeberaacutes asignarle a tu dispositivo una direccioacuten IP LAN

DHCP reservada y en el mejor de los casos un nombre de host que se propagaraacute a lo largo de tu red por medio del servidor DNS de tu router De esta forma en nuestro entorno de desar-rollolocal podremos utilizar un nombre de host para resolver siempre el entorno de implementacioacutenremoto

Por ejemplo en mi red reservo el 192168249 a la direc-cioacuten MAC de mi ODROID Tambieacuten configuro una entrada DNS que asigna a esa direccioacuten IP ldquoodroidrdquo Utilizar un firm-ware personalizado en el router como Tomato USB o DD-WRT lo hace extremadamente faacutecil ya que esos firmwares convierten tu router en un pequentildeo ordenador Linux con una aplicacioacuten web GUI muy pulida aunque su implementacioacuten estaacute fuera del alcance de este artiacuteculo Si operas con subredes aseguacuterate dirigir el puerto hacia el puerto externo que se asigna al puerto SSH del dispositivo odroid ya que Git se ejecuta a traveacutes de SSH

Configurar el proyectoLoacutegicamente desearaacutes estandarizar el flujo de trabajo de la

implementacioacuten Esto haraacute que el trabajo con proyectos sea

el home data center de John es una auteacutentica obra de arte

ODROID MAGAZINE 20

extremadamente faacutecil y eliminas muchos de los cambios de contexto mental que utilizas cuando trabaja en varios proyec-tos Crearemos una carpeta para alojar todos nuestros archivos relacionados con implementaciones Coloca los archivos eje-cutables en ldquodeploybinrdquo y cualquier archivo cron en ldquodeploytasksrdquo (maacutes informacioacuten sobre esta cuestioacuten maacutes adelante)

Navega hasta el directorio del proyecto en una ventana de Terminal y luego escribe los siguientes comandos

$ mkdir -p deploybin

$ mkdir -p deploytasks

$ cd deploybin ampamp touch run-job ampamp

chmod u+x run-job ampamp cd -

$ cd deploytasks ampamp touch crontab

Tambieacuten puede estandarizar doacutende colocar tu coacutedigo fuente De esta forma le seraacute maacutes faacutecil a otras personas ver coacutemo se or-ganiza tu proyecto y conocer queacute es el coacutedigo fuente y queacute no

$ mkdir src

$ cd src ampamp (place source code here ie python core

py clojure coreclj nodejs appjs)

Simplificar los puntos de entradaIniciar una aplicacioacuten puede resultar algo confuso con todos

los comandos que se pueden ejecutar en diferentes lenguajes Por ejemplo puede usar Java ldquojava -jar [my-jar] jarrdquo o python ldquopython my-apppyrdquo y tu aplicacioacuten tambieacuten puede necesitar varios argumentos Todo esto deberiacutea simplificarse y resumirse en un archivo ldquodeploybinrun-jobrdquo

binsh

set -e

CMD=rdquosrcduckrdquo

exec $CMD $

Crear el archivo cronArch Linux no viene con un cliente o demonio cron por

defecto Instaacutelalo con ldquosudo pacman -Syu cronierdquo Utilizando cron puede ejecutar comandos en intervalos de tiempo espe-cificados haciendo uso de la sintaxis especial de cron Normal-mente se almacena en el archivo crontab del usuario al que puedes acceder con ldquocrontab -erdquo Sin embargo esto es demasi-ado manual y queremos usar coacutedigo como infraestructura Cron tambieacuten tiene algunos subdirectorios muy uacutetiles en ldquoetccronrdquo como ldquoetccrondailyrdquo yrdquoetccronhourly ldquo si co-locamos los archivos aquiacute eacutestos se ejecutaraacuten en los intervalos especificados

Revisa el archivo de ldquodeploytaskscrontabrdquo que colocare-mos en ldquoetccrondrdquo que se crea automaacuteticamente con nuestro script ldquoposttreceiverdquo

variables

SHELL=binbash

PATH=binusrbinusrlocalbinusrsbinusrlo-

calsbin

MAILTO=[your-email-address]gmailcom

cmd=rdquodeploybinrun-jobrdquo

app_dir=rdquohomeskilbjodeployappduckdnsrdquo

jobs

5 skilbjo cd ldquo$app_dirrdquo $cmd gtdevnull

Aquiacute tienes el esquema general de la estructura de un simple proyecto El uacutenico ejecutable del proyecto es un uacutenico script shell ubicado en ldquosrcrdquo

$ tree

READMEmd

deploy

bin

post-receive

run-job

tasks

crontab

src

duck

4 directories 5 files

GitPrimero queremos agregar una URL remota a nuestro

proyecto en nuestro entorno local

$ git remote add odroid sshodroid~deploygit

duckdnsgit

Ten en cuenta que dependiendo de la topologiacutea de tu red es posible que tenga que modificar esta url Si no puedes asignar nombres de host la URL de git se veriacutea asiacute donde 192168249 es la direccioacuten IP LAN de tu dispositivo

$ ssh192168249~deploygitduckdnsgit

Si tienes un usuario en tu entorno ODROID distinto al que tienes en tu entorno de desarrollo la url se veriacutea asiacute donde ldquoskilbjordquo es tu nombre de usuario

$ sshskilbjoodroid~deploygitduckdnsgit

Si tu servidor remoto estaacute en una subred diferente y tienes redireccionados los puertos tu url tendriacutea este aspecto donde

HOME DATA CENTER

ODROID MAGAZINE 21

ldquo2222rdquo es tu puerto externo

$ ssh192168122222~deploygitduckdnsgit

En el directorio principal de tu entorno remoto crea una carpeta llamada ldquo~deployrdquo con dos subcarpetas ldquo~deployapprdquo y ldquo~deploygitrdquo Los subdirectorios de ldquo~deploygitrdquo seraacuten los puntos finales de nuestros desarrollos y con un hook ejecutaraacuten comandos de implementacioacuten en los subdirectorios de ldquo~ deployapprdquo

Primero navega hasta el directorio principal del entorno re-moto y a continuacioacuten escribe los siguientes comandos

$ mkdir -p ~deployapp

$ mkdir -p ~deploygit

$ mkdir -p ~deploygitduckdnsgit

$ mkdir -p ~deployappduckdns

Ahora en ldquo~ deploygitduckdnsgithooksrdquo crea un archi-vo ejecutable llamado ldquopost-receiverdquo que se activaraacute con cada accioacuten hacia el punto final

$ cd ~deployappgitduckdnsgithooks

$ touch post-receive ampamp chmod u+x post-receive

$ vim post-receive

Rellena el ejecutable con lo siguiente en el directorio ldquo~deploygitduckdnsgithooksrdquo del entorno remoto

usrbinenv bash

set -eou pipefail

user=$(whoami)

dir=rdquohome$userdeployapprdquo

app=$(basename $(pwd) | sed -e lsquosgitrsquo)

deploy_dir=rdquo$dir$apprdquo

cron_dir=rdquoetccrondrdquo

GIT_WORK_TREE=rdquo$deploy_dirrdquo git checkout -f

cd ldquo$deploy_dirrdquo

build steps here

case ldquo$userrdquo in

(skilbjo) sudo cp deploytaskscrontab ldquo$cron_

dir$apprdquo

esac

you can also do project-specific build steps in

this section like install

dependencies (ie npm install) compile source

code (ie lein uberjar)

as well as if a long-lived app run commands as

well (ie java -jar my_jarjar)

echo ldquoall donerdquo

exit 0

ImplementacioacutenAhora estamos listos para implementar ya que nuestro en-

torno local estaacute configurado para alcanzar el punto final del servidor de implementacioacuten nuestro entorno remoto estaacute con-figurado para recibir la notificacioacuten y revisar el coacutedigo fuente ejecutar cualquier paso de compilacioacuten y colocar una tarea en el directorio cron del sistema para su lanzamiento Ponto todo en praacutectica con el siguiente comando en el directorio del proyecto del entorno local

$ git push odroid

Ademaacutes para ver coacutemo se ha implementado todo esto en un proyecto de ejemplo visita httpbitly2lthYKW

Pasos finalesSe puede antildeadir al flujo anterior algunas caracteriacutesticas

como son muacuteltiples entornos ya sea con muacuteltiples ODROIDs o con un solo ODROID trataacutendolo como un servidor de ser-vicio Esto se puede hacer con subdirectorios bajo ldquo~deployrdquo como ldquo~deploystagingappmy_apprdquo o ldquo~ deployproduc-tionappmy_apprdquo

Ademaacutes podriacuteas antildeadir un servicio de integracioacuten conti-nua como CircleCI que ejecutariacutea una suite de testeo desde cada desarrollo a GitHub y si tiene eacutexito compila una imagen Docker No podriacuteas entonces tener un archivo en el entorno remoto que verificariacutea una imagen de un repositorio Docker y la ejecutariacutea en un intervalo especificado Esto es lo que hacen muchos de los softwares DevOps distribuidos como Mesos y Kubernetes pero en un entorno mucho maacutes rico que BASH y Linux

Referencias

Artiacuteculo Wikipedia de Arch linux httpbitly2l71ADKWebsite Arch linux ArM httpsarchlinuxarmorgArtiacuteculo que leiacute hace unos tres antildeos y que me inspiroacute para escribir mi propio artiacuteculo httpbitly2m5JAct

HOME DATA CENTER

ODROID MAGAZINE 22

odroid ARCADE BOXLA EXPERIEnCIA PERfECTA COn TuS JuEGOS ARCADE fAvORITOSpor brian Kim charles park y John lee

ARCADE BOX

Los ODROIDs tienen mejor rendimiento que las placas de la competencia especialmente en lo que respecta al renderizado de video lo que significa que

las placas ODROID son ideales para jugar lo cual hacen muchos usuarios de ODROID Ya hay disponibles varios sistemas operativos de plataforma de juegos como Lakka (httpbitly1NO8BBC) y ODROID GameStation Tur-bo (httpbitly1ASFO5O) Para disfrutar auacuten maacutes de nuestras sesiones de juegos creamos nuestra propia consola arcade con simples botones GPIO y joysticks y la llama-mos la ODROID Arcade Box Elegimos un ODROID-XU4 para este proyecto porque es el que tiene mejor rendimiento GPU de todos los dispositivos ODROID actuales En este artiacuteculo vamos a describir como hemos creado la ODROID Arcade Box

Requisitos( Figura 3 ndash )Decidimos hacer la ODROID Arcade Box usando

un MDF (tablero de fibra de densidad media) El Shifter Shield del XU4 tambieacuten es uacutetil para utilizar los pines de expansioacuten del ODROID-XU4 Los Joysticks los botones y los cables eran los componentes de entrada y se utilizoacute

Nuestro primer y simple prototipo

ODROID MAGAZINE 23

panel MDf 12t2eA 600x2202eA 600x752eA 220x75taladroplegadoraDesmontadorcinta meacutetricaNavaja multiusoAlicates de punta largaoDroiD-xU4xU4 Shifter shieldSMpS (fuete Alimentacioacuten)

extendedores hDMi USb ethernetenchufe de alimentacioacuten y Switchbisagras 2eAreceptor de puertacaucho 4eAtornillospulsadores 19eAJoystick 2eAcablesterminales

una SMPS (Fuente de alimentacioacuten conmutada) como fuente de alimentacioacuten Las herramientas y las piezas utilizadas las tienes en esta paacutegina

La ODROID Arcade Box necesita un total de 27 entradas (19 entradas para botones y 8 entra-das para joysticks) Las 24 entradas GPIO digi-tales del ODROID-XU4 no son suficientes para las 27 entradas de modo que creamos dos puertos ADC adicionales para los tres botones que nos fal-taban Los valores de entrada ADC se basan en el voltaje de entrada y los valores de entrada digital y analoacutegica se procesan en el demonio GPIO que se describe a continuacioacuten

Disentildeo y montajeLos paneles de la ODROID Arcade Box deben

ser disentildeados y fabricados para que los botones y joysticks esteacuten bien colocados Elegimos MDF 12T teniendo en cuenta el precio y la durabilidad El dise-ntildeo se puede hacer con cualquier herramienta CAD como Google Sketch o SolidWorks Aunque existen muchas plantillas de disentildeo para los paneles de joypad decidimos elegir un disentildeo arcade estaacutendar japoneacutes

El primer paso del montaje es unir la placa al panel MDF Este paso fue faacutecil aunque nos llevo maacutes tiempo que el resto Despueacutes insertamos los joysticks la toma de corri-ente el interruptor y los botones en el panel MDF superior Los conectores HDMI Ethernet y USB se colocaron en la parte trasera del panel MDF El siguiente paso fue montar cada panel MDF usando un taladro para hacer los agujeros luego con tornillos los sujetamos

El uacuteltimo paso del montaje de la ODROID Arcade Box es conectar por cable los pines de expansioacuten del ODROID-XU4 a los componentes de entrada En este proyecto dise-ntildeamos las entradas GPIO externas tal y como se muestra en la paacutegina 26 Los botones Select y Temp estaacuten conecta-dos a puertos de expansioacuten ADC

Configuracion del softwareDesarrollamos un nuevo demonio GPIO llamado gpio_

keyd (httpbitly2ljOZKg) Este demonio es capaz de asignar entradas GPIO y eventos claves usando uinput y wiringPi una libreriacutea de acceso GPIO basada en pines Estaacute disentildeada para que le sea familiar a quiene ya ha utilizado el sistema de cableado Arduino Aunque la blibreriacutea wiring-Pi upstream soacutelo admite Raspberry Pi Hardkernel ofrece una versioacuten de wiringPi para ODROIDs en su repositorio GitHub (httpbitly1Eq3UpF) El moacutedulo uinput es un moacutedulo del kernel de Linux que gestiona el subsistema de entrada del usuario Se puede utilizar para crear y manejar dispositivos de entrada desde una aplicacioacuten

ARCADE BOX

herramientas compentes y lo que hay justamente debajo

esquema de los puertos de expansioacuten

ODROID MAGAZINE 24

Elegimos ODROID GameStation Turbo (httpbitly1ASFO5O) como plataforma de software para nuestra ODROID Arcade Box que tiene integrado uinput Debes asegurarte de que el archivo de dispositivo uinput existe en el sistema operativo elegido porque algunos no tienen dispositivos uinput

$ ls devuinput

Si tu sistema operativo no tiene un archivo de disposi-tivo devuinput entonces seraacute necesario recompilar e in-stalar un nuevo kernel con la opcioacuten de configuracioacuten IN-PUT_UINPUT habilitada La paacutegina Wiki en httpbitly1YIToBI describe coacutemo compilar e instalar la imagen del kernel a partir del coacutedigo fuente

$ make menuconfig

Device Drivers

-gt Input device support

-gt Generic input layer

-gt Miscellaneous device

-gt User level driver support ltgt

Ten en cuenta que wiringPi debe instalarse antes de in-stalar gpio_keyd En la imagen GameStation de ODROID los comandos sudo deben ejecutarse como root porque la cuenta ldquoodroidrdquo no estaacute designada como usuario sudo

$ git clone httpsgithubcomhardkernelwiringPi

git

$ cd wiringPi

$ sudo build

Descarga el coacutedigo fuente gpio_keyd el cual estaacute dis-ponible en nuestro repositorio GitHub El procedimiento para compilar e instalar gpio_keyd es muy simple

$ git clone httpsgithubcombkrepogpio_keydgit

$ cd gpio_keyd

$ make

$ sudo make install

El script gpio_keyd hace referencia a etcgpio_keydconf como el predeterminado para la informacioacuten de los botones y GPIO El archivo de configuracioacuten fue modi-ficado para las 27 entradas de la ODROID Arcade Box Algunas botones ya se utilizaban en el emulador de juego de modo que tuvimos que cambiar la configuracioacuten del emulador para evitar conflictos entre los botones de en-trada GPIO y el emulador Ten en cuenta que el campo ltGPIO pingt en el archivo de configuracioacuten hace referen-

ARCADE BOX

plano del disentildeo de joypad

la oDroiD Arcade box montada

ODROID MAGAZINE 25

cia al nuacutemero wiringPi no al GPIO y al nuacutemero de pin (httpbitly2lbzPIB)

Ejemplo de configuracioacuten para las 27 entradas etcgpio_keydconf

Digital input ltKey codegt ltGPIO typegt ltGPIO pingt ltActive valuegt User 1KEY_LEFT digital 15 0KEY_RIGHT digital 1 0KEY_UP digital 4 0KEY_DOWN digital 16 0KEY_A digital 2 0KEY_S digital 3 0KEY_D digital 30 0KEY_F digital 21 0KEY_Z digital 8 0KEY_X digital 9 0KEY_C digital 7 0KEY_V digital 0 0 User 2KEY_BACKSLASH digital 12 0KEY_SLASH digital 13 0KEY_SEMICOLON digital 14 0KEY_LEFTBRACE digital 5 0KEY_Y digital 26 0KEY_U digital 27 0KEY_I digital 22 0KEY_O digital 23 0KEY_H digital 6 0KEY_J digital 10 0KEY_K digital 11 0KEY_L digital 31 0

Analog input ltKey codegt ltGPIO typegt ltADC portgt ltADC ac-tive valuegtKEY_B analog 0 0KEY_N analog 0 2045KEY_M analog 1 2045

To run gpio_keyd daemon at every startup is conve-nient for ODROID Arcade Box

etcinitdgpio_keyd binsh BEGIN INIT INFO

ARCADE BOX

Mapeo Gpio externo para los botones y Joysticks

cableado de la oDroiD Arcade box

ODROID MAGAZINE 26

Provides gpio_keyd Required-Start $all Required-Stop Default-Start 2 3 4 5 Default-Stop Short-Description Run usrbingpio_keyd if it ex-ist END INIT INFO

PATH=sbinusrsbinbinusrbin

libinitvarssh

liblsbinit-functions

do_start() if [ -x usrbingpio_keyd ] then usrbingpio_keyd -d ES=$ [ ldquo$VERBOSErdquo = no ] ampamp log_end_msg $ES return $ES fi

case ldquo$1rdquo in start) do_start restart|reload|force-reload) echo ldquoError argument lsquo$1rsquo not supportedrdquo gtamp2 exit 3 stop) killall gpio_keyd exit 0 ) echo ldquoUsage $0 start|stoprdquo gtamp2 exit 3 Esac

$ sudo chmod +x etcinitdgpio_keyd$ sudo update-rcd gpio_keyd defaults$ sudo reboot

En los comandos anteriores el script gpio_keyd se ejecuta como un demonio uti-lizando la opcioacuten ldquo-drdquo El uso de gpio_keyd se puede comprobar con la opcioacuten ldquo-hrdquo Comprue-ba de nuevo las teclas usadas por el juego o el emulador despueacutes fija la configuracioacuten del gpio_ keyd correctamente Es ahora cuando estaacutes listo para jugar y disfrutar de tus juegos con tu nueva ODROID Arcade Box

ARCADE BOX

the King of fighters 98 John vs brian

ODROID MAGAZINE 27

En este artiacuteculo analizaremos las diferentes formas que existen para ob-tener los datos del uso de la red

ConfiguracioacutenLa forma normal de analizar los datos

de traacutefico de la red es mediante el uso de datos a traveacutes de las aplicaciones de configuracioacuten del sistema tal y como se muestra en la figura 1

El uso de datos muestra la cantidad total de traacutefico de datos entrante y sa-liente que ha sido utilizada por una apli-cacioacuten Si seleccionas la aplicacioacuten veraacute una pantalla como la que aparece en la Figura 2 que muestra informacioacuten detal-lada sobre el uso de la aplicacioacuten tanto en primer plano como de fondo

La informacioacuten que se muestra den-tro de la aplicacioacuten de Configuracioacuten se almacena en data systemnetstats que requiere acceso root Al eliminar todo lo que hay dentro de esta carpeta se resta-

Como desarrolladores queremos que nuestras aplicaciones sean eficientes y a menudo nos gus-

tariacutea saber cuaacutento ancho de banda de red estaacute utilizando nuestra aplicacioacuten Esto es muy uacutetil por varias razones

bull Para monitorizar y asegurarnos de que la aplicacioacuten es realmente la nuestra y no una aplicacioacuten que ha sido pirateada y publi-cada con diferentes nombres en Play Store

bull Para asegurarnos de que no es-tamos cogiendo ancho de banda innecesario del plan de datos del usuario

bull Para comprobar que el disposi-tivo que estamos usando no estaacute accediendo a Internet sin nuestro consentimiento

blecen las estadiacutesticas de red mostradas en esta aplicacioacuten

Estadiacutesticas de la redLa aplicacioacuten de configuracioacuten nos

puede dar una informacioacuten general so-bre las estadiacutesticas de la red de datos que es un buen comienzo pero a veces necesitamos un anaacutelisis maacutes detallado que puede hacerse a traveacutes del coman-do dumpsys Android cuenta con una poderosa herramienta llamada dumpsys que nos permite obtener una instan-taacutenea o volcado del sistema que pu-ede incluir informacioacuten sobre la red la memoria y otros componentes Lee la documentacioacuten de Android en httpbitly2kK9dep para obtener maacutes infor-macioacuten del sistema Para conseguir maacutes informacioacuten relacionada con la red nos interesa el comando

$ dumpsys netstats detail

La Figura 3 muestra un pantallazo de lo que puedes ver desde una tablet Nexus 7 que ejecuta Lollipop 511

Hay algunas cuestiones importantes para entender las estadiacutesticas

bull Las estadiacutesticas UID muestran el desglose de las aplicaciones de primer plano y de fondo

bull Uid muestra el ID de usuario de la aplicacioacuten que se puede utili-zar para relacionar eacutesta con la in-

DESARROLLO AnDROID AnALIzAnDO EL uSO DE RED DE LAS APLICACIOnESpor Nanik tolaram

DESARROLLO ANDROID

figura 1 - Uso de datos en la configuracioacuten

figura 2 - Desglose del uso de datos de la app

ODROID MAGAZINE 28

$ dumpsys package detail

Este comando te proporcionaraacute una larga lista de informacioacuten sobre los pa-quetes que estaacuten instalados en tu dis-positivo Para las estadiacutesticas de red nos interesa la seccioacuten que se muestra en la Figura 5

La seccioacuten resaltada muestra el userId que se relaciona con el uid que se mues-tra en las estadiacutesticas de red Al relacio-nar este nuacutemero sabemos el nombre del paquete de la aplicacioacuten sobre el que es-tamos leyendo las estadiacutesticas de red

Aplicacioacuten de ejemplo

La aplicacioacuten de ejemplo de este artiacute-culo se puede descargar desde httpbitly2m8WenA que muestra coacutemo etiqu-etar la conexioacuten de red desde distintas

secciones de la aplicacioacuten lo cual puede ayudar a analizar el volumen de traacutefico de datos de la aplicacioacuten La Figura 6 muestra un ejemplo de coacutemo lo vemos si utilizamos Android Device Monitor (dentro de Studio diriacutegete a Tools -gt Android -gt Android Device Monitor)

Tal y como se puede ver en el graacutefico la simple aplicacioacuten tiene 3 conexiones dife-rentes y cada una de ellas estaacute accediendo a un sitio web diferente Al etiquetarlas con

formacioacuten del paquete (que ver-emos en la seccioacuten de detalles del paquete dumpsys) con el objeto de conocer queacute aplicacioacuten utiliza estas estadiacutesticas de red

bull Las etiquetas son uacutetiles si de-sea ver la cantidad de datos que utiliza cada conexioacuten de tu apli-cacioacuten Puedes ver un ejemplo de esto en la Figura 4 que muestra que el uid 10007 tiene las siguien-tes etiquetas 0x30000401 0x30003201 0x30002804 0x10000401 y 0x30000407 Es-tas etiquetas ayudan al desarrol-lador a saber cuaacutentos datos uti-liza cada parte de la aplicacioacuten Estas estadiacutesticas de red en par-ticular estaacuten vinculada al paquete Google Framework que forma parte de Google Play Store

En el siguiente apartado veremos coacutemo escribir una aplicacioacuten etiquetando el hilo que hace la conexioacuten de red para determi-nar la cantidad de datos que se utilizan

Estadiacutesticas de paquetes

En la seccioacuten anterior analizamos el uid que aparece al ejecutar el comando dumpsys netstats Ahora necesitamos sa-ber queacute uid corresponde a la aplicacioacuten en el dispositivo y esto se hace mediante el siguiente comando

DESARROLLO ANDROID

figura 3 ndash estadiacutesticas de red con Dumpsys

figura 4 - estadiacutesticas de etiquetas UiD

figura 5 - Detalles del paquete dumpsys

figura 6 - etiquetas de red

coacutedigos diferentes podemos ver la cantidad de traacutefico que consume cada conexioacuten y esto nos ayudaraacute a ver si nuestra aplicacioacuten utiliza el ancho de banda de un modo eficiente

El coacutedigo del siguiente fragmento muestra el uso de la API TrafficStats interna Esta etiqueta API muestra el subproceso que utiliza actualmente un socket con un identificador y todo el traacute-fico que pasa por la misma conexioacuten se grabaraacute junto Asiacute es como la aplicacioacuten es capaz de agrupar las 3 conexiones diferentes Internamente Android utili-za el moacutedulo xt_qtaguid del kernel para realizar este tipo de etiquetado Tienes disponible maacutes informacioacuten en httpbitly2kU8KXB

public void getUsingNormalURLC

onnection(String urlText int

threadTag)

throws IOException

URL url = null

TrafficStats

setThreadStatsTag(threadTag)

HttpURLConnection urlConnec-

tion = getConnection(url)

try

finally

TrafficStatsclearThread-

StatsTag()

ODROID MAGAZINE 29

Disgustado te subes a tu 4x4 de dominacioacuten del mun-do un vehiacuteculo que desde fuera parece maacutes bien un viejo camioacuten de granja pero por dentro se parece maacutes

al sistema de control de un transbordador espacial porque el conductor del restaurante oriental que realiza las entrega a do-micilio estaacute enfermo Ahora tienes que ir a recoger tu propia comida ldquoQueacute rudimentariordquo piensas cuando sales de tu garaje secreto Justamente cuando vas a parar el vehiacuteculo en un stop oyes un fuerte ruido Sales y te diriges raacutepidamente a la parte posterior del 4x4 donde observas un cubo de basura Te tiras de los pelos y piensas ldquoiexclEsos basureros Neanderthales dejaron otra vez el cubo en mediordquo Ahora te toca recoger los restos de tu cena y la basura de otros

Conforme te vas alejando para hacer tus recados empiezas a pensar en coacutemo evitar este inconveniente en el futuro Varias ideas te vienen a la mente

Un sistema lidar para escanear en 3D el entorno en tiempo real y alarmas sonoras cuando sea necesarioUn brazo ciberneacutetico colocado en la parte posterior del 4x4 que procese video para detectar objetos agarrarlos y moverlosUna simple camara trasera

Empiezas a considerar la viabilidad de cada una

Muy bueno pero demasiado complicado y costosoAuacuten mejor y un proyecto propio de un cientiacutefico loco pero demasi-ado complicado y costosoya tengo dos iexclpero estaba demasiado preocupado en mis pensa-mientos para prestarles atencioacuten

Lo que necesitas es algo simple sin complicaciones y barato que haga sonar una alarma para alertarte incluso cuando estar absorto en tus pensamientos ldquoAhardquo Recuerdas haber visto un nuevo producto en ameriDroid que puede hacer precisamente esto Se trata de un microcontrolador conectado al USB que soporta hasta 6 sensores ultrasoacutenicos con simples comandos en serie (httpbitly2l26ptV) ldquoiexclPerfectordquo Piensas

Regresas a tu laboratorio subterraacuteneo con el pollo Kung Pao en la mano te apresurar a encender tus monitores entras en el sitio web ameriDroid y pides un kit ldquoUSB Ultrasonic Ranging Sensorrdquo con 6 sensores y carcasas

Vas sintiendo una sensacioacuten de alivio a medida que regresas a los 12 proyectos en lo que ya estabas trabajando a la espera de que pasen un par de diacuteas hasta que llegue tu nuevo pedido Mientras te comes tu Kung Pao dibujas un diagrama de coacutemo quieres colocar los sensores en la parte posterior de tu vehiacuteculo

Un par de diacuteas maacutes tarde el kit llega Inmediatamente em-piezas a montar el kit y los sensores en la parte posterior de tu 4x4 teniendo cuidado de usar sellador de silicona para pro-teger los sensores de la lluvia aguanieve y nieve que puedas encontrar durante tus aventuras para dominar el mundo

A continuacioacuten consultas las instrucciones proporcionadas por ameriDroid con el kit sobre coacutemo controlar y leer los sen-sores desde tu fiel ODROID-C2 y VU7 que montaste en el salpicadero para este propoacutesito

Conectando el cable USBEl cable USB suministrado debe conectarse al microcon-

trolador (la pequentildea placa de circuito con filas de pines que sobresalen) El microcontrolador tiene una fila de 4 o 6 pines

DETECTAR LA PRESEnCIACROnICAS DE un CIEnTIfICO LOCOpor bo lechnowsky

SENSOR ULTRASONICO

ODROID MAGAZINE 30

en un extremo Si tiene 6 pines ceacutentrate en los 4 pines centrales y sigue estas instrucciones

Negro - conectar a GNDrojo - conectar a VccVerde - conectar a rxi

blanco - conectar a txD

Conectando los sensoresultrasoacutenicos

En cada sensor ultrasoacutenico hay cuatro pines marcados Vcc Trig Echo Gnd Para el primer sensor ultrasoacutenico conecta el pin 2 del microcontrolador al pin ldquoTrigrdquo del sensor ultrasoacutenico Conecta el pin 3 del microcontrolador al pin ldquoEchordquo del sensor Conecte el pin ldquoVccrdquo del sensor a DC 5V (el pin ldquoVCCrdquo del microcontrolador suministra 5V) y el pin ldquoGndrdquo del sensor a una conexioacuten a tierra como por ejemplo los pines ldquoGNDrdquo del microcontrolador

Si conectas un segundo sensor de ultrasonidos conecta ldquoTrigrdquo al pin 4 y ldquoEchordquo al pin 5 Continuacutea conectando los siguientes pines a los sensores hasta los pines 12 y 13 si al final optas por conectar los seis sensores ultrasonidos

Conexioacuten del softwareUtilizas un programa terminal como PuTTY Screen o tu

lenguaje de script o programacioacuten favorito para conectarte al puerto serie que aparece cuando te conectas el sensor ultrasoacuteni-co Esto variaraacute en funcioacuten del sistema operativo que utilizas para conectarte al microcontrolador En Windows consultar el ldquoAdministrador de dispositivosrdquo es la forma maacutes comuacuten de averiguarlo En Linux ldquodmesgrdquo o ldquolsusbrdquo son las formas de de-tectar a queacute puerto estaacute conectado Deberiacuteas ver algo denomi-nado ldquoPL2303rdquo que es la conexioacuten del microcontrolador Si recibes informacioacuten basura en tu terminal cuando te conectes aseguacuterate de que los ajustes en serie son 9600 baudios 8 bits ninguno (paridad) y 1 bit de parada Aquiacute tienes una lista de los comandos que puede aceptar el microcontrolador

bull debug on Activa la retroalimentacioacuten detallada Estaacute deshabilitada por defecto nos proporcionaraacute aclaracio-nes sobre los errores de entrada

bull debug off desactiva la retroalimentacioacuten detalladabull init x y activa un HC-SR04 en los pines especificados

X es trigger Y es echo Estos deben ser pines digitales El dispositivo 0 estaacute preestablecido en los pines 2 y 3 de modo que no es necesario especificar estos pines La seleccioacuten de pines no vaacutelidos devolveraacute un signo de ex-clamacioacuten ()

bull ping enviacutea una sola lectura del HCSR04 previamente utilizado Si no se ha utilizado todaviacutea se usaraacute el dis-positivo 0 Si al comando le sigue un espacio y un nuacutemero entre 0-100 (exclusivo) se realizaraacute ese nuacutemero de lecturas emitiendo primero el promedio de esas lec-

SENSOR ULTRASONICO

turas despueacutes el nuacutemero de lecturas fallidas (que no cuentan para el promedio) y luego los valores miacutenimo y maacuteximo de lectura separados por espacios En cual-quier caso si una sentildeal se desconecta automaacuteticamente devolveraacute -1

bull start Hace ping constantemente a todos los dispositivos conectados en secuencia Debido a que los dispositivos se utilizan uno a uno el flujo de datos de este comando seraacute maacutes raacutepido si los dispositivos miden distancias cor-tas Si este comando le sigue un espacio y un nuacutemero mayor que 0 la placa esperaraacute estos milisegundos entre la lectura del uacuteltimo dispositivo y la lectura del primer dispositivo El resultado de este comando seraacute la lectura de cada dispositivo (con un uacutenico espacio despueacutes de cada uno) y una vuelta tras el uacuteltimo dispositivo

bull stop detiene la operacioacuten ldquostartrdquo soacutelo es efectivo tras haber iniciado ldquostartrdquo

bull mode emite el modo de medicioacuten del flujo M para meacutetrico (miliacutemetros) I para Imperial (deacutecimas de pul-gada) o R para Raw (la longitud de pulso en microse-gundos devuelta por el HC-SR04) El valor predeter-minado es M

bull timeout emite el tiempo de espera actual para lecturas de la sentildeal El tiempo de espera es la mayor cantidad de microsegundos que la placa esperaraacute antes de declarar que el HC-SR04 ha realizado una mala lectura lo cual no es necesariamente lo mismo que el pulso maacutes largo que la placa aceptaraacute del HC-SR04 Cuando la placa mide el pulso del HC-SR04 primero espera a que el HC-SR04 comience a enviar un pulso Este tiempo cuenta para el tiempo de espera Cuando este comando le sigue un espacio y un nuacutemero el tiempo de espera se ajusta a ese nuacutemero El valor predeterminado es 1 segundo (1000000 microsegundos)

bull ver emite informacioacuten de versioacuten y creacuteditos

Si cualquier comando (o ninguacuten comando) estaacute precedido por un uacutenico diacutegito de 0-5 (inclusive) seguido de un espacio el dispositivo que corresponde a ese diacutegito se seleccionaraacute para ser usado con el siguiente comando ldquopingrdquo Cada vez que la placa esteacute lista para un comando emitiraacute ldquogtrdquo para la serie La uacutenica excepcioacuten estaacute tras el comando ldquostartrdquo que no solicitaraacute entrada hasta que sea reconocido ldquostoprdquo

ODROID MAGAZINE 31

iquestCoacutemo empezaste con los ordenadoresCuando empeceacute mi negocio tuve que decidir queacute plat-

aforma de hardware iba a utilizar para la recogida de datos del traacutefico Simplemente para que no pienses mal de miacute mis caacutemaras de traacutefico no son las que se usan para multar por exceso de velocidad o algo asiacute Mi sistema estaba desti-nado suavizar el flujo de traacutefico fijando los controles oacutepti-mos de las sentildeales de traacutefico Anteriormente usaba un PC industrial para ejecutar mi software de reconocimiento de imaacutegenes Ahora uso la familia de dispositivos ODROID para esta cuestioacuten

iquestQueacute te atrajo de la plataforma ODROID En 2012 useacute Google para buscar una plataforma que

fuera muy compacta y al mismo tiempo potente para que cubriera mis necesidades que resultoacute ser la placa

Por favor haacuteblanos un poco sobre tiSoy ingeniero de electroacutenica y software en Rusia desde

hace 47 antildeos Naciacute en Siberia y tras terminar la escuela me mudeacute a Moscuacute para estudiar en la universidad Ser estudi-ante en el Instituto de Aviacioacuten de Moscuacute (MAI) fue una experiencia increiacuteble probablemente la mejor de mi vida A principios de los 90 llegoacute a Rusia la era de los microordena-dores soliacutea jugar a un juego de saltos en una CPU z80 y el i486 Tras finalizar mis estudios universitarios y de posgrado me convertiacute en ingeniero Trabajeacute en unos cuantos puestos de trabajo para diferentes empresas y finalmente decidiacute em-prender mi propio negocio En 2006 puse en marcha una iniciativa para crear sistemas de recuento del traacutefico de au-tomoacuteviles Estoy casado y tengo una hija de 21 antildeos llamada Lena que trabaja como enfermera Mi esposa Nadezhda es disentildeadora de vestuario de produccioacuten pero ahora trabaja como disentildeadora web Ella es aficionada a la fotografiacutea digi-tal y le encanta su caacutemara reacuteflex digital

COnOCIEnDO un ODROIDIAnvIACHESLAv ALEKSEEveditado por rob roy (robroy)

CONOCIENDO UN ODROIDIAN

Viacheslav disfruta tocando la guitarra y escuchando muacutesica

1995 en el campus MAi probando uno de los primeros equipos Vr comerciales del mundo que funcionaba a 640x480 a 30fps Utiliz-aba un sensor magneacutetico en la nuca para la posicioacuten de la cabeza la mejor broma que se podiacutea gastar a alguien era colocar un imaacuten cerca de la espalda y sacudirlo iexcllos gritos estaban garantizados cuando el mundo en 3D daba vueltas sin cesar

ODROID MAGAZINE 32

ODROID-X2 Con sus cuatro nuacutecleos funcionando a 17 GHz calculaba con facilidad los algoritmos de reconteo del traacutefico de automoacuteviles Maacutes tarde cambieacute al U3 y el XU4

iquestCuaacutel es tu ODROID favorito y por queacuteDe momento mi favorito es el XU4 Mi sistema estaacute

basado en el tratamiento de fotogramas de video en tiempo real por lo que el bus USB 30 del XU4 es bastante bueno para una caacutemara con una interfaz de captura de viacutedeo Para mi sistema es muy importante tener una buena conexioacuten entre la caacutemara de viacutedeo y la CPU Probablemente tendreacute que echar un vistazo a las interfaces de nivel inferior como MIPI CSI-2 que por desgracia estaacuten ausente en el XU4 Recientemente he estado aprendiendo como usar la caacute-mara oCam GS BW La caacutemara es buena en siacute misma pero para un uso industrial al aire libre tengo que implementar un software de control de exposicioacuten automaacutetica y posible-mente de control de apertura de la lente que todaviacutea estaacute en estudio

MEET AN ODROIDIAN

Una vieja joya el mini ordenador Nixdorf

An old gem the Nixdorf mini computer

CONOCIENDO UN ODROIDIAN

iquestQueacute aficiones e intereses tienes aparte de los ordenadoresDisfruto conduciendo y leyendo sobre coches y viendo

los campeonatos de carreras de F1 Tambieacuten me gusta via-jar pescar escuchar muacutesica y tocar la guitarra Tengo un gato siberiano llamado Leia y soy fan de Star Wars

iquestQueacute consejo le dariacuteas a alguien que quiere aprender maacutes sobre la programacioacuten

Hacer software es algo increiacuteble y miacutestico Es una fusioacuten de arte y tecnologiacutea Nada te inspira maacutes que tu aplicacioacuten cuando empieza a cobrar vida Sin embargo siempre estaacute ahiacute el otro lado de la Fuerza Estar listo para instruirte inc-esantemente El desarrollo de software es una de las activi-dades que cambia maacutes raacutepido Si tienes pensado dejar de hacer software en uno o dos antildeos puede dejar de aprender ahora El conocimiento se volveraacute anticuado en un par de antildeos maacutes o menos Para estar en lo maacutes alto siempre tienes que correr Es similar a la cancioacutenrdquoRun like Hellrdquo de Pink Floyd Si estaacutes listo para vivir de esta forma seguro que tendraacutes eacutexito

ODROID MAGAZINE 33

Page 2: Estación ARCADE · gias de marketing, administración de medios sociales y producción multimedia impresa, web, vídeo y cine. Ges-tionando múltiples cuentas con agencias y productores

Queacute defendemosNos esmeramos en presentar una tecnologiacutea punta futura joven teacutecnica y para la sociedad de hoy

Nuestra filosofiacutea se basa en los desarrolladores Con-tinuamente nos esforzamos por mantener estrechas relaciones con eacutestos en todo el mundo

Por eso siempre podraacutes confiar en la calidad yexperiencia que representa la marca distintiva de nuestros productos

Simple moderno y uacutenicoDe modo que tienes a tu alcance lo mejorpara hacer todo lo que imagines

Realizamos envios de ODROID-C2and ODROID-XU4 a los paiacuteses de la UE Ven y visita nuestra tienda online

Direccioacuten Max-Pollin-Straszlige 1 85104 Pfoumlrring Alemania

Teleacutefono amp Faxtelf +49 (0) 8403 920-920email servicepollinde

Nuestros productos ODROID se pueden encon-trar en httpbitly1tXPXwe

EDITORIAL

ODROID Magazine que se publica mensualmente en httpmagazineodroidcom es la fuente de todas las cosas ODROIDianas bull Hard Kernel Ltd bull 704 Anyang K-Center Gwanyang Dongan Anyang Gyeonggi South Korea 431-815 bull fabricantes de la familia ODROID de placas de desarrollo quad-core y la primera arquitectura ARM ldquobigLITTLErdquo del mundo basada en una uacutenica placa Para informacioacuten sobre coacutemo enviar articulos contacta con odroidmagazinegmailcom o visita httpbitly1ypImXsUacutenete a la comunidad ODROID con miembros en maacutes de 135 paiacuteses en httpforumodroidcom y explora las nuevas tecnologiacuteas que te ofrece Hardkernel en httpwwwhardkernelcom

Atodo el mundo le encanta los juegos especialmente a los ingenieros de Hardkernel Nuestro proyecto estrella de este mes es un proyecto personalizado creado por Brian

John y Charles que resalta el potencial de la plataforma ODROID como emulador de consolas y sistema de juego versaacutetil Usando

la libreriacutea WiringPi y la popular im-agen de juegos GameStation Turbo de ODROID disentildearon una Arcade Box que es impresionante y te per-

mite ejecutar tus juegos favoritos a res-oluciones de 1080p iexclPuedes construir

la tuya propia y tendraacutes conversacioacuten para rato en tu proacutexima partida de juegos

Miltos ha creado un timbre remoto muy uacutetil para ver quieacuten llama a tu puerta enviando un correo electroacutenico

con una imagen John nos muestra coacutemo construir un Home Data Cen-ter con un ODROID-XU4 y Bo continuacutea sus croacutenicas de cientiacutefico loco con un sensor de ultrasonidos para su vehiacuteculo Tobias presenta OpenFodder un clon de Cannon Fodder que captura la belleza del juego original Nanik analiza el uso de la red en Android y Bruno nos trae otra entrega de su famosa serie de juegos Android Causality

Manuel Adamuz Editor EspantildeoiTengo 31 antildeos y vivo en Sevilla Espantildea aunque naciacute en Granada Estoy casado con una mujer maravillosa y tengo un hijo Hace unos antildeos trabajeacute como teacutecnico informaacutetico y programador pero mi trabajo actual estaacute relacionado con la gestioacuten de calidad y las tecnologiacuteas de la informacioacuten ISO 9001 ISO 27001 ISO 20000 Soy un apasionado de la informaacutetica especialmente de los microordenadores como el ODROID Raspberry Pi etc Me encanta experimentar

con estos equipos y traducir ODROID Magazine Mi esposa dice que estoy loco porque soacutelo pienso en ODROID Mi otra aficioacuten es la bicicleta de montantildea a veces participo en competiciones semiprofesionales

Andrew Ruggeri Editor AdjuntoSoy un ingeniero de sistemas Biomeacutedicos anclado en Nueva Inglaterra que actualmente trabaja en la industria aeroespacial Un microcontrolador 68HC11 de 8 bits y el coacutedigo ensamblador son todo lo que me interesa de los sistemas embebidos Hoy en diacutea la mayoriacutea de los proyectos en los que trabajo estaacuten en lenguajes C y C ++ o en len-guajes de alto nivel como C y Java Para muchos proyectos utilizo placas ODROID pero auacuten sigo intentando utili-zar los controladores de 8 bits cada vez que puedo (soy un fan de ATMEL) Aparte de la electroacutenica soy un amante de

la fotografiacutea analoacutegica y desarrollo la peliacutecula friki con la que disfruto intentando hablar en idiomas extranjeros

Venkat Bommakanti Editor AdjuntoSoy un apasionado de los ordenadores desde la bahiacutea de San Francisco en California Procuro incorporar muchos de mis intereses en proyectos con ordenadores de placa reducida tales como pequentildeos modificaciones de hardware carpinteriacutea reutilizacioacuten de materiales desarrollo de software y creacioacuten de grabaciones musicales de aficionados Me encanta aprender continuamente cosas nuevas y trato de compartir mi alegriacutea y entusiasmo con la comunidad

Josh Sherman Editor AdjuntoSoy de la zona de Nueva York y ofrezco mi tiempo como escritor y editor para ODROID Magazine Suelo experi-mentar con los ordenadores de todas las formas y tamantildeos haciendo trizas las tablets convirtiendo Raspberry Pi en PlayStations y experimentado con los ODROIDs y otros SoCs Me encanta trabajar con los elementos baacutesicos y asiacute poder aprender maacutes y disfrutar ensentildeando a otros escribiendo historias y guiacuteas sobre Linux ARM y otros proyectos experimentales divertidos

Nicole Scott Art EditorNicole es una experta en Produccioacuten Transmedia y Estrategia Digital especializa en la optimizacioacuten online y estrate-gias de marketing administracioacuten de medios sociales y produccioacuten multimedia impresa web viacutedeo y cine Ges-tionando muacuteltiples cuentas con agencias y productores de cine desde Analytics y Adwords a la edicioacuten de viacutedeo y maquetacioacuten DVD Nicole ayuda a sus clientes con todos los aspectos de la visibilidad online Posee un ODROID-U2 varios ODROID-U3 y Xu4rsquos y espera poder utilizar las uacuteltimas tecnologiacuteas tanto para a nivel personal como

empresarial El sitio web de Nicole lo puedes encontrar en httpwwwnicolecscottcom

James LeFevour Editor ArtiacutesticoSoy un especialista en medios digitales que disfruta trabajando como freelance en marketing de redes sociales y admin-istracioacuten de sitios web Cuanto maacutes aprendo sobre las posibilidades de ODROID maacutes me ilusiona probar cosas nuevas con eacutel Me traslade a San Diego desde el Medio Oeste de los EEUU Continuo muy enamorado de muchos de los aspectos que la mayoriacutea de la gente de la Costa Oeste ya da por sentado Vivo con mi encantadora esposa y nuestro

adorable conejo mascota el cual mantiene mis libros y material informaacutetico en constante peligro

Bruno Doiche Editor Artiacutestico SeniorJugoacute a alrededor de 20 juegos este mes pero soacutelo encontroacute uno que valiera la pena

NUESTRO MARAVILLOSO PRESONAL ODROIDIAN

Rob Roy Editor JefeSoy un programador informaacutetico que vive y trabaja en San Francisco CA en el disentildeo y desarrollo de aplicaciones web para clients locales sobre mi cluster ODROID Mis principales lenguajes son jQuery angular JS y HTML5CSS3 Tambieacuten desarrollo SO precompilados Kernels personalizados y aplicaciones optimizadas para ODROID basadas en las versiones oficiales de Hardkernel por los cuales he ganado varios Premios Utilizo mi ODROIDs para diversos

fines como centro multimedia servidor web desarrollo de aplicaciones estacioacuten de trabajo y como plataforma de juegos Puedes echar un vistazo a mi coleccioacuten de 100 GB de software ODROID kernel precompilados e imaacutegenes en

httpbitly1fsaXQs

INDICE

hoMe DAtA ceNter - 20

JUeGoS liNUx opeN foDDer - 12

JUeGoS ANDroiD cAUSAlity - 14

MANUAl xU4 - 19

hifi ShielD 2 - 18

DeSArrollo ANDroiD - 29

ArcADebox - 23

liNeAGeoS - 11

coNocieNDo UN oDroiDiAN - 32

reMote pi - 15

tiMbre - 6

SeNSor UltrASoNico - 30

En este proyecto vamos a convertir el ODROID-C2 (httpbitLy 1oTJBya) en un inteligente timbre IoT que tomaraacute una foto de quienquiera que lo haga sonar

y la enviaraacute por correo electroacutenico al titular de una cuenta de Gmail Ademaacutes el dispositivo archivaraacute las fotos por fecha y hora dando la posibilidad de comprobar cualquier actividad sospechosa o simplemente para mantener un registro de todas las personas que tocan el timbre Es faacutecil ver que este ldquointeli-genterdquo timbre que utiliza un ODROID-C2 como piedra an-gular es una poderosa herramienta de seguridad y vigilancia el cual seraacute muy uacutetil para cualquier vivienda

Requisitos de hardwarebull ODROID-C2 (httpbitly1oTJBya)bull Webcam ODROID (httpbitly2iBHKPD)bull Adaptador Wi-fi (httpbitly1M4LdiC)bull 1x mini placa de pruebasbull 1x Resistencia 1 KΩbull 1x Resistencia 10 KΩbull 1x Pulsadorbull ~8x cables dumpon (el kit Tinkering C httpbit

ly1YNPN6kes una buena opcioacuten para este y futuros proyectos)

Requisitos de Softwarebull Ubuntu 1604 v20 de Hardkernel (httpbit

ly2cBibbk)bull Python 27 or 33 (preinstalado en Ubuntu)bull Libreriacutea WiringPi para controlar los pines GPIO del

ODROID-C2 Puedes aprender a instalarla con la guiacutea que hay disponible en httpbitly2ba6h8o

Montando el dispositivo IoT Para cablear las conexiones usamos los cables macho a hem-

bra y macho a macho Dupont El extremo hembra del cable Dupont macho a hembra se conecta al cabezal macho del ODROID-C2 y el otro extremo a los orificios de la placa de pruebas Ve consultando el esquema de distribucioacuten de los pines

de Hardkernel a medida que vayas creando las conexiones Este esquema lo puedes encontrar en httpbitly2aXAlmt El pin fiacutesico 1 es VCC y proporciona 33V a nuestro circuito co-nectamos el pin en la primera liacutenea vertical de nuestra placa de pruebas cerca del borde Puesto que vamos a utilizar el pin 6 como puesta a tierra comuacuten eacuteste lo conectaremos a la segunda liacutenea vertical de nuestra placa de pruebas El resto del circuito es muy simple puedes seguir el esquema de la Figura 1

La Webcam ODROID la tienes que conectar al ODROID-C2 a traveacutes de uno de los puertos USB disponibles en la placa El timbre se controla con el pin 15 tal y como puedes ver en la figura Ahora que tenemos el hardware listo iexclVamos a sumergirnos en el coacutedigo y hacer que el timbre suene ldquointeli-gentementerdquo

SoftwareLa parte central del coacutedigo ha sido extraiacuteda de un proyecto

Github disponible en httpbitly2jEXRbR No obstante este coacutedigo de ejemplo ha sido modificado en gran medida

TIMBRE IOTRECIBE un AvISO POR CORREO ELECTROnICO DE LA PERSOnA quE LLAMA A Tu PuERTApor Miltiadis Melissas (miltos)

TIMBRE

figura 1 - esquema del timbre

ODROID MAGAZINE 6

para conseguir que funcione correcta-mente en el ODROID-C2 Lo maacutes importante de todo es que el re-mapeo desde RPiGPIO a la libreriacutea WiringPi2 ya estaacute terminado puesto que Wiring-Pi2 es compatible con el ODROID-C2 Consulta la excelente guiacutea GPIO pro-porcionada por Hardkernel en httpbitly2jEUjWX Todo el coacutedigo esta descrito en los siguientes apartados de-limitado entre lsquoltgtrsquo con su correspon-diente descripcioacuten debajo

El coacutedigo baacutesicode odroidbellpy

ltimport wiringpi2 as odroidgt

Empezaremos importando la libreriacutea wiringpi2 Las instrucciones para in-stalar esta libreriacutea y poder controlar los pines GPIO del ODROID-C2 la puedes encontrar en httpbitly2ba6h8o

ltimport timegt

Importamos el moacutedulo time

ltimport osgt

Importamos el moacutedulo os

ltimport globgt

Importamos el moacutedulo glob

ltimport sysgt

TIMBRE

figura 2 - el sistema completo c2

Importamos el moacutedulo sys

ltodroidwiringPiSetup()gt

Hemos configurado el moacutedulo wi-ringPi2 conforme a la tabla que nos proporciona Hardkernel en httpbitly2aXAlmt

ltButton = 3gt

Este es en realidad el pin fiacutesico 15 seguacuten la tabla de httpbitly2aXAlmt

ltodroidpinMode(Button0)gt

Fijamos el pulsador como entrada

ltodroid

pullUpDnControl(Button1)gt

Activamos la resistencia de parada y arrastre En este caso parado tal y como lo indica el argumento 1

loop

Estamos entrando en un bucle ya que los dispositivos IoT siempre estaacuten en modo de espera

ltprint(ldquoProgram Runningrdquo)gt

La uacutenica finalidad de esto es la moni-torizacioacuten

oses

while Trueloops forever till

keyboard interrupt (ctr + C)gt

ltif odroiddigitalRead(Button)

== False when button is un-

pressedgt

ltsysstderrwrite(ldquordquo)gt

Si no se presiona el timbre imprimi-mos puntos en la pantalla usando la li-breriacutea sys

lttimesleep(1)gt

Se comprueba si se ha tocado el pul-sadortimbre cada segundo

ltelsegt

ltprint(ldquoButton Pressedrdquo)gt

Se ha presionado el pulsadortimbre

------| photo amp Bell

|------

Get FileName

ltnow = timestrftime(ldquoDatem-

d-yTimeH-M-Srdquo)gt

Declaramos la variable now con la fe-cha y hora que usaremos en la foto

Make command to run odroidC2

sh

ltcommand = ldquobash odroidC2sh

ldquo + str(now)gt

Invocamos el script shell odroidC2sh (ver a continuacioacuten)

-- odroidC2sh is an Shell

script that

-- is responsible for tak-

ing the photo and

-- making the Doorbell

Noise

--- We insert the ldquoNowrdquo ar-

gument so the python

--- script knows what the

filename of the

--- picture will be so it

can pass it on into the

ODROID MAGAZINE 7

ltmpv ringtonemp3gt

Finalmente haremos sonar el timbre usando un programa llamado mpv que ya estaacute incluido en Ubuntu 1604 v20 de Hardkernel (httpbitly2cBibbk) En otras palabras usamos el Mplayer para reproducir este archivo

Configurar el coacutedigo de Gmail

La mayoriacutea de la gente tiene una cuenta de Gmail Si no la tienes es muy faacutecil crearte una y lo maacutes importante de todo es gratis En realidad para que este script de Gmail funcione correctamente necesitamos dos cuentas de correo elec-troacutenico el correo electroacutenico del remi-tente y la cuenta de correo electroacutenico del destinatario y siempre es asiacute Por supuesto puede enviar un correo elec-troacutenico desde y hacia la misma cuenta pero es maacutes elegante crear una segunda cuenta de correo electroacutenico con el fin de estar al tanto de las fotos con el registro de la fecha y hora por separado Tambieacuten recomiendo que la cuenta de correo elec-troacutenico del destinatario sea la que utilices en tu dispositivo moacutevil para que el dis-positivo te avise cada vez que alguien lla-me a tu puerta No olvides permitir que ldquo las aplicaciones menos segurasrdquo tengan acceso a tu cuenta de Gmail (httpbitly124TgWN)

Vamos a examinar el script python llamado IoTOdroidpy

ltfrom emailmimetext import MIM-

ETextgt

ltfrom emailmimemultipart import

MIMEMultipartgt

Usamos esos dos moacutedulos porque necesitamos enviar un correo electroacutenico limpio con un remitente un receptor y un asunto

ltfrom emailmimeapplication im-

port MIMEApplicationgt

Tambieacuten importamos el moacutedulo re-

Script shell OdroidC2sh

El script OdroidC2sh es respon-sable de tomar la foto y hacer sonar el timbre La funcioacuten del argumento lsquoNowrsquo es pasar el nombre del archivo de la foto al script de Gmail En otras palabras es el conector entre nuestro coacutedigo baacutesico odroidbellpy y el script Odroid-IoTNo-tifierpy El script OdroidC2sh es muy simple

ltcd photosgt

Cambiamos desde directorio actual al directorio ltphotosgt

ltecho ldquoTaking the Photordquogt

ltnow=$1gt

ldquoNowrdquo es la fecha y hora de registro del nombre del archivo

ltechogt

ltfswebcam -d devvideo0 $now

jpggt

Este es el comando baacutesico para tomar la foto Utilizamos el comando fsweb-cam Si la aplicacioacuten fswebcam no estaacute instalada en tu sistema puedes instalarla con el siguiente comando

$ sudo apt-get install fswebcam

La sintaxis del comando es obvia toma una foto y usa la fecha y hora de registro como nombre de archivo Cada vez que se pulse el pulsador OdroidC2sh es activado por odroidbellpy El paraacute-metro -d determina el recurso a utilizar en nuestro caso devvideo0

ltecho ldquoPic Takenrdquogt

ltechordquordquogt

ltecho ldquoRinging Bellrdquogt

ltecho ldquordquogt

ltcd gt

Cambia de nuevo al directorio padre

--- email script (so it

knows what file to email

run command

ltossystem(command)gt

A continuacioacuten invocamos el co-mando system para ejecutar el script de correo electroacutenico

diagnostics

ltprint(ldquoFilenamerdquo now)gt

Imprimimos el ldquofilenamerdquo de la foto con la fecha y hora actuales

----| Email |----

ltprint(ldquoEmailrdquo)emailgt

ltemailcommand = lsquosudo python

IoTOdroidpy ldquoThis person is at

your doorrdquorsquo + lsquo ldquophotosrsquo + now +

lsquojpgrdquorsquogt

Enviamos la foto a la cuenta de Gmail del titular con la fecha y hora y el asunto ldquoThis person is at your doorrdquo

ltossystem(emailcommand) run-

ning the Email script withgt

-- the subject as ldquoSomeone

is ringing the doorbellrdquo and the

filename

-- We made before at the

-Photo amp Bell- section

Y finalmente lo enviamos

-- End Diagnostic Info

print(ldquoDone Processrdquo)

Todo estaacute hecho asiacute que el script fi-naliza su trabajo

-space out for next ldquoPress of

Buttonrdquo

ltprint(ldquordquo)gt

ltprint(ldquordquo)gt

Hacemos hueco para el siguiente ci-clo (proacutexima llamada al timbre)

TIMBRE

ODROID MAGAZINE 8

figura 3 - Alerta de correo electroacutenico de que alguien estaacute en la puerta

ltserverstarttls()gt

Configuramos y entramos en modo TLS TLS significa Transport Layer Se-curity (Seguridad de la capa de trans-porte) de modo que cualquier comando SMTP que siga este modo seraacute cifrado

ltserverlogin(lsquoltFrom

EmailgtrsquorsquoltFrom passwordgtrsquo)gt

Es hora de entrar en tu cuenta de Gmail de modo que necesitamos las credenciales correctas

ltserversendmail(msg[lsquoFromrsquo]

emaillist msgas_string())gt

Usando el anterior comando final-mente enviamos el correo electroacutenico Procura evitar el spoofing e introduce aquiacute tu direccioacuten de correo electroacutenico real El paraacutemetro emaillist es el que

hemos definido antes y el uacuteltimo paraacute-metro (msaas_string ()) el mensaje en forma de cadena con el archivo adjunto que es en este caso la foto El resultado lo puedes apreciar en la Figura 3

Testeando y ejecu-tando el coacutedigo

Desde el terminal (CTRL-T) eje-cutamos odroidbellpy con privilegios sudo

$ sudo python odroidbellpy

En este momento el dispositivo IoT se pone en modo de espera y apa-

ltmsg[lsquoReply-torsquo] = lsquoxyzgmail

comrsquogt

Correo electroacutenico del destinatario

ltmsgpreamble = lsquoMultipart

massagenrsquogt

El atributo preamble contiene el tex-to principal extra-blindado de los docu-mentos MIME por eso lo incluimos aquiacute

ltpart = MIMEText(ldquoHello The

doorbell is ringing A photo of

the person ringing the doorbell

has been attachedrdquo)gt

El cuerpo del mensaje

ltmsgattach(part)gt

ltpart =

MIMEApplication(open(str(sys

argv[2])rdquorbrdquo)read())gt

ltpartadd_header(lsquoContent-

Dispositionrsquo lsquoattachmentrsquo

filename=str(sysargv[2]))gt

Adjuntamos la foto al mensaje

ltserver = smtplibSMTP(ldquosmtp

gmailcom587rdquo)gt

Especificamos el servidor smtp que queremos usar y el puerto que utiliza el servidor de Gmail con el puerto 587 Tambieacuten puede usar el puerto 465 aunque no es mala idea comprobar con Google el puerto correcto por si acaso ha cambiado

ltserverehlo()gt

Especificamos el servidor smtp que queremos usar y el puerto que utiliza el servidor de Gmail con el puerto 587 Tambieacuten puede usar el puerto 465 aunque no es mala idea comprobar con Google el puerto correcto por si acaso ha cambiado

sponsable del archivo adjunto MIME MIME representa las Extensiones Mul-tiuso para el Correo en Internet Es una forma de identificar los archivos en In-ternet seguacuten su naturaleza y formato

ltimport smtplibgt

ltfrom smtplib import SMTPgt

Esta es la baacutesica y nativa libreriacutea en Python para enviar correos electroacutenicos de modo que no hay necesidad de insta-lar libreriacuteas externas smtplib Desde esta libreriacutea importamos la funcioacuten SMTP

ltimport sysgt

Importamos el moacutedulo de funcio-nes y paraacutemetros especiacuteficas del sistema puesto que necesitaremos el script ltargvgt de este moacutedulo (ver a continuacioacuten)

ltrecipients = [lsquoltYourEmailgtrsquo]gt

Tu direccioacuten de correo electroacutenico ya que tuacute eres el destinatario de las fotos

ltemaillist = [elemstrip()

split(lsquorsquo) for elem in recipi-

ents]gt

Hacemos una lista de correo elec-troacutenico en la que separaremos y quita-remos los caracteres pertinentes de cada elemento de la lista de destinatarios

ltmsg = MIMEMultipart()gt

Definimos el variable message (msg) como una Extensioacuten Multiuso para el Correo en Internet llamando a la fun-cioacuten MIMEMultipart

ltmsg[lsquoSubjectrsquo] = str(sys

argv[1])gt

El asunto del nuestro mensaje

ltmsg[lsquoFromrsquo] = lsquoltFrom Emailgtrsquogt

Tu direccioacuten de correo electroacutenico

TIMBRE

ODROID MAGAZINE 9

import wiringpi2 as odroid

import time

import os

import glob

import sys

odroidwiringPiSetup()

Button = 3

odroidpinMode(Button0)

odroidpullUpDnControl(Button1)

loop

print(ldquoProgram Runningrdquo)

while Trueloops forever till

keyboard interupt (ctr + C)

if odroiddigitalRead(Button)

== False when button not

pressed

sysstderrwrite(ldquordquo)

timesleep(1)

else

print(ldquoButton Pressedrdquo)

------| photo amp Bell

|------

Get FileName

now = timestrftime(ldquoDatem-

d-yTimeH-M-Srdquo)

Make command to run

odroidC2sh

command = ldquobash odroidC2sh ldquo

+ str(now)

-- odroidC2sh is an Shell

script that

-- is responsible for tak-

ing the photo and

-- making the Doorbell

Noise

--- We insert the ldquoNowrdquo ar-

gument so the python

--- script knows what the

file name of the

--- picture will be so it

can pass it on into the

--- email script (so it

knows what file to email

figura 4 ndash el script python del timbre en ejecucioacuten

run command

ossystem(command)

diagnostics

print(ldquoFilenamerdquo now)

----| Email |----

print(ldquoEmailrdquo)email

emailcommand = lsquosudo python

IoTOdroidpy ldquoSomeone is ringing

the doorbellrdquorsquo + lsquo ldquophotosrsquo +

now + lsquojpgrdquorsquo

ossystem(emailcommand) run-

ning the Email script with

-- the subject as ldquoSomeone

is ringing the doorebellrdquo and the

filename

-- We made before at the

-Photo amp Bell- section

-- End Diagnostic Info

print(ldquoDone Processrdquo)

-space out for next ldquoPress

of Buttonrdquo

print(ldquordquo)

print(ldquordquo)

OdroidC2sh

binsh

cd photos

echo ldquoTaking the Photordquo

now=$1 Now is the filename time

stamp

take pic

fswebcam -d devvideo0 $nowjpg

echo ldquoPic Takenrdquo

echordquordquo

ring Bell

echo ldquoRinging Bellrdquo

echo ldquordquo

echo ldquordquo

cd

mpv ringtonemp3

IoTOdroidpy

from emailmimetext import MIM-

EText

from emailmimeapplication im-

port MIMEApplication

rece en pantalla el mensaje ldquoProgram is runningrdquo Al mismo tiempo aparecen puntos ldquordquo en la pantalla uno a uno indicando al usuario que el dispositivo estaacute funcionando con normalidad Cu-ando alguien pulsa el botoacuten (timbre) el script OdroidC2sh se ejecuta con una doble finalidad Primero toma una in-

stantaacutenea de la persona que hace sonar el timbre En segundo lugar enviacutea el correo electroacutenico a traveacutes de IoTOdroidpy a la cuenta de Gmail del propietario con la fecha y hora de registro de la foto que se adjunta Despueacutes vuelve al modo de espera y el timbre IoT suena

Notas finalesPor supuesto este proyecto se podriacutea

mejorar de muchas formas Por ejemplo se podriacutea antildeadir un LED en el timbre IOT que indicara su correcto funciona-miento Un dispositivo maacutes complejo similar a eacuteste podriacutea usarse como timbre comercial con la ayuda de un moacutedulo placa releacute Tampoco seriacutea complicado incluir la posibilidad de que grabase una pequentildea grabacioacuten de viacutedeo junto con las fotos haciendo que el timbre ldquointeli-genterdquo sea auacuten maacutes inteligente Ademaacutes como dice el viejo refraacuten ldquoiexclla perfeccioacuten es el eterno enemigo de lo funcionalrdquo

Coacutedigo deltimbre IoT

Aquiacute tienes una copia de todo el coacute-digo Al final de este artiacuteculo tienes un enlace a la paacutegina github que tambieacuten contiene el coacutedigo

Odroidbellpy

TIMBRE

ODROID MAGAZINE 10

from emailmimemultipart import

MIMEMultipart

from smtplib import SMTP

import smtplib

import sys

recipients = [lsquoabcgmailcomrsquo]

emaillist = [elemstrip()

split(lsquorsquo) for elem in recipi-

ents]

msg = MIMEMultipart()

msg[lsquoSubjectrsquo] = str(sysargv[1])

msg[lsquoFromrsquo] = lsquoxyzgmailcomrsquo

msg[lsquoReply-torsquo] = lsquoabcgmailcomrsquo

msgpreamble = lsquoMultipart

massagenrsquo

part = MIMEText(ldquoHello There is

someone ringing your doorbell A

picture of this person has been

atachedrdquo)

msgattach(part)

part =

MIMEApplication(open(str(sys

argv[2])rdquorbrdquo)read())

partadd_header(lsquoContent-

Dispositionrsquo lsquoattachmentrsquo

filename=str(sysargv[2]))

msgattach(part)

server = smtplibSMTP(ldquosmtp

gmailcom587rdquo)

serverehlo()

serverstarttls()

serverlogin(lsquoxyzgmail

comrsquorsquoyourpassword herersquo)

serversendmail(msg[lsquoFromrsquo]

emaillist msgas_string())

El coacutedigo del proyecto estaacute disponible en httpbitly2jMAdMY usando el siguiente comando

$ git clone

httpsgithubcommiltiadisme-

lissas

IoTOdroidC2Doorbellgit

TIMBRE

A finales de 2016 los usuarios de Cyanogenmod se horrorizaron cuando Cyanogen anuncioacute la

cancelacioacuten de sus servicios dejando a todos los usuarios que dependiacutean de Cyanogenmod sin soporte Sin em-bargo en poco tiempo llegariacutea una so-lucioacuten en forma de LineageOS Si eres un usuario del ODROID-XU3 XU4 es el momento perfecto para colaborar con la versioacuten de LineageOS en los foros ODROID

Caracteriacutesticas- Android 711 Nougat lineageoS 141- Kernel 3109- openGl eS 112030 (aceleracioacuten por GpU)- opencl 11 ep (aceleracioacuten por GpU)- funcioacuten multiusuario habilitada (hasta 8 usuarios)- ethernet integrado y soporte para ether-net Gigabit USb 30 - Soporte para rtl8188cUS rtl8191SU y USb Wireless ralinkt- Soporte bluetooth USb (ble A2dp Sink)- Soporte para dongle GpS USb- Anclaje a red USb - punto de acceso Wi-fi portaacutetil- Soporte DAc USb nativo para Android

LInEAGEOS-141 ODROID-Xu3Xu4OLvIDATE DE CyAnOGEn EL fuTuRO ESTA AquIpor voodik editado por bruno Doiche

LINEAGEOS

- Soporte para Webcam USb UVc- Soporte hDMi-cec- Selinux

Problemas conocidosEn este momento soacutelo admite moacutedu-

los Bluetooth de bajo consumo v40 (BLE) Consulta el Moacutedulo Bluetooth 2

Coacutemo instalarloEn primer lugar necesitas preparar

tu emmcsd con imaacutegenes especiales de auto-instalacioacuten

La puedes encontrar aquiacutehttpophmdrjrnetvoodik5422

ODROID-XU3AndroidCM-141-ATV

Alpha-01_110217

Graba la imagen en tu eMMCsd a traveacutes de Win32DiskImager y arranca el dispositivo Tendraacute que esperar paci-entemente durante el primer arranque ya que el proceso de actualizacioacuten puede llegar a tardar hasta 20 minutos

Coacutedigo fuente Kernel

$ git clone httpsgithubcom

voodikandroid_kernel_hardkernel

_odroidxu3 -b cm-140_5422

ODROID MAGAZINE 11

SNES 3DO y Sega Genesis El juego teniacutea diferentes escenarios para jugar la selva la nieve y el desierto

Open Fodder ofreciacutea 23 misiones que se dividiacutean en varias fases En total suponiacutea superar 72 niveles para llevar

Este mes me gustariacutea hablar de un juego llamado Open Fodder se trata de un remake del claacutesico

juego de Amiga Cannon Fodder desar-rollado por Sensible Software en 1993 Utiliza los datos del juego original Can-non Fodder para conseguir una experi-encia muy similar al juego original en tu ODROID

Muchos de los populares juegos de Linux de hoy en diacutea como Stratagus y Freeciv son en realidad remakes de claacutesicos juegos de DOS de mediados y finales de los 90 y Open Fodder no es diferente El remake de Cannon Fodder es un juego disparos accioacuten y estrategia donde controlas a un pequentildeo grupo de soldados que avanza a traveacutes de varias docenas de niveles para matar a los sol-dados enemigos destruir tanques echar abajo edificios y derrotar a tus enemigos El juego fue lanzado por primera vez para Amiga en 1993 y fue exportado por sus desarrolladores a MS-DOS Atari Jaguar

a tu escuadroacuten a la victoria Cuando se lanzoacute el juego fue muy elogiado por varias revistas de juego Amiga con pun-tuaciones que llevaban al 95 por ciento y fue considerado como uno de los mejo-res juegos lanzados en 1993 En general siguioacute siendo uno de los mejores juegos jamaacutes creado para la plataforma Amiga durante sus 11 antildeos de vida

Desde un punto de vista maacutes poliacutetico el juego lleva impliacutecito un intenso men-saje sobre la guerra en siacute misma puesto que juegas y llevar a tus soldados a una muerte inevitable Cada misioacuten se inicia

JuEGOS LInuXOPEn fODDERpor tobias Schaaf (meveric)

JUEGOS LINUX

figura 1 - el logotipo de cannon fodder en el cual estaacute basado open fodder

figuras 2 3 y 4 - los niveles de selva desierto y nieve en open fodder

figuras 5 y 6 - A medida que avanzas en el juego tu larga liacutenea de reclutas se con-vierte gradualmente en cruces alineadas como en un cementerio

ODROID MAGAZINE 12

nas segundas partes ademaacutes de algunas misiones de bonificacioacuten Cannon Fod-der 2 salioacute un antildeo maacutes tarde pero fue maacutes bien un ldquodisco de datosrdquo con ex-pansiones que una secuela ya que en su mayor parte presentaba maacutes misiones en lugar de nuevas caracteriacutesticas Tambieacuten estaba el X-Mas de Amiga que ofreciacutea algunas misiones diferentes basadas en el juego Cannon Fodder

Ejecutando Open Fodder

Open Fodder es un remake del motor del juego Cannon Fodder que lleva el juego a los sistemas operativos modernos Al igual que otras migraciones del motor del juego (como OpenTTD) puede uti-lizar los datos del juego original con esta versioacuten del motor para ejecutar el juego en tus dispositivos modernos Esta mi-gracioacuten tambieacuten cuenta con una versioacuten exportada para los dispositivos ARM lo que significa que podemos ejecutarlo igualmente en nuestros ODROIDs

Todaviacutea estaacute en desarrollo pero ya funciona bastante bien Como de cos-tumbre se puede instalar desde mi repo-sitorio y puesto que soacutelo requiere SDL2 y SDL2 Mixer como dependencias prin-cipales deberiacutea funcionar en Debian y

con un nuevo grupo de reclutas que se alinean esperando a unirse al combate Los soldados desechables (de ahiacute el nom-bre de cannon fodder Carne de Cantildeon) poco a poco se convierten en cruces alin-eadas dando forma a un cementerio mil-itar a medida que vas completando cada misioacuten formaacutendose maacutes y maacutes filas con-forme vas enterrando a tus predecesores Sin embargo los desarrolladores le di-eron un cierto toque de humor ya que los primeros soldados de tu escuadroacuten (y por tanto los casi seguro que moriraacuten) llevan de hecho los nombres de las seis personas que componiacutean el equipo de desarrollo del juego

Si nos fijamos bien el juego incor-poraba algunos detalles bastante intere-santes Por un lado tiene su propia can-cioacuten ldquo War never been so much funrdquo que suena durante la intro del juego iexclUno de los desarrolladores del juego Jon Hare compuso la muacutesica junto con el compositor Richard Joseph Si teniacuteas el Amiga CD32 tambieacuten recordaraacutes una pista adicional que incluiacutea un video en el cual los desarrolladores se disparaban entre siacute con armas de juguete (httpbitly2l67bFy) iexclSin duda se divirtieron bastante desarrollando este juego

Cannon Fodder tambieacuten tuvo algu-

JUEGOS LINUX

Ubuntu por igual las puedes encontrar en mi lista principal de paquetes para armhf y jessiemain para arm64

Se puede instalar con este comando en un dispositivo ODROID que ejecute Debian suponiendo que ya tengas con-figurados mis repositorios o esteacutes usando una de mis imaacutegenes de Debian (httpbitly13v98ly)

$ apt-get install

openfodder-odroid

He alterado ligeramente el juego para que siempre se ejecute en modo pantalla completa aunque si lo deseas puedes cambiar al modo de ventana simple-mente pulsando F11 cuando tenga el juego activado

Convirtiendo los datos del juego

Por siacute sola mi versioacuten de Open Fod-der viene con el especial Amiga X-Mas ademaacutes de varios niveles demo dis-ponibles de forma gratuita Si quieres jugar el juego real tendraacutes que importar los datos desde un CD Cannon Fodder

Si estaacute usando un ODROID para ju-gar al Open Fodder puedes localizar las carpetas de los datos del juego en la car-peta $HOMEopenfodderData Por ejemplo homeodroidopenfodderDataDos_CD es una de esas carpetas de datos del juego Existen varias carpe-tas de datos del juego que puedes usar dependiendo de la versioacuten que tengas del juego Cannon Fodder

Dos_CDAunque el juego es compatible con

muchas y diferentes fuentes del juego actualmente soacutelo Dos_CD parece ser una versioacuten de Open Fodder ldquototal-mente compatiblerdquo con muy pocos er-rores y problemas El resto de fuentes del juego pueden tener problemas

Aquiacute tienes un consejo raacutepido Aunque se llama Dos_CD cogeraacute cu-alquier versioacuten de DOS de Cannon Fodder que puedas encontrar Si tienes

figura 7 - Sensible Software - los desarrolladores de cannon fodder

ODROID MAGAZINE 13

WHDLoad en un Amiga (o WinUAE) para extraer los archivos del juego y co-piarlos en la carpeta DataAmigardquo No lo he probado pero si tienes la ldquoCannon Fodder Collectionrdquo de Amiga CD32 no oficial puedes copiar el contenido de FodderNew en esta carpeta lo que tendraacute como resultado niveles completamente diferentes Puede considerarse como una versioacuten maacutes compleja del juego aunque a la vez maacutes divertida Por lo tanto bien poner los archivos originales de Amiga aquiacute o bien los archivos FodderNew de la ldquoCannon Fodder Collectionrdquo

Dos2_CDDos2_CD es en realidad la carpeta

de la versioacuten DOS de Cannon Fodder 2 pero tambieacuten funciona con la versioacuten GoG Desafortunadamente tiene algu-nos problemas el maacutes grave es que el juego no tiene ninguacuten tipo de sonido o muacutesica Aparte de esto todo parece fun-cionar correctamente pero desconozco coacutemo reaccionaraacute en niveles posteriores La carpeta Data tambieacuten incluye las car-petas WAV Plus AmigaFormat_XMAS y Custom En WAV se almacenan los efectos de sonido por defecto para to-dos los juegos (Cannon Fodder) Plus es una demo del nuacutemero 31 la revista Amiga Power y AmigaFormat_XMAS es el Amiga Format Christmas Special Tambieacuten hay una carpeta Custom que te permite jugar otros juegos y mapas pero necesitan la versioacuten (CD) de DOS o de lo contrario no apareceraacuten

Notas finalesOpen Fodder es un buen proyecto

que te permite ejecutar este increiacuteble juego en sistemas modernos Realmente me gusta y estoy deseando ver coacutemo pro-gresa Espero que las versiones de Amiga y Cannon Fodder 2 sean pronto total-mente compatibles Tal vez incluso poda-mos ver mejoras graacuteficas con el tiempo Me gustariacutea ver graacuteficos maacutes modernos ya que el juego es bastante antiguo y los graacuteficos no son los maacutes idoneos para res-oluciones 1080p

la versioacuten de disco de Cannon Fodder simplemente copia el CF_ENGDAT en la carpeta Dos_CD La versioacuten original de CD DOS teniacutea un archivo llamado cf_cddat Cambiar el nombre a CF_ENGDAT y copiarlo a la carpeta Dos_CD Si tienes la versioacuten GoG del juego soacutelo tiene que copiar CF_ENG DAT a la carpeta Dos_CD iexclEsta es una forma raacutepida y legal de conseguir el juego si estaacutes interesado

Aseguacuterate de que el nombre del ar-chivo este en mayuacutescula ya que el juego tiene en cuenta esta cuestioacuten Intenta que coincida todo para asegurarte de que las cosas funcionen sin problemas

Amiga_CDAmiga CD32 tambieacuten contaba con

una versioacuten de este juego Esta es la ver-sioacuten que incluye el video al que hemos hecho referencia anteriormente En el CD de Amiga CD32 hay una carpeta llamada Fodder El contenido de esta carpeta debe copiarse a la carpeta Ami-ga_CD Puedes extraer la segunda pista del CD y almacenarla como Track2flv en la misma carpeta con la finalidad de tener el archivo de video

Me topeacute con algunos problemas cu-ando haciacutea esto y descubriacute nuevamente que el juego buscaba muchos archivos en mayuacutesculas asiacute que utiliceacute el siguiente comando para copiar todos los archivos y tenerlos tambieacuten en mayuacutesculas en la carpeta Amiga_CD$ for files in `ls` do cp $files

`echo $files | tr lsquo[lower]rsquo

lsquo[upper]rsquo` done

Asiacute funcionaba bien pero teniacutea algu-nos fallos Por ejemplo la animacioacuten del helicoacuteptero al inicio de cada misioacuten no apareciacutea y el cursor cuando se guarda un archivo se distorsionaba Aparte de esto no he visto problemas importantes en la versioacuten Amiga CD32

AmigaLa Informacioacuten de desarrollador de

Open Fodder dice ldquoUsar el instalador

JUEGOS LINUXJUEGOS ANDROID

CAuSALITy un JuEGO DE ROMPE-CABEzAS COn PARA-DOJAS DE vIAJES En EL TIEMPO por bruno Doiche

Configura tuacute mismo los entornos extrantildeos e insoacutelitos y

ayuda a un grupo de astronautas varados a encon-trar una ruta hacia un lugar seguro Cada nivel al que te enfrentas representa un nuevo reto donde necesitas llevar a tu astronauta a una salida que coincida con su color Los maacutergenes de tiempo son cortos aunque es muy divertido Aunque formas parte de tan soacutelo una fraccioacuten de tiempo de la vida de tu personaje iexclten cuidado pasaraacutes un montoacuten de tiempo enganchado a este juego

httpsplaygooglecomstoreappsdetailsid=comlojugamesandroidCausality

el entorno 3D isomeacutetrico es magniacute-fico a menudo no superaba el nivel porque los graacuteficos me cautivaban

ODROID MAGAZINE 14

tePi necesitan estar conectados a otros distintos en el ODROID-C2 porque parece haber un conflicto La interfaz UART ocupa estos pines y el estado por defecto del ODROID (1=high en Pin 8) no es lo que espera la RemotePi (GPIO debe entrar en el valor por defecto 0=low para cortar la energiacutea tras el apagado) Pero puesto que necesitas utilizar cables de todos modos para conectar la Remot-ePi esto no supondraacute ninguacuten problema ya que simplemente puedes reconectar los cables a otros pines GPIO

Como evitamos el circuito de ali-mentacioacuten del ODROID encendieacutendo-lo a traveacutes de GPIO tambieacuten pasamos por alto la proteccioacuten ante subidas de tensioacuten 2526A del dispositivo pero no te preocupes La RemotePi tambieacuten tiene proteccioacuten ante subidas de tensioacuten que deberiacutea coincidir con el mismo val-or que en el caso de la RemotePi board para la Raspberry Pi 3 Sin embargo la RemotePi para la Raspberry Pi 2 es de soacutelo 2A Esto estaacute bien porque el valor es menor a los 26A del ODROID de modo el polyfuse de la RemotePi se ac-tivariacutea antes si conectas demasiados dis-

La RemotePi board (httpbitly2l8JcWU) que convierte cu-alquier mando a distancia en un

interruptor de encendido para tu orde-nador de placa reducida puede ser com-patible con el ODROIDC2 si sigues esta guiacutea Si utilizas tu dispositivo como centro multimedia esta placa te propor-cionara un receptor de infrarrojos y un circuito de alimentacioacuten asiacute como un botoacuten de encendido Puedes encender y apagar tu ODROID completamente a traveacutes de una sentildeal infrarrojos (IR) y simplemente presionar el botoacuten de en-cendido para apagarlo y reiniciarlo con seguridad La placa RemotePi es respon-sable del modo espera que absorbe una miacutenima energiacutea mientras el ODROID estaacute completamente apagado Por uacutel-timo la placa alimenta tu dispositivo a traveacutes de GPIO lo cual requiere un cable microUSB para conectarlo a la Re-motePi en lugar de utilizar un adaptador de corriente normal

Configuracioacuten de hardware

Puesto que la RemotePi estaba pen-sada originalmente para la Raspberry Pi 2 necesitaraacutes utilizar cables adiciona-les en lugar de colocarla justamente en cima del C2 para evitar interferir con el disipador de calor asiacute que debes re-cablear algunos pines Es necesario utili-zar cables con el diaacutemetro adecuado para los pines de 5V y puesta a tierra ya que la corriente podriacutea estar entre los 2A y 26A dependiendo de cuaacutentos dispositi-vos USB conectes a tu dispositivo

Los pines GPIO 8 y 10 de la Remo-

positivos no alimentados de forma exter-na que no es una buena idea en un SBC al fin al cabo No obstante debido a esta diferencia de amperaje una RemotePi para la Raspberry Pi 3 seriacutea la mejor op-cioacuten para este proyecto

Como resultado del nuevo cableado el firmware de RemotePi ya no se puede configurar de forma normal aunque nunca he usado esta funcioacuten Si fuera necesario configurar o actualizar el firm-ware necesitaraacutes volver a conectar los pines 8 y 10 de la RemotePi a los pines 8 y 10 del ODROID durante la actu-alizacioacuten del firmware y luego deshacer los cambios una vez que la actualizacioacuten haya finalizado Otra posibilidad es simplemente conectar una Raspberry Pi para actualizar el firmware Esto suena a un montoacuten de problemas pero en re-alidad simplemente es extender la con-exioacuten del cabezal y cambiar una liacutenea en el script principal y dos liacuteneas en otro script opcional si haces uso de ello

Re-cableando laconexioacuten GPIO

Dado que la RemotePi estaacute disentildeada

REMOTEPI BOARD PARA EL ODROID-C2por inifity85

REMOTEPI

figura 1 - remotepi board

ODROID MAGAZINE 15

ergiacutea completamenteIrswitchsh (solo cambia el script

original de MSL Digital de GPIOpin1 = 14 a GPIOpin1 = 225)

binbash

prevent restarting XBMC at

shutdown This is only used for

OpenElec before V5

LOCKDIR=rdquovarlockrdquo

LOCKFILE=rdquoxbmcdisabledrdquo

this is the GPIO pin receiving

the shut-down signal

Raspberry Pi pin8 GPIOpin1=14

Odroid-C2 pin26 GPIOpin1=225

GPIOpin1=225

functions

add_omit_pids()

omit_pids=rdquo$omit_pids -o $1rdquo

safe_shutdown ()

for OpenElec before V5

touch ldquo$LOCKDIR$LOCKFILErdquo

for OpenElec V5 and later

systemctl stop kodi

add_omit_pids $(pidof connmand)

add_omit_pids $(pidof dbus-dae-

mon)

killall5 -15 $omit_pids

for seq in `seq 1 10` do

usleep 500000

clear gt devtty1

killall5 -18 $omit_pids || break

done

sync

umount -a gtdevnull 2gtamp1

poweroff -f

echo ldquo$GPIOpin1rdquo gt sysclass

gpioexport

echo ldquoinrdquo gt sysclassgpio

gpio$GPIOpin1direction

while true do

sleep 1

power=$(cat sysclassgpio

gpio$GPIOpin1value)

if [ $power = 0 ] then

echo ldquooutrdquo gt sysclassgpio

gpio$GPIOpin1direction

echo ldquo1rdquo gt sysclassgpio

una carcasa personalizada de modo que el receptor integrado podriacutea estar oculto y no ser uacutetil En ese caso puedes desac-tivar el IR del ODROID en favor del re-ceptor externo GPIO-IR en la RemotePi y conectar el pin 12 Tienes disponible maacutes informacioacuten sobre el cambio al receptor GPIOIR en LibreELEC en httpbitly2lpDl27

Scripts de apagado para LibreELEC

Los dos scripts tratados a continu-acioacuten pueden descargarse desde la paacutegina de soporte de MSL Digital Solutions en httpbitly2kMxyVG En esta paacutegina tambieacuten encontraras una guiacutea para utili-zar estos scripts en otros sistemas opera-tivos como Volumio y RuneAudio

El script irswitchsh se usa para el apagado seguro a traveacutes de sistema In-frarrojos Tras pulsar el correspondiente botoacuten el sistema se apagaraacute de forma se-gura luego RemotePi esperaraacute a que el GPIO225 alcance el estado 0 (low) que aparece tras el cierre exitoso del sistema Finalmente cortaraacute la energiacutea

El script shutdownsh se usa para el apagado seguro a traveacutes de la interfaz del programa o script Despueacutes de navegar hasta el botoacuten de apagado en la GUI el sistema se apagaraacute de forma segura luego RemotePi esperaraacute a que el GPIO225 alcance el estado 0 (low) que apareceraacute tras apagarse el sistema de forma adec-uada y segura Finalmente cortaraacute la en-

originalmente para una Raspberry Pi desgraciadamente no es soacutelo enchufar y usar Necesitaraacutes volver a cablear dos pines usando los cables de todos los pines tal y como se muestra en la Figura 2 Re-cablea el pin 8 de la RemotePi al pin 26 del ODROID-C2 y el pin 10 de la RemotePi al pin 7 del ODROID-C2

Si no quieres utilizar el receptor IR de la RemotePi para el mando a distan-cia de LibreELEC puedes dejar desco-nectado el pin 12 La placa continuaraacute encendieacutendose y apagaacutendose a traveacutes del comando de control remoto IR pero el control de la GUI de LibreELEC seraacute asumido por el receptor de infrarrojos integrado en el ODROID Sin embargo si has comprado una RemotePi con un receptor IR y un LED externo es posible que hayas decidido colocarla dentro de

REMOTEPI

figura 3 - la remotepi ha sido recableada y montada en una carcasa personalizada

figura 2 - re-cableado Gpio

ODROID MAGAZINE 16

Centro Multimedia por ejemplo Esos comandos de apagado se equiparaacuten a eventos internos similar a cuando nave-gas por el menuacute de apagado de Kodi Sin utilizar este segundo script el sistema se cerraraacute con seguridad pero la placa Re-motePi no recibiriacutea ninguna indicacioacuten para monitorizar el GPIO225 de modo que no cortariacutea la energiacutea tras apagarse el sistema correctamente

Usando el receptor IR de la RemotePi

Si deseas utilizar el receptor IR de la RemotePi en lugar del receptor IR ODROID integrado tendraacutes que des-activar el sistema IR integrado y activar el receptor IR GPIO Para hacer esto en Ubuntu puede consultar el artiacuteculo de la Wiki de Hardkernel en httpbitly2l8KrWg Para Libre-ELEC echa un vistazo a mi mini-guiacutea en httpbitly2lLKj2A Para preguntas comentari-os o sugerencias visita el hilo original en httpbitly2mgFGKk

gpio$GPIOpin1value

sleep 3

safe_shutdown

fi

done

Shutdownsh (solo cambia GPIOpin =15 a GPIOpin =249 y GPIOpin1 =14 a GPIOpin1 =225)

binbash

if [ ldquo$1rdquo = ldquorebootrdquo ] then

Raspberry Pi pin10 GPIOpin=15

Odroid-C2 pin7 GPIOpin=249

GPIOpin=249

Raspberry Pi pin8 GPIOpin1=14

Odroid-C2 pin26 GPIOpin1=225

GPIOpin1=225

echo ldquo$GPIOpinrdquo gt sysclass

gpioexport

execute shutdown sequence on

pin

echo ldquooutrdquo gt sysclassgpio

gpio$GPIOpindirection

echo ldquo1rdquo gt sysclassgpio

gpio$GPIOpinvalue

usleep 125000

echo ldquo0rdquo gt sysclassgpio

gpio$GPIOpinvalue

usleep 200000

echo ldquo1rdquo gt sysclassgpio

gpio$GPIOpinvalue

usleep 400000

echo ldquo0rdquo gt sysclassgpio

gpio$GPIOpinvalue

set GPIO 14 high to feedback

shutdown to RemotePi Board

because the irswitchsh has

already been terminated

echo ldquo$GPIOpin1rdquo gt sysclass

gpioexport

echo ldquooutrdquo gt sysclassgpio

gpio$GPIOpin1direction

echo ldquo1rdquo gt sysclassgpio

gpio$GPIOpin1value

usleep 4000000

fi

El script shutdownsh es uacutetil si a vec-es usas las aplicaciones remotas Android Yatse o Kore o hotkeys para apagar tu

REMOTEPI

ODROID Talk Subreddit

httpwwwredditcomrodroid

ODROID Magazine

estaacute en Reddit

ODROID MAGAZINE 17

El HiFi Shield 2 (39$ httpbitly2lHSlZJ) es un Con-vertidor Digital a Analoacutegico de Alta definicioacuten (DAC) para el ODROID-C2 y el ODROID-C1+ Se trata de

una placa de sonido especial para el ODROID-C2 y C1 + que estaacute optimizada para mejorar la calidad de reproduccioacuten del sonido Ofrece un sonido muy bien equilibrado consistente intenso amplio y muy bien dimensionado por niveles Hemos analizado la calidad de audio de la salida HiFi Shield 2 DAC con un equipo estaacutendar de la industria del sonido llamado Au-dio Precision Audio Precision es un analizador de audio de alto rendimiento optimizado para la produccioacuten de audio digital

Usando el chip DAC PCM5242 de uacuteltima generacioacuten de Texas Instrument conocido como Burr-Brown el HiFi Shield 2 soporta formatos de audio de 16 24 y 32 bits con una ra-tio THD+N miacutenima (0002) y una dinaacutemica ideal (114dB +) ademaacutes de sorprendentes tasas de muestreo de 384 kHz La interfaz dedicada SPDIF soporta una definicioacuten de hasta 192kHz24bit a traveacutes de una salida oacuteptica (Toslink)

Si hacemos uso del puerto de expansioacuten I2S en el C2C1+ no es necesario ocupar un puerto USB permitiendo al usu-ario seleccionar el sistema de reproduccioacuten de audio que desee como Volumio y Debian (DietPi) para reproducir sonido HiFi

HIFI SHIELD 2

HIfI SHIELD 2EL MEJOR SOnIDO quE PODRAS COnSEGuIR En AnDROIDeditado por rob roy (robroy)

oDroiD-c2 y hifi Shield 2 Audio pb +J

primer plano de la placa con anotaciones

Distribucioacuten de los 7 pines i2S del c2c1+

la salida de audio es estaacutendar la salida de color rojo corresponde al canal de audio iz-quierdo y la salida de color blanco correspon-de al canal de audio derecho

ODROID MAGAZINE 18

Detalles

La guiacutea de configuracioacuten de UbuntuLinux para ODROID-C2 estaacute disponible en httpbitly2brrGdG y para ODROID-C1+ en httpbitly2lI7AC7 El sistema operativo oficial Volumio 2 se puede descargar desde httpbitly2kOJNAV y la imagen DietPi basada en Debian se encuentra en httpbitly2ls45yM Puede ver los esquemas en httpbitly2mnukV4

Diagrama por bloques del hifi Shield2

Caracteriacutesticasbull El control de volumen a traveacutes de la interfaz

i2c es una gran caracteriacutestica para mantener una buena calidad del sonido con varios voluacutemenes de salida de audio

bull Los puertos de salida incluyen terminales esteacute-reo rcA chapados en oro

bull La fuente de alimentacioacuten tiene habilitado un regulador de interferencias de ruido ultra-bajo lo cual reduce el ruido de la fuente de alimentacioacuten y aumenta en gran medida el ratio sentildealruido

bull La interfaz I2S permite la descodificacioacuten di-recta de la entrada digital a la salida analoacutegica utili-zando la sincronizacioacuten del reloj maestro

bull La superficie de la PCB estaacute chapada en oro so-bre 2 onzas de cobre lo cual garantiza la continui-dad de la sentildeal y reduce la reflexioacuten y deflacioacuten de la sentildeal

bull Dispone de almohadillas soldadas a la salida de audio balanceada (sentildeal diferencial)

bull La interfaz SPDIF dedicada es nueva admite una definicioacuten de hasta 192khz24bit a traveacutes de una nueva salida oacuteptica (toslink)

bull Este HiFi shield no es compatible con Android y hardkernel no tiene planes para hacerlo compatible y asiacute poder habilitar el controlador i2S en el Kernel y el hAl de Android

El Manual de usuario del ODROID-XU4 disponible en httpbitly1U9Q8yg ha sido revisado hace poco para incluir algunos de los perifeacutericos maacutes recientes como

la Expansion Board SmartPower2 y oCam Puesto que ahora Hardkernel tambieacuten ofrece Ubuntu 1604 todos los ejemplos de coacutedigo se han actualizado para que sean compatibles con el nuevo sistema operativo Si tiene comentarios preguntas o sugerencias visita el hilo de los foros ODROID en httpbitly1RykBrT

MAnuAL Xu4ACTuALIzADOREvISADO PARA uBunTu 1604 y LOS PERIfERICOS MAS RECIEnTESeditado por rob roy (robroy)

MANUAL XU4

el manual del oDroiD-xU4 incluye informacioacuten detallada de los diferentes sistemas operativos software y perifeacutericos disponibles para el oDroiD-xU4

ODROID MAGAZINE 19

El DevOps es complicado Los grandes proyectos de soft-ware como Mesos y Kubernetes desarrollan equipos como los que se encuentran en la mayoriacutea de las empre-

sas y organizaciones tecnoloacutegicas como CoreOS con la finali-dad de ayudar a los desarrolladores a poner sus aplicaciones en funcionamiento Sin embargo iquestcuaacutel seriacutea una buena solucioacuten para un desarrollador en solitario o una pequentildea red domeacutesti-ca iquestCoacutemo podemos usar el coacutedigo a nivel de infraestructura

Uso un portaacutetil Macintosh OSX para desarrollo pero para las aplicaciones de larga duracioacuten o aplicaciones que se ejecu-tan por la noche necesito un entorno remoto siempre activo ya que mi portaacutetil estaraacute fuera de liacutenea o en el tren conmigo mientras voy y vengo del trabajo Tiene su sentido no utilizar el ordenador como un entorno para la puesta en funcionamiento de aplicaciones

El ODROID-XU4 es un ordenador ideal para un entor-no de implementacioacuten remoto ya que es econoacutemico flexible cuenta con excelentes especificaciones teacutecnicas y puede ejecutar Linux Este artiacuteculo tiene por objetivo explicar coacutemo almacenar coacutedigo de implementacioacuten en tu repositorio de proyectos asiacute como automatizar las implementaciones y ejecuciones

Arch LinuxArch Linux es una distribucioacuten de Linux gratuita de coacutedigo

abierto que fue lanzada en 2002 Estaacute centrada en la elegancia la integridad del coacutedigo el minimalismo y la simplicidad y cuenta con que el usuario haga un esfuerzo en comprender el funcionamiento del sistema Arch Linux utiliza en particular un modelo de revisioacuten continua de modo que todo lo que se necesitas para conseguir el software del sistema maacutes reciente es actualizar el sistema de forma perioacutedica

Arch Linux puede ser algo difiacutecil de asimilar ya que uti-liza herramientas diferentes a las de una distribucioacuten Debian El gestor de paquetes se activa a traveacutes de ldquopacmanrdquo en lugar de ldquoapt-getrdquo y existe un gestor complementario de paquetes muy popular llamado ldquoyaourtrdquo Muchos de los servicios o her-ramientas maacutes comunes no se instalan por defecto

Arch Linux esta hecho principalmente para procesadores x86 pero un proyecto llamado Arch Linux ARM (ALARM) tiene una distribucioacuten ARM de Arch Linux para arquitectu-ras AArch64 ARMv8 y ARMv7 Hardkernel el fabricante de ODROIDs es de hecho un patrocinador del proyecto Arch Linux ARM

HOME DATA CENTER

HOME DATA CEnTERIMPLEMEnTACIOn DEL CODIGO COn ARCHLInuXpor John Skilbeck

Configurar la redDeberaacutes asignarle a tu dispositivo una direccioacuten IP LAN

DHCP reservada y en el mejor de los casos un nombre de host que se propagaraacute a lo largo de tu red por medio del servidor DNS de tu router De esta forma en nuestro entorno de desar-rollolocal podremos utilizar un nombre de host para resolver siempre el entorno de implementacioacutenremoto

Por ejemplo en mi red reservo el 192168249 a la direc-cioacuten MAC de mi ODROID Tambieacuten configuro una entrada DNS que asigna a esa direccioacuten IP ldquoodroidrdquo Utilizar un firm-ware personalizado en el router como Tomato USB o DD-WRT lo hace extremadamente faacutecil ya que esos firmwares convierten tu router en un pequentildeo ordenador Linux con una aplicacioacuten web GUI muy pulida aunque su implementacioacuten estaacute fuera del alcance de este artiacuteculo Si operas con subredes aseguacuterate dirigir el puerto hacia el puerto externo que se asigna al puerto SSH del dispositivo odroid ya que Git se ejecuta a traveacutes de SSH

Configurar el proyectoLoacutegicamente desearaacutes estandarizar el flujo de trabajo de la

implementacioacuten Esto haraacute que el trabajo con proyectos sea

el home data center de John es una auteacutentica obra de arte

ODROID MAGAZINE 20

extremadamente faacutecil y eliminas muchos de los cambios de contexto mental que utilizas cuando trabaja en varios proyec-tos Crearemos una carpeta para alojar todos nuestros archivos relacionados con implementaciones Coloca los archivos eje-cutables en ldquodeploybinrdquo y cualquier archivo cron en ldquodeploytasksrdquo (maacutes informacioacuten sobre esta cuestioacuten maacutes adelante)

Navega hasta el directorio del proyecto en una ventana de Terminal y luego escribe los siguientes comandos

$ mkdir -p deploybin

$ mkdir -p deploytasks

$ cd deploybin ampamp touch run-job ampamp

chmod u+x run-job ampamp cd -

$ cd deploytasks ampamp touch crontab

Tambieacuten puede estandarizar doacutende colocar tu coacutedigo fuente De esta forma le seraacute maacutes faacutecil a otras personas ver coacutemo se or-ganiza tu proyecto y conocer queacute es el coacutedigo fuente y queacute no

$ mkdir src

$ cd src ampamp (place source code here ie python core

py clojure coreclj nodejs appjs)

Simplificar los puntos de entradaIniciar una aplicacioacuten puede resultar algo confuso con todos

los comandos que se pueden ejecutar en diferentes lenguajes Por ejemplo puede usar Java ldquojava -jar [my-jar] jarrdquo o python ldquopython my-apppyrdquo y tu aplicacioacuten tambieacuten puede necesitar varios argumentos Todo esto deberiacutea simplificarse y resumirse en un archivo ldquodeploybinrun-jobrdquo

binsh

set -e

CMD=rdquosrcduckrdquo

exec $CMD $

Crear el archivo cronArch Linux no viene con un cliente o demonio cron por

defecto Instaacutelalo con ldquosudo pacman -Syu cronierdquo Utilizando cron puede ejecutar comandos en intervalos de tiempo espe-cificados haciendo uso de la sintaxis especial de cron Normal-mente se almacena en el archivo crontab del usuario al que puedes acceder con ldquocrontab -erdquo Sin embargo esto es demasi-ado manual y queremos usar coacutedigo como infraestructura Cron tambieacuten tiene algunos subdirectorios muy uacutetiles en ldquoetccronrdquo como ldquoetccrondailyrdquo yrdquoetccronhourly ldquo si co-locamos los archivos aquiacute eacutestos se ejecutaraacuten en los intervalos especificados

Revisa el archivo de ldquodeploytaskscrontabrdquo que colocare-mos en ldquoetccrondrdquo que se crea automaacuteticamente con nuestro script ldquoposttreceiverdquo

variables

SHELL=binbash

PATH=binusrbinusrlocalbinusrsbinusrlo-

calsbin

MAILTO=[your-email-address]gmailcom

cmd=rdquodeploybinrun-jobrdquo

app_dir=rdquohomeskilbjodeployappduckdnsrdquo

jobs

5 skilbjo cd ldquo$app_dirrdquo $cmd gtdevnull

Aquiacute tienes el esquema general de la estructura de un simple proyecto El uacutenico ejecutable del proyecto es un uacutenico script shell ubicado en ldquosrcrdquo

$ tree

READMEmd

deploy

bin

post-receive

run-job

tasks

crontab

src

duck

4 directories 5 files

GitPrimero queremos agregar una URL remota a nuestro

proyecto en nuestro entorno local

$ git remote add odroid sshodroid~deploygit

duckdnsgit

Ten en cuenta que dependiendo de la topologiacutea de tu red es posible que tenga que modificar esta url Si no puedes asignar nombres de host la URL de git se veriacutea asiacute donde 192168249 es la direccioacuten IP LAN de tu dispositivo

$ ssh192168249~deploygitduckdnsgit

Si tienes un usuario en tu entorno ODROID distinto al que tienes en tu entorno de desarrollo la url se veriacutea asiacute donde ldquoskilbjordquo es tu nombre de usuario

$ sshskilbjoodroid~deploygitduckdnsgit

Si tu servidor remoto estaacute en una subred diferente y tienes redireccionados los puertos tu url tendriacutea este aspecto donde

HOME DATA CENTER

ODROID MAGAZINE 21

ldquo2222rdquo es tu puerto externo

$ ssh192168122222~deploygitduckdnsgit

En el directorio principal de tu entorno remoto crea una carpeta llamada ldquo~deployrdquo con dos subcarpetas ldquo~deployapprdquo y ldquo~deploygitrdquo Los subdirectorios de ldquo~deploygitrdquo seraacuten los puntos finales de nuestros desarrollos y con un hook ejecutaraacuten comandos de implementacioacuten en los subdirectorios de ldquo~ deployapprdquo

Primero navega hasta el directorio principal del entorno re-moto y a continuacioacuten escribe los siguientes comandos

$ mkdir -p ~deployapp

$ mkdir -p ~deploygit

$ mkdir -p ~deploygitduckdnsgit

$ mkdir -p ~deployappduckdns

Ahora en ldquo~ deploygitduckdnsgithooksrdquo crea un archi-vo ejecutable llamado ldquopost-receiverdquo que se activaraacute con cada accioacuten hacia el punto final

$ cd ~deployappgitduckdnsgithooks

$ touch post-receive ampamp chmod u+x post-receive

$ vim post-receive

Rellena el ejecutable con lo siguiente en el directorio ldquo~deploygitduckdnsgithooksrdquo del entorno remoto

usrbinenv bash

set -eou pipefail

user=$(whoami)

dir=rdquohome$userdeployapprdquo

app=$(basename $(pwd) | sed -e lsquosgitrsquo)

deploy_dir=rdquo$dir$apprdquo

cron_dir=rdquoetccrondrdquo

GIT_WORK_TREE=rdquo$deploy_dirrdquo git checkout -f

cd ldquo$deploy_dirrdquo

build steps here

case ldquo$userrdquo in

(skilbjo) sudo cp deploytaskscrontab ldquo$cron_

dir$apprdquo

esac

you can also do project-specific build steps in

this section like install

dependencies (ie npm install) compile source

code (ie lein uberjar)

as well as if a long-lived app run commands as

well (ie java -jar my_jarjar)

echo ldquoall donerdquo

exit 0

ImplementacioacutenAhora estamos listos para implementar ya que nuestro en-

torno local estaacute configurado para alcanzar el punto final del servidor de implementacioacuten nuestro entorno remoto estaacute con-figurado para recibir la notificacioacuten y revisar el coacutedigo fuente ejecutar cualquier paso de compilacioacuten y colocar una tarea en el directorio cron del sistema para su lanzamiento Ponto todo en praacutectica con el siguiente comando en el directorio del proyecto del entorno local

$ git push odroid

Ademaacutes para ver coacutemo se ha implementado todo esto en un proyecto de ejemplo visita httpbitly2lthYKW

Pasos finalesSe puede antildeadir al flujo anterior algunas caracteriacutesticas

como son muacuteltiples entornos ya sea con muacuteltiples ODROIDs o con un solo ODROID trataacutendolo como un servidor de ser-vicio Esto se puede hacer con subdirectorios bajo ldquo~deployrdquo como ldquo~deploystagingappmy_apprdquo o ldquo~ deployproduc-tionappmy_apprdquo

Ademaacutes podriacuteas antildeadir un servicio de integracioacuten conti-nua como CircleCI que ejecutariacutea una suite de testeo desde cada desarrollo a GitHub y si tiene eacutexito compila una imagen Docker No podriacuteas entonces tener un archivo en el entorno remoto que verificariacutea una imagen de un repositorio Docker y la ejecutariacutea en un intervalo especificado Esto es lo que hacen muchos de los softwares DevOps distribuidos como Mesos y Kubernetes pero en un entorno mucho maacutes rico que BASH y Linux

Referencias

Artiacuteculo Wikipedia de Arch linux httpbitly2l71ADKWebsite Arch linux ArM httpsarchlinuxarmorgArtiacuteculo que leiacute hace unos tres antildeos y que me inspiroacute para escribir mi propio artiacuteculo httpbitly2m5JAct

HOME DATA CENTER

ODROID MAGAZINE 22

odroid ARCADE BOXLA EXPERIEnCIA PERfECTA COn TuS JuEGOS ARCADE fAvORITOSpor brian Kim charles park y John lee

ARCADE BOX

Los ODROIDs tienen mejor rendimiento que las placas de la competencia especialmente en lo que respecta al renderizado de video lo que significa que

las placas ODROID son ideales para jugar lo cual hacen muchos usuarios de ODROID Ya hay disponibles varios sistemas operativos de plataforma de juegos como Lakka (httpbitly1NO8BBC) y ODROID GameStation Tur-bo (httpbitly1ASFO5O) Para disfrutar auacuten maacutes de nuestras sesiones de juegos creamos nuestra propia consola arcade con simples botones GPIO y joysticks y la llama-mos la ODROID Arcade Box Elegimos un ODROID-XU4 para este proyecto porque es el que tiene mejor rendimiento GPU de todos los dispositivos ODROID actuales En este artiacuteculo vamos a describir como hemos creado la ODROID Arcade Box

Requisitos( Figura 3 ndash )Decidimos hacer la ODROID Arcade Box usando

un MDF (tablero de fibra de densidad media) El Shifter Shield del XU4 tambieacuten es uacutetil para utilizar los pines de expansioacuten del ODROID-XU4 Los Joysticks los botones y los cables eran los componentes de entrada y se utilizoacute

Nuestro primer y simple prototipo

ODROID MAGAZINE 23

panel MDf 12t2eA 600x2202eA 600x752eA 220x75taladroplegadoraDesmontadorcinta meacutetricaNavaja multiusoAlicates de punta largaoDroiD-xU4xU4 Shifter shieldSMpS (fuete Alimentacioacuten)

extendedores hDMi USb ethernetenchufe de alimentacioacuten y Switchbisagras 2eAreceptor de puertacaucho 4eAtornillospulsadores 19eAJoystick 2eAcablesterminales

una SMPS (Fuente de alimentacioacuten conmutada) como fuente de alimentacioacuten Las herramientas y las piezas utilizadas las tienes en esta paacutegina

La ODROID Arcade Box necesita un total de 27 entradas (19 entradas para botones y 8 entra-das para joysticks) Las 24 entradas GPIO digi-tales del ODROID-XU4 no son suficientes para las 27 entradas de modo que creamos dos puertos ADC adicionales para los tres botones que nos fal-taban Los valores de entrada ADC se basan en el voltaje de entrada y los valores de entrada digital y analoacutegica se procesan en el demonio GPIO que se describe a continuacioacuten

Disentildeo y montajeLos paneles de la ODROID Arcade Box deben

ser disentildeados y fabricados para que los botones y joysticks esteacuten bien colocados Elegimos MDF 12T teniendo en cuenta el precio y la durabilidad El dise-ntildeo se puede hacer con cualquier herramienta CAD como Google Sketch o SolidWorks Aunque existen muchas plantillas de disentildeo para los paneles de joypad decidimos elegir un disentildeo arcade estaacutendar japoneacutes

El primer paso del montaje es unir la placa al panel MDF Este paso fue faacutecil aunque nos llevo maacutes tiempo que el resto Despueacutes insertamos los joysticks la toma de corri-ente el interruptor y los botones en el panel MDF superior Los conectores HDMI Ethernet y USB se colocaron en la parte trasera del panel MDF El siguiente paso fue montar cada panel MDF usando un taladro para hacer los agujeros luego con tornillos los sujetamos

El uacuteltimo paso del montaje de la ODROID Arcade Box es conectar por cable los pines de expansioacuten del ODROID-XU4 a los componentes de entrada En este proyecto dise-ntildeamos las entradas GPIO externas tal y como se muestra en la paacutegina 26 Los botones Select y Temp estaacuten conecta-dos a puertos de expansioacuten ADC

Configuracion del softwareDesarrollamos un nuevo demonio GPIO llamado gpio_

keyd (httpbitly2ljOZKg) Este demonio es capaz de asignar entradas GPIO y eventos claves usando uinput y wiringPi una libreriacutea de acceso GPIO basada en pines Estaacute disentildeada para que le sea familiar a quiene ya ha utilizado el sistema de cableado Arduino Aunque la blibreriacutea wiring-Pi upstream soacutelo admite Raspberry Pi Hardkernel ofrece una versioacuten de wiringPi para ODROIDs en su repositorio GitHub (httpbitly1Eq3UpF) El moacutedulo uinput es un moacutedulo del kernel de Linux que gestiona el subsistema de entrada del usuario Se puede utilizar para crear y manejar dispositivos de entrada desde una aplicacioacuten

ARCADE BOX

herramientas compentes y lo que hay justamente debajo

esquema de los puertos de expansioacuten

ODROID MAGAZINE 24

Elegimos ODROID GameStation Turbo (httpbitly1ASFO5O) como plataforma de software para nuestra ODROID Arcade Box que tiene integrado uinput Debes asegurarte de que el archivo de dispositivo uinput existe en el sistema operativo elegido porque algunos no tienen dispositivos uinput

$ ls devuinput

Si tu sistema operativo no tiene un archivo de disposi-tivo devuinput entonces seraacute necesario recompilar e in-stalar un nuevo kernel con la opcioacuten de configuracioacuten IN-PUT_UINPUT habilitada La paacutegina Wiki en httpbitly1YIToBI describe coacutemo compilar e instalar la imagen del kernel a partir del coacutedigo fuente

$ make menuconfig

Device Drivers

-gt Input device support

-gt Generic input layer

-gt Miscellaneous device

-gt User level driver support ltgt

Ten en cuenta que wiringPi debe instalarse antes de in-stalar gpio_keyd En la imagen GameStation de ODROID los comandos sudo deben ejecutarse como root porque la cuenta ldquoodroidrdquo no estaacute designada como usuario sudo

$ git clone httpsgithubcomhardkernelwiringPi

git

$ cd wiringPi

$ sudo build

Descarga el coacutedigo fuente gpio_keyd el cual estaacute dis-ponible en nuestro repositorio GitHub El procedimiento para compilar e instalar gpio_keyd es muy simple

$ git clone httpsgithubcombkrepogpio_keydgit

$ cd gpio_keyd

$ make

$ sudo make install

El script gpio_keyd hace referencia a etcgpio_keydconf como el predeterminado para la informacioacuten de los botones y GPIO El archivo de configuracioacuten fue modi-ficado para las 27 entradas de la ODROID Arcade Box Algunas botones ya se utilizaban en el emulador de juego de modo que tuvimos que cambiar la configuracioacuten del emulador para evitar conflictos entre los botones de en-trada GPIO y el emulador Ten en cuenta que el campo ltGPIO pingt en el archivo de configuracioacuten hace referen-

ARCADE BOX

plano del disentildeo de joypad

la oDroiD Arcade box montada

ODROID MAGAZINE 25

cia al nuacutemero wiringPi no al GPIO y al nuacutemero de pin (httpbitly2lbzPIB)

Ejemplo de configuracioacuten para las 27 entradas etcgpio_keydconf

Digital input ltKey codegt ltGPIO typegt ltGPIO pingt ltActive valuegt User 1KEY_LEFT digital 15 0KEY_RIGHT digital 1 0KEY_UP digital 4 0KEY_DOWN digital 16 0KEY_A digital 2 0KEY_S digital 3 0KEY_D digital 30 0KEY_F digital 21 0KEY_Z digital 8 0KEY_X digital 9 0KEY_C digital 7 0KEY_V digital 0 0 User 2KEY_BACKSLASH digital 12 0KEY_SLASH digital 13 0KEY_SEMICOLON digital 14 0KEY_LEFTBRACE digital 5 0KEY_Y digital 26 0KEY_U digital 27 0KEY_I digital 22 0KEY_O digital 23 0KEY_H digital 6 0KEY_J digital 10 0KEY_K digital 11 0KEY_L digital 31 0

Analog input ltKey codegt ltGPIO typegt ltADC portgt ltADC ac-tive valuegtKEY_B analog 0 0KEY_N analog 0 2045KEY_M analog 1 2045

To run gpio_keyd daemon at every startup is conve-nient for ODROID Arcade Box

etcinitdgpio_keyd binsh BEGIN INIT INFO

ARCADE BOX

Mapeo Gpio externo para los botones y Joysticks

cableado de la oDroiD Arcade box

ODROID MAGAZINE 26

Provides gpio_keyd Required-Start $all Required-Stop Default-Start 2 3 4 5 Default-Stop Short-Description Run usrbingpio_keyd if it ex-ist END INIT INFO

PATH=sbinusrsbinbinusrbin

libinitvarssh

liblsbinit-functions

do_start() if [ -x usrbingpio_keyd ] then usrbingpio_keyd -d ES=$ [ ldquo$VERBOSErdquo = no ] ampamp log_end_msg $ES return $ES fi

case ldquo$1rdquo in start) do_start restart|reload|force-reload) echo ldquoError argument lsquo$1rsquo not supportedrdquo gtamp2 exit 3 stop) killall gpio_keyd exit 0 ) echo ldquoUsage $0 start|stoprdquo gtamp2 exit 3 Esac

$ sudo chmod +x etcinitdgpio_keyd$ sudo update-rcd gpio_keyd defaults$ sudo reboot

En los comandos anteriores el script gpio_keyd se ejecuta como un demonio uti-lizando la opcioacuten ldquo-drdquo El uso de gpio_keyd se puede comprobar con la opcioacuten ldquo-hrdquo Comprue-ba de nuevo las teclas usadas por el juego o el emulador despueacutes fija la configuracioacuten del gpio_ keyd correctamente Es ahora cuando estaacutes listo para jugar y disfrutar de tus juegos con tu nueva ODROID Arcade Box

ARCADE BOX

the King of fighters 98 John vs brian

ODROID MAGAZINE 27

En este artiacuteculo analizaremos las diferentes formas que existen para ob-tener los datos del uso de la red

ConfiguracioacutenLa forma normal de analizar los datos

de traacutefico de la red es mediante el uso de datos a traveacutes de las aplicaciones de configuracioacuten del sistema tal y como se muestra en la figura 1

El uso de datos muestra la cantidad total de traacutefico de datos entrante y sa-liente que ha sido utilizada por una apli-cacioacuten Si seleccionas la aplicacioacuten veraacute una pantalla como la que aparece en la Figura 2 que muestra informacioacuten detal-lada sobre el uso de la aplicacioacuten tanto en primer plano como de fondo

La informacioacuten que se muestra den-tro de la aplicacioacuten de Configuracioacuten se almacena en data systemnetstats que requiere acceso root Al eliminar todo lo que hay dentro de esta carpeta se resta-

Como desarrolladores queremos que nuestras aplicaciones sean eficientes y a menudo nos gus-

tariacutea saber cuaacutento ancho de banda de red estaacute utilizando nuestra aplicacioacuten Esto es muy uacutetil por varias razones

bull Para monitorizar y asegurarnos de que la aplicacioacuten es realmente la nuestra y no una aplicacioacuten que ha sido pirateada y publi-cada con diferentes nombres en Play Store

bull Para asegurarnos de que no es-tamos cogiendo ancho de banda innecesario del plan de datos del usuario

bull Para comprobar que el disposi-tivo que estamos usando no estaacute accediendo a Internet sin nuestro consentimiento

blecen las estadiacutesticas de red mostradas en esta aplicacioacuten

Estadiacutesticas de la redLa aplicacioacuten de configuracioacuten nos

puede dar una informacioacuten general so-bre las estadiacutesticas de la red de datos que es un buen comienzo pero a veces necesitamos un anaacutelisis maacutes detallado que puede hacerse a traveacutes del coman-do dumpsys Android cuenta con una poderosa herramienta llamada dumpsys que nos permite obtener una instan-taacutenea o volcado del sistema que pu-ede incluir informacioacuten sobre la red la memoria y otros componentes Lee la documentacioacuten de Android en httpbitly2kK9dep para obtener maacutes infor-macioacuten del sistema Para conseguir maacutes informacioacuten relacionada con la red nos interesa el comando

$ dumpsys netstats detail

La Figura 3 muestra un pantallazo de lo que puedes ver desde una tablet Nexus 7 que ejecuta Lollipop 511

Hay algunas cuestiones importantes para entender las estadiacutesticas

bull Las estadiacutesticas UID muestran el desglose de las aplicaciones de primer plano y de fondo

bull Uid muestra el ID de usuario de la aplicacioacuten que se puede utili-zar para relacionar eacutesta con la in-

DESARROLLO AnDROID AnALIzAnDO EL uSO DE RED DE LAS APLICACIOnESpor Nanik tolaram

DESARROLLO ANDROID

figura 1 - Uso de datos en la configuracioacuten

figura 2 - Desglose del uso de datos de la app

ODROID MAGAZINE 28

$ dumpsys package detail

Este comando te proporcionaraacute una larga lista de informacioacuten sobre los pa-quetes que estaacuten instalados en tu dis-positivo Para las estadiacutesticas de red nos interesa la seccioacuten que se muestra en la Figura 5

La seccioacuten resaltada muestra el userId que se relaciona con el uid que se mues-tra en las estadiacutesticas de red Al relacio-nar este nuacutemero sabemos el nombre del paquete de la aplicacioacuten sobre el que es-tamos leyendo las estadiacutesticas de red

Aplicacioacuten de ejemplo

La aplicacioacuten de ejemplo de este artiacute-culo se puede descargar desde httpbitly2m8WenA que muestra coacutemo etiqu-etar la conexioacuten de red desde distintas

secciones de la aplicacioacuten lo cual puede ayudar a analizar el volumen de traacutefico de datos de la aplicacioacuten La Figura 6 muestra un ejemplo de coacutemo lo vemos si utilizamos Android Device Monitor (dentro de Studio diriacutegete a Tools -gt Android -gt Android Device Monitor)

Tal y como se puede ver en el graacutefico la simple aplicacioacuten tiene 3 conexiones dife-rentes y cada una de ellas estaacute accediendo a un sitio web diferente Al etiquetarlas con

formacioacuten del paquete (que ver-emos en la seccioacuten de detalles del paquete dumpsys) con el objeto de conocer queacute aplicacioacuten utiliza estas estadiacutesticas de red

bull Las etiquetas son uacutetiles si de-sea ver la cantidad de datos que utiliza cada conexioacuten de tu apli-cacioacuten Puedes ver un ejemplo de esto en la Figura 4 que muestra que el uid 10007 tiene las siguien-tes etiquetas 0x30000401 0x30003201 0x30002804 0x10000401 y 0x30000407 Es-tas etiquetas ayudan al desarrol-lador a saber cuaacutentos datos uti-liza cada parte de la aplicacioacuten Estas estadiacutesticas de red en par-ticular estaacuten vinculada al paquete Google Framework que forma parte de Google Play Store

En el siguiente apartado veremos coacutemo escribir una aplicacioacuten etiquetando el hilo que hace la conexioacuten de red para determi-nar la cantidad de datos que se utilizan

Estadiacutesticas de paquetes

En la seccioacuten anterior analizamos el uid que aparece al ejecutar el comando dumpsys netstats Ahora necesitamos sa-ber queacute uid corresponde a la aplicacioacuten en el dispositivo y esto se hace mediante el siguiente comando

DESARROLLO ANDROID

figura 3 ndash estadiacutesticas de red con Dumpsys

figura 4 - estadiacutesticas de etiquetas UiD

figura 5 - Detalles del paquete dumpsys

figura 6 - etiquetas de red

coacutedigos diferentes podemos ver la cantidad de traacutefico que consume cada conexioacuten y esto nos ayudaraacute a ver si nuestra aplicacioacuten utiliza el ancho de banda de un modo eficiente

El coacutedigo del siguiente fragmento muestra el uso de la API TrafficStats interna Esta etiqueta API muestra el subproceso que utiliza actualmente un socket con un identificador y todo el traacute-fico que pasa por la misma conexioacuten se grabaraacute junto Asiacute es como la aplicacioacuten es capaz de agrupar las 3 conexiones diferentes Internamente Android utili-za el moacutedulo xt_qtaguid del kernel para realizar este tipo de etiquetado Tienes disponible maacutes informacioacuten en httpbitly2kU8KXB

public void getUsingNormalURLC

onnection(String urlText int

threadTag)

throws IOException

URL url = null

TrafficStats

setThreadStatsTag(threadTag)

HttpURLConnection urlConnec-

tion = getConnection(url)

try

finally

TrafficStatsclearThread-

StatsTag()

ODROID MAGAZINE 29

Disgustado te subes a tu 4x4 de dominacioacuten del mun-do un vehiacuteculo que desde fuera parece maacutes bien un viejo camioacuten de granja pero por dentro se parece maacutes

al sistema de control de un transbordador espacial porque el conductor del restaurante oriental que realiza las entrega a do-micilio estaacute enfermo Ahora tienes que ir a recoger tu propia comida ldquoQueacute rudimentariordquo piensas cuando sales de tu garaje secreto Justamente cuando vas a parar el vehiacuteculo en un stop oyes un fuerte ruido Sales y te diriges raacutepidamente a la parte posterior del 4x4 donde observas un cubo de basura Te tiras de los pelos y piensas ldquoiexclEsos basureros Neanderthales dejaron otra vez el cubo en mediordquo Ahora te toca recoger los restos de tu cena y la basura de otros

Conforme te vas alejando para hacer tus recados empiezas a pensar en coacutemo evitar este inconveniente en el futuro Varias ideas te vienen a la mente

Un sistema lidar para escanear en 3D el entorno en tiempo real y alarmas sonoras cuando sea necesarioUn brazo ciberneacutetico colocado en la parte posterior del 4x4 que procese video para detectar objetos agarrarlos y moverlosUna simple camara trasera

Empiezas a considerar la viabilidad de cada una

Muy bueno pero demasiado complicado y costosoAuacuten mejor y un proyecto propio de un cientiacutefico loco pero demasi-ado complicado y costosoya tengo dos iexclpero estaba demasiado preocupado en mis pensa-mientos para prestarles atencioacuten

Lo que necesitas es algo simple sin complicaciones y barato que haga sonar una alarma para alertarte incluso cuando estar absorto en tus pensamientos ldquoAhardquo Recuerdas haber visto un nuevo producto en ameriDroid que puede hacer precisamente esto Se trata de un microcontrolador conectado al USB que soporta hasta 6 sensores ultrasoacutenicos con simples comandos en serie (httpbitly2l26ptV) ldquoiexclPerfectordquo Piensas

Regresas a tu laboratorio subterraacuteneo con el pollo Kung Pao en la mano te apresurar a encender tus monitores entras en el sitio web ameriDroid y pides un kit ldquoUSB Ultrasonic Ranging Sensorrdquo con 6 sensores y carcasas

Vas sintiendo una sensacioacuten de alivio a medida que regresas a los 12 proyectos en lo que ya estabas trabajando a la espera de que pasen un par de diacuteas hasta que llegue tu nuevo pedido Mientras te comes tu Kung Pao dibujas un diagrama de coacutemo quieres colocar los sensores en la parte posterior de tu vehiacuteculo

Un par de diacuteas maacutes tarde el kit llega Inmediatamente em-piezas a montar el kit y los sensores en la parte posterior de tu 4x4 teniendo cuidado de usar sellador de silicona para pro-teger los sensores de la lluvia aguanieve y nieve que puedas encontrar durante tus aventuras para dominar el mundo

A continuacioacuten consultas las instrucciones proporcionadas por ameriDroid con el kit sobre coacutemo controlar y leer los sen-sores desde tu fiel ODROID-C2 y VU7 que montaste en el salpicadero para este propoacutesito

Conectando el cable USBEl cable USB suministrado debe conectarse al microcon-

trolador (la pequentildea placa de circuito con filas de pines que sobresalen) El microcontrolador tiene una fila de 4 o 6 pines

DETECTAR LA PRESEnCIACROnICAS DE un CIEnTIfICO LOCOpor bo lechnowsky

SENSOR ULTRASONICO

ODROID MAGAZINE 30

en un extremo Si tiene 6 pines ceacutentrate en los 4 pines centrales y sigue estas instrucciones

Negro - conectar a GNDrojo - conectar a VccVerde - conectar a rxi

blanco - conectar a txD

Conectando los sensoresultrasoacutenicos

En cada sensor ultrasoacutenico hay cuatro pines marcados Vcc Trig Echo Gnd Para el primer sensor ultrasoacutenico conecta el pin 2 del microcontrolador al pin ldquoTrigrdquo del sensor ultrasoacutenico Conecta el pin 3 del microcontrolador al pin ldquoEchordquo del sensor Conecte el pin ldquoVccrdquo del sensor a DC 5V (el pin ldquoVCCrdquo del microcontrolador suministra 5V) y el pin ldquoGndrdquo del sensor a una conexioacuten a tierra como por ejemplo los pines ldquoGNDrdquo del microcontrolador

Si conectas un segundo sensor de ultrasonidos conecta ldquoTrigrdquo al pin 4 y ldquoEchordquo al pin 5 Continuacutea conectando los siguientes pines a los sensores hasta los pines 12 y 13 si al final optas por conectar los seis sensores ultrasonidos

Conexioacuten del softwareUtilizas un programa terminal como PuTTY Screen o tu

lenguaje de script o programacioacuten favorito para conectarte al puerto serie que aparece cuando te conectas el sensor ultrasoacuteni-co Esto variaraacute en funcioacuten del sistema operativo que utilizas para conectarte al microcontrolador En Windows consultar el ldquoAdministrador de dispositivosrdquo es la forma maacutes comuacuten de averiguarlo En Linux ldquodmesgrdquo o ldquolsusbrdquo son las formas de de-tectar a queacute puerto estaacute conectado Deberiacuteas ver algo denomi-nado ldquoPL2303rdquo que es la conexioacuten del microcontrolador Si recibes informacioacuten basura en tu terminal cuando te conectes aseguacuterate de que los ajustes en serie son 9600 baudios 8 bits ninguno (paridad) y 1 bit de parada Aquiacute tienes una lista de los comandos que puede aceptar el microcontrolador

bull debug on Activa la retroalimentacioacuten detallada Estaacute deshabilitada por defecto nos proporcionaraacute aclaracio-nes sobre los errores de entrada

bull debug off desactiva la retroalimentacioacuten detalladabull init x y activa un HC-SR04 en los pines especificados

X es trigger Y es echo Estos deben ser pines digitales El dispositivo 0 estaacute preestablecido en los pines 2 y 3 de modo que no es necesario especificar estos pines La seleccioacuten de pines no vaacutelidos devolveraacute un signo de ex-clamacioacuten ()

bull ping enviacutea una sola lectura del HCSR04 previamente utilizado Si no se ha utilizado todaviacutea se usaraacute el dis-positivo 0 Si al comando le sigue un espacio y un nuacutemero entre 0-100 (exclusivo) se realizaraacute ese nuacutemero de lecturas emitiendo primero el promedio de esas lec-

SENSOR ULTRASONICO

turas despueacutes el nuacutemero de lecturas fallidas (que no cuentan para el promedio) y luego los valores miacutenimo y maacuteximo de lectura separados por espacios En cual-quier caso si una sentildeal se desconecta automaacuteticamente devolveraacute -1

bull start Hace ping constantemente a todos los dispositivos conectados en secuencia Debido a que los dispositivos se utilizan uno a uno el flujo de datos de este comando seraacute maacutes raacutepido si los dispositivos miden distancias cor-tas Si este comando le sigue un espacio y un nuacutemero mayor que 0 la placa esperaraacute estos milisegundos entre la lectura del uacuteltimo dispositivo y la lectura del primer dispositivo El resultado de este comando seraacute la lectura de cada dispositivo (con un uacutenico espacio despueacutes de cada uno) y una vuelta tras el uacuteltimo dispositivo

bull stop detiene la operacioacuten ldquostartrdquo soacutelo es efectivo tras haber iniciado ldquostartrdquo

bull mode emite el modo de medicioacuten del flujo M para meacutetrico (miliacutemetros) I para Imperial (deacutecimas de pul-gada) o R para Raw (la longitud de pulso en microse-gundos devuelta por el HC-SR04) El valor predeter-minado es M

bull timeout emite el tiempo de espera actual para lecturas de la sentildeal El tiempo de espera es la mayor cantidad de microsegundos que la placa esperaraacute antes de declarar que el HC-SR04 ha realizado una mala lectura lo cual no es necesariamente lo mismo que el pulso maacutes largo que la placa aceptaraacute del HC-SR04 Cuando la placa mide el pulso del HC-SR04 primero espera a que el HC-SR04 comience a enviar un pulso Este tiempo cuenta para el tiempo de espera Cuando este comando le sigue un espacio y un nuacutemero el tiempo de espera se ajusta a ese nuacutemero El valor predeterminado es 1 segundo (1000000 microsegundos)

bull ver emite informacioacuten de versioacuten y creacuteditos

Si cualquier comando (o ninguacuten comando) estaacute precedido por un uacutenico diacutegito de 0-5 (inclusive) seguido de un espacio el dispositivo que corresponde a ese diacutegito se seleccionaraacute para ser usado con el siguiente comando ldquopingrdquo Cada vez que la placa esteacute lista para un comando emitiraacute ldquogtrdquo para la serie La uacutenica excepcioacuten estaacute tras el comando ldquostartrdquo que no solicitaraacute entrada hasta que sea reconocido ldquostoprdquo

ODROID MAGAZINE 31

iquestCoacutemo empezaste con los ordenadoresCuando empeceacute mi negocio tuve que decidir queacute plat-

aforma de hardware iba a utilizar para la recogida de datos del traacutefico Simplemente para que no pienses mal de miacute mis caacutemaras de traacutefico no son las que se usan para multar por exceso de velocidad o algo asiacute Mi sistema estaba desti-nado suavizar el flujo de traacutefico fijando los controles oacutepti-mos de las sentildeales de traacutefico Anteriormente usaba un PC industrial para ejecutar mi software de reconocimiento de imaacutegenes Ahora uso la familia de dispositivos ODROID para esta cuestioacuten

iquestQueacute te atrajo de la plataforma ODROID En 2012 useacute Google para buscar una plataforma que

fuera muy compacta y al mismo tiempo potente para que cubriera mis necesidades que resultoacute ser la placa

Por favor haacuteblanos un poco sobre tiSoy ingeniero de electroacutenica y software en Rusia desde

hace 47 antildeos Naciacute en Siberia y tras terminar la escuela me mudeacute a Moscuacute para estudiar en la universidad Ser estudi-ante en el Instituto de Aviacioacuten de Moscuacute (MAI) fue una experiencia increiacuteble probablemente la mejor de mi vida A principios de los 90 llegoacute a Rusia la era de los microordena-dores soliacutea jugar a un juego de saltos en una CPU z80 y el i486 Tras finalizar mis estudios universitarios y de posgrado me convertiacute en ingeniero Trabajeacute en unos cuantos puestos de trabajo para diferentes empresas y finalmente decidiacute em-prender mi propio negocio En 2006 puse en marcha una iniciativa para crear sistemas de recuento del traacutefico de au-tomoacuteviles Estoy casado y tengo una hija de 21 antildeos llamada Lena que trabaja como enfermera Mi esposa Nadezhda es disentildeadora de vestuario de produccioacuten pero ahora trabaja como disentildeadora web Ella es aficionada a la fotografiacutea digi-tal y le encanta su caacutemara reacuteflex digital

COnOCIEnDO un ODROIDIAnvIACHESLAv ALEKSEEveditado por rob roy (robroy)

CONOCIENDO UN ODROIDIAN

Viacheslav disfruta tocando la guitarra y escuchando muacutesica

1995 en el campus MAi probando uno de los primeros equipos Vr comerciales del mundo que funcionaba a 640x480 a 30fps Utiliz-aba un sensor magneacutetico en la nuca para la posicioacuten de la cabeza la mejor broma que se podiacutea gastar a alguien era colocar un imaacuten cerca de la espalda y sacudirlo iexcllos gritos estaban garantizados cuando el mundo en 3D daba vueltas sin cesar

ODROID MAGAZINE 32

ODROID-X2 Con sus cuatro nuacutecleos funcionando a 17 GHz calculaba con facilidad los algoritmos de reconteo del traacutefico de automoacuteviles Maacutes tarde cambieacute al U3 y el XU4

iquestCuaacutel es tu ODROID favorito y por queacuteDe momento mi favorito es el XU4 Mi sistema estaacute

basado en el tratamiento de fotogramas de video en tiempo real por lo que el bus USB 30 del XU4 es bastante bueno para una caacutemara con una interfaz de captura de viacutedeo Para mi sistema es muy importante tener una buena conexioacuten entre la caacutemara de viacutedeo y la CPU Probablemente tendreacute que echar un vistazo a las interfaces de nivel inferior como MIPI CSI-2 que por desgracia estaacuten ausente en el XU4 Recientemente he estado aprendiendo como usar la caacute-mara oCam GS BW La caacutemara es buena en siacute misma pero para un uso industrial al aire libre tengo que implementar un software de control de exposicioacuten automaacutetica y posible-mente de control de apertura de la lente que todaviacutea estaacute en estudio

MEET AN ODROIDIAN

Una vieja joya el mini ordenador Nixdorf

An old gem the Nixdorf mini computer

CONOCIENDO UN ODROIDIAN

iquestQueacute aficiones e intereses tienes aparte de los ordenadoresDisfruto conduciendo y leyendo sobre coches y viendo

los campeonatos de carreras de F1 Tambieacuten me gusta via-jar pescar escuchar muacutesica y tocar la guitarra Tengo un gato siberiano llamado Leia y soy fan de Star Wars

iquestQueacute consejo le dariacuteas a alguien que quiere aprender maacutes sobre la programacioacuten

Hacer software es algo increiacuteble y miacutestico Es una fusioacuten de arte y tecnologiacutea Nada te inspira maacutes que tu aplicacioacuten cuando empieza a cobrar vida Sin embargo siempre estaacute ahiacute el otro lado de la Fuerza Estar listo para instruirte inc-esantemente El desarrollo de software es una de las activi-dades que cambia maacutes raacutepido Si tienes pensado dejar de hacer software en uno o dos antildeos puede dejar de aprender ahora El conocimiento se volveraacute anticuado en un par de antildeos maacutes o menos Para estar en lo maacutes alto siempre tienes que correr Es similar a la cancioacutenrdquoRun like Hellrdquo de Pink Floyd Si estaacutes listo para vivir de esta forma seguro que tendraacutes eacutexito

ODROID MAGAZINE 33

Page 3: Estación ARCADE · gias de marketing, administración de medios sociales y producción multimedia impresa, web, vídeo y cine. Ges-tionando múltiples cuentas con agencias y productores

EDITORIAL

ODROID Magazine que se publica mensualmente en httpmagazineodroidcom es la fuente de todas las cosas ODROIDianas bull Hard Kernel Ltd bull 704 Anyang K-Center Gwanyang Dongan Anyang Gyeonggi South Korea 431-815 bull fabricantes de la familia ODROID de placas de desarrollo quad-core y la primera arquitectura ARM ldquobigLITTLErdquo del mundo basada en una uacutenica placa Para informacioacuten sobre coacutemo enviar articulos contacta con odroidmagazinegmailcom o visita httpbitly1ypImXsUacutenete a la comunidad ODROID con miembros en maacutes de 135 paiacuteses en httpforumodroidcom y explora las nuevas tecnologiacuteas que te ofrece Hardkernel en httpwwwhardkernelcom

Atodo el mundo le encanta los juegos especialmente a los ingenieros de Hardkernel Nuestro proyecto estrella de este mes es un proyecto personalizado creado por Brian

John y Charles que resalta el potencial de la plataforma ODROID como emulador de consolas y sistema de juego versaacutetil Usando

la libreriacutea WiringPi y la popular im-agen de juegos GameStation Turbo de ODROID disentildearon una Arcade Box que es impresionante y te per-

mite ejecutar tus juegos favoritos a res-oluciones de 1080p iexclPuedes construir

la tuya propia y tendraacutes conversacioacuten para rato en tu proacutexima partida de juegos

Miltos ha creado un timbre remoto muy uacutetil para ver quieacuten llama a tu puerta enviando un correo electroacutenico

con una imagen John nos muestra coacutemo construir un Home Data Cen-ter con un ODROID-XU4 y Bo continuacutea sus croacutenicas de cientiacutefico loco con un sensor de ultrasonidos para su vehiacuteculo Tobias presenta OpenFodder un clon de Cannon Fodder que captura la belleza del juego original Nanik analiza el uso de la red en Android y Bruno nos trae otra entrega de su famosa serie de juegos Android Causality

Manuel Adamuz Editor EspantildeoiTengo 31 antildeos y vivo en Sevilla Espantildea aunque naciacute en Granada Estoy casado con una mujer maravillosa y tengo un hijo Hace unos antildeos trabajeacute como teacutecnico informaacutetico y programador pero mi trabajo actual estaacute relacionado con la gestioacuten de calidad y las tecnologiacuteas de la informacioacuten ISO 9001 ISO 27001 ISO 20000 Soy un apasionado de la informaacutetica especialmente de los microordenadores como el ODROID Raspberry Pi etc Me encanta experimentar

con estos equipos y traducir ODROID Magazine Mi esposa dice que estoy loco porque soacutelo pienso en ODROID Mi otra aficioacuten es la bicicleta de montantildea a veces participo en competiciones semiprofesionales

Andrew Ruggeri Editor AdjuntoSoy un ingeniero de sistemas Biomeacutedicos anclado en Nueva Inglaterra que actualmente trabaja en la industria aeroespacial Un microcontrolador 68HC11 de 8 bits y el coacutedigo ensamblador son todo lo que me interesa de los sistemas embebidos Hoy en diacutea la mayoriacutea de los proyectos en los que trabajo estaacuten en lenguajes C y C ++ o en len-guajes de alto nivel como C y Java Para muchos proyectos utilizo placas ODROID pero auacuten sigo intentando utili-zar los controladores de 8 bits cada vez que puedo (soy un fan de ATMEL) Aparte de la electroacutenica soy un amante de

la fotografiacutea analoacutegica y desarrollo la peliacutecula friki con la que disfruto intentando hablar en idiomas extranjeros

Venkat Bommakanti Editor AdjuntoSoy un apasionado de los ordenadores desde la bahiacutea de San Francisco en California Procuro incorporar muchos de mis intereses en proyectos con ordenadores de placa reducida tales como pequentildeos modificaciones de hardware carpinteriacutea reutilizacioacuten de materiales desarrollo de software y creacioacuten de grabaciones musicales de aficionados Me encanta aprender continuamente cosas nuevas y trato de compartir mi alegriacutea y entusiasmo con la comunidad

Josh Sherman Editor AdjuntoSoy de la zona de Nueva York y ofrezco mi tiempo como escritor y editor para ODROID Magazine Suelo experi-mentar con los ordenadores de todas las formas y tamantildeos haciendo trizas las tablets convirtiendo Raspberry Pi en PlayStations y experimentado con los ODROIDs y otros SoCs Me encanta trabajar con los elementos baacutesicos y asiacute poder aprender maacutes y disfrutar ensentildeando a otros escribiendo historias y guiacuteas sobre Linux ARM y otros proyectos experimentales divertidos

Nicole Scott Art EditorNicole es una experta en Produccioacuten Transmedia y Estrategia Digital especializa en la optimizacioacuten online y estrate-gias de marketing administracioacuten de medios sociales y produccioacuten multimedia impresa web viacutedeo y cine Ges-tionando muacuteltiples cuentas con agencias y productores de cine desde Analytics y Adwords a la edicioacuten de viacutedeo y maquetacioacuten DVD Nicole ayuda a sus clientes con todos los aspectos de la visibilidad online Posee un ODROID-U2 varios ODROID-U3 y Xu4rsquos y espera poder utilizar las uacuteltimas tecnologiacuteas tanto para a nivel personal como

empresarial El sitio web de Nicole lo puedes encontrar en httpwwwnicolecscottcom

James LeFevour Editor ArtiacutesticoSoy un especialista en medios digitales que disfruta trabajando como freelance en marketing de redes sociales y admin-istracioacuten de sitios web Cuanto maacutes aprendo sobre las posibilidades de ODROID maacutes me ilusiona probar cosas nuevas con eacutel Me traslade a San Diego desde el Medio Oeste de los EEUU Continuo muy enamorado de muchos de los aspectos que la mayoriacutea de la gente de la Costa Oeste ya da por sentado Vivo con mi encantadora esposa y nuestro

adorable conejo mascota el cual mantiene mis libros y material informaacutetico en constante peligro

Bruno Doiche Editor Artiacutestico SeniorJugoacute a alrededor de 20 juegos este mes pero soacutelo encontroacute uno que valiera la pena

NUESTRO MARAVILLOSO PRESONAL ODROIDIAN

Rob Roy Editor JefeSoy un programador informaacutetico que vive y trabaja en San Francisco CA en el disentildeo y desarrollo de aplicaciones web para clients locales sobre mi cluster ODROID Mis principales lenguajes son jQuery angular JS y HTML5CSS3 Tambieacuten desarrollo SO precompilados Kernels personalizados y aplicaciones optimizadas para ODROID basadas en las versiones oficiales de Hardkernel por los cuales he ganado varios Premios Utilizo mi ODROIDs para diversos

fines como centro multimedia servidor web desarrollo de aplicaciones estacioacuten de trabajo y como plataforma de juegos Puedes echar un vistazo a mi coleccioacuten de 100 GB de software ODROID kernel precompilados e imaacutegenes en

httpbitly1fsaXQs

INDICE

hoMe DAtA ceNter - 20

JUeGoS liNUx opeN foDDer - 12

JUeGoS ANDroiD cAUSAlity - 14

MANUAl xU4 - 19

hifi ShielD 2 - 18

DeSArrollo ANDroiD - 29

ArcADebox - 23

liNeAGeoS - 11

coNocieNDo UN oDroiDiAN - 32

reMote pi - 15

tiMbre - 6

SeNSor UltrASoNico - 30

En este proyecto vamos a convertir el ODROID-C2 (httpbitLy 1oTJBya) en un inteligente timbre IoT que tomaraacute una foto de quienquiera que lo haga sonar

y la enviaraacute por correo electroacutenico al titular de una cuenta de Gmail Ademaacutes el dispositivo archivaraacute las fotos por fecha y hora dando la posibilidad de comprobar cualquier actividad sospechosa o simplemente para mantener un registro de todas las personas que tocan el timbre Es faacutecil ver que este ldquointeli-genterdquo timbre que utiliza un ODROID-C2 como piedra an-gular es una poderosa herramienta de seguridad y vigilancia el cual seraacute muy uacutetil para cualquier vivienda

Requisitos de hardwarebull ODROID-C2 (httpbitly1oTJBya)bull Webcam ODROID (httpbitly2iBHKPD)bull Adaptador Wi-fi (httpbitly1M4LdiC)bull 1x mini placa de pruebasbull 1x Resistencia 1 KΩbull 1x Resistencia 10 KΩbull 1x Pulsadorbull ~8x cables dumpon (el kit Tinkering C httpbit

ly1YNPN6kes una buena opcioacuten para este y futuros proyectos)

Requisitos de Softwarebull Ubuntu 1604 v20 de Hardkernel (httpbit

ly2cBibbk)bull Python 27 or 33 (preinstalado en Ubuntu)bull Libreriacutea WiringPi para controlar los pines GPIO del

ODROID-C2 Puedes aprender a instalarla con la guiacutea que hay disponible en httpbitly2ba6h8o

Montando el dispositivo IoT Para cablear las conexiones usamos los cables macho a hem-

bra y macho a macho Dupont El extremo hembra del cable Dupont macho a hembra se conecta al cabezal macho del ODROID-C2 y el otro extremo a los orificios de la placa de pruebas Ve consultando el esquema de distribucioacuten de los pines

de Hardkernel a medida que vayas creando las conexiones Este esquema lo puedes encontrar en httpbitly2aXAlmt El pin fiacutesico 1 es VCC y proporciona 33V a nuestro circuito co-nectamos el pin en la primera liacutenea vertical de nuestra placa de pruebas cerca del borde Puesto que vamos a utilizar el pin 6 como puesta a tierra comuacuten eacuteste lo conectaremos a la segunda liacutenea vertical de nuestra placa de pruebas El resto del circuito es muy simple puedes seguir el esquema de la Figura 1

La Webcam ODROID la tienes que conectar al ODROID-C2 a traveacutes de uno de los puertos USB disponibles en la placa El timbre se controla con el pin 15 tal y como puedes ver en la figura Ahora que tenemos el hardware listo iexclVamos a sumergirnos en el coacutedigo y hacer que el timbre suene ldquointeli-gentementerdquo

SoftwareLa parte central del coacutedigo ha sido extraiacuteda de un proyecto

Github disponible en httpbitly2jEXRbR No obstante este coacutedigo de ejemplo ha sido modificado en gran medida

TIMBRE IOTRECIBE un AvISO POR CORREO ELECTROnICO DE LA PERSOnA quE LLAMA A Tu PuERTApor Miltiadis Melissas (miltos)

TIMBRE

figura 1 - esquema del timbre

ODROID MAGAZINE 6

para conseguir que funcione correcta-mente en el ODROID-C2 Lo maacutes importante de todo es que el re-mapeo desde RPiGPIO a la libreriacutea WiringPi2 ya estaacute terminado puesto que Wiring-Pi2 es compatible con el ODROID-C2 Consulta la excelente guiacutea GPIO pro-porcionada por Hardkernel en httpbitly2jEUjWX Todo el coacutedigo esta descrito en los siguientes apartados de-limitado entre lsquoltgtrsquo con su correspon-diente descripcioacuten debajo

El coacutedigo baacutesicode odroidbellpy

ltimport wiringpi2 as odroidgt

Empezaremos importando la libreriacutea wiringpi2 Las instrucciones para in-stalar esta libreriacutea y poder controlar los pines GPIO del ODROID-C2 la puedes encontrar en httpbitly2ba6h8o

ltimport timegt

Importamos el moacutedulo time

ltimport osgt

Importamos el moacutedulo os

ltimport globgt

Importamos el moacutedulo glob

ltimport sysgt

TIMBRE

figura 2 - el sistema completo c2

Importamos el moacutedulo sys

ltodroidwiringPiSetup()gt

Hemos configurado el moacutedulo wi-ringPi2 conforme a la tabla que nos proporciona Hardkernel en httpbitly2aXAlmt

ltButton = 3gt

Este es en realidad el pin fiacutesico 15 seguacuten la tabla de httpbitly2aXAlmt

ltodroidpinMode(Button0)gt

Fijamos el pulsador como entrada

ltodroid

pullUpDnControl(Button1)gt

Activamos la resistencia de parada y arrastre En este caso parado tal y como lo indica el argumento 1

loop

Estamos entrando en un bucle ya que los dispositivos IoT siempre estaacuten en modo de espera

ltprint(ldquoProgram Runningrdquo)gt

La uacutenica finalidad de esto es la moni-torizacioacuten

oses

while Trueloops forever till

keyboard interrupt (ctr + C)gt

ltif odroiddigitalRead(Button)

== False when button is un-

pressedgt

ltsysstderrwrite(ldquordquo)gt

Si no se presiona el timbre imprimi-mos puntos en la pantalla usando la li-breriacutea sys

lttimesleep(1)gt

Se comprueba si se ha tocado el pul-sadortimbre cada segundo

ltelsegt

ltprint(ldquoButton Pressedrdquo)gt

Se ha presionado el pulsadortimbre

------| photo amp Bell

|------

Get FileName

ltnow = timestrftime(ldquoDatem-

d-yTimeH-M-Srdquo)gt

Declaramos la variable now con la fe-cha y hora que usaremos en la foto

Make command to run odroidC2

sh

ltcommand = ldquobash odroidC2sh

ldquo + str(now)gt

Invocamos el script shell odroidC2sh (ver a continuacioacuten)

-- odroidC2sh is an Shell

script that

-- is responsible for tak-

ing the photo and

-- making the Doorbell

Noise

--- We insert the ldquoNowrdquo ar-

gument so the python

--- script knows what the

filename of the

--- picture will be so it

can pass it on into the

ODROID MAGAZINE 7

ltmpv ringtonemp3gt

Finalmente haremos sonar el timbre usando un programa llamado mpv que ya estaacute incluido en Ubuntu 1604 v20 de Hardkernel (httpbitly2cBibbk) En otras palabras usamos el Mplayer para reproducir este archivo

Configurar el coacutedigo de Gmail

La mayoriacutea de la gente tiene una cuenta de Gmail Si no la tienes es muy faacutecil crearte una y lo maacutes importante de todo es gratis En realidad para que este script de Gmail funcione correctamente necesitamos dos cuentas de correo elec-troacutenico el correo electroacutenico del remi-tente y la cuenta de correo electroacutenico del destinatario y siempre es asiacute Por supuesto puede enviar un correo elec-troacutenico desde y hacia la misma cuenta pero es maacutes elegante crear una segunda cuenta de correo electroacutenico con el fin de estar al tanto de las fotos con el registro de la fecha y hora por separado Tambieacuten recomiendo que la cuenta de correo elec-troacutenico del destinatario sea la que utilices en tu dispositivo moacutevil para que el dis-positivo te avise cada vez que alguien lla-me a tu puerta No olvides permitir que ldquo las aplicaciones menos segurasrdquo tengan acceso a tu cuenta de Gmail (httpbitly124TgWN)

Vamos a examinar el script python llamado IoTOdroidpy

ltfrom emailmimetext import MIM-

ETextgt

ltfrom emailmimemultipart import

MIMEMultipartgt

Usamos esos dos moacutedulos porque necesitamos enviar un correo electroacutenico limpio con un remitente un receptor y un asunto

ltfrom emailmimeapplication im-

port MIMEApplicationgt

Tambieacuten importamos el moacutedulo re-

Script shell OdroidC2sh

El script OdroidC2sh es respon-sable de tomar la foto y hacer sonar el timbre La funcioacuten del argumento lsquoNowrsquo es pasar el nombre del archivo de la foto al script de Gmail En otras palabras es el conector entre nuestro coacutedigo baacutesico odroidbellpy y el script Odroid-IoTNo-tifierpy El script OdroidC2sh es muy simple

ltcd photosgt

Cambiamos desde directorio actual al directorio ltphotosgt

ltecho ldquoTaking the Photordquogt

ltnow=$1gt

ldquoNowrdquo es la fecha y hora de registro del nombre del archivo

ltechogt

ltfswebcam -d devvideo0 $now

jpggt

Este es el comando baacutesico para tomar la foto Utilizamos el comando fsweb-cam Si la aplicacioacuten fswebcam no estaacute instalada en tu sistema puedes instalarla con el siguiente comando

$ sudo apt-get install fswebcam

La sintaxis del comando es obvia toma una foto y usa la fecha y hora de registro como nombre de archivo Cada vez que se pulse el pulsador OdroidC2sh es activado por odroidbellpy El paraacute-metro -d determina el recurso a utilizar en nuestro caso devvideo0

ltecho ldquoPic Takenrdquogt

ltechordquordquogt

ltecho ldquoRinging Bellrdquogt

ltecho ldquordquogt

ltcd gt

Cambia de nuevo al directorio padre

--- email script (so it

knows what file to email

run command

ltossystem(command)gt

A continuacioacuten invocamos el co-mando system para ejecutar el script de correo electroacutenico

diagnostics

ltprint(ldquoFilenamerdquo now)gt

Imprimimos el ldquofilenamerdquo de la foto con la fecha y hora actuales

----| Email |----

ltprint(ldquoEmailrdquo)emailgt

ltemailcommand = lsquosudo python

IoTOdroidpy ldquoThis person is at

your doorrdquorsquo + lsquo ldquophotosrsquo + now +

lsquojpgrdquorsquogt

Enviamos la foto a la cuenta de Gmail del titular con la fecha y hora y el asunto ldquoThis person is at your doorrdquo

ltossystem(emailcommand) run-

ning the Email script withgt

-- the subject as ldquoSomeone

is ringing the doorbellrdquo and the

filename

-- We made before at the

-Photo amp Bell- section

Y finalmente lo enviamos

-- End Diagnostic Info

print(ldquoDone Processrdquo)

Todo estaacute hecho asiacute que el script fi-naliza su trabajo

-space out for next ldquoPress of

Buttonrdquo

ltprint(ldquordquo)gt

ltprint(ldquordquo)gt

Hacemos hueco para el siguiente ci-clo (proacutexima llamada al timbre)

TIMBRE

ODROID MAGAZINE 8

figura 3 - Alerta de correo electroacutenico de que alguien estaacute en la puerta

ltserverstarttls()gt

Configuramos y entramos en modo TLS TLS significa Transport Layer Se-curity (Seguridad de la capa de trans-porte) de modo que cualquier comando SMTP que siga este modo seraacute cifrado

ltserverlogin(lsquoltFrom

EmailgtrsquorsquoltFrom passwordgtrsquo)gt

Es hora de entrar en tu cuenta de Gmail de modo que necesitamos las credenciales correctas

ltserversendmail(msg[lsquoFromrsquo]

emaillist msgas_string())gt

Usando el anterior comando final-mente enviamos el correo electroacutenico Procura evitar el spoofing e introduce aquiacute tu direccioacuten de correo electroacutenico real El paraacutemetro emaillist es el que

hemos definido antes y el uacuteltimo paraacute-metro (msaas_string ()) el mensaje en forma de cadena con el archivo adjunto que es en este caso la foto El resultado lo puedes apreciar en la Figura 3

Testeando y ejecu-tando el coacutedigo

Desde el terminal (CTRL-T) eje-cutamos odroidbellpy con privilegios sudo

$ sudo python odroidbellpy

En este momento el dispositivo IoT se pone en modo de espera y apa-

ltmsg[lsquoReply-torsquo] = lsquoxyzgmail

comrsquogt

Correo electroacutenico del destinatario

ltmsgpreamble = lsquoMultipart

massagenrsquogt

El atributo preamble contiene el tex-to principal extra-blindado de los docu-mentos MIME por eso lo incluimos aquiacute

ltpart = MIMEText(ldquoHello The

doorbell is ringing A photo of

the person ringing the doorbell

has been attachedrdquo)gt

El cuerpo del mensaje

ltmsgattach(part)gt

ltpart =

MIMEApplication(open(str(sys

argv[2])rdquorbrdquo)read())gt

ltpartadd_header(lsquoContent-

Dispositionrsquo lsquoattachmentrsquo

filename=str(sysargv[2]))gt

Adjuntamos la foto al mensaje

ltserver = smtplibSMTP(ldquosmtp

gmailcom587rdquo)gt

Especificamos el servidor smtp que queremos usar y el puerto que utiliza el servidor de Gmail con el puerto 587 Tambieacuten puede usar el puerto 465 aunque no es mala idea comprobar con Google el puerto correcto por si acaso ha cambiado

ltserverehlo()gt

Especificamos el servidor smtp que queremos usar y el puerto que utiliza el servidor de Gmail con el puerto 587 Tambieacuten puede usar el puerto 465 aunque no es mala idea comprobar con Google el puerto correcto por si acaso ha cambiado

sponsable del archivo adjunto MIME MIME representa las Extensiones Mul-tiuso para el Correo en Internet Es una forma de identificar los archivos en In-ternet seguacuten su naturaleza y formato

ltimport smtplibgt

ltfrom smtplib import SMTPgt

Esta es la baacutesica y nativa libreriacutea en Python para enviar correos electroacutenicos de modo que no hay necesidad de insta-lar libreriacuteas externas smtplib Desde esta libreriacutea importamos la funcioacuten SMTP

ltimport sysgt

Importamos el moacutedulo de funcio-nes y paraacutemetros especiacuteficas del sistema puesto que necesitaremos el script ltargvgt de este moacutedulo (ver a continuacioacuten)

ltrecipients = [lsquoltYourEmailgtrsquo]gt

Tu direccioacuten de correo electroacutenico ya que tuacute eres el destinatario de las fotos

ltemaillist = [elemstrip()

split(lsquorsquo) for elem in recipi-

ents]gt

Hacemos una lista de correo elec-troacutenico en la que separaremos y quita-remos los caracteres pertinentes de cada elemento de la lista de destinatarios

ltmsg = MIMEMultipart()gt

Definimos el variable message (msg) como una Extensioacuten Multiuso para el Correo en Internet llamando a la fun-cioacuten MIMEMultipart

ltmsg[lsquoSubjectrsquo] = str(sys

argv[1])gt

El asunto del nuestro mensaje

ltmsg[lsquoFromrsquo] = lsquoltFrom Emailgtrsquogt

Tu direccioacuten de correo electroacutenico

TIMBRE

ODROID MAGAZINE 9

import wiringpi2 as odroid

import time

import os

import glob

import sys

odroidwiringPiSetup()

Button = 3

odroidpinMode(Button0)

odroidpullUpDnControl(Button1)

loop

print(ldquoProgram Runningrdquo)

while Trueloops forever till

keyboard interupt (ctr + C)

if odroiddigitalRead(Button)

== False when button not

pressed

sysstderrwrite(ldquordquo)

timesleep(1)

else

print(ldquoButton Pressedrdquo)

------| photo amp Bell

|------

Get FileName

now = timestrftime(ldquoDatem-

d-yTimeH-M-Srdquo)

Make command to run

odroidC2sh

command = ldquobash odroidC2sh ldquo

+ str(now)

-- odroidC2sh is an Shell

script that

-- is responsible for tak-

ing the photo and

-- making the Doorbell

Noise

--- We insert the ldquoNowrdquo ar-

gument so the python

--- script knows what the

file name of the

--- picture will be so it

can pass it on into the

--- email script (so it

knows what file to email

figura 4 ndash el script python del timbre en ejecucioacuten

run command

ossystem(command)

diagnostics

print(ldquoFilenamerdquo now)

----| Email |----

print(ldquoEmailrdquo)email

emailcommand = lsquosudo python

IoTOdroidpy ldquoSomeone is ringing

the doorbellrdquorsquo + lsquo ldquophotosrsquo +

now + lsquojpgrdquorsquo

ossystem(emailcommand) run-

ning the Email script with

-- the subject as ldquoSomeone

is ringing the doorebellrdquo and the

filename

-- We made before at the

-Photo amp Bell- section

-- End Diagnostic Info

print(ldquoDone Processrdquo)

-space out for next ldquoPress

of Buttonrdquo

print(ldquordquo)

print(ldquordquo)

OdroidC2sh

binsh

cd photos

echo ldquoTaking the Photordquo

now=$1 Now is the filename time

stamp

take pic

fswebcam -d devvideo0 $nowjpg

echo ldquoPic Takenrdquo

echordquordquo

ring Bell

echo ldquoRinging Bellrdquo

echo ldquordquo

echo ldquordquo

cd

mpv ringtonemp3

IoTOdroidpy

from emailmimetext import MIM-

EText

from emailmimeapplication im-

port MIMEApplication

rece en pantalla el mensaje ldquoProgram is runningrdquo Al mismo tiempo aparecen puntos ldquordquo en la pantalla uno a uno indicando al usuario que el dispositivo estaacute funcionando con normalidad Cu-ando alguien pulsa el botoacuten (timbre) el script OdroidC2sh se ejecuta con una doble finalidad Primero toma una in-

stantaacutenea de la persona que hace sonar el timbre En segundo lugar enviacutea el correo electroacutenico a traveacutes de IoTOdroidpy a la cuenta de Gmail del propietario con la fecha y hora de registro de la foto que se adjunta Despueacutes vuelve al modo de espera y el timbre IoT suena

Notas finalesPor supuesto este proyecto se podriacutea

mejorar de muchas formas Por ejemplo se podriacutea antildeadir un LED en el timbre IOT que indicara su correcto funciona-miento Un dispositivo maacutes complejo similar a eacuteste podriacutea usarse como timbre comercial con la ayuda de un moacutedulo placa releacute Tampoco seriacutea complicado incluir la posibilidad de que grabase una pequentildea grabacioacuten de viacutedeo junto con las fotos haciendo que el timbre ldquointeli-genterdquo sea auacuten maacutes inteligente Ademaacutes como dice el viejo refraacuten ldquoiexclla perfeccioacuten es el eterno enemigo de lo funcionalrdquo

Coacutedigo deltimbre IoT

Aquiacute tienes una copia de todo el coacute-digo Al final de este artiacuteculo tienes un enlace a la paacutegina github que tambieacuten contiene el coacutedigo

Odroidbellpy

TIMBRE

ODROID MAGAZINE 10

from emailmimemultipart import

MIMEMultipart

from smtplib import SMTP

import smtplib

import sys

recipients = [lsquoabcgmailcomrsquo]

emaillist = [elemstrip()

split(lsquorsquo) for elem in recipi-

ents]

msg = MIMEMultipart()

msg[lsquoSubjectrsquo] = str(sysargv[1])

msg[lsquoFromrsquo] = lsquoxyzgmailcomrsquo

msg[lsquoReply-torsquo] = lsquoabcgmailcomrsquo

msgpreamble = lsquoMultipart

massagenrsquo

part = MIMEText(ldquoHello There is

someone ringing your doorbell A

picture of this person has been

atachedrdquo)

msgattach(part)

part =

MIMEApplication(open(str(sys

argv[2])rdquorbrdquo)read())

partadd_header(lsquoContent-

Dispositionrsquo lsquoattachmentrsquo

filename=str(sysargv[2]))

msgattach(part)

server = smtplibSMTP(ldquosmtp

gmailcom587rdquo)

serverehlo()

serverstarttls()

serverlogin(lsquoxyzgmail

comrsquorsquoyourpassword herersquo)

serversendmail(msg[lsquoFromrsquo]

emaillist msgas_string())

El coacutedigo del proyecto estaacute disponible en httpbitly2jMAdMY usando el siguiente comando

$ git clone

httpsgithubcommiltiadisme-

lissas

IoTOdroidC2Doorbellgit

TIMBRE

A finales de 2016 los usuarios de Cyanogenmod se horrorizaron cuando Cyanogen anuncioacute la

cancelacioacuten de sus servicios dejando a todos los usuarios que dependiacutean de Cyanogenmod sin soporte Sin em-bargo en poco tiempo llegariacutea una so-lucioacuten en forma de LineageOS Si eres un usuario del ODROID-XU3 XU4 es el momento perfecto para colaborar con la versioacuten de LineageOS en los foros ODROID

Caracteriacutesticas- Android 711 Nougat lineageoS 141- Kernel 3109- openGl eS 112030 (aceleracioacuten por GpU)- opencl 11 ep (aceleracioacuten por GpU)- funcioacuten multiusuario habilitada (hasta 8 usuarios)- ethernet integrado y soporte para ether-net Gigabit USb 30 - Soporte para rtl8188cUS rtl8191SU y USb Wireless ralinkt- Soporte bluetooth USb (ble A2dp Sink)- Soporte para dongle GpS USb- Anclaje a red USb - punto de acceso Wi-fi portaacutetil- Soporte DAc USb nativo para Android

LInEAGEOS-141 ODROID-Xu3Xu4OLvIDATE DE CyAnOGEn EL fuTuRO ESTA AquIpor voodik editado por bruno Doiche

LINEAGEOS

- Soporte para Webcam USb UVc- Soporte hDMi-cec- Selinux

Problemas conocidosEn este momento soacutelo admite moacutedu-

los Bluetooth de bajo consumo v40 (BLE) Consulta el Moacutedulo Bluetooth 2

Coacutemo instalarloEn primer lugar necesitas preparar

tu emmcsd con imaacutegenes especiales de auto-instalacioacuten

La puedes encontrar aquiacutehttpophmdrjrnetvoodik5422

ODROID-XU3AndroidCM-141-ATV

Alpha-01_110217

Graba la imagen en tu eMMCsd a traveacutes de Win32DiskImager y arranca el dispositivo Tendraacute que esperar paci-entemente durante el primer arranque ya que el proceso de actualizacioacuten puede llegar a tardar hasta 20 minutos

Coacutedigo fuente Kernel

$ git clone httpsgithubcom

voodikandroid_kernel_hardkernel

_odroidxu3 -b cm-140_5422

ODROID MAGAZINE 11

SNES 3DO y Sega Genesis El juego teniacutea diferentes escenarios para jugar la selva la nieve y el desierto

Open Fodder ofreciacutea 23 misiones que se dividiacutean en varias fases En total suponiacutea superar 72 niveles para llevar

Este mes me gustariacutea hablar de un juego llamado Open Fodder se trata de un remake del claacutesico

juego de Amiga Cannon Fodder desar-rollado por Sensible Software en 1993 Utiliza los datos del juego original Can-non Fodder para conseguir una experi-encia muy similar al juego original en tu ODROID

Muchos de los populares juegos de Linux de hoy en diacutea como Stratagus y Freeciv son en realidad remakes de claacutesicos juegos de DOS de mediados y finales de los 90 y Open Fodder no es diferente El remake de Cannon Fodder es un juego disparos accioacuten y estrategia donde controlas a un pequentildeo grupo de soldados que avanza a traveacutes de varias docenas de niveles para matar a los sol-dados enemigos destruir tanques echar abajo edificios y derrotar a tus enemigos El juego fue lanzado por primera vez para Amiga en 1993 y fue exportado por sus desarrolladores a MS-DOS Atari Jaguar

a tu escuadroacuten a la victoria Cuando se lanzoacute el juego fue muy elogiado por varias revistas de juego Amiga con pun-tuaciones que llevaban al 95 por ciento y fue considerado como uno de los mejo-res juegos lanzados en 1993 En general siguioacute siendo uno de los mejores juegos jamaacutes creado para la plataforma Amiga durante sus 11 antildeos de vida

Desde un punto de vista maacutes poliacutetico el juego lleva impliacutecito un intenso men-saje sobre la guerra en siacute misma puesto que juegas y llevar a tus soldados a una muerte inevitable Cada misioacuten se inicia

JuEGOS LInuXOPEn fODDERpor tobias Schaaf (meveric)

JUEGOS LINUX

figura 1 - el logotipo de cannon fodder en el cual estaacute basado open fodder

figuras 2 3 y 4 - los niveles de selva desierto y nieve en open fodder

figuras 5 y 6 - A medida que avanzas en el juego tu larga liacutenea de reclutas se con-vierte gradualmente en cruces alineadas como en un cementerio

ODROID MAGAZINE 12

nas segundas partes ademaacutes de algunas misiones de bonificacioacuten Cannon Fod-der 2 salioacute un antildeo maacutes tarde pero fue maacutes bien un ldquodisco de datosrdquo con ex-pansiones que una secuela ya que en su mayor parte presentaba maacutes misiones en lugar de nuevas caracteriacutesticas Tambieacuten estaba el X-Mas de Amiga que ofreciacutea algunas misiones diferentes basadas en el juego Cannon Fodder

Ejecutando Open Fodder

Open Fodder es un remake del motor del juego Cannon Fodder que lleva el juego a los sistemas operativos modernos Al igual que otras migraciones del motor del juego (como OpenTTD) puede uti-lizar los datos del juego original con esta versioacuten del motor para ejecutar el juego en tus dispositivos modernos Esta mi-gracioacuten tambieacuten cuenta con una versioacuten exportada para los dispositivos ARM lo que significa que podemos ejecutarlo igualmente en nuestros ODROIDs

Todaviacutea estaacute en desarrollo pero ya funciona bastante bien Como de cos-tumbre se puede instalar desde mi repo-sitorio y puesto que soacutelo requiere SDL2 y SDL2 Mixer como dependencias prin-cipales deberiacutea funcionar en Debian y

con un nuevo grupo de reclutas que se alinean esperando a unirse al combate Los soldados desechables (de ahiacute el nom-bre de cannon fodder Carne de Cantildeon) poco a poco se convierten en cruces alin-eadas dando forma a un cementerio mil-itar a medida que vas completando cada misioacuten formaacutendose maacutes y maacutes filas con-forme vas enterrando a tus predecesores Sin embargo los desarrolladores le di-eron un cierto toque de humor ya que los primeros soldados de tu escuadroacuten (y por tanto los casi seguro que moriraacuten) llevan de hecho los nombres de las seis personas que componiacutean el equipo de desarrollo del juego

Si nos fijamos bien el juego incor-poraba algunos detalles bastante intere-santes Por un lado tiene su propia can-cioacuten ldquo War never been so much funrdquo que suena durante la intro del juego iexclUno de los desarrolladores del juego Jon Hare compuso la muacutesica junto con el compositor Richard Joseph Si teniacuteas el Amiga CD32 tambieacuten recordaraacutes una pista adicional que incluiacutea un video en el cual los desarrolladores se disparaban entre siacute con armas de juguete (httpbitly2l67bFy) iexclSin duda se divirtieron bastante desarrollando este juego

Cannon Fodder tambieacuten tuvo algu-

JUEGOS LINUX

Ubuntu por igual las puedes encontrar en mi lista principal de paquetes para armhf y jessiemain para arm64

Se puede instalar con este comando en un dispositivo ODROID que ejecute Debian suponiendo que ya tengas con-figurados mis repositorios o esteacutes usando una de mis imaacutegenes de Debian (httpbitly13v98ly)

$ apt-get install

openfodder-odroid

He alterado ligeramente el juego para que siempre se ejecute en modo pantalla completa aunque si lo deseas puedes cambiar al modo de ventana simple-mente pulsando F11 cuando tenga el juego activado

Convirtiendo los datos del juego

Por siacute sola mi versioacuten de Open Fod-der viene con el especial Amiga X-Mas ademaacutes de varios niveles demo dis-ponibles de forma gratuita Si quieres jugar el juego real tendraacutes que importar los datos desde un CD Cannon Fodder

Si estaacute usando un ODROID para ju-gar al Open Fodder puedes localizar las carpetas de los datos del juego en la car-peta $HOMEopenfodderData Por ejemplo homeodroidopenfodderDataDos_CD es una de esas carpetas de datos del juego Existen varias carpe-tas de datos del juego que puedes usar dependiendo de la versioacuten que tengas del juego Cannon Fodder

Dos_CDAunque el juego es compatible con

muchas y diferentes fuentes del juego actualmente soacutelo Dos_CD parece ser una versioacuten de Open Fodder ldquototal-mente compatiblerdquo con muy pocos er-rores y problemas El resto de fuentes del juego pueden tener problemas

Aquiacute tienes un consejo raacutepido Aunque se llama Dos_CD cogeraacute cu-alquier versioacuten de DOS de Cannon Fodder que puedas encontrar Si tienes

figura 7 - Sensible Software - los desarrolladores de cannon fodder

ODROID MAGAZINE 13

WHDLoad en un Amiga (o WinUAE) para extraer los archivos del juego y co-piarlos en la carpeta DataAmigardquo No lo he probado pero si tienes la ldquoCannon Fodder Collectionrdquo de Amiga CD32 no oficial puedes copiar el contenido de FodderNew en esta carpeta lo que tendraacute como resultado niveles completamente diferentes Puede considerarse como una versioacuten maacutes compleja del juego aunque a la vez maacutes divertida Por lo tanto bien poner los archivos originales de Amiga aquiacute o bien los archivos FodderNew de la ldquoCannon Fodder Collectionrdquo

Dos2_CDDos2_CD es en realidad la carpeta

de la versioacuten DOS de Cannon Fodder 2 pero tambieacuten funciona con la versioacuten GoG Desafortunadamente tiene algu-nos problemas el maacutes grave es que el juego no tiene ninguacuten tipo de sonido o muacutesica Aparte de esto todo parece fun-cionar correctamente pero desconozco coacutemo reaccionaraacute en niveles posteriores La carpeta Data tambieacuten incluye las car-petas WAV Plus AmigaFormat_XMAS y Custom En WAV se almacenan los efectos de sonido por defecto para to-dos los juegos (Cannon Fodder) Plus es una demo del nuacutemero 31 la revista Amiga Power y AmigaFormat_XMAS es el Amiga Format Christmas Special Tambieacuten hay una carpeta Custom que te permite jugar otros juegos y mapas pero necesitan la versioacuten (CD) de DOS o de lo contrario no apareceraacuten

Notas finalesOpen Fodder es un buen proyecto

que te permite ejecutar este increiacuteble juego en sistemas modernos Realmente me gusta y estoy deseando ver coacutemo pro-gresa Espero que las versiones de Amiga y Cannon Fodder 2 sean pronto total-mente compatibles Tal vez incluso poda-mos ver mejoras graacuteficas con el tiempo Me gustariacutea ver graacuteficos maacutes modernos ya que el juego es bastante antiguo y los graacuteficos no son los maacutes idoneos para res-oluciones 1080p

la versioacuten de disco de Cannon Fodder simplemente copia el CF_ENGDAT en la carpeta Dos_CD La versioacuten original de CD DOS teniacutea un archivo llamado cf_cddat Cambiar el nombre a CF_ENGDAT y copiarlo a la carpeta Dos_CD Si tienes la versioacuten GoG del juego soacutelo tiene que copiar CF_ENG DAT a la carpeta Dos_CD iexclEsta es una forma raacutepida y legal de conseguir el juego si estaacutes interesado

Aseguacuterate de que el nombre del ar-chivo este en mayuacutescula ya que el juego tiene en cuenta esta cuestioacuten Intenta que coincida todo para asegurarte de que las cosas funcionen sin problemas

Amiga_CDAmiga CD32 tambieacuten contaba con

una versioacuten de este juego Esta es la ver-sioacuten que incluye el video al que hemos hecho referencia anteriormente En el CD de Amiga CD32 hay una carpeta llamada Fodder El contenido de esta carpeta debe copiarse a la carpeta Ami-ga_CD Puedes extraer la segunda pista del CD y almacenarla como Track2flv en la misma carpeta con la finalidad de tener el archivo de video

Me topeacute con algunos problemas cu-ando haciacutea esto y descubriacute nuevamente que el juego buscaba muchos archivos en mayuacutesculas asiacute que utiliceacute el siguiente comando para copiar todos los archivos y tenerlos tambieacuten en mayuacutesculas en la carpeta Amiga_CD$ for files in `ls` do cp $files

`echo $files | tr lsquo[lower]rsquo

lsquo[upper]rsquo` done

Asiacute funcionaba bien pero teniacutea algu-nos fallos Por ejemplo la animacioacuten del helicoacuteptero al inicio de cada misioacuten no apareciacutea y el cursor cuando se guarda un archivo se distorsionaba Aparte de esto no he visto problemas importantes en la versioacuten Amiga CD32

AmigaLa Informacioacuten de desarrollador de

Open Fodder dice ldquoUsar el instalador

JUEGOS LINUXJUEGOS ANDROID

CAuSALITy un JuEGO DE ROMPE-CABEzAS COn PARA-DOJAS DE vIAJES En EL TIEMPO por bruno Doiche

Configura tuacute mismo los entornos extrantildeos e insoacutelitos y

ayuda a un grupo de astronautas varados a encon-trar una ruta hacia un lugar seguro Cada nivel al que te enfrentas representa un nuevo reto donde necesitas llevar a tu astronauta a una salida que coincida con su color Los maacutergenes de tiempo son cortos aunque es muy divertido Aunque formas parte de tan soacutelo una fraccioacuten de tiempo de la vida de tu personaje iexclten cuidado pasaraacutes un montoacuten de tiempo enganchado a este juego

httpsplaygooglecomstoreappsdetailsid=comlojugamesandroidCausality

el entorno 3D isomeacutetrico es magniacute-fico a menudo no superaba el nivel porque los graacuteficos me cautivaban

ODROID MAGAZINE 14

tePi necesitan estar conectados a otros distintos en el ODROID-C2 porque parece haber un conflicto La interfaz UART ocupa estos pines y el estado por defecto del ODROID (1=high en Pin 8) no es lo que espera la RemotePi (GPIO debe entrar en el valor por defecto 0=low para cortar la energiacutea tras el apagado) Pero puesto que necesitas utilizar cables de todos modos para conectar la Remot-ePi esto no supondraacute ninguacuten problema ya que simplemente puedes reconectar los cables a otros pines GPIO

Como evitamos el circuito de ali-mentacioacuten del ODROID encendieacutendo-lo a traveacutes de GPIO tambieacuten pasamos por alto la proteccioacuten ante subidas de tensioacuten 2526A del dispositivo pero no te preocupes La RemotePi tambieacuten tiene proteccioacuten ante subidas de tensioacuten que deberiacutea coincidir con el mismo val-or que en el caso de la RemotePi board para la Raspberry Pi 3 Sin embargo la RemotePi para la Raspberry Pi 2 es de soacutelo 2A Esto estaacute bien porque el valor es menor a los 26A del ODROID de modo el polyfuse de la RemotePi se ac-tivariacutea antes si conectas demasiados dis-

La RemotePi board (httpbitly2l8JcWU) que convierte cu-alquier mando a distancia en un

interruptor de encendido para tu orde-nador de placa reducida puede ser com-patible con el ODROIDC2 si sigues esta guiacutea Si utilizas tu dispositivo como centro multimedia esta placa te propor-cionara un receptor de infrarrojos y un circuito de alimentacioacuten asiacute como un botoacuten de encendido Puedes encender y apagar tu ODROID completamente a traveacutes de una sentildeal infrarrojos (IR) y simplemente presionar el botoacuten de en-cendido para apagarlo y reiniciarlo con seguridad La placa RemotePi es respon-sable del modo espera que absorbe una miacutenima energiacutea mientras el ODROID estaacute completamente apagado Por uacutel-timo la placa alimenta tu dispositivo a traveacutes de GPIO lo cual requiere un cable microUSB para conectarlo a la Re-motePi en lugar de utilizar un adaptador de corriente normal

Configuracioacuten de hardware

Puesto que la RemotePi estaba pen-sada originalmente para la Raspberry Pi 2 necesitaraacutes utilizar cables adiciona-les en lugar de colocarla justamente en cima del C2 para evitar interferir con el disipador de calor asiacute que debes re-cablear algunos pines Es necesario utili-zar cables con el diaacutemetro adecuado para los pines de 5V y puesta a tierra ya que la corriente podriacutea estar entre los 2A y 26A dependiendo de cuaacutentos dispositi-vos USB conectes a tu dispositivo

Los pines GPIO 8 y 10 de la Remo-

positivos no alimentados de forma exter-na que no es una buena idea en un SBC al fin al cabo No obstante debido a esta diferencia de amperaje una RemotePi para la Raspberry Pi 3 seriacutea la mejor op-cioacuten para este proyecto

Como resultado del nuevo cableado el firmware de RemotePi ya no se puede configurar de forma normal aunque nunca he usado esta funcioacuten Si fuera necesario configurar o actualizar el firm-ware necesitaraacutes volver a conectar los pines 8 y 10 de la RemotePi a los pines 8 y 10 del ODROID durante la actu-alizacioacuten del firmware y luego deshacer los cambios una vez que la actualizacioacuten haya finalizado Otra posibilidad es simplemente conectar una Raspberry Pi para actualizar el firmware Esto suena a un montoacuten de problemas pero en re-alidad simplemente es extender la con-exioacuten del cabezal y cambiar una liacutenea en el script principal y dos liacuteneas en otro script opcional si haces uso de ello

Re-cableando laconexioacuten GPIO

Dado que la RemotePi estaacute disentildeada

REMOTEPI BOARD PARA EL ODROID-C2por inifity85

REMOTEPI

figura 1 - remotepi board

ODROID MAGAZINE 15

ergiacutea completamenteIrswitchsh (solo cambia el script

original de MSL Digital de GPIOpin1 = 14 a GPIOpin1 = 225)

binbash

prevent restarting XBMC at

shutdown This is only used for

OpenElec before V5

LOCKDIR=rdquovarlockrdquo

LOCKFILE=rdquoxbmcdisabledrdquo

this is the GPIO pin receiving

the shut-down signal

Raspberry Pi pin8 GPIOpin1=14

Odroid-C2 pin26 GPIOpin1=225

GPIOpin1=225

functions

add_omit_pids()

omit_pids=rdquo$omit_pids -o $1rdquo

safe_shutdown ()

for OpenElec before V5

touch ldquo$LOCKDIR$LOCKFILErdquo

for OpenElec V5 and later

systemctl stop kodi

add_omit_pids $(pidof connmand)

add_omit_pids $(pidof dbus-dae-

mon)

killall5 -15 $omit_pids

for seq in `seq 1 10` do

usleep 500000

clear gt devtty1

killall5 -18 $omit_pids || break

done

sync

umount -a gtdevnull 2gtamp1

poweroff -f

echo ldquo$GPIOpin1rdquo gt sysclass

gpioexport

echo ldquoinrdquo gt sysclassgpio

gpio$GPIOpin1direction

while true do

sleep 1

power=$(cat sysclassgpio

gpio$GPIOpin1value)

if [ $power = 0 ] then

echo ldquooutrdquo gt sysclassgpio

gpio$GPIOpin1direction

echo ldquo1rdquo gt sysclassgpio

una carcasa personalizada de modo que el receptor integrado podriacutea estar oculto y no ser uacutetil En ese caso puedes desac-tivar el IR del ODROID en favor del re-ceptor externo GPIO-IR en la RemotePi y conectar el pin 12 Tienes disponible maacutes informacioacuten sobre el cambio al receptor GPIOIR en LibreELEC en httpbitly2lpDl27

Scripts de apagado para LibreELEC

Los dos scripts tratados a continu-acioacuten pueden descargarse desde la paacutegina de soporte de MSL Digital Solutions en httpbitly2kMxyVG En esta paacutegina tambieacuten encontraras una guiacutea para utili-zar estos scripts en otros sistemas opera-tivos como Volumio y RuneAudio

El script irswitchsh se usa para el apagado seguro a traveacutes de sistema In-frarrojos Tras pulsar el correspondiente botoacuten el sistema se apagaraacute de forma se-gura luego RemotePi esperaraacute a que el GPIO225 alcance el estado 0 (low) que aparece tras el cierre exitoso del sistema Finalmente cortaraacute la energiacutea

El script shutdownsh se usa para el apagado seguro a traveacutes de la interfaz del programa o script Despueacutes de navegar hasta el botoacuten de apagado en la GUI el sistema se apagaraacute de forma segura luego RemotePi esperaraacute a que el GPIO225 alcance el estado 0 (low) que apareceraacute tras apagarse el sistema de forma adec-uada y segura Finalmente cortaraacute la en-

originalmente para una Raspberry Pi desgraciadamente no es soacutelo enchufar y usar Necesitaraacutes volver a cablear dos pines usando los cables de todos los pines tal y como se muestra en la Figura 2 Re-cablea el pin 8 de la RemotePi al pin 26 del ODROID-C2 y el pin 10 de la RemotePi al pin 7 del ODROID-C2

Si no quieres utilizar el receptor IR de la RemotePi para el mando a distan-cia de LibreELEC puedes dejar desco-nectado el pin 12 La placa continuaraacute encendieacutendose y apagaacutendose a traveacutes del comando de control remoto IR pero el control de la GUI de LibreELEC seraacute asumido por el receptor de infrarrojos integrado en el ODROID Sin embargo si has comprado una RemotePi con un receptor IR y un LED externo es posible que hayas decidido colocarla dentro de

REMOTEPI

figura 3 - la remotepi ha sido recableada y montada en una carcasa personalizada

figura 2 - re-cableado Gpio

ODROID MAGAZINE 16

Centro Multimedia por ejemplo Esos comandos de apagado se equiparaacuten a eventos internos similar a cuando nave-gas por el menuacute de apagado de Kodi Sin utilizar este segundo script el sistema se cerraraacute con seguridad pero la placa Re-motePi no recibiriacutea ninguna indicacioacuten para monitorizar el GPIO225 de modo que no cortariacutea la energiacutea tras apagarse el sistema correctamente

Usando el receptor IR de la RemotePi

Si deseas utilizar el receptor IR de la RemotePi en lugar del receptor IR ODROID integrado tendraacutes que des-activar el sistema IR integrado y activar el receptor IR GPIO Para hacer esto en Ubuntu puede consultar el artiacuteculo de la Wiki de Hardkernel en httpbitly2l8KrWg Para Libre-ELEC echa un vistazo a mi mini-guiacutea en httpbitly2lLKj2A Para preguntas comentari-os o sugerencias visita el hilo original en httpbitly2mgFGKk

gpio$GPIOpin1value

sleep 3

safe_shutdown

fi

done

Shutdownsh (solo cambia GPIOpin =15 a GPIOpin =249 y GPIOpin1 =14 a GPIOpin1 =225)

binbash

if [ ldquo$1rdquo = ldquorebootrdquo ] then

Raspberry Pi pin10 GPIOpin=15

Odroid-C2 pin7 GPIOpin=249

GPIOpin=249

Raspberry Pi pin8 GPIOpin1=14

Odroid-C2 pin26 GPIOpin1=225

GPIOpin1=225

echo ldquo$GPIOpinrdquo gt sysclass

gpioexport

execute shutdown sequence on

pin

echo ldquooutrdquo gt sysclassgpio

gpio$GPIOpindirection

echo ldquo1rdquo gt sysclassgpio

gpio$GPIOpinvalue

usleep 125000

echo ldquo0rdquo gt sysclassgpio

gpio$GPIOpinvalue

usleep 200000

echo ldquo1rdquo gt sysclassgpio

gpio$GPIOpinvalue

usleep 400000

echo ldquo0rdquo gt sysclassgpio

gpio$GPIOpinvalue

set GPIO 14 high to feedback

shutdown to RemotePi Board

because the irswitchsh has

already been terminated

echo ldquo$GPIOpin1rdquo gt sysclass

gpioexport

echo ldquooutrdquo gt sysclassgpio

gpio$GPIOpin1direction

echo ldquo1rdquo gt sysclassgpio

gpio$GPIOpin1value

usleep 4000000

fi

El script shutdownsh es uacutetil si a vec-es usas las aplicaciones remotas Android Yatse o Kore o hotkeys para apagar tu

REMOTEPI

ODROID Talk Subreddit

httpwwwredditcomrodroid

ODROID Magazine

estaacute en Reddit

ODROID MAGAZINE 17

El HiFi Shield 2 (39$ httpbitly2lHSlZJ) es un Con-vertidor Digital a Analoacutegico de Alta definicioacuten (DAC) para el ODROID-C2 y el ODROID-C1+ Se trata de

una placa de sonido especial para el ODROID-C2 y C1 + que estaacute optimizada para mejorar la calidad de reproduccioacuten del sonido Ofrece un sonido muy bien equilibrado consistente intenso amplio y muy bien dimensionado por niveles Hemos analizado la calidad de audio de la salida HiFi Shield 2 DAC con un equipo estaacutendar de la industria del sonido llamado Au-dio Precision Audio Precision es un analizador de audio de alto rendimiento optimizado para la produccioacuten de audio digital

Usando el chip DAC PCM5242 de uacuteltima generacioacuten de Texas Instrument conocido como Burr-Brown el HiFi Shield 2 soporta formatos de audio de 16 24 y 32 bits con una ra-tio THD+N miacutenima (0002) y una dinaacutemica ideal (114dB +) ademaacutes de sorprendentes tasas de muestreo de 384 kHz La interfaz dedicada SPDIF soporta una definicioacuten de hasta 192kHz24bit a traveacutes de una salida oacuteptica (Toslink)

Si hacemos uso del puerto de expansioacuten I2S en el C2C1+ no es necesario ocupar un puerto USB permitiendo al usu-ario seleccionar el sistema de reproduccioacuten de audio que desee como Volumio y Debian (DietPi) para reproducir sonido HiFi

HIFI SHIELD 2

HIfI SHIELD 2EL MEJOR SOnIDO quE PODRAS COnSEGuIR En AnDROIDeditado por rob roy (robroy)

oDroiD-c2 y hifi Shield 2 Audio pb +J

primer plano de la placa con anotaciones

Distribucioacuten de los 7 pines i2S del c2c1+

la salida de audio es estaacutendar la salida de color rojo corresponde al canal de audio iz-quierdo y la salida de color blanco correspon-de al canal de audio derecho

ODROID MAGAZINE 18

Detalles

La guiacutea de configuracioacuten de UbuntuLinux para ODROID-C2 estaacute disponible en httpbitly2brrGdG y para ODROID-C1+ en httpbitly2lI7AC7 El sistema operativo oficial Volumio 2 se puede descargar desde httpbitly2kOJNAV y la imagen DietPi basada en Debian se encuentra en httpbitly2ls45yM Puede ver los esquemas en httpbitly2mnukV4

Diagrama por bloques del hifi Shield2

Caracteriacutesticasbull El control de volumen a traveacutes de la interfaz

i2c es una gran caracteriacutestica para mantener una buena calidad del sonido con varios voluacutemenes de salida de audio

bull Los puertos de salida incluyen terminales esteacute-reo rcA chapados en oro

bull La fuente de alimentacioacuten tiene habilitado un regulador de interferencias de ruido ultra-bajo lo cual reduce el ruido de la fuente de alimentacioacuten y aumenta en gran medida el ratio sentildealruido

bull La interfaz I2S permite la descodificacioacuten di-recta de la entrada digital a la salida analoacutegica utili-zando la sincronizacioacuten del reloj maestro

bull La superficie de la PCB estaacute chapada en oro so-bre 2 onzas de cobre lo cual garantiza la continui-dad de la sentildeal y reduce la reflexioacuten y deflacioacuten de la sentildeal

bull Dispone de almohadillas soldadas a la salida de audio balanceada (sentildeal diferencial)

bull La interfaz SPDIF dedicada es nueva admite una definicioacuten de hasta 192khz24bit a traveacutes de una nueva salida oacuteptica (toslink)

bull Este HiFi shield no es compatible con Android y hardkernel no tiene planes para hacerlo compatible y asiacute poder habilitar el controlador i2S en el Kernel y el hAl de Android

El Manual de usuario del ODROID-XU4 disponible en httpbitly1U9Q8yg ha sido revisado hace poco para incluir algunos de los perifeacutericos maacutes recientes como

la Expansion Board SmartPower2 y oCam Puesto que ahora Hardkernel tambieacuten ofrece Ubuntu 1604 todos los ejemplos de coacutedigo se han actualizado para que sean compatibles con el nuevo sistema operativo Si tiene comentarios preguntas o sugerencias visita el hilo de los foros ODROID en httpbitly1RykBrT

MAnuAL Xu4ACTuALIzADOREvISADO PARA uBunTu 1604 y LOS PERIfERICOS MAS RECIEnTESeditado por rob roy (robroy)

MANUAL XU4

el manual del oDroiD-xU4 incluye informacioacuten detallada de los diferentes sistemas operativos software y perifeacutericos disponibles para el oDroiD-xU4

ODROID MAGAZINE 19

El DevOps es complicado Los grandes proyectos de soft-ware como Mesos y Kubernetes desarrollan equipos como los que se encuentran en la mayoriacutea de las empre-

sas y organizaciones tecnoloacutegicas como CoreOS con la finali-dad de ayudar a los desarrolladores a poner sus aplicaciones en funcionamiento Sin embargo iquestcuaacutel seriacutea una buena solucioacuten para un desarrollador en solitario o una pequentildea red domeacutesti-ca iquestCoacutemo podemos usar el coacutedigo a nivel de infraestructura

Uso un portaacutetil Macintosh OSX para desarrollo pero para las aplicaciones de larga duracioacuten o aplicaciones que se ejecu-tan por la noche necesito un entorno remoto siempre activo ya que mi portaacutetil estaraacute fuera de liacutenea o en el tren conmigo mientras voy y vengo del trabajo Tiene su sentido no utilizar el ordenador como un entorno para la puesta en funcionamiento de aplicaciones

El ODROID-XU4 es un ordenador ideal para un entor-no de implementacioacuten remoto ya que es econoacutemico flexible cuenta con excelentes especificaciones teacutecnicas y puede ejecutar Linux Este artiacuteculo tiene por objetivo explicar coacutemo almacenar coacutedigo de implementacioacuten en tu repositorio de proyectos asiacute como automatizar las implementaciones y ejecuciones

Arch LinuxArch Linux es una distribucioacuten de Linux gratuita de coacutedigo

abierto que fue lanzada en 2002 Estaacute centrada en la elegancia la integridad del coacutedigo el minimalismo y la simplicidad y cuenta con que el usuario haga un esfuerzo en comprender el funcionamiento del sistema Arch Linux utiliza en particular un modelo de revisioacuten continua de modo que todo lo que se necesitas para conseguir el software del sistema maacutes reciente es actualizar el sistema de forma perioacutedica

Arch Linux puede ser algo difiacutecil de asimilar ya que uti-liza herramientas diferentes a las de una distribucioacuten Debian El gestor de paquetes se activa a traveacutes de ldquopacmanrdquo en lugar de ldquoapt-getrdquo y existe un gestor complementario de paquetes muy popular llamado ldquoyaourtrdquo Muchos de los servicios o her-ramientas maacutes comunes no se instalan por defecto

Arch Linux esta hecho principalmente para procesadores x86 pero un proyecto llamado Arch Linux ARM (ALARM) tiene una distribucioacuten ARM de Arch Linux para arquitectu-ras AArch64 ARMv8 y ARMv7 Hardkernel el fabricante de ODROIDs es de hecho un patrocinador del proyecto Arch Linux ARM

HOME DATA CENTER

HOME DATA CEnTERIMPLEMEnTACIOn DEL CODIGO COn ARCHLInuXpor John Skilbeck

Configurar la redDeberaacutes asignarle a tu dispositivo una direccioacuten IP LAN

DHCP reservada y en el mejor de los casos un nombre de host que se propagaraacute a lo largo de tu red por medio del servidor DNS de tu router De esta forma en nuestro entorno de desar-rollolocal podremos utilizar un nombre de host para resolver siempre el entorno de implementacioacutenremoto

Por ejemplo en mi red reservo el 192168249 a la direc-cioacuten MAC de mi ODROID Tambieacuten configuro una entrada DNS que asigna a esa direccioacuten IP ldquoodroidrdquo Utilizar un firm-ware personalizado en el router como Tomato USB o DD-WRT lo hace extremadamente faacutecil ya que esos firmwares convierten tu router en un pequentildeo ordenador Linux con una aplicacioacuten web GUI muy pulida aunque su implementacioacuten estaacute fuera del alcance de este artiacuteculo Si operas con subredes aseguacuterate dirigir el puerto hacia el puerto externo que se asigna al puerto SSH del dispositivo odroid ya que Git se ejecuta a traveacutes de SSH

Configurar el proyectoLoacutegicamente desearaacutes estandarizar el flujo de trabajo de la

implementacioacuten Esto haraacute que el trabajo con proyectos sea

el home data center de John es una auteacutentica obra de arte

ODROID MAGAZINE 20

extremadamente faacutecil y eliminas muchos de los cambios de contexto mental que utilizas cuando trabaja en varios proyec-tos Crearemos una carpeta para alojar todos nuestros archivos relacionados con implementaciones Coloca los archivos eje-cutables en ldquodeploybinrdquo y cualquier archivo cron en ldquodeploytasksrdquo (maacutes informacioacuten sobre esta cuestioacuten maacutes adelante)

Navega hasta el directorio del proyecto en una ventana de Terminal y luego escribe los siguientes comandos

$ mkdir -p deploybin

$ mkdir -p deploytasks

$ cd deploybin ampamp touch run-job ampamp

chmod u+x run-job ampamp cd -

$ cd deploytasks ampamp touch crontab

Tambieacuten puede estandarizar doacutende colocar tu coacutedigo fuente De esta forma le seraacute maacutes faacutecil a otras personas ver coacutemo se or-ganiza tu proyecto y conocer queacute es el coacutedigo fuente y queacute no

$ mkdir src

$ cd src ampamp (place source code here ie python core

py clojure coreclj nodejs appjs)

Simplificar los puntos de entradaIniciar una aplicacioacuten puede resultar algo confuso con todos

los comandos que se pueden ejecutar en diferentes lenguajes Por ejemplo puede usar Java ldquojava -jar [my-jar] jarrdquo o python ldquopython my-apppyrdquo y tu aplicacioacuten tambieacuten puede necesitar varios argumentos Todo esto deberiacutea simplificarse y resumirse en un archivo ldquodeploybinrun-jobrdquo

binsh

set -e

CMD=rdquosrcduckrdquo

exec $CMD $

Crear el archivo cronArch Linux no viene con un cliente o demonio cron por

defecto Instaacutelalo con ldquosudo pacman -Syu cronierdquo Utilizando cron puede ejecutar comandos en intervalos de tiempo espe-cificados haciendo uso de la sintaxis especial de cron Normal-mente se almacena en el archivo crontab del usuario al que puedes acceder con ldquocrontab -erdquo Sin embargo esto es demasi-ado manual y queremos usar coacutedigo como infraestructura Cron tambieacuten tiene algunos subdirectorios muy uacutetiles en ldquoetccronrdquo como ldquoetccrondailyrdquo yrdquoetccronhourly ldquo si co-locamos los archivos aquiacute eacutestos se ejecutaraacuten en los intervalos especificados

Revisa el archivo de ldquodeploytaskscrontabrdquo que colocare-mos en ldquoetccrondrdquo que se crea automaacuteticamente con nuestro script ldquoposttreceiverdquo

variables

SHELL=binbash

PATH=binusrbinusrlocalbinusrsbinusrlo-

calsbin

MAILTO=[your-email-address]gmailcom

cmd=rdquodeploybinrun-jobrdquo

app_dir=rdquohomeskilbjodeployappduckdnsrdquo

jobs

5 skilbjo cd ldquo$app_dirrdquo $cmd gtdevnull

Aquiacute tienes el esquema general de la estructura de un simple proyecto El uacutenico ejecutable del proyecto es un uacutenico script shell ubicado en ldquosrcrdquo

$ tree

READMEmd

deploy

bin

post-receive

run-job

tasks

crontab

src

duck

4 directories 5 files

GitPrimero queremos agregar una URL remota a nuestro

proyecto en nuestro entorno local

$ git remote add odroid sshodroid~deploygit

duckdnsgit

Ten en cuenta que dependiendo de la topologiacutea de tu red es posible que tenga que modificar esta url Si no puedes asignar nombres de host la URL de git se veriacutea asiacute donde 192168249 es la direccioacuten IP LAN de tu dispositivo

$ ssh192168249~deploygitduckdnsgit

Si tienes un usuario en tu entorno ODROID distinto al que tienes en tu entorno de desarrollo la url se veriacutea asiacute donde ldquoskilbjordquo es tu nombre de usuario

$ sshskilbjoodroid~deploygitduckdnsgit

Si tu servidor remoto estaacute en una subred diferente y tienes redireccionados los puertos tu url tendriacutea este aspecto donde

HOME DATA CENTER

ODROID MAGAZINE 21

ldquo2222rdquo es tu puerto externo

$ ssh192168122222~deploygitduckdnsgit

En el directorio principal de tu entorno remoto crea una carpeta llamada ldquo~deployrdquo con dos subcarpetas ldquo~deployapprdquo y ldquo~deploygitrdquo Los subdirectorios de ldquo~deploygitrdquo seraacuten los puntos finales de nuestros desarrollos y con un hook ejecutaraacuten comandos de implementacioacuten en los subdirectorios de ldquo~ deployapprdquo

Primero navega hasta el directorio principal del entorno re-moto y a continuacioacuten escribe los siguientes comandos

$ mkdir -p ~deployapp

$ mkdir -p ~deploygit

$ mkdir -p ~deploygitduckdnsgit

$ mkdir -p ~deployappduckdns

Ahora en ldquo~ deploygitduckdnsgithooksrdquo crea un archi-vo ejecutable llamado ldquopost-receiverdquo que se activaraacute con cada accioacuten hacia el punto final

$ cd ~deployappgitduckdnsgithooks

$ touch post-receive ampamp chmod u+x post-receive

$ vim post-receive

Rellena el ejecutable con lo siguiente en el directorio ldquo~deploygitduckdnsgithooksrdquo del entorno remoto

usrbinenv bash

set -eou pipefail

user=$(whoami)

dir=rdquohome$userdeployapprdquo

app=$(basename $(pwd) | sed -e lsquosgitrsquo)

deploy_dir=rdquo$dir$apprdquo

cron_dir=rdquoetccrondrdquo

GIT_WORK_TREE=rdquo$deploy_dirrdquo git checkout -f

cd ldquo$deploy_dirrdquo

build steps here

case ldquo$userrdquo in

(skilbjo) sudo cp deploytaskscrontab ldquo$cron_

dir$apprdquo

esac

you can also do project-specific build steps in

this section like install

dependencies (ie npm install) compile source

code (ie lein uberjar)

as well as if a long-lived app run commands as

well (ie java -jar my_jarjar)

echo ldquoall donerdquo

exit 0

ImplementacioacutenAhora estamos listos para implementar ya que nuestro en-

torno local estaacute configurado para alcanzar el punto final del servidor de implementacioacuten nuestro entorno remoto estaacute con-figurado para recibir la notificacioacuten y revisar el coacutedigo fuente ejecutar cualquier paso de compilacioacuten y colocar una tarea en el directorio cron del sistema para su lanzamiento Ponto todo en praacutectica con el siguiente comando en el directorio del proyecto del entorno local

$ git push odroid

Ademaacutes para ver coacutemo se ha implementado todo esto en un proyecto de ejemplo visita httpbitly2lthYKW

Pasos finalesSe puede antildeadir al flujo anterior algunas caracteriacutesticas

como son muacuteltiples entornos ya sea con muacuteltiples ODROIDs o con un solo ODROID trataacutendolo como un servidor de ser-vicio Esto se puede hacer con subdirectorios bajo ldquo~deployrdquo como ldquo~deploystagingappmy_apprdquo o ldquo~ deployproduc-tionappmy_apprdquo

Ademaacutes podriacuteas antildeadir un servicio de integracioacuten conti-nua como CircleCI que ejecutariacutea una suite de testeo desde cada desarrollo a GitHub y si tiene eacutexito compila una imagen Docker No podriacuteas entonces tener un archivo en el entorno remoto que verificariacutea una imagen de un repositorio Docker y la ejecutariacutea en un intervalo especificado Esto es lo que hacen muchos de los softwares DevOps distribuidos como Mesos y Kubernetes pero en un entorno mucho maacutes rico que BASH y Linux

Referencias

Artiacuteculo Wikipedia de Arch linux httpbitly2l71ADKWebsite Arch linux ArM httpsarchlinuxarmorgArtiacuteculo que leiacute hace unos tres antildeos y que me inspiroacute para escribir mi propio artiacuteculo httpbitly2m5JAct

HOME DATA CENTER

ODROID MAGAZINE 22

odroid ARCADE BOXLA EXPERIEnCIA PERfECTA COn TuS JuEGOS ARCADE fAvORITOSpor brian Kim charles park y John lee

ARCADE BOX

Los ODROIDs tienen mejor rendimiento que las placas de la competencia especialmente en lo que respecta al renderizado de video lo que significa que

las placas ODROID son ideales para jugar lo cual hacen muchos usuarios de ODROID Ya hay disponibles varios sistemas operativos de plataforma de juegos como Lakka (httpbitly1NO8BBC) y ODROID GameStation Tur-bo (httpbitly1ASFO5O) Para disfrutar auacuten maacutes de nuestras sesiones de juegos creamos nuestra propia consola arcade con simples botones GPIO y joysticks y la llama-mos la ODROID Arcade Box Elegimos un ODROID-XU4 para este proyecto porque es el que tiene mejor rendimiento GPU de todos los dispositivos ODROID actuales En este artiacuteculo vamos a describir como hemos creado la ODROID Arcade Box

Requisitos( Figura 3 ndash )Decidimos hacer la ODROID Arcade Box usando

un MDF (tablero de fibra de densidad media) El Shifter Shield del XU4 tambieacuten es uacutetil para utilizar los pines de expansioacuten del ODROID-XU4 Los Joysticks los botones y los cables eran los componentes de entrada y se utilizoacute

Nuestro primer y simple prototipo

ODROID MAGAZINE 23

panel MDf 12t2eA 600x2202eA 600x752eA 220x75taladroplegadoraDesmontadorcinta meacutetricaNavaja multiusoAlicates de punta largaoDroiD-xU4xU4 Shifter shieldSMpS (fuete Alimentacioacuten)

extendedores hDMi USb ethernetenchufe de alimentacioacuten y Switchbisagras 2eAreceptor de puertacaucho 4eAtornillospulsadores 19eAJoystick 2eAcablesterminales

una SMPS (Fuente de alimentacioacuten conmutada) como fuente de alimentacioacuten Las herramientas y las piezas utilizadas las tienes en esta paacutegina

La ODROID Arcade Box necesita un total de 27 entradas (19 entradas para botones y 8 entra-das para joysticks) Las 24 entradas GPIO digi-tales del ODROID-XU4 no son suficientes para las 27 entradas de modo que creamos dos puertos ADC adicionales para los tres botones que nos fal-taban Los valores de entrada ADC se basan en el voltaje de entrada y los valores de entrada digital y analoacutegica se procesan en el demonio GPIO que se describe a continuacioacuten

Disentildeo y montajeLos paneles de la ODROID Arcade Box deben

ser disentildeados y fabricados para que los botones y joysticks esteacuten bien colocados Elegimos MDF 12T teniendo en cuenta el precio y la durabilidad El dise-ntildeo se puede hacer con cualquier herramienta CAD como Google Sketch o SolidWorks Aunque existen muchas plantillas de disentildeo para los paneles de joypad decidimos elegir un disentildeo arcade estaacutendar japoneacutes

El primer paso del montaje es unir la placa al panel MDF Este paso fue faacutecil aunque nos llevo maacutes tiempo que el resto Despueacutes insertamos los joysticks la toma de corri-ente el interruptor y los botones en el panel MDF superior Los conectores HDMI Ethernet y USB se colocaron en la parte trasera del panel MDF El siguiente paso fue montar cada panel MDF usando un taladro para hacer los agujeros luego con tornillos los sujetamos

El uacuteltimo paso del montaje de la ODROID Arcade Box es conectar por cable los pines de expansioacuten del ODROID-XU4 a los componentes de entrada En este proyecto dise-ntildeamos las entradas GPIO externas tal y como se muestra en la paacutegina 26 Los botones Select y Temp estaacuten conecta-dos a puertos de expansioacuten ADC

Configuracion del softwareDesarrollamos un nuevo demonio GPIO llamado gpio_

keyd (httpbitly2ljOZKg) Este demonio es capaz de asignar entradas GPIO y eventos claves usando uinput y wiringPi una libreriacutea de acceso GPIO basada en pines Estaacute disentildeada para que le sea familiar a quiene ya ha utilizado el sistema de cableado Arduino Aunque la blibreriacutea wiring-Pi upstream soacutelo admite Raspberry Pi Hardkernel ofrece una versioacuten de wiringPi para ODROIDs en su repositorio GitHub (httpbitly1Eq3UpF) El moacutedulo uinput es un moacutedulo del kernel de Linux que gestiona el subsistema de entrada del usuario Se puede utilizar para crear y manejar dispositivos de entrada desde una aplicacioacuten

ARCADE BOX

herramientas compentes y lo que hay justamente debajo

esquema de los puertos de expansioacuten

ODROID MAGAZINE 24

Elegimos ODROID GameStation Turbo (httpbitly1ASFO5O) como plataforma de software para nuestra ODROID Arcade Box que tiene integrado uinput Debes asegurarte de que el archivo de dispositivo uinput existe en el sistema operativo elegido porque algunos no tienen dispositivos uinput

$ ls devuinput

Si tu sistema operativo no tiene un archivo de disposi-tivo devuinput entonces seraacute necesario recompilar e in-stalar un nuevo kernel con la opcioacuten de configuracioacuten IN-PUT_UINPUT habilitada La paacutegina Wiki en httpbitly1YIToBI describe coacutemo compilar e instalar la imagen del kernel a partir del coacutedigo fuente

$ make menuconfig

Device Drivers

-gt Input device support

-gt Generic input layer

-gt Miscellaneous device

-gt User level driver support ltgt

Ten en cuenta que wiringPi debe instalarse antes de in-stalar gpio_keyd En la imagen GameStation de ODROID los comandos sudo deben ejecutarse como root porque la cuenta ldquoodroidrdquo no estaacute designada como usuario sudo

$ git clone httpsgithubcomhardkernelwiringPi

git

$ cd wiringPi

$ sudo build

Descarga el coacutedigo fuente gpio_keyd el cual estaacute dis-ponible en nuestro repositorio GitHub El procedimiento para compilar e instalar gpio_keyd es muy simple

$ git clone httpsgithubcombkrepogpio_keydgit

$ cd gpio_keyd

$ make

$ sudo make install

El script gpio_keyd hace referencia a etcgpio_keydconf como el predeterminado para la informacioacuten de los botones y GPIO El archivo de configuracioacuten fue modi-ficado para las 27 entradas de la ODROID Arcade Box Algunas botones ya se utilizaban en el emulador de juego de modo que tuvimos que cambiar la configuracioacuten del emulador para evitar conflictos entre los botones de en-trada GPIO y el emulador Ten en cuenta que el campo ltGPIO pingt en el archivo de configuracioacuten hace referen-

ARCADE BOX

plano del disentildeo de joypad

la oDroiD Arcade box montada

ODROID MAGAZINE 25

cia al nuacutemero wiringPi no al GPIO y al nuacutemero de pin (httpbitly2lbzPIB)

Ejemplo de configuracioacuten para las 27 entradas etcgpio_keydconf

Digital input ltKey codegt ltGPIO typegt ltGPIO pingt ltActive valuegt User 1KEY_LEFT digital 15 0KEY_RIGHT digital 1 0KEY_UP digital 4 0KEY_DOWN digital 16 0KEY_A digital 2 0KEY_S digital 3 0KEY_D digital 30 0KEY_F digital 21 0KEY_Z digital 8 0KEY_X digital 9 0KEY_C digital 7 0KEY_V digital 0 0 User 2KEY_BACKSLASH digital 12 0KEY_SLASH digital 13 0KEY_SEMICOLON digital 14 0KEY_LEFTBRACE digital 5 0KEY_Y digital 26 0KEY_U digital 27 0KEY_I digital 22 0KEY_O digital 23 0KEY_H digital 6 0KEY_J digital 10 0KEY_K digital 11 0KEY_L digital 31 0

Analog input ltKey codegt ltGPIO typegt ltADC portgt ltADC ac-tive valuegtKEY_B analog 0 0KEY_N analog 0 2045KEY_M analog 1 2045

To run gpio_keyd daemon at every startup is conve-nient for ODROID Arcade Box

etcinitdgpio_keyd binsh BEGIN INIT INFO

ARCADE BOX

Mapeo Gpio externo para los botones y Joysticks

cableado de la oDroiD Arcade box

ODROID MAGAZINE 26

Provides gpio_keyd Required-Start $all Required-Stop Default-Start 2 3 4 5 Default-Stop Short-Description Run usrbingpio_keyd if it ex-ist END INIT INFO

PATH=sbinusrsbinbinusrbin

libinitvarssh

liblsbinit-functions

do_start() if [ -x usrbingpio_keyd ] then usrbingpio_keyd -d ES=$ [ ldquo$VERBOSErdquo = no ] ampamp log_end_msg $ES return $ES fi

case ldquo$1rdquo in start) do_start restart|reload|force-reload) echo ldquoError argument lsquo$1rsquo not supportedrdquo gtamp2 exit 3 stop) killall gpio_keyd exit 0 ) echo ldquoUsage $0 start|stoprdquo gtamp2 exit 3 Esac

$ sudo chmod +x etcinitdgpio_keyd$ sudo update-rcd gpio_keyd defaults$ sudo reboot

En los comandos anteriores el script gpio_keyd se ejecuta como un demonio uti-lizando la opcioacuten ldquo-drdquo El uso de gpio_keyd se puede comprobar con la opcioacuten ldquo-hrdquo Comprue-ba de nuevo las teclas usadas por el juego o el emulador despueacutes fija la configuracioacuten del gpio_ keyd correctamente Es ahora cuando estaacutes listo para jugar y disfrutar de tus juegos con tu nueva ODROID Arcade Box

ARCADE BOX

the King of fighters 98 John vs brian

ODROID MAGAZINE 27

En este artiacuteculo analizaremos las diferentes formas que existen para ob-tener los datos del uso de la red

ConfiguracioacutenLa forma normal de analizar los datos

de traacutefico de la red es mediante el uso de datos a traveacutes de las aplicaciones de configuracioacuten del sistema tal y como se muestra en la figura 1

El uso de datos muestra la cantidad total de traacutefico de datos entrante y sa-liente que ha sido utilizada por una apli-cacioacuten Si seleccionas la aplicacioacuten veraacute una pantalla como la que aparece en la Figura 2 que muestra informacioacuten detal-lada sobre el uso de la aplicacioacuten tanto en primer plano como de fondo

La informacioacuten que se muestra den-tro de la aplicacioacuten de Configuracioacuten se almacena en data systemnetstats que requiere acceso root Al eliminar todo lo que hay dentro de esta carpeta se resta-

Como desarrolladores queremos que nuestras aplicaciones sean eficientes y a menudo nos gus-

tariacutea saber cuaacutento ancho de banda de red estaacute utilizando nuestra aplicacioacuten Esto es muy uacutetil por varias razones

bull Para monitorizar y asegurarnos de que la aplicacioacuten es realmente la nuestra y no una aplicacioacuten que ha sido pirateada y publi-cada con diferentes nombres en Play Store

bull Para asegurarnos de que no es-tamos cogiendo ancho de banda innecesario del plan de datos del usuario

bull Para comprobar que el disposi-tivo que estamos usando no estaacute accediendo a Internet sin nuestro consentimiento

blecen las estadiacutesticas de red mostradas en esta aplicacioacuten

Estadiacutesticas de la redLa aplicacioacuten de configuracioacuten nos

puede dar una informacioacuten general so-bre las estadiacutesticas de la red de datos que es un buen comienzo pero a veces necesitamos un anaacutelisis maacutes detallado que puede hacerse a traveacutes del coman-do dumpsys Android cuenta con una poderosa herramienta llamada dumpsys que nos permite obtener una instan-taacutenea o volcado del sistema que pu-ede incluir informacioacuten sobre la red la memoria y otros componentes Lee la documentacioacuten de Android en httpbitly2kK9dep para obtener maacutes infor-macioacuten del sistema Para conseguir maacutes informacioacuten relacionada con la red nos interesa el comando

$ dumpsys netstats detail

La Figura 3 muestra un pantallazo de lo que puedes ver desde una tablet Nexus 7 que ejecuta Lollipop 511

Hay algunas cuestiones importantes para entender las estadiacutesticas

bull Las estadiacutesticas UID muestran el desglose de las aplicaciones de primer plano y de fondo

bull Uid muestra el ID de usuario de la aplicacioacuten que se puede utili-zar para relacionar eacutesta con la in-

DESARROLLO AnDROID AnALIzAnDO EL uSO DE RED DE LAS APLICACIOnESpor Nanik tolaram

DESARROLLO ANDROID

figura 1 - Uso de datos en la configuracioacuten

figura 2 - Desglose del uso de datos de la app

ODROID MAGAZINE 28

$ dumpsys package detail

Este comando te proporcionaraacute una larga lista de informacioacuten sobre los pa-quetes que estaacuten instalados en tu dis-positivo Para las estadiacutesticas de red nos interesa la seccioacuten que se muestra en la Figura 5

La seccioacuten resaltada muestra el userId que se relaciona con el uid que se mues-tra en las estadiacutesticas de red Al relacio-nar este nuacutemero sabemos el nombre del paquete de la aplicacioacuten sobre el que es-tamos leyendo las estadiacutesticas de red

Aplicacioacuten de ejemplo

La aplicacioacuten de ejemplo de este artiacute-culo se puede descargar desde httpbitly2m8WenA que muestra coacutemo etiqu-etar la conexioacuten de red desde distintas

secciones de la aplicacioacuten lo cual puede ayudar a analizar el volumen de traacutefico de datos de la aplicacioacuten La Figura 6 muestra un ejemplo de coacutemo lo vemos si utilizamos Android Device Monitor (dentro de Studio diriacutegete a Tools -gt Android -gt Android Device Monitor)

Tal y como se puede ver en el graacutefico la simple aplicacioacuten tiene 3 conexiones dife-rentes y cada una de ellas estaacute accediendo a un sitio web diferente Al etiquetarlas con

formacioacuten del paquete (que ver-emos en la seccioacuten de detalles del paquete dumpsys) con el objeto de conocer queacute aplicacioacuten utiliza estas estadiacutesticas de red

bull Las etiquetas son uacutetiles si de-sea ver la cantidad de datos que utiliza cada conexioacuten de tu apli-cacioacuten Puedes ver un ejemplo de esto en la Figura 4 que muestra que el uid 10007 tiene las siguien-tes etiquetas 0x30000401 0x30003201 0x30002804 0x10000401 y 0x30000407 Es-tas etiquetas ayudan al desarrol-lador a saber cuaacutentos datos uti-liza cada parte de la aplicacioacuten Estas estadiacutesticas de red en par-ticular estaacuten vinculada al paquete Google Framework que forma parte de Google Play Store

En el siguiente apartado veremos coacutemo escribir una aplicacioacuten etiquetando el hilo que hace la conexioacuten de red para determi-nar la cantidad de datos que se utilizan

Estadiacutesticas de paquetes

En la seccioacuten anterior analizamos el uid que aparece al ejecutar el comando dumpsys netstats Ahora necesitamos sa-ber queacute uid corresponde a la aplicacioacuten en el dispositivo y esto se hace mediante el siguiente comando

DESARROLLO ANDROID

figura 3 ndash estadiacutesticas de red con Dumpsys

figura 4 - estadiacutesticas de etiquetas UiD

figura 5 - Detalles del paquete dumpsys

figura 6 - etiquetas de red

coacutedigos diferentes podemos ver la cantidad de traacutefico que consume cada conexioacuten y esto nos ayudaraacute a ver si nuestra aplicacioacuten utiliza el ancho de banda de un modo eficiente

El coacutedigo del siguiente fragmento muestra el uso de la API TrafficStats interna Esta etiqueta API muestra el subproceso que utiliza actualmente un socket con un identificador y todo el traacute-fico que pasa por la misma conexioacuten se grabaraacute junto Asiacute es como la aplicacioacuten es capaz de agrupar las 3 conexiones diferentes Internamente Android utili-za el moacutedulo xt_qtaguid del kernel para realizar este tipo de etiquetado Tienes disponible maacutes informacioacuten en httpbitly2kU8KXB

public void getUsingNormalURLC

onnection(String urlText int

threadTag)

throws IOException

URL url = null

TrafficStats

setThreadStatsTag(threadTag)

HttpURLConnection urlConnec-

tion = getConnection(url)

try

finally

TrafficStatsclearThread-

StatsTag()

ODROID MAGAZINE 29

Disgustado te subes a tu 4x4 de dominacioacuten del mun-do un vehiacuteculo que desde fuera parece maacutes bien un viejo camioacuten de granja pero por dentro se parece maacutes

al sistema de control de un transbordador espacial porque el conductor del restaurante oriental que realiza las entrega a do-micilio estaacute enfermo Ahora tienes que ir a recoger tu propia comida ldquoQueacute rudimentariordquo piensas cuando sales de tu garaje secreto Justamente cuando vas a parar el vehiacuteculo en un stop oyes un fuerte ruido Sales y te diriges raacutepidamente a la parte posterior del 4x4 donde observas un cubo de basura Te tiras de los pelos y piensas ldquoiexclEsos basureros Neanderthales dejaron otra vez el cubo en mediordquo Ahora te toca recoger los restos de tu cena y la basura de otros

Conforme te vas alejando para hacer tus recados empiezas a pensar en coacutemo evitar este inconveniente en el futuro Varias ideas te vienen a la mente

Un sistema lidar para escanear en 3D el entorno en tiempo real y alarmas sonoras cuando sea necesarioUn brazo ciberneacutetico colocado en la parte posterior del 4x4 que procese video para detectar objetos agarrarlos y moverlosUna simple camara trasera

Empiezas a considerar la viabilidad de cada una

Muy bueno pero demasiado complicado y costosoAuacuten mejor y un proyecto propio de un cientiacutefico loco pero demasi-ado complicado y costosoya tengo dos iexclpero estaba demasiado preocupado en mis pensa-mientos para prestarles atencioacuten

Lo que necesitas es algo simple sin complicaciones y barato que haga sonar una alarma para alertarte incluso cuando estar absorto en tus pensamientos ldquoAhardquo Recuerdas haber visto un nuevo producto en ameriDroid que puede hacer precisamente esto Se trata de un microcontrolador conectado al USB que soporta hasta 6 sensores ultrasoacutenicos con simples comandos en serie (httpbitly2l26ptV) ldquoiexclPerfectordquo Piensas

Regresas a tu laboratorio subterraacuteneo con el pollo Kung Pao en la mano te apresurar a encender tus monitores entras en el sitio web ameriDroid y pides un kit ldquoUSB Ultrasonic Ranging Sensorrdquo con 6 sensores y carcasas

Vas sintiendo una sensacioacuten de alivio a medida que regresas a los 12 proyectos en lo que ya estabas trabajando a la espera de que pasen un par de diacuteas hasta que llegue tu nuevo pedido Mientras te comes tu Kung Pao dibujas un diagrama de coacutemo quieres colocar los sensores en la parte posterior de tu vehiacuteculo

Un par de diacuteas maacutes tarde el kit llega Inmediatamente em-piezas a montar el kit y los sensores en la parte posterior de tu 4x4 teniendo cuidado de usar sellador de silicona para pro-teger los sensores de la lluvia aguanieve y nieve que puedas encontrar durante tus aventuras para dominar el mundo

A continuacioacuten consultas las instrucciones proporcionadas por ameriDroid con el kit sobre coacutemo controlar y leer los sen-sores desde tu fiel ODROID-C2 y VU7 que montaste en el salpicadero para este propoacutesito

Conectando el cable USBEl cable USB suministrado debe conectarse al microcon-

trolador (la pequentildea placa de circuito con filas de pines que sobresalen) El microcontrolador tiene una fila de 4 o 6 pines

DETECTAR LA PRESEnCIACROnICAS DE un CIEnTIfICO LOCOpor bo lechnowsky

SENSOR ULTRASONICO

ODROID MAGAZINE 30

en un extremo Si tiene 6 pines ceacutentrate en los 4 pines centrales y sigue estas instrucciones

Negro - conectar a GNDrojo - conectar a VccVerde - conectar a rxi

blanco - conectar a txD

Conectando los sensoresultrasoacutenicos

En cada sensor ultrasoacutenico hay cuatro pines marcados Vcc Trig Echo Gnd Para el primer sensor ultrasoacutenico conecta el pin 2 del microcontrolador al pin ldquoTrigrdquo del sensor ultrasoacutenico Conecta el pin 3 del microcontrolador al pin ldquoEchordquo del sensor Conecte el pin ldquoVccrdquo del sensor a DC 5V (el pin ldquoVCCrdquo del microcontrolador suministra 5V) y el pin ldquoGndrdquo del sensor a una conexioacuten a tierra como por ejemplo los pines ldquoGNDrdquo del microcontrolador

Si conectas un segundo sensor de ultrasonidos conecta ldquoTrigrdquo al pin 4 y ldquoEchordquo al pin 5 Continuacutea conectando los siguientes pines a los sensores hasta los pines 12 y 13 si al final optas por conectar los seis sensores ultrasonidos

Conexioacuten del softwareUtilizas un programa terminal como PuTTY Screen o tu

lenguaje de script o programacioacuten favorito para conectarte al puerto serie que aparece cuando te conectas el sensor ultrasoacuteni-co Esto variaraacute en funcioacuten del sistema operativo que utilizas para conectarte al microcontrolador En Windows consultar el ldquoAdministrador de dispositivosrdquo es la forma maacutes comuacuten de averiguarlo En Linux ldquodmesgrdquo o ldquolsusbrdquo son las formas de de-tectar a queacute puerto estaacute conectado Deberiacuteas ver algo denomi-nado ldquoPL2303rdquo que es la conexioacuten del microcontrolador Si recibes informacioacuten basura en tu terminal cuando te conectes aseguacuterate de que los ajustes en serie son 9600 baudios 8 bits ninguno (paridad) y 1 bit de parada Aquiacute tienes una lista de los comandos que puede aceptar el microcontrolador

bull debug on Activa la retroalimentacioacuten detallada Estaacute deshabilitada por defecto nos proporcionaraacute aclaracio-nes sobre los errores de entrada

bull debug off desactiva la retroalimentacioacuten detalladabull init x y activa un HC-SR04 en los pines especificados

X es trigger Y es echo Estos deben ser pines digitales El dispositivo 0 estaacute preestablecido en los pines 2 y 3 de modo que no es necesario especificar estos pines La seleccioacuten de pines no vaacutelidos devolveraacute un signo de ex-clamacioacuten ()

bull ping enviacutea una sola lectura del HCSR04 previamente utilizado Si no se ha utilizado todaviacutea se usaraacute el dis-positivo 0 Si al comando le sigue un espacio y un nuacutemero entre 0-100 (exclusivo) se realizaraacute ese nuacutemero de lecturas emitiendo primero el promedio de esas lec-

SENSOR ULTRASONICO

turas despueacutes el nuacutemero de lecturas fallidas (que no cuentan para el promedio) y luego los valores miacutenimo y maacuteximo de lectura separados por espacios En cual-quier caso si una sentildeal se desconecta automaacuteticamente devolveraacute -1

bull start Hace ping constantemente a todos los dispositivos conectados en secuencia Debido a que los dispositivos se utilizan uno a uno el flujo de datos de este comando seraacute maacutes raacutepido si los dispositivos miden distancias cor-tas Si este comando le sigue un espacio y un nuacutemero mayor que 0 la placa esperaraacute estos milisegundos entre la lectura del uacuteltimo dispositivo y la lectura del primer dispositivo El resultado de este comando seraacute la lectura de cada dispositivo (con un uacutenico espacio despueacutes de cada uno) y una vuelta tras el uacuteltimo dispositivo

bull stop detiene la operacioacuten ldquostartrdquo soacutelo es efectivo tras haber iniciado ldquostartrdquo

bull mode emite el modo de medicioacuten del flujo M para meacutetrico (miliacutemetros) I para Imperial (deacutecimas de pul-gada) o R para Raw (la longitud de pulso en microse-gundos devuelta por el HC-SR04) El valor predeter-minado es M

bull timeout emite el tiempo de espera actual para lecturas de la sentildeal El tiempo de espera es la mayor cantidad de microsegundos que la placa esperaraacute antes de declarar que el HC-SR04 ha realizado una mala lectura lo cual no es necesariamente lo mismo que el pulso maacutes largo que la placa aceptaraacute del HC-SR04 Cuando la placa mide el pulso del HC-SR04 primero espera a que el HC-SR04 comience a enviar un pulso Este tiempo cuenta para el tiempo de espera Cuando este comando le sigue un espacio y un nuacutemero el tiempo de espera se ajusta a ese nuacutemero El valor predeterminado es 1 segundo (1000000 microsegundos)

bull ver emite informacioacuten de versioacuten y creacuteditos

Si cualquier comando (o ninguacuten comando) estaacute precedido por un uacutenico diacutegito de 0-5 (inclusive) seguido de un espacio el dispositivo que corresponde a ese diacutegito se seleccionaraacute para ser usado con el siguiente comando ldquopingrdquo Cada vez que la placa esteacute lista para un comando emitiraacute ldquogtrdquo para la serie La uacutenica excepcioacuten estaacute tras el comando ldquostartrdquo que no solicitaraacute entrada hasta que sea reconocido ldquostoprdquo

ODROID MAGAZINE 31

iquestCoacutemo empezaste con los ordenadoresCuando empeceacute mi negocio tuve que decidir queacute plat-

aforma de hardware iba a utilizar para la recogida de datos del traacutefico Simplemente para que no pienses mal de miacute mis caacutemaras de traacutefico no son las que se usan para multar por exceso de velocidad o algo asiacute Mi sistema estaba desti-nado suavizar el flujo de traacutefico fijando los controles oacutepti-mos de las sentildeales de traacutefico Anteriormente usaba un PC industrial para ejecutar mi software de reconocimiento de imaacutegenes Ahora uso la familia de dispositivos ODROID para esta cuestioacuten

iquestQueacute te atrajo de la plataforma ODROID En 2012 useacute Google para buscar una plataforma que

fuera muy compacta y al mismo tiempo potente para que cubriera mis necesidades que resultoacute ser la placa

Por favor haacuteblanos un poco sobre tiSoy ingeniero de electroacutenica y software en Rusia desde

hace 47 antildeos Naciacute en Siberia y tras terminar la escuela me mudeacute a Moscuacute para estudiar en la universidad Ser estudi-ante en el Instituto de Aviacioacuten de Moscuacute (MAI) fue una experiencia increiacuteble probablemente la mejor de mi vida A principios de los 90 llegoacute a Rusia la era de los microordena-dores soliacutea jugar a un juego de saltos en una CPU z80 y el i486 Tras finalizar mis estudios universitarios y de posgrado me convertiacute en ingeniero Trabajeacute en unos cuantos puestos de trabajo para diferentes empresas y finalmente decidiacute em-prender mi propio negocio En 2006 puse en marcha una iniciativa para crear sistemas de recuento del traacutefico de au-tomoacuteviles Estoy casado y tengo una hija de 21 antildeos llamada Lena que trabaja como enfermera Mi esposa Nadezhda es disentildeadora de vestuario de produccioacuten pero ahora trabaja como disentildeadora web Ella es aficionada a la fotografiacutea digi-tal y le encanta su caacutemara reacuteflex digital

COnOCIEnDO un ODROIDIAnvIACHESLAv ALEKSEEveditado por rob roy (robroy)

CONOCIENDO UN ODROIDIAN

Viacheslav disfruta tocando la guitarra y escuchando muacutesica

1995 en el campus MAi probando uno de los primeros equipos Vr comerciales del mundo que funcionaba a 640x480 a 30fps Utiliz-aba un sensor magneacutetico en la nuca para la posicioacuten de la cabeza la mejor broma que se podiacutea gastar a alguien era colocar un imaacuten cerca de la espalda y sacudirlo iexcllos gritos estaban garantizados cuando el mundo en 3D daba vueltas sin cesar

ODROID MAGAZINE 32

ODROID-X2 Con sus cuatro nuacutecleos funcionando a 17 GHz calculaba con facilidad los algoritmos de reconteo del traacutefico de automoacuteviles Maacutes tarde cambieacute al U3 y el XU4

iquestCuaacutel es tu ODROID favorito y por queacuteDe momento mi favorito es el XU4 Mi sistema estaacute

basado en el tratamiento de fotogramas de video en tiempo real por lo que el bus USB 30 del XU4 es bastante bueno para una caacutemara con una interfaz de captura de viacutedeo Para mi sistema es muy importante tener una buena conexioacuten entre la caacutemara de viacutedeo y la CPU Probablemente tendreacute que echar un vistazo a las interfaces de nivel inferior como MIPI CSI-2 que por desgracia estaacuten ausente en el XU4 Recientemente he estado aprendiendo como usar la caacute-mara oCam GS BW La caacutemara es buena en siacute misma pero para un uso industrial al aire libre tengo que implementar un software de control de exposicioacuten automaacutetica y posible-mente de control de apertura de la lente que todaviacutea estaacute en estudio

MEET AN ODROIDIAN

Una vieja joya el mini ordenador Nixdorf

An old gem the Nixdorf mini computer

CONOCIENDO UN ODROIDIAN

iquestQueacute aficiones e intereses tienes aparte de los ordenadoresDisfruto conduciendo y leyendo sobre coches y viendo

los campeonatos de carreras de F1 Tambieacuten me gusta via-jar pescar escuchar muacutesica y tocar la guitarra Tengo un gato siberiano llamado Leia y soy fan de Star Wars

iquestQueacute consejo le dariacuteas a alguien que quiere aprender maacutes sobre la programacioacuten

Hacer software es algo increiacuteble y miacutestico Es una fusioacuten de arte y tecnologiacutea Nada te inspira maacutes que tu aplicacioacuten cuando empieza a cobrar vida Sin embargo siempre estaacute ahiacute el otro lado de la Fuerza Estar listo para instruirte inc-esantemente El desarrollo de software es una de las activi-dades que cambia maacutes raacutepido Si tienes pensado dejar de hacer software en uno o dos antildeos puede dejar de aprender ahora El conocimiento se volveraacute anticuado en un par de antildeos maacutes o menos Para estar en lo maacutes alto siempre tienes que correr Es similar a la cancioacutenrdquoRun like Hellrdquo de Pink Floyd Si estaacutes listo para vivir de esta forma seguro que tendraacutes eacutexito

ODROID MAGAZINE 33

Page 4: Estación ARCADE · gias de marketing, administración de medios sociales y producción multimedia impresa, web, vídeo y cine. Ges-tionando múltiples cuentas con agencias y productores

Manuel Adamuz Editor EspantildeoiTengo 31 antildeos y vivo en Sevilla Espantildea aunque naciacute en Granada Estoy casado con una mujer maravillosa y tengo un hijo Hace unos antildeos trabajeacute como teacutecnico informaacutetico y programador pero mi trabajo actual estaacute relacionado con la gestioacuten de calidad y las tecnologiacuteas de la informacioacuten ISO 9001 ISO 27001 ISO 20000 Soy un apasionado de la informaacutetica especialmente de los microordenadores como el ODROID Raspberry Pi etc Me encanta experimentar

con estos equipos y traducir ODROID Magazine Mi esposa dice que estoy loco porque soacutelo pienso en ODROID Mi otra aficioacuten es la bicicleta de montantildea a veces participo en competiciones semiprofesionales

Andrew Ruggeri Editor AdjuntoSoy un ingeniero de sistemas Biomeacutedicos anclado en Nueva Inglaterra que actualmente trabaja en la industria aeroespacial Un microcontrolador 68HC11 de 8 bits y el coacutedigo ensamblador son todo lo que me interesa de los sistemas embebidos Hoy en diacutea la mayoriacutea de los proyectos en los que trabajo estaacuten en lenguajes C y C ++ o en len-guajes de alto nivel como C y Java Para muchos proyectos utilizo placas ODROID pero auacuten sigo intentando utili-zar los controladores de 8 bits cada vez que puedo (soy un fan de ATMEL) Aparte de la electroacutenica soy un amante de

la fotografiacutea analoacutegica y desarrollo la peliacutecula friki con la que disfruto intentando hablar en idiomas extranjeros

Venkat Bommakanti Editor AdjuntoSoy un apasionado de los ordenadores desde la bahiacutea de San Francisco en California Procuro incorporar muchos de mis intereses en proyectos con ordenadores de placa reducida tales como pequentildeos modificaciones de hardware carpinteriacutea reutilizacioacuten de materiales desarrollo de software y creacioacuten de grabaciones musicales de aficionados Me encanta aprender continuamente cosas nuevas y trato de compartir mi alegriacutea y entusiasmo con la comunidad

Josh Sherman Editor AdjuntoSoy de la zona de Nueva York y ofrezco mi tiempo como escritor y editor para ODROID Magazine Suelo experi-mentar con los ordenadores de todas las formas y tamantildeos haciendo trizas las tablets convirtiendo Raspberry Pi en PlayStations y experimentado con los ODROIDs y otros SoCs Me encanta trabajar con los elementos baacutesicos y asiacute poder aprender maacutes y disfrutar ensentildeando a otros escribiendo historias y guiacuteas sobre Linux ARM y otros proyectos experimentales divertidos

Nicole Scott Art EditorNicole es una experta en Produccioacuten Transmedia y Estrategia Digital especializa en la optimizacioacuten online y estrate-gias de marketing administracioacuten de medios sociales y produccioacuten multimedia impresa web viacutedeo y cine Ges-tionando muacuteltiples cuentas con agencias y productores de cine desde Analytics y Adwords a la edicioacuten de viacutedeo y maquetacioacuten DVD Nicole ayuda a sus clientes con todos los aspectos de la visibilidad online Posee un ODROID-U2 varios ODROID-U3 y Xu4rsquos y espera poder utilizar las uacuteltimas tecnologiacuteas tanto para a nivel personal como

empresarial El sitio web de Nicole lo puedes encontrar en httpwwwnicolecscottcom

James LeFevour Editor ArtiacutesticoSoy un especialista en medios digitales que disfruta trabajando como freelance en marketing de redes sociales y admin-istracioacuten de sitios web Cuanto maacutes aprendo sobre las posibilidades de ODROID maacutes me ilusiona probar cosas nuevas con eacutel Me traslade a San Diego desde el Medio Oeste de los EEUU Continuo muy enamorado de muchos de los aspectos que la mayoriacutea de la gente de la Costa Oeste ya da por sentado Vivo con mi encantadora esposa y nuestro

adorable conejo mascota el cual mantiene mis libros y material informaacutetico en constante peligro

Bruno Doiche Editor Artiacutestico SeniorJugoacute a alrededor de 20 juegos este mes pero soacutelo encontroacute uno que valiera la pena

NUESTRO MARAVILLOSO PRESONAL ODROIDIAN

Rob Roy Editor JefeSoy un programador informaacutetico que vive y trabaja en San Francisco CA en el disentildeo y desarrollo de aplicaciones web para clients locales sobre mi cluster ODROID Mis principales lenguajes son jQuery angular JS y HTML5CSS3 Tambieacuten desarrollo SO precompilados Kernels personalizados y aplicaciones optimizadas para ODROID basadas en las versiones oficiales de Hardkernel por los cuales he ganado varios Premios Utilizo mi ODROIDs para diversos

fines como centro multimedia servidor web desarrollo de aplicaciones estacioacuten de trabajo y como plataforma de juegos Puedes echar un vistazo a mi coleccioacuten de 100 GB de software ODROID kernel precompilados e imaacutegenes en

httpbitly1fsaXQs

INDICE

hoMe DAtA ceNter - 20

JUeGoS liNUx opeN foDDer - 12

JUeGoS ANDroiD cAUSAlity - 14

MANUAl xU4 - 19

hifi ShielD 2 - 18

DeSArrollo ANDroiD - 29

ArcADebox - 23

liNeAGeoS - 11

coNocieNDo UN oDroiDiAN - 32

reMote pi - 15

tiMbre - 6

SeNSor UltrASoNico - 30

En este proyecto vamos a convertir el ODROID-C2 (httpbitLy 1oTJBya) en un inteligente timbre IoT que tomaraacute una foto de quienquiera que lo haga sonar

y la enviaraacute por correo electroacutenico al titular de una cuenta de Gmail Ademaacutes el dispositivo archivaraacute las fotos por fecha y hora dando la posibilidad de comprobar cualquier actividad sospechosa o simplemente para mantener un registro de todas las personas que tocan el timbre Es faacutecil ver que este ldquointeli-genterdquo timbre que utiliza un ODROID-C2 como piedra an-gular es una poderosa herramienta de seguridad y vigilancia el cual seraacute muy uacutetil para cualquier vivienda

Requisitos de hardwarebull ODROID-C2 (httpbitly1oTJBya)bull Webcam ODROID (httpbitly2iBHKPD)bull Adaptador Wi-fi (httpbitly1M4LdiC)bull 1x mini placa de pruebasbull 1x Resistencia 1 KΩbull 1x Resistencia 10 KΩbull 1x Pulsadorbull ~8x cables dumpon (el kit Tinkering C httpbit

ly1YNPN6kes una buena opcioacuten para este y futuros proyectos)

Requisitos de Softwarebull Ubuntu 1604 v20 de Hardkernel (httpbit

ly2cBibbk)bull Python 27 or 33 (preinstalado en Ubuntu)bull Libreriacutea WiringPi para controlar los pines GPIO del

ODROID-C2 Puedes aprender a instalarla con la guiacutea que hay disponible en httpbitly2ba6h8o

Montando el dispositivo IoT Para cablear las conexiones usamos los cables macho a hem-

bra y macho a macho Dupont El extremo hembra del cable Dupont macho a hembra se conecta al cabezal macho del ODROID-C2 y el otro extremo a los orificios de la placa de pruebas Ve consultando el esquema de distribucioacuten de los pines

de Hardkernel a medida que vayas creando las conexiones Este esquema lo puedes encontrar en httpbitly2aXAlmt El pin fiacutesico 1 es VCC y proporciona 33V a nuestro circuito co-nectamos el pin en la primera liacutenea vertical de nuestra placa de pruebas cerca del borde Puesto que vamos a utilizar el pin 6 como puesta a tierra comuacuten eacuteste lo conectaremos a la segunda liacutenea vertical de nuestra placa de pruebas El resto del circuito es muy simple puedes seguir el esquema de la Figura 1

La Webcam ODROID la tienes que conectar al ODROID-C2 a traveacutes de uno de los puertos USB disponibles en la placa El timbre se controla con el pin 15 tal y como puedes ver en la figura Ahora que tenemos el hardware listo iexclVamos a sumergirnos en el coacutedigo y hacer que el timbre suene ldquointeli-gentementerdquo

SoftwareLa parte central del coacutedigo ha sido extraiacuteda de un proyecto

Github disponible en httpbitly2jEXRbR No obstante este coacutedigo de ejemplo ha sido modificado en gran medida

TIMBRE IOTRECIBE un AvISO POR CORREO ELECTROnICO DE LA PERSOnA quE LLAMA A Tu PuERTApor Miltiadis Melissas (miltos)

TIMBRE

figura 1 - esquema del timbre

ODROID MAGAZINE 6

para conseguir que funcione correcta-mente en el ODROID-C2 Lo maacutes importante de todo es que el re-mapeo desde RPiGPIO a la libreriacutea WiringPi2 ya estaacute terminado puesto que Wiring-Pi2 es compatible con el ODROID-C2 Consulta la excelente guiacutea GPIO pro-porcionada por Hardkernel en httpbitly2jEUjWX Todo el coacutedigo esta descrito en los siguientes apartados de-limitado entre lsquoltgtrsquo con su correspon-diente descripcioacuten debajo

El coacutedigo baacutesicode odroidbellpy

ltimport wiringpi2 as odroidgt

Empezaremos importando la libreriacutea wiringpi2 Las instrucciones para in-stalar esta libreriacutea y poder controlar los pines GPIO del ODROID-C2 la puedes encontrar en httpbitly2ba6h8o

ltimport timegt

Importamos el moacutedulo time

ltimport osgt

Importamos el moacutedulo os

ltimport globgt

Importamos el moacutedulo glob

ltimport sysgt

TIMBRE

figura 2 - el sistema completo c2

Importamos el moacutedulo sys

ltodroidwiringPiSetup()gt

Hemos configurado el moacutedulo wi-ringPi2 conforme a la tabla que nos proporciona Hardkernel en httpbitly2aXAlmt

ltButton = 3gt

Este es en realidad el pin fiacutesico 15 seguacuten la tabla de httpbitly2aXAlmt

ltodroidpinMode(Button0)gt

Fijamos el pulsador como entrada

ltodroid

pullUpDnControl(Button1)gt

Activamos la resistencia de parada y arrastre En este caso parado tal y como lo indica el argumento 1

loop

Estamos entrando en un bucle ya que los dispositivos IoT siempre estaacuten en modo de espera

ltprint(ldquoProgram Runningrdquo)gt

La uacutenica finalidad de esto es la moni-torizacioacuten

oses

while Trueloops forever till

keyboard interrupt (ctr + C)gt

ltif odroiddigitalRead(Button)

== False when button is un-

pressedgt

ltsysstderrwrite(ldquordquo)gt

Si no se presiona el timbre imprimi-mos puntos en la pantalla usando la li-breriacutea sys

lttimesleep(1)gt

Se comprueba si se ha tocado el pul-sadortimbre cada segundo

ltelsegt

ltprint(ldquoButton Pressedrdquo)gt

Se ha presionado el pulsadortimbre

------| photo amp Bell

|------

Get FileName

ltnow = timestrftime(ldquoDatem-

d-yTimeH-M-Srdquo)gt

Declaramos la variable now con la fe-cha y hora que usaremos en la foto

Make command to run odroidC2

sh

ltcommand = ldquobash odroidC2sh

ldquo + str(now)gt

Invocamos el script shell odroidC2sh (ver a continuacioacuten)

-- odroidC2sh is an Shell

script that

-- is responsible for tak-

ing the photo and

-- making the Doorbell

Noise

--- We insert the ldquoNowrdquo ar-

gument so the python

--- script knows what the

filename of the

--- picture will be so it

can pass it on into the

ODROID MAGAZINE 7

ltmpv ringtonemp3gt

Finalmente haremos sonar el timbre usando un programa llamado mpv que ya estaacute incluido en Ubuntu 1604 v20 de Hardkernel (httpbitly2cBibbk) En otras palabras usamos el Mplayer para reproducir este archivo

Configurar el coacutedigo de Gmail

La mayoriacutea de la gente tiene una cuenta de Gmail Si no la tienes es muy faacutecil crearte una y lo maacutes importante de todo es gratis En realidad para que este script de Gmail funcione correctamente necesitamos dos cuentas de correo elec-troacutenico el correo electroacutenico del remi-tente y la cuenta de correo electroacutenico del destinatario y siempre es asiacute Por supuesto puede enviar un correo elec-troacutenico desde y hacia la misma cuenta pero es maacutes elegante crear una segunda cuenta de correo electroacutenico con el fin de estar al tanto de las fotos con el registro de la fecha y hora por separado Tambieacuten recomiendo que la cuenta de correo elec-troacutenico del destinatario sea la que utilices en tu dispositivo moacutevil para que el dis-positivo te avise cada vez que alguien lla-me a tu puerta No olvides permitir que ldquo las aplicaciones menos segurasrdquo tengan acceso a tu cuenta de Gmail (httpbitly124TgWN)

Vamos a examinar el script python llamado IoTOdroidpy

ltfrom emailmimetext import MIM-

ETextgt

ltfrom emailmimemultipart import

MIMEMultipartgt

Usamos esos dos moacutedulos porque necesitamos enviar un correo electroacutenico limpio con un remitente un receptor y un asunto

ltfrom emailmimeapplication im-

port MIMEApplicationgt

Tambieacuten importamos el moacutedulo re-

Script shell OdroidC2sh

El script OdroidC2sh es respon-sable de tomar la foto y hacer sonar el timbre La funcioacuten del argumento lsquoNowrsquo es pasar el nombre del archivo de la foto al script de Gmail En otras palabras es el conector entre nuestro coacutedigo baacutesico odroidbellpy y el script Odroid-IoTNo-tifierpy El script OdroidC2sh es muy simple

ltcd photosgt

Cambiamos desde directorio actual al directorio ltphotosgt

ltecho ldquoTaking the Photordquogt

ltnow=$1gt

ldquoNowrdquo es la fecha y hora de registro del nombre del archivo

ltechogt

ltfswebcam -d devvideo0 $now

jpggt

Este es el comando baacutesico para tomar la foto Utilizamos el comando fsweb-cam Si la aplicacioacuten fswebcam no estaacute instalada en tu sistema puedes instalarla con el siguiente comando

$ sudo apt-get install fswebcam

La sintaxis del comando es obvia toma una foto y usa la fecha y hora de registro como nombre de archivo Cada vez que se pulse el pulsador OdroidC2sh es activado por odroidbellpy El paraacute-metro -d determina el recurso a utilizar en nuestro caso devvideo0

ltecho ldquoPic Takenrdquogt

ltechordquordquogt

ltecho ldquoRinging Bellrdquogt

ltecho ldquordquogt

ltcd gt

Cambia de nuevo al directorio padre

--- email script (so it

knows what file to email

run command

ltossystem(command)gt

A continuacioacuten invocamos el co-mando system para ejecutar el script de correo electroacutenico

diagnostics

ltprint(ldquoFilenamerdquo now)gt

Imprimimos el ldquofilenamerdquo de la foto con la fecha y hora actuales

----| Email |----

ltprint(ldquoEmailrdquo)emailgt

ltemailcommand = lsquosudo python

IoTOdroidpy ldquoThis person is at

your doorrdquorsquo + lsquo ldquophotosrsquo + now +

lsquojpgrdquorsquogt

Enviamos la foto a la cuenta de Gmail del titular con la fecha y hora y el asunto ldquoThis person is at your doorrdquo

ltossystem(emailcommand) run-

ning the Email script withgt

-- the subject as ldquoSomeone

is ringing the doorbellrdquo and the

filename

-- We made before at the

-Photo amp Bell- section

Y finalmente lo enviamos

-- End Diagnostic Info

print(ldquoDone Processrdquo)

Todo estaacute hecho asiacute que el script fi-naliza su trabajo

-space out for next ldquoPress of

Buttonrdquo

ltprint(ldquordquo)gt

ltprint(ldquordquo)gt

Hacemos hueco para el siguiente ci-clo (proacutexima llamada al timbre)

TIMBRE

ODROID MAGAZINE 8

figura 3 - Alerta de correo electroacutenico de que alguien estaacute en la puerta

ltserverstarttls()gt

Configuramos y entramos en modo TLS TLS significa Transport Layer Se-curity (Seguridad de la capa de trans-porte) de modo que cualquier comando SMTP que siga este modo seraacute cifrado

ltserverlogin(lsquoltFrom

EmailgtrsquorsquoltFrom passwordgtrsquo)gt

Es hora de entrar en tu cuenta de Gmail de modo que necesitamos las credenciales correctas

ltserversendmail(msg[lsquoFromrsquo]

emaillist msgas_string())gt

Usando el anterior comando final-mente enviamos el correo electroacutenico Procura evitar el spoofing e introduce aquiacute tu direccioacuten de correo electroacutenico real El paraacutemetro emaillist es el que

hemos definido antes y el uacuteltimo paraacute-metro (msaas_string ()) el mensaje en forma de cadena con el archivo adjunto que es en este caso la foto El resultado lo puedes apreciar en la Figura 3

Testeando y ejecu-tando el coacutedigo

Desde el terminal (CTRL-T) eje-cutamos odroidbellpy con privilegios sudo

$ sudo python odroidbellpy

En este momento el dispositivo IoT se pone en modo de espera y apa-

ltmsg[lsquoReply-torsquo] = lsquoxyzgmail

comrsquogt

Correo electroacutenico del destinatario

ltmsgpreamble = lsquoMultipart

massagenrsquogt

El atributo preamble contiene el tex-to principal extra-blindado de los docu-mentos MIME por eso lo incluimos aquiacute

ltpart = MIMEText(ldquoHello The

doorbell is ringing A photo of

the person ringing the doorbell

has been attachedrdquo)gt

El cuerpo del mensaje

ltmsgattach(part)gt

ltpart =

MIMEApplication(open(str(sys

argv[2])rdquorbrdquo)read())gt

ltpartadd_header(lsquoContent-

Dispositionrsquo lsquoattachmentrsquo

filename=str(sysargv[2]))gt

Adjuntamos la foto al mensaje

ltserver = smtplibSMTP(ldquosmtp

gmailcom587rdquo)gt

Especificamos el servidor smtp que queremos usar y el puerto que utiliza el servidor de Gmail con el puerto 587 Tambieacuten puede usar el puerto 465 aunque no es mala idea comprobar con Google el puerto correcto por si acaso ha cambiado

ltserverehlo()gt

Especificamos el servidor smtp que queremos usar y el puerto que utiliza el servidor de Gmail con el puerto 587 Tambieacuten puede usar el puerto 465 aunque no es mala idea comprobar con Google el puerto correcto por si acaso ha cambiado

sponsable del archivo adjunto MIME MIME representa las Extensiones Mul-tiuso para el Correo en Internet Es una forma de identificar los archivos en In-ternet seguacuten su naturaleza y formato

ltimport smtplibgt

ltfrom smtplib import SMTPgt

Esta es la baacutesica y nativa libreriacutea en Python para enviar correos electroacutenicos de modo que no hay necesidad de insta-lar libreriacuteas externas smtplib Desde esta libreriacutea importamos la funcioacuten SMTP

ltimport sysgt

Importamos el moacutedulo de funcio-nes y paraacutemetros especiacuteficas del sistema puesto que necesitaremos el script ltargvgt de este moacutedulo (ver a continuacioacuten)

ltrecipients = [lsquoltYourEmailgtrsquo]gt

Tu direccioacuten de correo electroacutenico ya que tuacute eres el destinatario de las fotos

ltemaillist = [elemstrip()

split(lsquorsquo) for elem in recipi-

ents]gt

Hacemos una lista de correo elec-troacutenico en la que separaremos y quita-remos los caracteres pertinentes de cada elemento de la lista de destinatarios

ltmsg = MIMEMultipart()gt

Definimos el variable message (msg) como una Extensioacuten Multiuso para el Correo en Internet llamando a la fun-cioacuten MIMEMultipart

ltmsg[lsquoSubjectrsquo] = str(sys

argv[1])gt

El asunto del nuestro mensaje

ltmsg[lsquoFromrsquo] = lsquoltFrom Emailgtrsquogt

Tu direccioacuten de correo electroacutenico

TIMBRE

ODROID MAGAZINE 9

import wiringpi2 as odroid

import time

import os

import glob

import sys

odroidwiringPiSetup()

Button = 3

odroidpinMode(Button0)

odroidpullUpDnControl(Button1)

loop

print(ldquoProgram Runningrdquo)

while Trueloops forever till

keyboard interupt (ctr + C)

if odroiddigitalRead(Button)

== False when button not

pressed

sysstderrwrite(ldquordquo)

timesleep(1)

else

print(ldquoButton Pressedrdquo)

------| photo amp Bell

|------

Get FileName

now = timestrftime(ldquoDatem-

d-yTimeH-M-Srdquo)

Make command to run

odroidC2sh

command = ldquobash odroidC2sh ldquo

+ str(now)

-- odroidC2sh is an Shell

script that

-- is responsible for tak-

ing the photo and

-- making the Doorbell

Noise

--- We insert the ldquoNowrdquo ar-

gument so the python

--- script knows what the

file name of the

--- picture will be so it

can pass it on into the

--- email script (so it

knows what file to email

figura 4 ndash el script python del timbre en ejecucioacuten

run command

ossystem(command)

diagnostics

print(ldquoFilenamerdquo now)

----| Email |----

print(ldquoEmailrdquo)email

emailcommand = lsquosudo python

IoTOdroidpy ldquoSomeone is ringing

the doorbellrdquorsquo + lsquo ldquophotosrsquo +

now + lsquojpgrdquorsquo

ossystem(emailcommand) run-

ning the Email script with

-- the subject as ldquoSomeone

is ringing the doorebellrdquo and the

filename

-- We made before at the

-Photo amp Bell- section

-- End Diagnostic Info

print(ldquoDone Processrdquo)

-space out for next ldquoPress

of Buttonrdquo

print(ldquordquo)

print(ldquordquo)

OdroidC2sh

binsh

cd photos

echo ldquoTaking the Photordquo

now=$1 Now is the filename time

stamp

take pic

fswebcam -d devvideo0 $nowjpg

echo ldquoPic Takenrdquo

echordquordquo

ring Bell

echo ldquoRinging Bellrdquo

echo ldquordquo

echo ldquordquo

cd

mpv ringtonemp3

IoTOdroidpy

from emailmimetext import MIM-

EText

from emailmimeapplication im-

port MIMEApplication

rece en pantalla el mensaje ldquoProgram is runningrdquo Al mismo tiempo aparecen puntos ldquordquo en la pantalla uno a uno indicando al usuario que el dispositivo estaacute funcionando con normalidad Cu-ando alguien pulsa el botoacuten (timbre) el script OdroidC2sh se ejecuta con una doble finalidad Primero toma una in-

stantaacutenea de la persona que hace sonar el timbre En segundo lugar enviacutea el correo electroacutenico a traveacutes de IoTOdroidpy a la cuenta de Gmail del propietario con la fecha y hora de registro de la foto que se adjunta Despueacutes vuelve al modo de espera y el timbre IoT suena

Notas finalesPor supuesto este proyecto se podriacutea

mejorar de muchas formas Por ejemplo se podriacutea antildeadir un LED en el timbre IOT que indicara su correcto funciona-miento Un dispositivo maacutes complejo similar a eacuteste podriacutea usarse como timbre comercial con la ayuda de un moacutedulo placa releacute Tampoco seriacutea complicado incluir la posibilidad de que grabase una pequentildea grabacioacuten de viacutedeo junto con las fotos haciendo que el timbre ldquointeli-genterdquo sea auacuten maacutes inteligente Ademaacutes como dice el viejo refraacuten ldquoiexclla perfeccioacuten es el eterno enemigo de lo funcionalrdquo

Coacutedigo deltimbre IoT

Aquiacute tienes una copia de todo el coacute-digo Al final de este artiacuteculo tienes un enlace a la paacutegina github que tambieacuten contiene el coacutedigo

Odroidbellpy

TIMBRE

ODROID MAGAZINE 10

from emailmimemultipart import

MIMEMultipart

from smtplib import SMTP

import smtplib

import sys

recipients = [lsquoabcgmailcomrsquo]

emaillist = [elemstrip()

split(lsquorsquo) for elem in recipi-

ents]

msg = MIMEMultipart()

msg[lsquoSubjectrsquo] = str(sysargv[1])

msg[lsquoFromrsquo] = lsquoxyzgmailcomrsquo

msg[lsquoReply-torsquo] = lsquoabcgmailcomrsquo

msgpreamble = lsquoMultipart

massagenrsquo

part = MIMEText(ldquoHello There is

someone ringing your doorbell A

picture of this person has been

atachedrdquo)

msgattach(part)

part =

MIMEApplication(open(str(sys

argv[2])rdquorbrdquo)read())

partadd_header(lsquoContent-

Dispositionrsquo lsquoattachmentrsquo

filename=str(sysargv[2]))

msgattach(part)

server = smtplibSMTP(ldquosmtp

gmailcom587rdquo)

serverehlo()

serverstarttls()

serverlogin(lsquoxyzgmail

comrsquorsquoyourpassword herersquo)

serversendmail(msg[lsquoFromrsquo]

emaillist msgas_string())

El coacutedigo del proyecto estaacute disponible en httpbitly2jMAdMY usando el siguiente comando

$ git clone

httpsgithubcommiltiadisme-

lissas

IoTOdroidC2Doorbellgit

TIMBRE

A finales de 2016 los usuarios de Cyanogenmod se horrorizaron cuando Cyanogen anuncioacute la

cancelacioacuten de sus servicios dejando a todos los usuarios que dependiacutean de Cyanogenmod sin soporte Sin em-bargo en poco tiempo llegariacutea una so-lucioacuten en forma de LineageOS Si eres un usuario del ODROID-XU3 XU4 es el momento perfecto para colaborar con la versioacuten de LineageOS en los foros ODROID

Caracteriacutesticas- Android 711 Nougat lineageoS 141- Kernel 3109- openGl eS 112030 (aceleracioacuten por GpU)- opencl 11 ep (aceleracioacuten por GpU)- funcioacuten multiusuario habilitada (hasta 8 usuarios)- ethernet integrado y soporte para ether-net Gigabit USb 30 - Soporte para rtl8188cUS rtl8191SU y USb Wireless ralinkt- Soporte bluetooth USb (ble A2dp Sink)- Soporte para dongle GpS USb- Anclaje a red USb - punto de acceso Wi-fi portaacutetil- Soporte DAc USb nativo para Android

LInEAGEOS-141 ODROID-Xu3Xu4OLvIDATE DE CyAnOGEn EL fuTuRO ESTA AquIpor voodik editado por bruno Doiche

LINEAGEOS

- Soporte para Webcam USb UVc- Soporte hDMi-cec- Selinux

Problemas conocidosEn este momento soacutelo admite moacutedu-

los Bluetooth de bajo consumo v40 (BLE) Consulta el Moacutedulo Bluetooth 2

Coacutemo instalarloEn primer lugar necesitas preparar

tu emmcsd con imaacutegenes especiales de auto-instalacioacuten

La puedes encontrar aquiacutehttpophmdrjrnetvoodik5422

ODROID-XU3AndroidCM-141-ATV

Alpha-01_110217

Graba la imagen en tu eMMCsd a traveacutes de Win32DiskImager y arranca el dispositivo Tendraacute que esperar paci-entemente durante el primer arranque ya que el proceso de actualizacioacuten puede llegar a tardar hasta 20 minutos

Coacutedigo fuente Kernel

$ git clone httpsgithubcom

voodikandroid_kernel_hardkernel

_odroidxu3 -b cm-140_5422

ODROID MAGAZINE 11

SNES 3DO y Sega Genesis El juego teniacutea diferentes escenarios para jugar la selva la nieve y el desierto

Open Fodder ofreciacutea 23 misiones que se dividiacutean en varias fases En total suponiacutea superar 72 niveles para llevar

Este mes me gustariacutea hablar de un juego llamado Open Fodder se trata de un remake del claacutesico

juego de Amiga Cannon Fodder desar-rollado por Sensible Software en 1993 Utiliza los datos del juego original Can-non Fodder para conseguir una experi-encia muy similar al juego original en tu ODROID

Muchos de los populares juegos de Linux de hoy en diacutea como Stratagus y Freeciv son en realidad remakes de claacutesicos juegos de DOS de mediados y finales de los 90 y Open Fodder no es diferente El remake de Cannon Fodder es un juego disparos accioacuten y estrategia donde controlas a un pequentildeo grupo de soldados que avanza a traveacutes de varias docenas de niveles para matar a los sol-dados enemigos destruir tanques echar abajo edificios y derrotar a tus enemigos El juego fue lanzado por primera vez para Amiga en 1993 y fue exportado por sus desarrolladores a MS-DOS Atari Jaguar

a tu escuadroacuten a la victoria Cuando se lanzoacute el juego fue muy elogiado por varias revistas de juego Amiga con pun-tuaciones que llevaban al 95 por ciento y fue considerado como uno de los mejo-res juegos lanzados en 1993 En general siguioacute siendo uno de los mejores juegos jamaacutes creado para la plataforma Amiga durante sus 11 antildeos de vida

Desde un punto de vista maacutes poliacutetico el juego lleva impliacutecito un intenso men-saje sobre la guerra en siacute misma puesto que juegas y llevar a tus soldados a una muerte inevitable Cada misioacuten se inicia

JuEGOS LInuXOPEn fODDERpor tobias Schaaf (meveric)

JUEGOS LINUX

figura 1 - el logotipo de cannon fodder en el cual estaacute basado open fodder

figuras 2 3 y 4 - los niveles de selva desierto y nieve en open fodder

figuras 5 y 6 - A medida que avanzas en el juego tu larga liacutenea de reclutas se con-vierte gradualmente en cruces alineadas como en un cementerio

ODROID MAGAZINE 12

nas segundas partes ademaacutes de algunas misiones de bonificacioacuten Cannon Fod-der 2 salioacute un antildeo maacutes tarde pero fue maacutes bien un ldquodisco de datosrdquo con ex-pansiones que una secuela ya que en su mayor parte presentaba maacutes misiones en lugar de nuevas caracteriacutesticas Tambieacuten estaba el X-Mas de Amiga que ofreciacutea algunas misiones diferentes basadas en el juego Cannon Fodder

Ejecutando Open Fodder

Open Fodder es un remake del motor del juego Cannon Fodder que lleva el juego a los sistemas operativos modernos Al igual que otras migraciones del motor del juego (como OpenTTD) puede uti-lizar los datos del juego original con esta versioacuten del motor para ejecutar el juego en tus dispositivos modernos Esta mi-gracioacuten tambieacuten cuenta con una versioacuten exportada para los dispositivos ARM lo que significa que podemos ejecutarlo igualmente en nuestros ODROIDs

Todaviacutea estaacute en desarrollo pero ya funciona bastante bien Como de cos-tumbre se puede instalar desde mi repo-sitorio y puesto que soacutelo requiere SDL2 y SDL2 Mixer como dependencias prin-cipales deberiacutea funcionar en Debian y

con un nuevo grupo de reclutas que se alinean esperando a unirse al combate Los soldados desechables (de ahiacute el nom-bre de cannon fodder Carne de Cantildeon) poco a poco se convierten en cruces alin-eadas dando forma a un cementerio mil-itar a medida que vas completando cada misioacuten formaacutendose maacutes y maacutes filas con-forme vas enterrando a tus predecesores Sin embargo los desarrolladores le di-eron un cierto toque de humor ya que los primeros soldados de tu escuadroacuten (y por tanto los casi seguro que moriraacuten) llevan de hecho los nombres de las seis personas que componiacutean el equipo de desarrollo del juego

Si nos fijamos bien el juego incor-poraba algunos detalles bastante intere-santes Por un lado tiene su propia can-cioacuten ldquo War never been so much funrdquo que suena durante la intro del juego iexclUno de los desarrolladores del juego Jon Hare compuso la muacutesica junto con el compositor Richard Joseph Si teniacuteas el Amiga CD32 tambieacuten recordaraacutes una pista adicional que incluiacutea un video en el cual los desarrolladores se disparaban entre siacute con armas de juguete (httpbitly2l67bFy) iexclSin duda se divirtieron bastante desarrollando este juego

Cannon Fodder tambieacuten tuvo algu-

JUEGOS LINUX

Ubuntu por igual las puedes encontrar en mi lista principal de paquetes para armhf y jessiemain para arm64

Se puede instalar con este comando en un dispositivo ODROID que ejecute Debian suponiendo que ya tengas con-figurados mis repositorios o esteacutes usando una de mis imaacutegenes de Debian (httpbitly13v98ly)

$ apt-get install

openfodder-odroid

He alterado ligeramente el juego para que siempre se ejecute en modo pantalla completa aunque si lo deseas puedes cambiar al modo de ventana simple-mente pulsando F11 cuando tenga el juego activado

Convirtiendo los datos del juego

Por siacute sola mi versioacuten de Open Fod-der viene con el especial Amiga X-Mas ademaacutes de varios niveles demo dis-ponibles de forma gratuita Si quieres jugar el juego real tendraacutes que importar los datos desde un CD Cannon Fodder

Si estaacute usando un ODROID para ju-gar al Open Fodder puedes localizar las carpetas de los datos del juego en la car-peta $HOMEopenfodderData Por ejemplo homeodroidopenfodderDataDos_CD es una de esas carpetas de datos del juego Existen varias carpe-tas de datos del juego que puedes usar dependiendo de la versioacuten que tengas del juego Cannon Fodder

Dos_CDAunque el juego es compatible con

muchas y diferentes fuentes del juego actualmente soacutelo Dos_CD parece ser una versioacuten de Open Fodder ldquototal-mente compatiblerdquo con muy pocos er-rores y problemas El resto de fuentes del juego pueden tener problemas

Aquiacute tienes un consejo raacutepido Aunque se llama Dos_CD cogeraacute cu-alquier versioacuten de DOS de Cannon Fodder que puedas encontrar Si tienes

figura 7 - Sensible Software - los desarrolladores de cannon fodder

ODROID MAGAZINE 13

WHDLoad en un Amiga (o WinUAE) para extraer los archivos del juego y co-piarlos en la carpeta DataAmigardquo No lo he probado pero si tienes la ldquoCannon Fodder Collectionrdquo de Amiga CD32 no oficial puedes copiar el contenido de FodderNew en esta carpeta lo que tendraacute como resultado niveles completamente diferentes Puede considerarse como una versioacuten maacutes compleja del juego aunque a la vez maacutes divertida Por lo tanto bien poner los archivos originales de Amiga aquiacute o bien los archivos FodderNew de la ldquoCannon Fodder Collectionrdquo

Dos2_CDDos2_CD es en realidad la carpeta

de la versioacuten DOS de Cannon Fodder 2 pero tambieacuten funciona con la versioacuten GoG Desafortunadamente tiene algu-nos problemas el maacutes grave es que el juego no tiene ninguacuten tipo de sonido o muacutesica Aparte de esto todo parece fun-cionar correctamente pero desconozco coacutemo reaccionaraacute en niveles posteriores La carpeta Data tambieacuten incluye las car-petas WAV Plus AmigaFormat_XMAS y Custom En WAV se almacenan los efectos de sonido por defecto para to-dos los juegos (Cannon Fodder) Plus es una demo del nuacutemero 31 la revista Amiga Power y AmigaFormat_XMAS es el Amiga Format Christmas Special Tambieacuten hay una carpeta Custom que te permite jugar otros juegos y mapas pero necesitan la versioacuten (CD) de DOS o de lo contrario no apareceraacuten

Notas finalesOpen Fodder es un buen proyecto

que te permite ejecutar este increiacuteble juego en sistemas modernos Realmente me gusta y estoy deseando ver coacutemo pro-gresa Espero que las versiones de Amiga y Cannon Fodder 2 sean pronto total-mente compatibles Tal vez incluso poda-mos ver mejoras graacuteficas con el tiempo Me gustariacutea ver graacuteficos maacutes modernos ya que el juego es bastante antiguo y los graacuteficos no son los maacutes idoneos para res-oluciones 1080p

la versioacuten de disco de Cannon Fodder simplemente copia el CF_ENGDAT en la carpeta Dos_CD La versioacuten original de CD DOS teniacutea un archivo llamado cf_cddat Cambiar el nombre a CF_ENGDAT y copiarlo a la carpeta Dos_CD Si tienes la versioacuten GoG del juego soacutelo tiene que copiar CF_ENG DAT a la carpeta Dos_CD iexclEsta es una forma raacutepida y legal de conseguir el juego si estaacutes interesado

Aseguacuterate de que el nombre del ar-chivo este en mayuacutescula ya que el juego tiene en cuenta esta cuestioacuten Intenta que coincida todo para asegurarte de que las cosas funcionen sin problemas

Amiga_CDAmiga CD32 tambieacuten contaba con

una versioacuten de este juego Esta es la ver-sioacuten que incluye el video al que hemos hecho referencia anteriormente En el CD de Amiga CD32 hay una carpeta llamada Fodder El contenido de esta carpeta debe copiarse a la carpeta Ami-ga_CD Puedes extraer la segunda pista del CD y almacenarla como Track2flv en la misma carpeta con la finalidad de tener el archivo de video

Me topeacute con algunos problemas cu-ando haciacutea esto y descubriacute nuevamente que el juego buscaba muchos archivos en mayuacutesculas asiacute que utiliceacute el siguiente comando para copiar todos los archivos y tenerlos tambieacuten en mayuacutesculas en la carpeta Amiga_CD$ for files in `ls` do cp $files

`echo $files | tr lsquo[lower]rsquo

lsquo[upper]rsquo` done

Asiacute funcionaba bien pero teniacutea algu-nos fallos Por ejemplo la animacioacuten del helicoacuteptero al inicio de cada misioacuten no apareciacutea y el cursor cuando se guarda un archivo se distorsionaba Aparte de esto no he visto problemas importantes en la versioacuten Amiga CD32

AmigaLa Informacioacuten de desarrollador de

Open Fodder dice ldquoUsar el instalador

JUEGOS LINUXJUEGOS ANDROID

CAuSALITy un JuEGO DE ROMPE-CABEzAS COn PARA-DOJAS DE vIAJES En EL TIEMPO por bruno Doiche

Configura tuacute mismo los entornos extrantildeos e insoacutelitos y

ayuda a un grupo de astronautas varados a encon-trar una ruta hacia un lugar seguro Cada nivel al que te enfrentas representa un nuevo reto donde necesitas llevar a tu astronauta a una salida que coincida con su color Los maacutergenes de tiempo son cortos aunque es muy divertido Aunque formas parte de tan soacutelo una fraccioacuten de tiempo de la vida de tu personaje iexclten cuidado pasaraacutes un montoacuten de tiempo enganchado a este juego

httpsplaygooglecomstoreappsdetailsid=comlojugamesandroidCausality

el entorno 3D isomeacutetrico es magniacute-fico a menudo no superaba el nivel porque los graacuteficos me cautivaban

ODROID MAGAZINE 14

tePi necesitan estar conectados a otros distintos en el ODROID-C2 porque parece haber un conflicto La interfaz UART ocupa estos pines y el estado por defecto del ODROID (1=high en Pin 8) no es lo que espera la RemotePi (GPIO debe entrar en el valor por defecto 0=low para cortar la energiacutea tras el apagado) Pero puesto que necesitas utilizar cables de todos modos para conectar la Remot-ePi esto no supondraacute ninguacuten problema ya que simplemente puedes reconectar los cables a otros pines GPIO

Como evitamos el circuito de ali-mentacioacuten del ODROID encendieacutendo-lo a traveacutes de GPIO tambieacuten pasamos por alto la proteccioacuten ante subidas de tensioacuten 2526A del dispositivo pero no te preocupes La RemotePi tambieacuten tiene proteccioacuten ante subidas de tensioacuten que deberiacutea coincidir con el mismo val-or que en el caso de la RemotePi board para la Raspberry Pi 3 Sin embargo la RemotePi para la Raspberry Pi 2 es de soacutelo 2A Esto estaacute bien porque el valor es menor a los 26A del ODROID de modo el polyfuse de la RemotePi se ac-tivariacutea antes si conectas demasiados dis-

La RemotePi board (httpbitly2l8JcWU) que convierte cu-alquier mando a distancia en un

interruptor de encendido para tu orde-nador de placa reducida puede ser com-patible con el ODROIDC2 si sigues esta guiacutea Si utilizas tu dispositivo como centro multimedia esta placa te propor-cionara un receptor de infrarrojos y un circuito de alimentacioacuten asiacute como un botoacuten de encendido Puedes encender y apagar tu ODROID completamente a traveacutes de una sentildeal infrarrojos (IR) y simplemente presionar el botoacuten de en-cendido para apagarlo y reiniciarlo con seguridad La placa RemotePi es respon-sable del modo espera que absorbe una miacutenima energiacutea mientras el ODROID estaacute completamente apagado Por uacutel-timo la placa alimenta tu dispositivo a traveacutes de GPIO lo cual requiere un cable microUSB para conectarlo a la Re-motePi en lugar de utilizar un adaptador de corriente normal

Configuracioacuten de hardware

Puesto que la RemotePi estaba pen-sada originalmente para la Raspberry Pi 2 necesitaraacutes utilizar cables adiciona-les en lugar de colocarla justamente en cima del C2 para evitar interferir con el disipador de calor asiacute que debes re-cablear algunos pines Es necesario utili-zar cables con el diaacutemetro adecuado para los pines de 5V y puesta a tierra ya que la corriente podriacutea estar entre los 2A y 26A dependiendo de cuaacutentos dispositi-vos USB conectes a tu dispositivo

Los pines GPIO 8 y 10 de la Remo-

positivos no alimentados de forma exter-na que no es una buena idea en un SBC al fin al cabo No obstante debido a esta diferencia de amperaje una RemotePi para la Raspberry Pi 3 seriacutea la mejor op-cioacuten para este proyecto

Como resultado del nuevo cableado el firmware de RemotePi ya no se puede configurar de forma normal aunque nunca he usado esta funcioacuten Si fuera necesario configurar o actualizar el firm-ware necesitaraacutes volver a conectar los pines 8 y 10 de la RemotePi a los pines 8 y 10 del ODROID durante la actu-alizacioacuten del firmware y luego deshacer los cambios una vez que la actualizacioacuten haya finalizado Otra posibilidad es simplemente conectar una Raspberry Pi para actualizar el firmware Esto suena a un montoacuten de problemas pero en re-alidad simplemente es extender la con-exioacuten del cabezal y cambiar una liacutenea en el script principal y dos liacuteneas en otro script opcional si haces uso de ello

Re-cableando laconexioacuten GPIO

Dado que la RemotePi estaacute disentildeada

REMOTEPI BOARD PARA EL ODROID-C2por inifity85

REMOTEPI

figura 1 - remotepi board

ODROID MAGAZINE 15

ergiacutea completamenteIrswitchsh (solo cambia el script

original de MSL Digital de GPIOpin1 = 14 a GPIOpin1 = 225)

binbash

prevent restarting XBMC at

shutdown This is only used for

OpenElec before V5

LOCKDIR=rdquovarlockrdquo

LOCKFILE=rdquoxbmcdisabledrdquo

this is the GPIO pin receiving

the shut-down signal

Raspberry Pi pin8 GPIOpin1=14

Odroid-C2 pin26 GPIOpin1=225

GPIOpin1=225

functions

add_omit_pids()

omit_pids=rdquo$omit_pids -o $1rdquo

safe_shutdown ()

for OpenElec before V5

touch ldquo$LOCKDIR$LOCKFILErdquo

for OpenElec V5 and later

systemctl stop kodi

add_omit_pids $(pidof connmand)

add_omit_pids $(pidof dbus-dae-

mon)

killall5 -15 $omit_pids

for seq in `seq 1 10` do

usleep 500000

clear gt devtty1

killall5 -18 $omit_pids || break

done

sync

umount -a gtdevnull 2gtamp1

poweroff -f

echo ldquo$GPIOpin1rdquo gt sysclass

gpioexport

echo ldquoinrdquo gt sysclassgpio

gpio$GPIOpin1direction

while true do

sleep 1

power=$(cat sysclassgpio

gpio$GPIOpin1value)

if [ $power = 0 ] then

echo ldquooutrdquo gt sysclassgpio

gpio$GPIOpin1direction

echo ldquo1rdquo gt sysclassgpio

una carcasa personalizada de modo que el receptor integrado podriacutea estar oculto y no ser uacutetil En ese caso puedes desac-tivar el IR del ODROID en favor del re-ceptor externo GPIO-IR en la RemotePi y conectar el pin 12 Tienes disponible maacutes informacioacuten sobre el cambio al receptor GPIOIR en LibreELEC en httpbitly2lpDl27

Scripts de apagado para LibreELEC

Los dos scripts tratados a continu-acioacuten pueden descargarse desde la paacutegina de soporte de MSL Digital Solutions en httpbitly2kMxyVG En esta paacutegina tambieacuten encontraras una guiacutea para utili-zar estos scripts en otros sistemas opera-tivos como Volumio y RuneAudio

El script irswitchsh se usa para el apagado seguro a traveacutes de sistema In-frarrojos Tras pulsar el correspondiente botoacuten el sistema se apagaraacute de forma se-gura luego RemotePi esperaraacute a que el GPIO225 alcance el estado 0 (low) que aparece tras el cierre exitoso del sistema Finalmente cortaraacute la energiacutea

El script shutdownsh se usa para el apagado seguro a traveacutes de la interfaz del programa o script Despueacutes de navegar hasta el botoacuten de apagado en la GUI el sistema se apagaraacute de forma segura luego RemotePi esperaraacute a que el GPIO225 alcance el estado 0 (low) que apareceraacute tras apagarse el sistema de forma adec-uada y segura Finalmente cortaraacute la en-

originalmente para una Raspberry Pi desgraciadamente no es soacutelo enchufar y usar Necesitaraacutes volver a cablear dos pines usando los cables de todos los pines tal y como se muestra en la Figura 2 Re-cablea el pin 8 de la RemotePi al pin 26 del ODROID-C2 y el pin 10 de la RemotePi al pin 7 del ODROID-C2

Si no quieres utilizar el receptor IR de la RemotePi para el mando a distan-cia de LibreELEC puedes dejar desco-nectado el pin 12 La placa continuaraacute encendieacutendose y apagaacutendose a traveacutes del comando de control remoto IR pero el control de la GUI de LibreELEC seraacute asumido por el receptor de infrarrojos integrado en el ODROID Sin embargo si has comprado una RemotePi con un receptor IR y un LED externo es posible que hayas decidido colocarla dentro de

REMOTEPI

figura 3 - la remotepi ha sido recableada y montada en una carcasa personalizada

figura 2 - re-cableado Gpio

ODROID MAGAZINE 16

Centro Multimedia por ejemplo Esos comandos de apagado se equiparaacuten a eventos internos similar a cuando nave-gas por el menuacute de apagado de Kodi Sin utilizar este segundo script el sistema se cerraraacute con seguridad pero la placa Re-motePi no recibiriacutea ninguna indicacioacuten para monitorizar el GPIO225 de modo que no cortariacutea la energiacutea tras apagarse el sistema correctamente

Usando el receptor IR de la RemotePi

Si deseas utilizar el receptor IR de la RemotePi en lugar del receptor IR ODROID integrado tendraacutes que des-activar el sistema IR integrado y activar el receptor IR GPIO Para hacer esto en Ubuntu puede consultar el artiacuteculo de la Wiki de Hardkernel en httpbitly2l8KrWg Para Libre-ELEC echa un vistazo a mi mini-guiacutea en httpbitly2lLKj2A Para preguntas comentari-os o sugerencias visita el hilo original en httpbitly2mgFGKk

gpio$GPIOpin1value

sleep 3

safe_shutdown

fi

done

Shutdownsh (solo cambia GPIOpin =15 a GPIOpin =249 y GPIOpin1 =14 a GPIOpin1 =225)

binbash

if [ ldquo$1rdquo = ldquorebootrdquo ] then

Raspberry Pi pin10 GPIOpin=15

Odroid-C2 pin7 GPIOpin=249

GPIOpin=249

Raspberry Pi pin8 GPIOpin1=14

Odroid-C2 pin26 GPIOpin1=225

GPIOpin1=225

echo ldquo$GPIOpinrdquo gt sysclass

gpioexport

execute shutdown sequence on

pin

echo ldquooutrdquo gt sysclassgpio

gpio$GPIOpindirection

echo ldquo1rdquo gt sysclassgpio

gpio$GPIOpinvalue

usleep 125000

echo ldquo0rdquo gt sysclassgpio

gpio$GPIOpinvalue

usleep 200000

echo ldquo1rdquo gt sysclassgpio

gpio$GPIOpinvalue

usleep 400000

echo ldquo0rdquo gt sysclassgpio

gpio$GPIOpinvalue

set GPIO 14 high to feedback

shutdown to RemotePi Board

because the irswitchsh has

already been terminated

echo ldquo$GPIOpin1rdquo gt sysclass

gpioexport

echo ldquooutrdquo gt sysclassgpio

gpio$GPIOpin1direction

echo ldquo1rdquo gt sysclassgpio

gpio$GPIOpin1value

usleep 4000000

fi

El script shutdownsh es uacutetil si a vec-es usas las aplicaciones remotas Android Yatse o Kore o hotkeys para apagar tu

REMOTEPI

ODROID Talk Subreddit

httpwwwredditcomrodroid

ODROID Magazine

estaacute en Reddit

ODROID MAGAZINE 17

El HiFi Shield 2 (39$ httpbitly2lHSlZJ) es un Con-vertidor Digital a Analoacutegico de Alta definicioacuten (DAC) para el ODROID-C2 y el ODROID-C1+ Se trata de

una placa de sonido especial para el ODROID-C2 y C1 + que estaacute optimizada para mejorar la calidad de reproduccioacuten del sonido Ofrece un sonido muy bien equilibrado consistente intenso amplio y muy bien dimensionado por niveles Hemos analizado la calidad de audio de la salida HiFi Shield 2 DAC con un equipo estaacutendar de la industria del sonido llamado Au-dio Precision Audio Precision es un analizador de audio de alto rendimiento optimizado para la produccioacuten de audio digital

Usando el chip DAC PCM5242 de uacuteltima generacioacuten de Texas Instrument conocido como Burr-Brown el HiFi Shield 2 soporta formatos de audio de 16 24 y 32 bits con una ra-tio THD+N miacutenima (0002) y una dinaacutemica ideal (114dB +) ademaacutes de sorprendentes tasas de muestreo de 384 kHz La interfaz dedicada SPDIF soporta una definicioacuten de hasta 192kHz24bit a traveacutes de una salida oacuteptica (Toslink)

Si hacemos uso del puerto de expansioacuten I2S en el C2C1+ no es necesario ocupar un puerto USB permitiendo al usu-ario seleccionar el sistema de reproduccioacuten de audio que desee como Volumio y Debian (DietPi) para reproducir sonido HiFi

HIFI SHIELD 2

HIfI SHIELD 2EL MEJOR SOnIDO quE PODRAS COnSEGuIR En AnDROIDeditado por rob roy (robroy)

oDroiD-c2 y hifi Shield 2 Audio pb +J

primer plano de la placa con anotaciones

Distribucioacuten de los 7 pines i2S del c2c1+

la salida de audio es estaacutendar la salida de color rojo corresponde al canal de audio iz-quierdo y la salida de color blanco correspon-de al canal de audio derecho

ODROID MAGAZINE 18

Detalles

La guiacutea de configuracioacuten de UbuntuLinux para ODROID-C2 estaacute disponible en httpbitly2brrGdG y para ODROID-C1+ en httpbitly2lI7AC7 El sistema operativo oficial Volumio 2 se puede descargar desde httpbitly2kOJNAV y la imagen DietPi basada en Debian se encuentra en httpbitly2ls45yM Puede ver los esquemas en httpbitly2mnukV4

Diagrama por bloques del hifi Shield2

Caracteriacutesticasbull El control de volumen a traveacutes de la interfaz

i2c es una gran caracteriacutestica para mantener una buena calidad del sonido con varios voluacutemenes de salida de audio

bull Los puertos de salida incluyen terminales esteacute-reo rcA chapados en oro

bull La fuente de alimentacioacuten tiene habilitado un regulador de interferencias de ruido ultra-bajo lo cual reduce el ruido de la fuente de alimentacioacuten y aumenta en gran medida el ratio sentildealruido

bull La interfaz I2S permite la descodificacioacuten di-recta de la entrada digital a la salida analoacutegica utili-zando la sincronizacioacuten del reloj maestro

bull La superficie de la PCB estaacute chapada en oro so-bre 2 onzas de cobre lo cual garantiza la continui-dad de la sentildeal y reduce la reflexioacuten y deflacioacuten de la sentildeal

bull Dispone de almohadillas soldadas a la salida de audio balanceada (sentildeal diferencial)

bull La interfaz SPDIF dedicada es nueva admite una definicioacuten de hasta 192khz24bit a traveacutes de una nueva salida oacuteptica (toslink)

bull Este HiFi shield no es compatible con Android y hardkernel no tiene planes para hacerlo compatible y asiacute poder habilitar el controlador i2S en el Kernel y el hAl de Android

El Manual de usuario del ODROID-XU4 disponible en httpbitly1U9Q8yg ha sido revisado hace poco para incluir algunos de los perifeacutericos maacutes recientes como

la Expansion Board SmartPower2 y oCam Puesto que ahora Hardkernel tambieacuten ofrece Ubuntu 1604 todos los ejemplos de coacutedigo se han actualizado para que sean compatibles con el nuevo sistema operativo Si tiene comentarios preguntas o sugerencias visita el hilo de los foros ODROID en httpbitly1RykBrT

MAnuAL Xu4ACTuALIzADOREvISADO PARA uBunTu 1604 y LOS PERIfERICOS MAS RECIEnTESeditado por rob roy (robroy)

MANUAL XU4

el manual del oDroiD-xU4 incluye informacioacuten detallada de los diferentes sistemas operativos software y perifeacutericos disponibles para el oDroiD-xU4

ODROID MAGAZINE 19

El DevOps es complicado Los grandes proyectos de soft-ware como Mesos y Kubernetes desarrollan equipos como los que se encuentran en la mayoriacutea de las empre-

sas y organizaciones tecnoloacutegicas como CoreOS con la finali-dad de ayudar a los desarrolladores a poner sus aplicaciones en funcionamiento Sin embargo iquestcuaacutel seriacutea una buena solucioacuten para un desarrollador en solitario o una pequentildea red domeacutesti-ca iquestCoacutemo podemos usar el coacutedigo a nivel de infraestructura

Uso un portaacutetil Macintosh OSX para desarrollo pero para las aplicaciones de larga duracioacuten o aplicaciones que se ejecu-tan por la noche necesito un entorno remoto siempre activo ya que mi portaacutetil estaraacute fuera de liacutenea o en el tren conmigo mientras voy y vengo del trabajo Tiene su sentido no utilizar el ordenador como un entorno para la puesta en funcionamiento de aplicaciones

El ODROID-XU4 es un ordenador ideal para un entor-no de implementacioacuten remoto ya que es econoacutemico flexible cuenta con excelentes especificaciones teacutecnicas y puede ejecutar Linux Este artiacuteculo tiene por objetivo explicar coacutemo almacenar coacutedigo de implementacioacuten en tu repositorio de proyectos asiacute como automatizar las implementaciones y ejecuciones

Arch LinuxArch Linux es una distribucioacuten de Linux gratuita de coacutedigo

abierto que fue lanzada en 2002 Estaacute centrada en la elegancia la integridad del coacutedigo el minimalismo y la simplicidad y cuenta con que el usuario haga un esfuerzo en comprender el funcionamiento del sistema Arch Linux utiliza en particular un modelo de revisioacuten continua de modo que todo lo que se necesitas para conseguir el software del sistema maacutes reciente es actualizar el sistema de forma perioacutedica

Arch Linux puede ser algo difiacutecil de asimilar ya que uti-liza herramientas diferentes a las de una distribucioacuten Debian El gestor de paquetes se activa a traveacutes de ldquopacmanrdquo en lugar de ldquoapt-getrdquo y existe un gestor complementario de paquetes muy popular llamado ldquoyaourtrdquo Muchos de los servicios o her-ramientas maacutes comunes no se instalan por defecto

Arch Linux esta hecho principalmente para procesadores x86 pero un proyecto llamado Arch Linux ARM (ALARM) tiene una distribucioacuten ARM de Arch Linux para arquitectu-ras AArch64 ARMv8 y ARMv7 Hardkernel el fabricante de ODROIDs es de hecho un patrocinador del proyecto Arch Linux ARM

HOME DATA CENTER

HOME DATA CEnTERIMPLEMEnTACIOn DEL CODIGO COn ARCHLInuXpor John Skilbeck

Configurar la redDeberaacutes asignarle a tu dispositivo una direccioacuten IP LAN

DHCP reservada y en el mejor de los casos un nombre de host que se propagaraacute a lo largo de tu red por medio del servidor DNS de tu router De esta forma en nuestro entorno de desar-rollolocal podremos utilizar un nombre de host para resolver siempre el entorno de implementacioacutenremoto

Por ejemplo en mi red reservo el 192168249 a la direc-cioacuten MAC de mi ODROID Tambieacuten configuro una entrada DNS que asigna a esa direccioacuten IP ldquoodroidrdquo Utilizar un firm-ware personalizado en el router como Tomato USB o DD-WRT lo hace extremadamente faacutecil ya que esos firmwares convierten tu router en un pequentildeo ordenador Linux con una aplicacioacuten web GUI muy pulida aunque su implementacioacuten estaacute fuera del alcance de este artiacuteculo Si operas con subredes aseguacuterate dirigir el puerto hacia el puerto externo que se asigna al puerto SSH del dispositivo odroid ya que Git se ejecuta a traveacutes de SSH

Configurar el proyectoLoacutegicamente desearaacutes estandarizar el flujo de trabajo de la

implementacioacuten Esto haraacute que el trabajo con proyectos sea

el home data center de John es una auteacutentica obra de arte

ODROID MAGAZINE 20

extremadamente faacutecil y eliminas muchos de los cambios de contexto mental que utilizas cuando trabaja en varios proyec-tos Crearemos una carpeta para alojar todos nuestros archivos relacionados con implementaciones Coloca los archivos eje-cutables en ldquodeploybinrdquo y cualquier archivo cron en ldquodeploytasksrdquo (maacutes informacioacuten sobre esta cuestioacuten maacutes adelante)

Navega hasta el directorio del proyecto en una ventana de Terminal y luego escribe los siguientes comandos

$ mkdir -p deploybin

$ mkdir -p deploytasks

$ cd deploybin ampamp touch run-job ampamp

chmod u+x run-job ampamp cd -

$ cd deploytasks ampamp touch crontab

Tambieacuten puede estandarizar doacutende colocar tu coacutedigo fuente De esta forma le seraacute maacutes faacutecil a otras personas ver coacutemo se or-ganiza tu proyecto y conocer queacute es el coacutedigo fuente y queacute no

$ mkdir src

$ cd src ampamp (place source code here ie python core

py clojure coreclj nodejs appjs)

Simplificar los puntos de entradaIniciar una aplicacioacuten puede resultar algo confuso con todos

los comandos que se pueden ejecutar en diferentes lenguajes Por ejemplo puede usar Java ldquojava -jar [my-jar] jarrdquo o python ldquopython my-apppyrdquo y tu aplicacioacuten tambieacuten puede necesitar varios argumentos Todo esto deberiacutea simplificarse y resumirse en un archivo ldquodeploybinrun-jobrdquo

binsh

set -e

CMD=rdquosrcduckrdquo

exec $CMD $

Crear el archivo cronArch Linux no viene con un cliente o demonio cron por

defecto Instaacutelalo con ldquosudo pacman -Syu cronierdquo Utilizando cron puede ejecutar comandos en intervalos de tiempo espe-cificados haciendo uso de la sintaxis especial de cron Normal-mente se almacena en el archivo crontab del usuario al que puedes acceder con ldquocrontab -erdquo Sin embargo esto es demasi-ado manual y queremos usar coacutedigo como infraestructura Cron tambieacuten tiene algunos subdirectorios muy uacutetiles en ldquoetccronrdquo como ldquoetccrondailyrdquo yrdquoetccronhourly ldquo si co-locamos los archivos aquiacute eacutestos se ejecutaraacuten en los intervalos especificados

Revisa el archivo de ldquodeploytaskscrontabrdquo que colocare-mos en ldquoetccrondrdquo que se crea automaacuteticamente con nuestro script ldquoposttreceiverdquo

variables

SHELL=binbash

PATH=binusrbinusrlocalbinusrsbinusrlo-

calsbin

MAILTO=[your-email-address]gmailcom

cmd=rdquodeploybinrun-jobrdquo

app_dir=rdquohomeskilbjodeployappduckdnsrdquo

jobs

5 skilbjo cd ldquo$app_dirrdquo $cmd gtdevnull

Aquiacute tienes el esquema general de la estructura de un simple proyecto El uacutenico ejecutable del proyecto es un uacutenico script shell ubicado en ldquosrcrdquo

$ tree

READMEmd

deploy

bin

post-receive

run-job

tasks

crontab

src

duck

4 directories 5 files

GitPrimero queremos agregar una URL remota a nuestro

proyecto en nuestro entorno local

$ git remote add odroid sshodroid~deploygit

duckdnsgit

Ten en cuenta que dependiendo de la topologiacutea de tu red es posible que tenga que modificar esta url Si no puedes asignar nombres de host la URL de git se veriacutea asiacute donde 192168249 es la direccioacuten IP LAN de tu dispositivo

$ ssh192168249~deploygitduckdnsgit

Si tienes un usuario en tu entorno ODROID distinto al que tienes en tu entorno de desarrollo la url se veriacutea asiacute donde ldquoskilbjordquo es tu nombre de usuario

$ sshskilbjoodroid~deploygitduckdnsgit

Si tu servidor remoto estaacute en una subred diferente y tienes redireccionados los puertos tu url tendriacutea este aspecto donde

HOME DATA CENTER

ODROID MAGAZINE 21

ldquo2222rdquo es tu puerto externo

$ ssh192168122222~deploygitduckdnsgit

En el directorio principal de tu entorno remoto crea una carpeta llamada ldquo~deployrdquo con dos subcarpetas ldquo~deployapprdquo y ldquo~deploygitrdquo Los subdirectorios de ldquo~deploygitrdquo seraacuten los puntos finales de nuestros desarrollos y con un hook ejecutaraacuten comandos de implementacioacuten en los subdirectorios de ldquo~ deployapprdquo

Primero navega hasta el directorio principal del entorno re-moto y a continuacioacuten escribe los siguientes comandos

$ mkdir -p ~deployapp

$ mkdir -p ~deploygit

$ mkdir -p ~deploygitduckdnsgit

$ mkdir -p ~deployappduckdns

Ahora en ldquo~ deploygitduckdnsgithooksrdquo crea un archi-vo ejecutable llamado ldquopost-receiverdquo que se activaraacute con cada accioacuten hacia el punto final

$ cd ~deployappgitduckdnsgithooks

$ touch post-receive ampamp chmod u+x post-receive

$ vim post-receive

Rellena el ejecutable con lo siguiente en el directorio ldquo~deploygitduckdnsgithooksrdquo del entorno remoto

usrbinenv bash

set -eou pipefail

user=$(whoami)

dir=rdquohome$userdeployapprdquo

app=$(basename $(pwd) | sed -e lsquosgitrsquo)

deploy_dir=rdquo$dir$apprdquo

cron_dir=rdquoetccrondrdquo

GIT_WORK_TREE=rdquo$deploy_dirrdquo git checkout -f

cd ldquo$deploy_dirrdquo

build steps here

case ldquo$userrdquo in

(skilbjo) sudo cp deploytaskscrontab ldquo$cron_

dir$apprdquo

esac

you can also do project-specific build steps in

this section like install

dependencies (ie npm install) compile source

code (ie lein uberjar)

as well as if a long-lived app run commands as

well (ie java -jar my_jarjar)

echo ldquoall donerdquo

exit 0

ImplementacioacutenAhora estamos listos para implementar ya que nuestro en-

torno local estaacute configurado para alcanzar el punto final del servidor de implementacioacuten nuestro entorno remoto estaacute con-figurado para recibir la notificacioacuten y revisar el coacutedigo fuente ejecutar cualquier paso de compilacioacuten y colocar una tarea en el directorio cron del sistema para su lanzamiento Ponto todo en praacutectica con el siguiente comando en el directorio del proyecto del entorno local

$ git push odroid

Ademaacutes para ver coacutemo se ha implementado todo esto en un proyecto de ejemplo visita httpbitly2lthYKW

Pasos finalesSe puede antildeadir al flujo anterior algunas caracteriacutesticas

como son muacuteltiples entornos ya sea con muacuteltiples ODROIDs o con un solo ODROID trataacutendolo como un servidor de ser-vicio Esto se puede hacer con subdirectorios bajo ldquo~deployrdquo como ldquo~deploystagingappmy_apprdquo o ldquo~ deployproduc-tionappmy_apprdquo

Ademaacutes podriacuteas antildeadir un servicio de integracioacuten conti-nua como CircleCI que ejecutariacutea una suite de testeo desde cada desarrollo a GitHub y si tiene eacutexito compila una imagen Docker No podriacuteas entonces tener un archivo en el entorno remoto que verificariacutea una imagen de un repositorio Docker y la ejecutariacutea en un intervalo especificado Esto es lo que hacen muchos de los softwares DevOps distribuidos como Mesos y Kubernetes pero en un entorno mucho maacutes rico que BASH y Linux

Referencias

Artiacuteculo Wikipedia de Arch linux httpbitly2l71ADKWebsite Arch linux ArM httpsarchlinuxarmorgArtiacuteculo que leiacute hace unos tres antildeos y que me inspiroacute para escribir mi propio artiacuteculo httpbitly2m5JAct

HOME DATA CENTER

ODROID MAGAZINE 22

odroid ARCADE BOXLA EXPERIEnCIA PERfECTA COn TuS JuEGOS ARCADE fAvORITOSpor brian Kim charles park y John lee

ARCADE BOX

Los ODROIDs tienen mejor rendimiento que las placas de la competencia especialmente en lo que respecta al renderizado de video lo que significa que

las placas ODROID son ideales para jugar lo cual hacen muchos usuarios de ODROID Ya hay disponibles varios sistemas operativos de plataforma de juegos como Lakka (httpbitly1NO8BBC) y ODROID GameStation Tur-bo (httpbitly1ASFO5O) Para disfrutar auacuten maacutes de nuestras sesiones de juegos creamos nuestra propia consola arcade con simples botones GPIO y joysticks y la llama-mos la ODROID Arcade Box Elegimos un ODROID-XU4 para este proyecto porque es el que tiene mejor rendimiento GPU de todos los dispositivos ODROID actuales En este artiacuteculo vamos a describir como hemos creado la ODROID Arcade Box

Requisitos( Figura 3 ndash )Decidimos hacer la ODROID Arcade Box usando

un MDF (tablero de fibra de densidad media) El Shifter Shield del XU4 tambieacuten es uacutetil para utilizar los pines de expansioacuten del ODROID-XU4 Los Joysticks los botones y los cables eran los componentes de entrada y se utilizoacute

Nuestro primer y simple prototipo

ODROID MAGAZINE 23

panel MDf 12t2eA 600x2202eA 600x752eA 220x75taladroplegadoraDesmontadorcinta meacutetricaNavaja multiusoAlicates de punta largaoDroiD-xU4xU4 Shifter shieldSMpS (fuete Alimentacioacuten)

extendedores hDMi USb ethernetenchufe de alimentacioacuten y Switchbisagras 2eAreceptor de puertacaucho 4eAtornillospulsadores 19eAJoystick 2eAcablesterminales

una SMPS (Fuente de alimentacioacuten conmutada) como fuente de alimentacioacuten Las herramientas y las piezas utilizadas las tienes en esta paacutegina

La ODROID Arcade Box necesita un total de 27 entradas (19 entradas para botones y 8 entra-das para joysticks) Las 24 entradas GPIO digi-tales del ODROID-XU4 no son suficientes para las 27 entradas de modo que creamos dos puertos ADC adicionales para los tres botones que nos fal-taban Los valores de entrada ADC se basan en el voltaje de entrada y los valores de entrada digital y analoacutegica se procesan en el demonio GPIO que se describe a continuacioacuten

Disentildeo y montajeLos paneles de la ODROID Arcade Box deben

ser disentildeados y fabricados para que los botones y joysticks esteacuten bien colocados Elegimos MDF 12T teniendo en cuenta el precio y la durabilidad El dise-ntildeo se puede hacer con cualquier herramienta CAD como Google Sketch o SolidWorks Aunque existen muchas plantillas de disentildeo para los paneles de joypad decidimos elegir un disentildeo arcade estaacutendar japoneacutes

El primer paso del montaje es unir la placa al panel MDF Este paso fue faacutecil aunque nos llevo maacutes tiempo que el resto Despueacutes insertamos los joysticks la toma de corri-ente el interruptor y los botones en el panel MDF superior Los conectores HDMI Ethernet y USB se colocaron en la parte trasera del panel MDF El siguiente paso fue montar cada panel MDF usando un taladro para hacer los agujeros luego con tornillos los sujetamos

El uacuteltimo paso del montaje de la ODROID Arcade Box es conectar por cable los pines de expansioacuten del ODROID-XU4 a los componentes de entrada En este proyecto dise-ntildeamos las entradas GPIO externas tal y como se muestra en la paacutegina 26 Los botones Select y Temp estaacuten conecta-dos a puertos de expansioacuten ADC

Configuracion del softwareDesarrollamos un nuevo demonio GPIO llamado gpio_

keyd (httpbitly2ljOZKg) Este demonio es capaz de asignar entradas GPIO y eventos claves usando uinput y wiringPi una libreriacutea de acceso GPIO basada en pines Estaacute disentildeada para que le sea familiar a quiene ya ha utilizado el sistema de cableado Arduino Aunque la blibreriacutea wiring-Pi upstream soacutelo admite Raspberry Pi Hardkernel ofrece una versioacuten de wiringPi para ODROIDs en su repositorio GitHub (httpbitly1Eq3UpF) El moacutedulo uinput es un moacutedulo del kernel de Linux que gestiona el subsistema de entrada del usuario Se puede utilizar para crear y manejar dispositivos de entrada desde una aplicacioacuten

ARCADE BOX

herramientas compentes y lo que hay justamente debajo

esquema de los puertos de expansioacuten

ODROID MAGAZINE 24

Elegimos ODROID GameStation Turbo (httpbitly1ASFO5O) como plataforma de software para nuestra ODROID Arcade Box que tiene integrado uinput Debes asegurarte de que el archivo de dispositivo uinput existe en el sistema operativo elegido porque algunos no tienen dispositivos uinput

$ ls devuinput

Si tu sistema operativo no tiene un archivo de disposi-tivo devuinput entonces seraacute necesario recompilar e in-stalar un nuevo kernel con la opcioacuten de configuracioacuten IN-PUT_UINPUT habilitada La paacutegina Wiki en httpbitly1YIToBI describe coacutemo compilar e instalar la imagen del kernel a partir del coacutedigo fuente

$ make menuconfig

Device Drivers

-gt Input device support

-gt Generic input layer

-gt Miscellaneous device

-gt User level driver support ltgt

Ten en cuenta que wiringPi debe instalarse antes de in-stalar gpio_keyd En la imagen GameStation de ODROID los comandos sudo deben ejecutarse como root porque la cuenta ldquoodroidrdquo no estaacute designada como usuario sudo

$ git clone httpsgithubcomhardkernelwiringPi

git

$ cd wiringPi

$ sudo build

Descarga el coacutedigo fuente gpio_keyd el cual estaacute dis-ponible en nuestro repositorio GitHub El procedimiento para compilar e instalar gpio_keyd es muy simple

$ git clone httpsgithubcombkrepogpio_keydgit

$ cd gpio_keyd

$ make

$ sudo make install

El script gpio_keyd hace referencia a etcgpio_keydconf como el predeterminado para la informacioacuten de los botones y GPIO El archivo de configuracioacuten fue modi-ficado para las 27 entradas de la ODROID Arcade Box Algunas botones ya se utilizaban en el emulador de juego de modo que tuvimos que cambiar la configuracioacuten del emulador para evitar conflictos entre los botones de en-trada GPIO y el emulador Ten en cuenta que el campo ltGPIO pingt en el archivo de configuracioacuten hace referen-

ARCADE BOX

plano del disentildeo de joypad

la oDroiD Arcade box montada

ODROID MAGAZINE 25

cia al nuacutemero wiringPi no al GPIO y al nuacutemero de pin (httpbitly2lbzPIB)

Ejemplo de configuracioacuten para las 27 entradas etcgpio_keydconf

Digital input ltKey codegt ltGPIO typegt ltGPIO pingt ltActive valuegt User 1KEY_LEFT digital 15 0KEY_RIGHT digital 1 0KEY_UP digital 4 0KEY_DOWN digital 16 0KEY_A digital 2 0KEY_S digital 3 0KEY_D digital 30 0KEY_F digital 21 0KEY_Z digital 8 0KEY_X digital 9 0KEY_C digital 7 0KEY_V digital 0 0 User 2KEY_BACKSLASH digital 12 0KEY_SLASH digital 13 0KEY_SEMICOLON digital 14 0KEY_LEFTBRACE digital 5 0KEY_Y digital 26 0KEY_U digital 27 0KEY_I digital 22 0KEY_O digital 23 0KEY_H digital 6 0KEY_J digital 10 0KEY_K digital 11 0KEY_L digital 31 0

Analog input ltKey codegt ltGPIO typegt ltADC portgt ltADC ac-tive valuegtKEY_B analog 0 0KEY_N analog 0 2045KEY_M analog 1 2045

To run gpio_keyd daemon at every startup is conve-nient for ODROID Arcade Box

etcinitdgpio_keyd binsh BEGIN INIT INFO

ARCADE BOX

Mapeo Gpio externo para los botones y Joysticks

cableado de la oDroiD Arcade box

ODROID MAGAZINE 26

Provides gpio_keyd Required-Start $all Required-Stop Default-Start 2 3 4 5 Default-Stop Short-Description Run usrbingpio_keyd if it ex-ist END INIT INFO

PATH=sbinusrsbinbinusrbin

libinitvarssh

liblsbinit-functions

do_start() if [ -x usrbingpio_keyd ] then usrbingpio_keyd -d ES=$ [ ldquo$VERBOSErdquo = no ] ampamp log_end_msg $ES return $ES fi

case ldquo$1rdquo in start) do_start restart|reload|force-reload) echo ldquoError argument lsquo$1rsquo not supportedrdquo gtamp2 exit 3 stop) killall gpio_keyd exit 0 ) echo ldquoUsage $0 start|stoprdquo gtamp2 exit 3 Esac

$ sudo chmod +x etcinitdgpio_keyd$ sudo update-rcd gpio_keyd defaults$ sudo reboot

En los comandos anteriores el script gpio_keyd se ejecuta como un demonio uti-lizando la opcioacuten ldquo-drdquo El uso de gpio_keyd se puede comprobar con la opcioacuten ldquo-hrdquo Comprue-ba de nuevo las teclas usadas por el juego o el emulador despueacutes fija la configuracioacuten del gpio_ keyd correctamente Es ahora cuando estaacutes listo para jugar y disfrutar de tus juegos con tu nueva ODROID Arcade Box

ARCADE BOX

the King of fighters 98 John vs brian

ODROID MAGAZINE 27

En este artiacuteculo analizaremos las diferentes formas que existen para ob-tener los datos del uso de la red

ConfiguracioacutenLa forma normal de analizar los datos

de traacutefico de la red es mediante el uso de datos a traveacutes de las aplicaciones de configuracioacuten del sistema tal y como se muestra en la figura 1

El uso de datos muestra la cantidad total de traacutefico de datos entrante y sa-liente que ha sido utilizada por una apli-cacioacuten Si seleccionas la aplicacioacuten veraacute una pantalla como la que aparece en la Figura 2 que muestra informacioacuten detal-lada sobre el uso de la aplicacioacuten tanto en primer plano como de fondo

La informacioacuten que se muestra den-tro de la aplicacioacuten de Configuracioacuten se almacena en data systemnetstats que requiere acceso root Al eliminar todo lo que hay dentro de esta carpeta se resta-

Como desarrolladores queremos que nuestras aplicaciones sean eficientes y a menudo nos gus-

tariacutea saber cuaacutento ancho de banda de red estaacute utilizando nuestra aplicacioacuten Esto es muy uacutetil por varias razones

bull Para monitorizar y asegurarnos de que la aplicacioacuten es realmente la nuestra y no una aplicacioacuten que ha sido pirateada y publi-cada con diferentes nombres en Play Store

bull Para asegurarnos de que no es-tamos cogiendo ancho de banda innecesario del plan de datos del usuario

bull Para comprobar que el disposi-tivo que estamos usando no estaacute accediendo a Internet sin nuestro consentimiento

blecen las estadiacutesticas de red mostradas en esta aplicacioacuten

Estadiacutesticas de la redLa aplicacioacuten de configuracioacuten nos

puede dar una informacioacuten general so-bre las estadiacutesticas de la red de datos que es un buen comienzo pero a veces necesitamos un anaacutelisis maacutes detallado que puede hacerse a traveacutes del coman-do dumpsys Android cuenta con una poderosa herramienta llamada dumpsys que nos permite obtener una instan-taacutenea o volcado del sistema que pu-ede incluir informacioacuten sobre la red la memoria y otros componentes Lee la documentacioacuten de Android en httpbitly2kK9dep para obtener maacutes infor-macioacuten del sistema Para conseguir maacutes informacioacuten relacionada con la red nos interesa el comando

$ dumpsys netstats detail

La Figura 3 muestra un pantallazo de lo que puedes ver desde una tablet Nexus 7 que ejecuta Lollipop 511

Hay algunas cuestiones importantes para entender las estadiacutesticas

bull Las estadiacutesticas UID muestran el desglose de las aplicaciones de primer plano y de fondo

bull Uid muestra el ID de usuario de la aplicacioacuten que se puede utili-zar para relacionar eacutesta con la in-

DESARROLLO AnDROID AnALIzAnDO EL uSO DE RED DE LAS APLICACIOnESpor Nanik tolaram

DESARROLLO ANDROID

figura 1 - Uso de datos en la configuracioacuten

figura 2 - Desglose del uso de datos de la app

ODROID MAGAZINE 28

$ dumpsys package detail

Este comando te proporcionaraacute una larga lista de informacioacuten sobre los pa-quetes que estaacuten instalados en tu dis-positivo Para las estadiacutesticas de red nos interesa la seccioacuten que se muestra en la Figura 5

La seccioacuten resaltada muestra el userId que se relaciona con el uid que se mues-tra en las estadiacutesticas de red Al relacio-nar este nuacutemero sabemos el nombre del paquete de la aplicacioacuten sobre el que es-tamos leyendo las estadiacutesticas de red

Aplicacioacuten de ejemplo

La aplicacioacuten de ejemplo de este artiacute-culo se puede descargar desde httpbitly2m8WenA que muestra coacutemo etiqu-etar la conexioacuten de red desde distintas

secciones de la aplicacioacuten lo cual puede ayudar a analizar el volumen de traacutefico de datos de la aplicacioacuten La Figura 6 muestra un ejemplo de coacutemo lo vemos si utilizamos Android Device Monitor (dentro de Studio diriacutegete a Tools -gt Android -gt Android Device Monitor)

Tal y como se puede ver en el graacutefico la simple aplicacioacuten tiene 3 conexiones dife-rentes y cada una de ellas estaacute accediendo a un sitio web diferente Al etiquetarlas con

formacioacuten del paquete (que ver-emos en la seccioacuten de detalles del paquete dumpsys) con el objeto de conocer queacute aplicacioacuten utiliza estas estadiacutesticas de red

bull Las etiquetas son uacutetiles si de-sea ver la cantidad de datos que utiliza cada conexioacuten de tu apli-cacioacuten Puedes ver un ejemplo de esto en la Figura 4 que muestra que el uid 10007 tiene las siguien-tes etiquetas 0x30000401 0x30003201 0x30002804 0x10000401 y 0x30000407 Es-tas etiquetas ayudan al desarrol-lador a saber cuaacutentos datos uti-liza cada parte de la aplicacioacuten Estas estadiacutesticas de red en par-ticular estaacuten vinculada al paquete Google Framework que forma parte de Google Play Store

En el siguiente apartado veremos coacutemo escribir una aplicacioacuten etiquetando el hilo que hace la conexioacuten de red para determi-nar la cantidad de datos que se utilizan

Estadiacutesticas de paquetes

En la seccioacuten anterior analizamos el uid que aparece al ejecutar el comando dumpsys netstats Ahora necesitamos sa-ber queacute uid corresponde a la aplicacioacuten en el dispositivo y esto se hace mediante el siguiente comando

DESARROLLO ANDROID

figura 3 ndash estadiacutesticas de red con Dumpsys

figura 4 - estadiacutesticas de etiquetas UiD

figura 5 - Detalles del paquete dumpsys

figura 6 - etiquetas de red

coacutedigos diferentes podemos ver la cantidad de traacutefico que consume cada conexioacuten y esto nos ayudaraacute a ver si nuestra aplicacioacuten utiliza el ancho de banda de un modo eficiente

El coacutedigo del siguiente fragmento muestra el uso de la API TrafficStats interna Esta etiqueta API muestra el subproceso que utiliza actualmente un socket con un identificador y todo el traacute-fico que pasa por la misma conexioacuten se grabaraacute junto Asiacute es como la aplicacioacuten es capaz de agrupar las 3 conexiones diferentes Internamente Android utili-za el moacutedulo xt_qtaguid del kernel para realizar este tipo de etiquetado Tienes disponible maacutes informacioacuten en httpbitly2kU8KXB

public void getUsingNormalURLC

onnection(String urlText int

threadTag)

throws IOException

URL url = null

TrafficStats

setThreadStatsTag(threadTag)

HttpURLConnection urlConnec-

tion = getConnection(url)

try

finally

TrafficStatsclearThread-

StatsTag()

ODROID MAGAZINE 29

Disgustado te subes a tu 4x4 de dominacioacuten del mun-do un vehiacuteculo que desde fuera parece maacutes bien un viejo camioacuten de granja pero por dentro se parece maacutes

al sistema de control de un transbordador espacial porque el conductor del restaurante oriental que realiza las entrega a do-micilio estaacute enfermo Ahora tienes que ir a recoger tu propia comida ldquoQueacute rudimentariordquo piensas cuando sales de tu garaje secreto Justamente cuando vas a parar el vehiacuteculo en un stop oyes un fuerte ruido Sales y te diriges raacutepidamente a la parte posterior del 4x4 donde observas un cubo de basura Te tiras de los pelos y piensas ldquoiexclEsos basureros Neanderthales dejaron otra vez el cubo en mediordquo Ahora te toca recoger los restos de tu cena y la basura de otros

Conforme te vas alejando para hacer tus recados empiezas a pensar en coacutemo evitar este inconveniente en el futuro Varias ideas te vienen a la mente

Un sistema lidar para escanear en 3D el entorno en tiempo real y alarmas sonoras cuando sea necesarioUn brazo ciberneacutetico colocado en la parte posterior del 4x4 que procese video para detectar objetos agarrarlos y moverlosUna simple camara trasera

Empiezas a considerar la viabilidad de cada una

Muy bueno pero demasiado complicado y costosoAuacuten mejor y un proyecto propio de un cientiacutefico loco pero demasi-ado complicado y costosoya tengo dos iexclpero estaba demasiado preocupado en mis pensa-mientos para prestarles atencioacuten

Lo que necesitas es algo simple sin complicaciones y barato que haga sonar una alarma para alertarte incluso cuando estar absorto en tus pensamientos ldquoAhardquo Recuerdas haber visto un nuevo producto en ameriDroid que puede hacer precisamente esto Se trata de un microcontrolador conectado al USB que soporta hasta 6 sensores ultrasoacutenicos con simples comandos en serie (httpbitly2l26ptV) ldquoiexclPerfectordquo Piensas

Regresas a tu laboratorio subterraacuteneo con el pollo Kung Pao en la mano te apresurar a encender tus monitores entras en el sitio web ameriDroid y pides un kit ldquoUSB Ultrasonic Ranging Sensorrdquo con 6 sensores y carcasas

Vas sintiendo una sensacioacuten de alivio a medida que regresas a los 12 proyectos en lo que ya estabas trabajando a la espera de que pasen un par de diacuteas hasta que llegue tu nuevo pedido Mientras te comes tu Kung Pao dibujas un diagrama de coacutemo quieres colocar los sensores en la parte posterior de tu vehiacuteculo

Un par de diacuteas maacutes tarde el kit llega Inmediatamente em-piezas a montar el kit y los sensores en la parte posterior de tu 4x4 teniendo cuidado de usar sellador de silicona para pro-teger los sensores de la lluvia aguanieve y nieve que puedas encontrar durante tus aventuras para dominar el mundo

A continuacioacuten consultas las instrucciones proporcionadas por ameriDroid con el kit sobre coacutemo controlar y leer los sen-sores desde tu fiel ODROID-C2 y VU7 que montaste en el salpicadero para este propoacutesito

Conectando el cable USBEl cable USB suministrado debe conectarse al microcon-

trolador (la pequentildea placa de circuito con filas de pines que sobresalen) El microcontrolador tiene una fila de 4 o 6 pines

DETECTAR LA PRESEnCIACROnICAS DE un CIEnTIfICO LOCOpor bo lechnowsky

SENSOR ULTRASONICO

ODROID MAGAZINE 30

en un extremo Si tiene 6 pines ceacutentrate en los 4 pines centrales y sigue estas instrucciones

Negro - conectar a GNDrojo - conectar a VccVerde - conectar a rxi

blanco - conectar a txD

Conectando los sensoresultrasoacutenicos

En cada sensor ultrasoacutenico hay cuatro pines marcados Vcc Trig Echo Gnd Para el primer sensor ultrasoacutenico conecta el pin 2 del microcontrolador al pin ldquoTrigrdquo del sensor ultrasoacutenico Conecta el pin 3 del microcontrolador al pin ldquoEchordquo del sensor Conecte el pin ldquoVccrdquo del sensor a DC 5V (el pin ldquoVCCrdquo del microcontrolador suministra 5V) y el pin ldquoGndrdquo del sensor a una conexioacuten a tierra como por ejemplo los pines ldquoGNDrdquo del microcontrolador

Si conectas un segundo sensor de ultrasonidos conecta ldquoTrigrdquo al pin 4 y ldquoEchordquo al pin 5 Continuacutea conectando los siguientes pines a los sensores hasta los pines 12 y 13 si al final optas por conectar los seis sensores ultrasonidos

Conexioacuten del softwareUtilizas un programa terminal como PuTTY Screen o tu

lenguaje de script o programacioacuten favorito para conectarte al puerto serie que aparece cuando te conectas el sensor ultrasoacuteni-co Esto variaraacute en funcioacuten del sistema operativo que utilizas para conectarte al microcontrolador En Windows consultar el ldquoAdministrador de dispositivosrdquo es la forma maacutes comuacuten de averiguarlo En Linux ldquodmesgrdquo o ldquolsusbrdquo son las formas de de-tectar a queacute puerto estaacute conectado Deberiacuteas ver algo denomi-nado ldquoPL2303rdquo que es la conexioacuten del microcontrolador Si recibes informacioacuten basura en tu terminal cuando te conectes aseguacuterate de que los ajustes en serie son 9600 baudios 8 bits ninguno (paridad) y 1 bit de parada Aquiacute tienes una lista de los comandos que puede aceptar el microcontrolador

bull debug on Activa la retroalimentacioacuten detallada Estaacute deshabilitada por defecto nos proporcionaraacute aclaracio-nes sobre los errores de entrada

bull debug off desactiva la retroalimentacioacuten detalladabull init x y activa un HC-SR04 en los pines especificados

X es trigger Y es echo Estos deben ser pines digitales El dispositivo 0 estaacute preestablecido en los pines 2 y 3 de modo que no es necesario especificar estos pines La seleccioacuten de pines no vaacutelidos devolveraacute un signo de ex-clamacioacuten ()

bull ping enviacutea una sola lectura del HCSR04 previamente utilizado Si no se ha utilizado todaviacutea se usaraacute el dis-positivo 0 Si al comando le sigue un espacio y un nuacutemero entre 0-100 (exclusivo) se realizaraacute ese nuacutemero de lecturas emitiendo primero el promedio de esas lec-

SENSOR ULTRASONICO

turas despueacutes el nuacutemero de lecturas fallidas (que no cuentan para el promedio) y luego los valores miacutenimo y maacuteximo de lectura separados por espacios En cual-quier caso si una sentildeal se desconecta automaacuteticamente devolveraacute -1

bull start Hace ping constantemente a todos los dispositivos conectados en secuencia Debido a que los dispositivos se utilizan uno a uno el flujo de datos de este comando seraacute maacutes raacutepido si los dispositivos miden distancias cor-tas Si este comando le sigue un espacio y un nuacutemero mayor que 0 la placa esperaraacute estos milisegundos entre la lectura del uacuteltimo dispositivo y la lectura del primer dispositivo El resultado de este comando seraacute la lectura de cada dispositivo (con un uacutenico espacio despueacutes de cada uno) y una vuelta tras el uacuteltimo dispositivo

bull stop detiene la operacioacuten ldquostartrdquo soacutelo es efectivo tras haber iniciado ldquostartrdquo

bull mode emite el modo de medicioacuten del flujo M para meacutetrico (miliacutemetros) I para Imperial (deacutecimas de pul-gada) o R para Raw (la longitud de pulso en microse-gundos devuelta por el HC-SR04) El valor predeter-minado es M

bull timeout emite el tiempo de espera actual para lecturas de la sentildeal El tiempo de espera es la mayor cantidad de microsegundos que la placa esperaraacute antes de declarar que el HC-SR04 ha realizado una mala lectura lo cual no es necesariamente lo mismo que el pulso maacutes largo que la placa aceptaraacute del HC-SR04 Cuando la placa mide el pulso del HC-SR04 primero espera a que el HC-SR04 comience a enviar un pulso Este tiempo cuenta para el tiempo de espera Cuando este comando le sigue un espacio y un nuacutemero el tiempo de espera se ajusta a ese nuacutemero El valor predeterminado es 1 segundo (1000000 microsegundos)

bull ver emite informacioacuten de versioacuten y creacuteditos

Si cualquier comando (o ninguacuten comando) estaacute precedido por un uacutenico diacutegito de 0-5 (inclusive) seguido de un espacio el dispositivo que corresponde a ese diacutegito se seleccionaraacute para ser usado con el siguiente comando ldquopingrdquo Cada vez que la placa esteacute lista para un comando emitiraacute ldquogtrdquo para la serie La uacutenica excepcioacuten estaacute tras el comando ldquostartrdquo que no solicitaraacute entrada hasta que sea reconocido ldquostoprdquo

ODROID MAGAZINE 31

iquestCoacutemo empezaste con los ordenadoresCuando empeceacute mi negocio tuve que decidir queacute plat-

aforma de hardware iba a utilizar para la recogida de datos del traacutefico Simplemente para que no pienses mal de miacute mis caacutemaras de traacutefico no son las que se usan para multar por exceso de velocidad o algo asiacute Mi sistema estaba desti-nado suavizar el flujo de traacutefico fijando los controles oacutepti-mos de las sentildeales de traacutefico Anteriormente usaba un PC industrial para ejecutar mi software de reconocimiento de imaacutegenes Ahora uso la familia de dispositivos ODROID para esta cuestioacuten

iquestQueacute te atrajo de la plataforma ODROID En 2012 useacute Google para buscar una plataforma que

fuera muy compacta y al mismo tiempo potente para que cubriera mis necesidades que resultoacute ser la placa

Por favor haacuteblanos un poco sobre tiSoy ingeniero de electroacutenica y software en Rusia desde

hace 47 antildeos Naciacute en Siberia y tras terminar la escuela me mudeacute a Moscuacute para estudiar en la universidad Ser estudi-ante en el Instituto de Aviacioacuten de Moscuacute (MAI) fue una experiencia increiacuteble probablemente la mejor de mi vida A principios de los 90 llegoacute a Rusia la era de los microordena-dores soliacutea jugar a un juego de saltos en una CPU z80 y el i486 Tras finalizar mis estudios universitarios y de posgrado me convertiacute en ingeniero Trabajeacute en unos cuantos puestos de trabajo para diferentes empresas y finalmente decidiacute em-prender mi propio negocio En 2006 puse en marcha una iniciativa para crear sistemas de recuento del traacutefico de au-tomoacuteviles Estoy casado y tengo una hija de 21 antildeos llamada Lena que trabaja como enfermera Mi esposa Nadezhda es disentildeadora de vestuario de produccioacuten pero ahora trabaja como disentildeadora web Ella es aficionada a la fotografiacutea digi-tal y le encanta su caacutemara reacuteflex digital

COnOCIEnDO un ODROIDIAnvIACHESLAv ALEKSEEveditado por rob roy (robroy)

CONOCIENDO UN ODROIDIAN

Viacheslav disfruta tocando la guitarra y escuchando muacutesica

1995 en el campus MAi probando uno de los primeros equipos Vr comerciales del mundo que funcionaba a 640x480 a 30fps Utiliz-aba un sensor magneacutetico en la nuca para la posicioacuten de la cabeza la mejor broma que se podiacutea gastar a alguien era colocar un imaacuten cerca de la espalda y sacudirlo iexcllos gritos estaban garantizados cuando el mundo en 3D daba vueltas sin cesar

ODROID MAGAZINE 32

ODROID-X2 Con sus cuatro nuacutecleos funcionando a 17 GHz calculaba con facilidad los algoritmos de reconteo del traacutefico de automoacuteviles Maacutes tarde cambieacute al U3 y el XU4

iquestCuaacutel es tu ODROID favorito y por queacuteDe momento mi favorito es el XU4 Mi sistema estaacute

basado en el tratamiento de fotogramas de video en tiempo real por lo que el bus USB 30 del XU4 es bastante bueno para una caacutemara con una interfaz de captura de viacutedeo Para mi sistema es muy importante tener una buena conexioacuten entre la caacutemara de viacutedeo y la CPU Probablemente tendreacute que echar un vistazo a las interfaces de nivel inferior como MIPI CSI-2 que por desgracia estaacuten ausente en el XU4 Recientemente he estado aprendiendo como usar la caacute-mara oCam GS BW La caacutemara es buena en siacute misma pero para un uso industrial al aire libre tengo que implementar un software de control de exposicioacuten automaacutetica y posible-mente de control de apertura de la lente que todaviacutea estaacute en estudio

MEET AN ODROIDIAN

Una vieja joya el mini ordenador Nixdorf

An old gem the Nixdorf mini computer

CONOCIENDO UN ODROIDIAN

iquestQueacute aficiones e intereses tienes aparte de los ordenadoresDisfruto conduciendo y leyendo sobre coches y viendo

los campeonatos de carreras de F1 Tambieacuten me gusta via-jar pescar escuchar muacutesica y tocar la guitarra Tengo un gato siberiano llamado Leia y soy fan de Star Wars

iquestQueacute consejo le dariacuteas a alguien que quiere aprender maacutes sobre la programacioacuten

Hacer software es algo increiacuteble y miacutestico Es una fusioacuten de arte y tecnologiacutea Nada te inspira maacutes que tu aplicacioacuten cuando empieza a cobrar vida Sin embargo siempre estaacute ahiacute el otro lado de la Fuerza Estar listo para instruirte inc-esantemente El desarrollo de software es una de las activi-dades que cambia maacutes raacutepido Si tienes pensado dejar de hacer software en uno o dos antildeos puede dejar de aprender ahora El conocimiento se volveraacute anticuado en un par de antildeos maacutes o menos Para estar en lo maacutes alto siempre tienes que correr Es similar a la cancioacutenrdquoRun like Hellrdquo de Pink Floyd Si estaacutes listo para vivir de esta forma seguro que tendraacutes eacutexito

ODROID MAGAZINE 33

Page 5: Estación ARCADE · gias de marketing, administración de medios sociales y producción multimedia impresa, web, vídeo y cine. Ges-tionando múltiples cuentas con agencias y productores

INDICE

hoMe DAtA ceNter - 20

JUeGoS liNUx opeN foDDer - 12

JUeGoS ANDroiD cAUSAlity - 14

MANUAl xU4 - 19

hifi ShielD 2 - 18

DeSArrollo ANDroiD - 29

ArcADebox - 23

liNeAGeoS - 11

coNocieNDo UN oDroiDiAN - 32

reMote pi - 15

tiMbre - 6

SeNSor UltrASoNico - 30

En este proyecto vamos a convertir el ODROID-C2 (httpbitLy 1oTJBya) en un inteligente timbre IoT que tomaraacute una foto de quienquiera que lo haga sonar

y la enviaraacute por correo electroacutenico al titular de una cuenta de Gmail Ademaacutes el dispositivo archivaraacute las fotos por fecha y hora dando la posibilidad de comprobar cualquier actividad sospechosa o simplemente para mantener un registro de todas las personas que tocan el timbre Es faacutecil ver que este ldquointeli-genterdquo timbre que utiliza un ODROID-C2 como piedra an-gular es una poderosa herramienta de seguridad y vigilancia el cual seraacute muy uacutetil para cualquier vivienda

Requisitos de hardwarebull ODROID-C2 (httpbitly1oTJBya)bull Webcam ODROID (httpbitly2iBHKPD)bull Adaptador Wi-fi (httpbitly1M4LdiC)bull 1x mini placa de pruebasbull 1x Resistencia 1 KΩbull 1x Resistencia 10 KΩbull 1x Pulsadorbull ~8x cables dumpon (el kit Tinkering C httpbit

ly1YNPN6kes una buena opcioacuten para este y futuros proyectos)

Requisitos de Softwarebull Ubuntu 1604 v20 de Hardkernel (httpbit

ly2cBibbk)bull Python 27 or 33 (preinstalado en Ubuntu)bull Libreriacutea WiringPi para controlar los pines GPIO del

ODROID-C2 Puedes aprender a instalarla con la guiacutea que hay disponible en httpbitly2ba6h8o

Montando el dispositivo IoT Para cablear las conexiones usamos los cables macho a hem-

bra y macho a macho Dupont El extremo hembra del cable Dupont macho a hembra se conecta al cabezal macho del ODROID-C2 y el otro extremo a los orificios de la placa de pruebas Ve consultando el esquema de distribucioacuten de los pines

de Hardkernel a medida que vayas creando las conexiones Este esquema lo puedes encontrar en httpbitly2aXAlmt El pin fiacutesico 1 es VCC y proporciona 33V a nuestro circuito co-nectamos el pin en la primera liacutenea vertical de nuestra placa de pruebas cerca del borde Puesto que vamos a utilizar el pin 6 como puesta a tierra comuacuten eacuteste lo conectaremos a la segunda liacutenea vertical de nuestra placa de pruebas El resto del circuito es muy simple puedes seguir el esquema de la Figura 1

La Webcam ODROID la tienes que conectar al ODROID-C2 a traveacutes de uno de los puertos USB disponibles en la placa El timbre se controla con el pin 15 tal y como puedes ver en la figura Ahora que tenemos el hardware listo iexclVamos a sumergirnos en el coacutedigo y hacer que el timbre suene ldquointeli-gentementerdquo

SoftwareLa parte central del coacutedigo ha sido extraiacuteda de un proyecto

Github disponible en httpbitly2jEXRbR No obstante este coacutedigo de ejemplo ha sido modificado en gran medida

TIMBRE IOTRECIBE un AvISO POR CORREO ELECTROnICO DE LA PERSOnA quE LLAMA A Tu PuERTApor Miltiadis Melissas (miltos)

TIMBRE

figura 1 - esquema del timbre

ODROID MAGAZINE 6

para conseguir que funcione correcta-mente en el ODROID-C2 Lo maacutes importante de todo es que el re-mapeo desde RPiGPIO a la libreriacutea WiringPi2 ya estaacute terminado puesto que Wiring-Pi2 es compatible con el ODROID-C2 Consulta la excelente guiacutea GPIO pro-porcionada por Hardkernel en httpbitly2jEUjWX Todo el coacutedigo esta descrito en los siguientes apartados de-limitado entre lsquoltgtrsquo con su correspon-diente descripcioacuten debajo

El coacutedigo baacutesicode odroidbellpy

ltimport wiringpi2 as odroidgt

Empezaremos importando la libreriacutea wiringpi2 Las instrucciones para in-stalar esta libreriacutea y poder controlar los pines GPIO del ODROID-C2 la puedes encontrar en httpbitly2ba6h8o

ltimport timegt

Importamos el moacutedulo time

ltimport osgt

Importamos el moacutedulo os

ltimport globgt

Importamos el moacutedulo glob

ltimport sysgt

TIMBRE

figura 2 - el sistema completo c2

Importamos el moacutedulo sys

ltodroidwiringPiSetup()gt

Hemos configurado el moacutedulo wi-ringPi2 conforme a la tabla que nos proporciona Hardkernel en httpbitly2aXAlmt

ltButton = 3gt

Este es en realidad el pin fiacutesico 15 seguacuten la tabla de httpbitly2aXAlmt

ltodroidpinMode(Button0)gt

Fijamos el pulsador como entrada

ltodroid

pullUpDnControl(Button1)gt

Activamos la resistencia de parada y arrastre En este caso parado tal y como lo indica el argumento 1

loop

Estamos entrando en un bucle ya que los dispositivos IoT siempre estaacuten en modo de espera

ltprint(ldquoProgram Runningrdquo)gt

La uacutenica finalidad de esto es la moni-torizacioacuten

oses

while Trueloops forever till

keyboard interrupt (ctr + C)gt

ltif odroiddigitalRead(Button)

== False when button is un-

pressedgt

ltsysstderrwrite(ldquordquo)gt

Si no se presiona el timbre imprimi-mos puntos en la pantalla usando la li-breriacutea sys

lttimesleep(1)gt

Se comprueba si se ha tocado el pul-sadortimbre cada segundo

ltelsegt

ltprint(ldquoButton Pressedrdquo)gt

Se ha presionado el pulsadortimbre

------| photo amp Bell

|------

Get FileName

ltnow = timestrftime(ldquoDatem-

d-yTimeH-M-Srdquo)gt

Declaramos la variable now con la fe-cha y hora que usaremos en la foto

Make command to run odroidC2

sh

ltcommand = ldquobash odroidC2sh

ldquo + str(now)gt

Invocamos el script shell odroidC2sh (ver a continuacioacuten)

-- odroidC2sh is an Shell

script that

-- is responsible for tak-

ing the photo and

-- making the Doorbell

Noise

--- We insert the ldquoNowrdquo ar-

gument so the python

--- script knows what the

filename of the

--- picture will be so it

can pass it on into the

ODROID MAGAZINE 7

ltmpv ringtonemp3gt

Finalmente haremos sonar el timbre usando un programa llamado mpv que ya estaacute incluido en Ubuntu 1604 v20 de Hardkernel (httpbitly2cBibbk) En otras palabras usamos el Mplayer para reproducir este archivo

Configurar el coacutedigo de Gmail

La mayoriacutea de la gente tiene una cuenta de Gmail Si no la tienes es muy faacutecil crearte una y lo maacutes importante de todo es gratis En realidad para que este script de Gmail funcione correctamente necesitamos dos cuentas de correo elec-troacutenico el correo electroacutenico del remi-tente y la cuenta de correo electroacutenico del destinatario y siempre es asiacute Por supuesto puede enviar un correo elec-troacutenico desde y hacia la misma cuenta pero es maacutes elegante crear una segunda cuenta de correo electroacutenico con el fin de estar al tanto de las fotos con el registro de la fecha y hora por separado Tambieacuten recomiendo que la cuenta de correo elec-troacutenico del destinatario sea la que utilices en tu dispositivo moacutevil para que el dis-positivo te avise cada vez que alguien lla-me a tu puerta No olvides permitir que ldquo las aplicaciones menos segurasrdquo tengan acceso a tu cuenta de Gmail (httpbitly124TgWN)

Vamos a examinar el script python llamado IoTOdroidpy

ltfrom emailmimetext import MIM-

ETextgt

ltfrom emailmimemultipart import

MIMEMultipartgt

Usamos esos dos moacutedulos porque necesitamos enviar un correo electroacutenico limpio con un remitente un receptor y un asunto

ltfrom emailmimeapplication im-

port MIMEApplicationgt

Tambieacuten importamos el moacutedulo re-

Script shell OdroidC2sh

El script OdroidC2sh es respon-sable de tomar la foto y hacer sonar el timbre La funcioacuten del argumento lsquoNowrsquo es pasar el nombre del archivo de la foto al script de Gmail En otras palabras es el conector entre nuestro coacutedigo baacutesico odroidbellpy y el script Odroid-IoTNo-tifierpy El script OdroidC2sh es muy simple

ltcd photosgt

Cambiamos desde directorio actual al directorio ltphotosgt

ltecho ldquoTaking the Photordquogt

ltnow=$1gt

ldquoNowrdquo es la fecha y hora de registro del nombre del archivo

ltechogt

ltfswebcam -d devvideo0 $now

jpggt

Este es el comando baacutesico para tomar la foto Utilizamos el comando fsweb-cam Si la aplicacioacuten fswebcam no estaacute instalada en tu sistema puedes instalarla con el siguiente comando

$ sudo apt-get install fswebcam

La sintaxis del comando es obvia toma una foto y usa la fecha y hora de registro como nombre de archivo Cada vez que se pulse el pulsador OdroidC2sh es activado por odroidbellpy El paraacute-metro -d determina el recurso a utilizar en nuestro caso devvideo0

ltecho ldquoPic Takenrdquogt

ltechordquordquogt

ltecho ldquoRinging Bellrdquogt

ltecho ldquordquogt

ltcd gt

Cambia de nuevo al directorio padre

--- email script (so it

knows what file to email

run command

ltossystem(command)gt

A continuacioacuten invocamos el co-mando system para ejecutar el script de correo electroacutenico

diagnostics

ltprint(ldquoFilenamerdquo now)gt

Imprimimos el ldquofilenamerdquo de la foto con la fecha y hora actuales

----| Email |----

ltprint(ldquoEmailrdquo)emailgt

ltemailcommand = lsquosudo python

IoTOdroidpy ldquoThis person is at

your doorrdquorsquo + lsquo ldquophotosrsquo + now +

lsquojpgrdquorsquogt

Enviamos la foto a la cuenta de Gmail del titular con la fecha y hora y el asunto ldquoThis person is at your doorrdquo

ltossystem(emailcommand) run-

ning the Email script withgt

-- the subject as ldquoSomeone

is ringing the doorbellrdquo and the

filename

-- We made before at the

-Photo amp Bell- section

Y finalmente lo enviamos

-- End Diagnostic Info

print(ldquoDone Processrdquo)

Todo estaacute hecho asiacute que el script fi-naliza su trabajo

-space out for next ldquoPress of

Buttonrdquo

ltprint(ldquordquo)gt

ltprint(ldquordquo)gt

Hacemos hueco para el siguiente ci-clo (proacutexima llamada al timbre)

TIMBRE

ODROID MAGAZINE 8

figura 3 - Alerta de correo electroacutenico de que alguien estaacute en la puerta

ltserverstarttls()gt

Configuramos y entramos en modo TLS TLS significa Transport Layer Se-curity (Seguridad de la capa de trans-porte) de modo que cualquier comando SMTP que siga este modo seraacute cifrado

ltserverlogin(lsquoltFrom

EmailgtrsquorsquoltFrom passwordgtrsquo)gt

Es hora de entrar en tu cuenta de Gmail de modo que necesitamos las credenciales correctas

ltserversendmail(msg[lsquoFromrsquo]

emaillist msgas_string())gt

Usando el anterior comando final-mente enviamos el correo electroacutenico Procura evitar el spoofing e introduce aquiacute tu direccioacuten de correo electroacutenico real El paraacutemetro emaillist es el que

hemos definido antes y el uacuteltimo paraacute-metro (msaas_string ()) el mensaje en forma de cadena con el archivo adjunto que es en este caso la foto El resultado lo puedes apreciar en la Figura 3

Testeando y ejecu-tando el coacutedigo

Desde el terminal (CTRL-T) eje-cutamos odroidbellpy con privilegios sudo

$ sudo python odroidbellpy

En este momento el dispositivo IoT se pone en modo de espera y apa-

ltmsg[lsquoReply-torsquo] = lsquoxyzgmail

comrsquogt

Correo electroacutenico del destinatario

ltmsgpreamble = lsquoMultipart

massagenrsquogt

El atributo preamble contiene el tex-to principal extra-blindado de los docu-mentos MIME por eso lo incluimos aquiacute

ltpart = MIMEText(ldquoHello The

doorbell is ringing A photo of

the person ringing the doorbell

has been attachedrdquo)gt

El cuerpo del mensaje

ltmsgattach(part)gt

ltpart =

MIMEApplication(open(str(sys

argv[2])rdquorbrdquo)read())gt

ltpartadd_header(lsquoContent-

Dispositionrsquo lsquoattachmentrsquo

filename=str(sysargv[2]))gt

Adjuntamos la foto al mensaje

ltserver = smtplibSMTP(ldquosmtp

gmailcom587rdquo)gt

Especificamos el servidor smtp que queremos usar y el puerto que utiliza el servidor de Gmail con el puerto 587 Tambieacuten puede usar el puerto 465 aunque no es mala idea comprobar con Google el puerto correcto por si acaso ha cambiado

ltserverehlo()gt

Especificamos el servidor smtp que queremos usar y el puerto que utiliza el servidor de Gmail con el puerto 587 Tambieacuten puede usar el puerto 465 aunque no es mala idea comprobar con Google el puerto correcto por si acaso ha cambiado

sponsable del archivo adjunto MIME MIME representa las Extensiones Mul-tiuso para el Correo en Internet Es una forma de identificar los archivos en In-ternet seguacuten su naturaleza y formato

ltimport smtplibgt

ltfrom smtplib import SMTPgt

Esta es la baacutesica y nativa libreriacutea en Python para enviar correos electroacutenicos de modo que no hay necesidad de insta-lar libreriacuteas externas smtplib Desde esta libreriacutea importamos la funcioacuten SMTP

ltimport sysgt

Importamos el moacutedulo de funcio-nes y paraacutemetros especiacuteficas del sistema puesto que necesitaremos el script ltargvgt de este moacutedulo (ver a continuacioacuten)

ltrecipients = [lsquoltYourEmailgtrsquo]gt

Tu direccioacuten de correo electroacutenico ya que tuacute eres el destinatario de las fotos

ltemaillist = [elemstrip()

split(lsquorsquo) for elem in recipi-

ents]gt

Hacemos una lista de correo elec-troacutenico en la que separaremos y quita-remos los caracteres pertinentes de cada elemento de la lista de destinatarios

ltmsg = MIMEMultipart()gt

Definimos el variable message (msg) como una Extensioacuten Multiuso para el Correo en Internet llamando a la fun-cioacuten MIMEMultipart

ltmsg[lsquoSubjectrsquo] = str(sys

argv[1])gt

El asunto del nuestro mensaje

ltmsg[lsquoFromrsquo] = lsquoltFrom Emailgtrsquogt

Tu direccioacuten de correo electroacutenico

TIMBRE

ODROID MAGAZINE 9

import wiringpi2 as odroid

import time

import os

import glob

import sys

odroidwiringPiSetup()

Button = 3

odroidpinMode(Button0)

odroidpullUpDnControl(Button1)

loop

print(ldquoProgram Runningrdquo)

while Trueloops forever till

keyboard interupt (ctr + C)

if odroiddigitalRead(Button)

== False when button not

pressed

sysstderrwrite(ldquordquo)

timesleep(1)

else

print(ldquoButton Pressedrdquo)

------| photo amp Bell

|------

Get FileName

now = timestrftime(ldquoDatem-

d-yTimeH-M-Srdquo)

Make command to run

odroidC2sh

command = ldquobash odroidC2sh ldquo

+ str(now)

-- odroidC2sh is an Shell

script that

-- is responsible for tak-

ing the photo and

-- making the Doorbell

Noise

--- We insert the ldquoNowrdquo ar-

gument so the python

--- script knows what the

file name of the

--- picture will be so it

can pass it on into the

--- email script (so it

knows what file to email

figura 4 ndash el script python del timbre en ejecucioacuten

run command

ossystem(command)

diagnostics

print(ldquoFilenamerdquo now)

----| Email |----

print(ldquoEmailrdquo)email

emailcommand = lsquosudo python

IoTOdroidpy ldquoSomeone is ringing

the doorbellrdquorsquo + lsquo ldquophotosrsquo +

now + lsquojpgrdquorsquo

ossystem(emailcommand) run-

ning the Email script with

-- the subject as ldquoSomeone

is ringing the doorebellrdquo and the

filename

-- We made before at the

-Photo amp Bell- section

-- End Diagnostic Info

print(ldquoDone Processrdquo)

-space out for next ldquoPress

of Buttonrdquo

print(ldquordquo)

print(ldquordquo)

OdroidC2sh

binsh

cd photos

echo ldquoTaking the Photordquo

now=$1 Now is the filename time

stamp

take pic

fswebcam -d devvideo0 $nowjpg

echo ldquoPic Takenrdquo

echordquordquo

ring Bell

echo ldquoRinging Bellrdquo

echo ldquordquo

echo ldquordquo

cd

mpv ringtonemp3

IoTOdroidpy

from emailmimetext import MIM-

EText

from emailmimeapplication im-

port MIMEApplication

rece en pantalla el mensaje ldquoProgram is runningrdquo Al mismo tiempo aparecen puntos ldquordquo en la pantalla uno a uno indicando al usuario que el dispositivo estaacute funcionando con normalidad Cu-ando alguien pulsa el botoacuten (timbre) el script OdroidC2sh se ejecuta con una doble finalidad Primero toma una in-

stantaacutenea de la persona que hace sonar el timbre En segundo lugar enviacutea el correo electroacutenico a traveacutes de IoTOdroidpy a la cuenta de Gmail del propietario con la fecha y hora de registro de la foto que se adjunta Despueacutes vuelve al modo de espera y el timbre IoT suena

Notas finalesPor supuesto este proyecto se podriacutea

mejorar de muchas formas Por ejemplo se podriacutea antildeadir un LED en el timbre IOT que indicara su correcto funciona-miento Un dispositivo maacutes complejo similar a eacuteste podriacutea usarse como timbre comercial con la ayuda de un moacutedulo placa releacute Tampoco seriacutea complicado incluir la posibilidad de que grabase una pequentildea grabacioacuten de viacutedeo junto con las fotos haciendo que el timbre ldquointeli-genterdquo sea auacuten maacutes inteligente Ademaacutes como dice el viejo refraacuten ldquoiexclla perfeccioacuten es el eterno enemigo de lo funcionalrdquo

Coacutedigo deltimbre IoT

Aquiacute tienes una copia de todo el coacute-digo Al final de este artiacuteculo tienes un enlace a la paacutegina github que tambieacuten contiene el coacutedigo

Odroidbellpy

TIMBRE

ODROID MAGAZINE 10

from emailmimemultipart import

MIMEMultipart

from smtplib import SMTP

import smtplib

import sys

recipients = [lsquoabcgmailcomrsquo]

emaillist = [elemstrip()

split(lsquorsquo) for elem in recipi-

ents]

msg = MIMEMultipart()

msg[lsquoSubjectrsquo] = str(sysargv[1])

msg[lsquoFromrsquo] = lsquoxyzgmailcomrsquo

msg[lsquoReply-torsquo] = lsquoabcgmailcomrsquo

msgpreamble = lsquoMultipart

massagenrsquo

part = MIMEText(ldquoHello There is

someone ringing your doorbell A

picture of this person has been

atachedrdquo)

msgattach(part)

part =

MIMEApplication(open(str(sys

argv[2])rdquorbrdquo)read())

partadd_header(lsquoContent-

Dispositionrsquo lsquoattachmentrsquo

filename=str(sysargv[2]))

msgattach(part)

server = smtplibSMTP(ldquosmtp

gmailcom587rdquo)

serverehlo()

serverstarttls()

serverlogin(lsquoxyzgmail

comrsquorsquoyourpassword herersquo)

serversendmail(msg[lsquoFromrsquo]

emaillist msgas_string())

El coacutedigo del proyecto estaacute disponible en httpbitly2jMAdMY usando el siguiente comando

$ git clone

httpsgithubcommiltiadisme-

lissas

IoTOdroidC2Doorbellgit

TIMBRE

A finales de 2016 los usuarios de Cyanogenmod se horrorizaron cuando Cyanogen anuncioacute la

cancelacioacuten de sus servicios dejando a todos los usuarios que dependiacutean de Cyanogenmod sin soporte Sin em-bargo en poco tiempo llegariacutea una so-lucioacuten en forma de LineageOS Si eres un usuario del ODROID-XU3 XU4 es el momento perfecto para colaborar con la versioacuten de LineageOS en los foros ODROID

Caracteriacutesticas- Android 711 Nougat lineageoS 141- Kernel 3109- openGl eS 112030 (aceleracioacuten por GpU)- opencl 11 ep (aceleracioacuten por GpU)- funcioacuten multiusuario habilitada (hasta 8 usuarios)- ethernet integrado y soporte para ether-net Gigabit USb 30 - Soporte para rtl8188cUS rtl8191SU y USb Wireless ralinkt- Soporte bluetooth USb (ble A2dp Sink)- Soporte para dongle GpS USb- Anclaje a red USb - punto de acceso Wi-fi portaacutetil- Soporte DAc USb nativo para Android

LInEAGEOS-141 ODROID-Xu3Xu4OLvIDATE DE CyAnOGEn EL fuTuRO ESTA AquIpor voodik editado por bruno Doiche

LINEAGEOS

- Soporte para Webcam USb UVc- Soporte hDMi-cec- Selinux

Problemas conocidosEn este momento soacutelo admite moacutedu-

los Bluetooth de bajo consumo v40 (BLE) Consulta el Moacutedulo Bluetooth 2

Coacutemo instalarloEn primer lugar necesitas preparar

tu emmcsd con imaacutegenes especiales de auto-instalacioacuten

La puedes encontrar aquiacutehttpophmdrjrnetvoodik5422

ODROID-XU3AndroidCM-141-ATV

Alpha-01_110217

Graba la imagen en tu eMMCsd a traveacutes de Win32DiskImager y arranca el dispositivo Tendraacute que esperar paci-entemente durante el primer arranque ya que el proceso de actualizacioacuten puede llegar a tardar hasta 20 minutos

Coacutedigo fuente Kernel

$ git clone httpsgithubcom

voodikandroid_kernel_hardkernel

_odroidxu3 -b cm-140_5422

ODROID MAGAZINE 11

SNES 3DO y Sega Genesis El juego teniacutea diferentes escenarios para jugar la selva la nieve y el desierto

Open Fodder ofreciacutea 23 misiones que se dividiacutean en varias fases En total suponiacutea superar 72 niveles para llevar

Este mes me gustariacutea hablar de un juego llamado Open Fodder se trata de un remake del claacutesico

juego de Amiga Cannon Fodder desar-rollado por Sensible Software en 1993 Utiliza los datos del juego original Can-non Fodder para conseguir una experi-encia muy similar al juego original en tu ODROID

Muchos de los populares juegos de Linux de hoy en diacutea como Stratagus y Freeciv son en realidad remakes de claacutesicos juegos de DOS de mediados y finales de los 90 y Open Fodder no es diferente El remake de Cannon Fodder es un juego disparos accioacuten y estrategia donde controlas a un pequentildeo grupo de soldados que avanza a traveacutes de varias docenas de niveles para matar a los sol-dados enemigos destruir tanques echar abajo edificios y derrotar a tus enemigos El juego fue lanzado por primera vez para Amiga en 1993 y fue exportado por sus desarrolladores a MS-DOS Atari Jaguar

a tu escuadroacuten a la victoria Cuando se lanzoacute el juego fue muy elogiado por varias revistas de juego Amiga con pun-tuaciones que llevaban al 95 por ciento y fue considerado como uno de los mejo-res juegos lanzados en 1993 En general siguioacute siendo uno de los mejores juegos jamaacutes creado para la plataforma Amiga durante sus 11 antildeos de vida

Desde un punto de vista maacutes poliacutetico el juego lleva impliacutecito un intenso men-saje sobre la guerra en siacute misma puesto que juegas y llevar a tus soldados a una muerte inevitable Cada misioacuten se inicia

JuEGOS LInuXOPEn fODDERpor tobias Schaaf (meveric)

JUEGOS LINUX

figura 1 - el logotipo de cannon fodder en el cual estaacute basado open fodder

figuras 2 3 y 4 - los niveles de selva desierto y nieve en open fodder

figuras 5 y 6 - A medida que avanzas en el juego tu larga liacutenea de reclutas se con-vierte gradualmente en cruces alineadas como en un cementerio

ODROID MAGAZINE 12

nas segundas partes ademaacutes de algunas misiones de bonificacioacuten Cannon Fod-der 2 salioacute un antildeo maacutes tarde pero fue maacutes bien un ldquodisco de datosrdquo con ex-pansiones que una secuela ya que en su mayor parte presentaba maacutes misiones en lugar de nuevas caracteriacutesticas Tambieacuten estaba el X-Mas de Amiga que ofreciacutea algunas misiones diferentes basadas en el juego Cannon Fodder

Ejecutando Open Fodder

Open Fodder es un remake del motor del juego Cannon Fodder que lleva el juego a los sistemas operativos modernos Al igual que otras migraciones del motor del juego (como OpenTTD) puede uti-lizar los datos del juego original con esta versioacuten del motor para ejecutar el juego en tus dispositivos modernos Esta mi-gracioacuten tambieacuten cuenta con una versioacuten exportada para los dispositivos ARM lo que significa que podemos ejecutarlo igualmente en nuestros ODROIDs

Todaviacutea estaacute en desarrollo pero ya funciona bastante bien Como de cos-tumbre se puede instalar desde mi repo-sitorio y puesto que soacutelo requiere SDL2 y SDL2 Mixer como dependencias prin-cipales deberiacutea funcionar en Debian y

con un nuevo grupo de reclutas que se alinean esperando a unirse al combate Los soldados desechables (de ahiacute el nom-bre de cannon fodder Carne de Cantildeon) poco a poco se convierten en cruces alin-eadas dando forma a un cementerio mil-itar a medida que vas completando cada misioacuten formaacutendose maacutes y maacutes filas con-forme vas enterrando a tus predecesores Sin embargo los desarrolladores le di-eron un cierto toque de humor ya que los primeros soldados de tu escuadroacuten (y por tanto los casi seguro que moriraacuten) llevan de hecho los nombres de las seis personas que componiacutean el equipo de desarrollo del juego

Si nos fijamos bien el juego incor-poraba algunos detalles bastante intere-santes Por un lado tiene su propia can-cioacuten ldquo War never been so much funrdquo que suena durante la intro del juego iexclUno de los desarrolladores del juego Jon Hare compuso la muacutesica junto con el compositor Richard Joseph Si teniacuteas el Amiga CD32 tambieacuten recordaraacutes una pista adicional que incluiacutea un video en el cual los desarrolladores se disparaban entre siacute con armas de juguete (httpbitly2l67bFy) iexclSin duda se divirtieron bastante desarrollando este juego

Cannon Fodder tambieacuten tuvo algu-

JUEGOS LINUX

Ubuntu por igual las puedes encontrar en mi lista principal de paquetes para armhf y jessiemain para arm64

Se puede instalar con este comando en un dispositivo ODROID que ejecute Debian suponiendo que ya tengas con-figurados mis repositorios o esteacutes usando una de mis imaacutegenes de Debian (httpbitly13v98ly)

$ apt-get install

openfodder-odroid

He alterado ligeramente el juego para que siempre se ejecute en modo pantalla completa aunque si lo deseas puedes cambiar al modo de ventana simple-mente pulsando F11 cuando tenga el juego activado

Convirtiendo los datos del juego

Por siacute sola mi versioacuten de Open Fod-der viene con el especial Amiga X-Mas ademaacutes de varios niveles demo dis-ponibles de forma gratuita Si quieres jugar el juego real tendraacutes que importar los datos desde un CD Cannon Fodder

Si estaacute usando un ODROID para ju-gar al Open Fodder puedes localizar las carpetas de los datos del juego en la car-peta $HOMEopenfodderData Por ejemplo homeodroidopenfodderDataDos_CD es una de esas carpetas de datos del juego Existen varias carpe-tas de datos del juego que puedes usar dependiendo de la versioacuten que tengas del juego Cannon Fodder

Dos_CDAunque el juego es compatible con

muchas y diferentes fuentes del juego actualmente soacutelo Dos_CD parece ser una versioacuten de Open Fodder ldquototal-mente compatiblerdquo con muy pocos er-rores y problemas El resto de fuentes del juego pueden tener problemas

Aquiacute tienes un consejo raacutepido Aunque se llama Dos_CD cogeraacute cu-alquier versioacuten de DOS de Cannon Fodder que puedas encontrar Si tienes

figura 7 - Sensible Software - los desarrolladores de cannon fodder

ODROID MAGAZINE 13

WHDLoad en un Amiga (o WinUAE) para extraer los archivos del juego y co-piarlos en la carpeta DataAmigardquo No lo he probado pero si tienes la ldquoCannon Fodder Collectionrdquo de Amiga CD32 no oficial puedes copiar el contenido de FodderNew en esta carpeta lo que tendraacute como resultado niveles completamente diferentes Puede considerarse como una versioacuten maacutes compleja del juego aunque a la vez maacutes divertida Por lo tanto bien poner los archivos originales de Amiga aquiacute o bien los archivos FodderNew de la ldquoCannon Fodder Collectionrdquo

Dos2_CDDos2_CD es en realidad la carpeta

de la versioacuten DOS de Cannon Fodder 2 pero tambieacuten funciona con la versioacuten GoG Desafortunadamente tiene algu-nos problemas el maacutes grave es que el juego no tiene ninguacuten tipo de sonido o muacutesica Aparte de esto todo parece fun-cionar correctamente pero desconozco coacutemo reaccionaraacute en niveles posteriores La carpeta Data tambieacuten incluye las car-petas WAV Plus AmigaFormat_XMAS y Custom En WAV se almacenan los efectos de sonido por defecto para to-dos los juegos (Cannon Fodder) Plus es una demo del nuacutemero 31 la revista Amiga Power y AmigaFormat_XMAS es el Amiga Format Christmas Special Tambieacuten hay una carpeta Custom que te permite jugar otros juegos y mapas pero necesitan la versioacuten (CD) de DOS o de lo contrario no apareceraacuten

Notas finalesOpen Fodder es un buen proyecto

que te permite ejecutar este increiacuteble juego en sistemas modernos Realmente me gusta y estoy deseando ver coacutemo pro-gresa Espero que las versiones de Amiga y Cannon Fodder 2 sean pronto total-mente compatibles Tal vez incluso poda-mos ver mejoras graacuteficas con el tiempo Me gustariacutea ver graacuteficos maacutes modernos ya que el juego es bastante antiguo y los graacuteficos no son los maacutes idoneos para res-oluciones 1080p

la versioacuten de disco de Cannon Fodder simplemente copia el CF_ENGDAT en la carpeta Dos_CD La versioacuten original de CD DOS teniacutea un archivo llamado cf_cddat Cambiar el nombre a CF_ENGDAT y copiarlo a la carpeta Dos_CD Si tienes la versioacuten GoG del juego soacutelo tiene que copiar CF_ENG DAT a la carpeta Dos_CD iexclEsta es una forma raacutepida y legal de conseguir el juego si estaacutes interesado

Aseguacuterate de que el nombre del ar-chivo este en mayuacutescula ya que el juego tiene en cuenta esta cuestioacuten Intenta que coincida todo para asegurarte de que las cosas funcionen sin problemas

Amiga_CDAmiga CD32 tambieacuten contaba con

una versioacuten de este juego Esta es la ver-sioacuten que incluye el video al que hemos hecho referencia anteriormente En el CD de Amiga CD32 hay una carpeta llamada Fodder El contenido de esta carpeta debe copiarse a la carpeta Ami-ga_CD Puedes extraer la segunda pista del CD y almacenarla como Track2flv en la misma carpeta con la finalidad de tener el archivo de video

Me topeacute con algunos problemas cu-ando haciacutea esto y descubriacute nuevamente que el juego buscaba muchos archivos en mayuacutesculas asiacute que utiliceacute el siguiente comando para copiar todos los archivos y tenerlos tambieacuten en mayuacutesculas en la carpeta Amiga_CD$ for files in `ls` do cp $files

`echo $files | tr lsquo[lower]rsquo

lsquo[upper]rsquo` done

Asiacute funcionaba bien pero teniacutea algu-nos fallos Por ejemplo la animacioacuten del helicoacuteptero al inicio de cada misioacuten no apareciacutea y el cursor cuando se guarda un archivo se distorsionaba Aparte de esto no he visto problemas importantes en la versioacuten Amiga CD32

AmigaLa Informacioacuten de desarrollador de

Open Fodder dice ldquoUsar el instalador

JUEGOS LINUXJUEGOS ANDROID

CAuSALITy un JuEGO DE ROMPE-CABEzAS COn PARA-DOJAS DE vIAJES En EL TIEMPO por bruno Doiche

Configura tuacute mismo los entornos extrantildeos e insoacutelitos y

ayuda a un grupo de astronautas varados a encon-trar una ruta hacia un lugar seguro Cada nivel al que te enfrentas representa un nuevo reto donde necesitas llevar a tu astronauta a una salida que coincida con su color Los maacutergenes de tiempo son cortos aunque es muy divertido Aunque formas parte de tan soacutelo una fraccioacuten de tiempo de la vida de tu personaje iexclten cuidado pasaraacutes un montoacuten de tiempo enganchado a este juego

httpsplaygooglecomstoreappsdetailsid=comlojugamesandroidCausality

el entorno 3D isomeacutetrico es magniacute-fico a menudo no superaba el nivel porque los graacuteficos me cautivaban

ODROID MAGAZINE 14

tePi necesitan estar conectados a otros distintos en el ODROID-C2 porque parece haber un conflicto La interfaz UART ocupa estos pines y el estado por defecto del ODROID (1=high en Pin 8) no es lo que espera la RemotePi (GPIO debe entrar en el valor por defecto 0=low para cortar la energiacutea tras el apagado) Pero puesto que necesitas utilizar cables de todos modos para conectar la Remot-ePi esto no supondraacute ninguacuten problema ya que simplemente puedes reconectar los cables a otros pines GPIO

Como evitamos el circuito de ali-mentacioacuten del ODROID encendieacutendo-lo a traveacutes de GPIO tambieacuten pasamos por alto la proteccioacuten ante subidas de tensioacuten 2526A del dispositivo pero no te preocupes La RemotePi tambieacuten tiene proteccioacuten ante subidas de tensioacuten que deberiacutea coincidir con el mismo val-or que en el caso de la RemotePi board para la Raspberry Pi 3 Sin embargo la RemotePi para la Raspberry Pi 2 es de soacutelo 2A Esto estaacute bien porque el valor es menor a los 26A del ODROID de modo el polyfuse de la RemotePi se ac-tivariacutea antes si conectas demasiados dis-

La RemotePi board (httpbitly2l8JcWU) que convierte cu-alquier mando a distancia en un

interruptor de encendido para tu orde-nador de placa reducida puede ser com-patible con el ODROIDC2 si sigues esta guiacutea Si utilizas tu dispositivo como centro multimedia esta placa te propor-cionara un receptor de infrarrojos y un circuito de alimentacioacuten asiacute como un botoacuten de encendido Puedes encender y apagar tu ODROID completamente a traveacutes de una sentildeal infrarrojos (IR) y simplemente presionar el botoacuten de en-cendido para apagarlo y reiniciarlo con seguridad La placa RemotePi es respon-sable del modo espera que absorbe una miacutenima energiacutea mientras el ODROID estaacute completamente apagado Por uacutel-timo la placa alimenta tu dispositivo a traveacutes de GPIO lo cual requiere un cable microUSB para conectarlo a la Re-motePi en lugar de utilizar un adaptador de corriente normal

Configuracioacuten de hardware

Puesto que la RemotePi estaba pen-sada originalmente para la Raspberry Pi 2 necesitaraacutes utilizar cables adiciona-les en lugar de colocarla justamente en cima del C2 para evitar interferir con el disipador de calor asiacute que debes re-cablear algunos pines Es necesario utili-zar cables con el diaacutemetro adecuado para los pines de 5V y puesta a tierra ya que la corriente podriacutea estar entre los 2A y 26A dependiendo de cuaacutentos dispositi-vos USB conectes a tu dispositivo

Los pines GPIO 8 y 10 de la Remo-

positivos no alimentados de forma exter-na que no es una buena idea en un SBC al fin al cabo No obstante debido a esta diferencia de amperaje una RemotePi para la Raspberry Pi 3 seriacutea la mejor op-cioacuten para este proyecto

Como resultado del nuevo cableado el firmware de RemotePi ya no se puede configurar de forma normal aunque nunca he usado esta funcioacuten Si fuera necesario configurar o actualizar el firm-ware necesitaraacutes volver a conectar los pines 8 y 10 de la RemotePi a los pines 8 y 10 del ODROID durante la actu-alizacioacuten del firmware y luego deshacer los cambios una vez que la actualizacioacuten haya finalizado Otra posibilidad es simplemente conectar una Raspberry Pi para actualizar el firmware Esto suena a un montoacuten de problemas pero en re-alidad simplemente es extender la con-exioacuten del cabezal y cambiar una liacutenea en el script principal y dos liacuteneas en otro script opcional si haces uso de ello

Re-cableando laconexioacuten GPIO

Dado que la RemotePi estaacute disentildeada

REMOTEPI BOARD PARA EL ODROID-C2por inifity85

REMOTEPI

figura 1 - remotepi board

ODROID MAGAZINE 15

ergiacutea completamenteIrswitchsh (solo cambia el script

original de MSL Digital de GPIOpin1 = 14 a GPIOpin1 = 225)

binbash

prevent restarting XBMC at

shutdown This is only used for

OpenElec before V5

LOCKDIR=rdquovarlockrdquo

LOCKFILE=rdquoxbmcdisabledrdquo

this is the GPIO pin receiving

the shut-down signal

Raspberry Pi pin8 GPIOpin1=14

Odroid-C2 pin26 GPIOpin1=225

GPIOpin1=225

functions

add_omit_pids()

omit_pids=rdquo$omit_pids -o $1rdquo

safe_shutdown ()

for OpenElec before V5

touch ldquo$LOCKDIR$LOCKFILErdquo

for OpenElec V5 and later

systemctl stop kodi

add_omit_pids $(pidof connmand)

add_omit_pids $(pidof dbus-dae-

mon)

killall5 -15 $omit_pids

for seq in `seq 1 10` do

usleep 500000

clear gt devtty1

killall5 -18 $omit_pids || break

done

sync

umount -a gtdevnull 2gtamp1

poweroff -f

echo ldquo$GPIOpin1rdquo gt sysclass

gpioexport

echo ldquoinrdquo gt sysclassgpio

gpio$GPIOpin1direction

while true do

sleep 1

power=$(cat sysclassgpio

gpio$GPIOpin1value)

if [ $power = 0 ] then

echo ldquooutrdquo gt sysclassgpio

gpio$GPIOpin1direction

echo ldquo1rdquo gt sysclassgpio

una carcasa personalizada de modo que el receptor integrado podriacutea estar oculto y no ser uacutetil En ese caso puedes desac-tivar el IR del ODROID en favor del re-ceptor externo GPIO-IR en la RemotePi y conectar el pin 12 Tienes disponible maacutes informacioacuten sobre el cambio al receptor GPIOIR en LibreELEC en httpbitly2lpDl27

Scripts de apagado para LibreELEC

Los dos scripts tratados a continu-acioacuten pueden descargarse desde la paacutegina de soporte de MSL Digital Solutions en httpbitly2kMxyVG En esta paacutegina tambieacuten encontraras una guiacutea para utili-zar estos scripts en otros sistemas opera-tivos como Volumio y RuneAudio

El script irswitchsh se usa para el apagado seguro a traveacutes de sistema In-frarrojos Tras pulsar el correspondiente botoacuten el sistema se apagaraacute de forma se-gura luego RemotePi esperaraacute a que el GPIO225 alcance el estado 0 (low) que aparece tras el cierre exitoso del sistema Finalmente cortaraacute la energiacutea

El script shutdownsh se usa para el apagado seguro a traveacutes de la interfaz del programa o script Despueacutes de navegar hasta el botoacuten de apagado en la GUI el sistema se apagaraacute de forma segura luego RemotePi esperaraacute a que el GPIO225 alcance el estado 0 (low) que apareceraacute tras apagarse el sistema de forma adec-uada y segura Finalmente cortaraacute la en-

originalmente para una Raspberry Pi desgraciadamente no es soacutelo enchufar y usar Necesitaraacutes volver a cablear dos pines usando los cables de todos los pines tal y como se muestra en la Figura 2 Re-cablea el pin 8 de la RemotePi al pin 26 del ODROID-C2 y el pin 10 de la RemotePi al pin 7 del ODROID-C2

Si no quieres utilizar el receptor IR de la RemotePi para el mando a distan-cia de LibreELEC puedes dejar desco-nectado el pin 12 La placa continuaraacute encendieacutendose y apagaacutendose a traveacutes del comando de control remoto IR pero el control de la GUI de LibreELEC seraacute asumido por el receptor de infrarrojos integrado en el ODROID Sin embargo si has comprado una RemotePi con un receptor IR y un LED externo es posible que hayas decidido colocarla dentro de

REMOTEPI

figura 3 - la remotepi ha sido recableada y montada en una carcasa personalizada

figura 2 - re-cableado Gpio

ODROID MAGAZINE 16

Centro Multimedia por ejemplo Esos comandos de apagado se equiparaacuten a eventos internos similar a cuando nave-gas por el menuacute de apagado de Kodi Sin utilizar este segundo script el sistema se cerraraacute con seguridad pero la placa Re-motePi no recibiriacutea ninguna indicacioacuten para monitorizar el GPIO225 de modo que no cortariacutea la energiacutea tras apagarse el sistema correctamente

Usando el receptor IR de la RemotePi

Si deseas utilizar el receptor IR de la RemotePi en lugar del receptor IR ODROID integrado tendraacutes que des-activar el sistema IR integrado y activar el receptor IR GPIO Para hacer esto en Ubuntu puede consultar el artiacuteculo de la Wiki de Hardkernel en httpbitly2l8KrWg Para Libre-ELEC echa un vistazo a mi mini-guiacutea en httpbitly2lLKj2A Para preguntas comentari-os o sugerencias visita el hilo original en httpbitly2mgFGKk

gpio$GPIOpin1value

sleep 3

safe_shutdown

fi

done

Shutdownsh (solo cambia GPIOpin =15 a GPIOpin =249 y GPIOpin1 =14 a GPIOpin1 =225)

binbash

if [ ldquo$1rdquo = ldquorebootrdquo ] then

Raspberry Pi pin10 GPIOpin=15

Odroid-C2 pin7 GPIOpin=249

GPIOpin=249

Raspberry Pi pin8 GPIOpin1=14

Odroid-C2 pin26 GPIOpin1=225

GPIOpin1=225

echo ldquo$GPIOpinrdquo gt sysclass

gpioexport

execute shutdown sequence on

pin

echo ldquooutrdquo gt sysclassgpio

gpio$GPIOpindirection

echo ldquo1rdquo gt sysclassgpio

gpio$GPIOpinvalue

usleep 125000

echo ldquo0rdquo gt sysclassgpio

gpio$GPIOpinvalue

usleep 200000

echo ldquo1rdquo gt sysclassgpio

gpio$GPIOpinvalue

usleep 400000

echo ldquo0rdquo gt sysclassgpio

gpio$GPIOpinvalue

set GPIO 14 high to feedback

shutdown to RemotePi Board

because the irswitchsh has

already been terminated

echo ldquo$GPIOpin1rdquo gt sysclass

gpioexport

echo ldquooutrdquo gt sysclassgpio

gpio$GPIOpin1direction

echo ldquo1rdquo gt sysclassgpio

gpio$GPIOpin1value

usleep 4000000

fi

El script shutdownsh es uacutetil si a vec-es usas las aplicaciones remotas Android Yatse o Kore o hotkeys para apagar tu

REMOTEPI

ODROID Talk Subreddit

httpwwwredditcomrodroid

ODROID Magazine

estaacute en Reddit

ODROID MAGAZINE 17

El HiFi Shield 2 (39$ httpbitly2lHSlZJ) es un Con-vertidor Digital a Analoacutegico de Alta definicioacuten (DAC) para el ODROID-C2 y el ODROID-C1+ Se trata de

una placa de sonido especial para el ODROID-C2 y C1 + que estaacute optimizada para mejorar la calidad de reproduccioacuten del sonido Ofrece un sonido muy bien equilibrado consistente intenso amplio y muy bien dimensionado por niveles Hemos analizado la calidad de audio de la salida HiFi Shield 2 DAC con un equipo estaacutendar de la industria del sonido llamado Au-dio Precision Audio Precision es un analizador de audio de alto rendimiento optimizado para la produccioacuten de audio digital

Usando el chip DAC PCM5242 de uacuteltima generacioacuten de Texas Instrument conocido como Burr-Brown el HiFi Shield 2 soporta formatos de audio de 16 24 y 32 bits con una ra-tio THD+N miacutenima (0002) y una dinaacutemica ideal (114dB +) ademaacutes de sorprendentes tasas de muestreo de 384 kHz La interfaz dedicada SPDIF soporta una definicioacuten de hasta 192kHz24bit a traveacutes de una salida oacuteptica (Toslink)

Si hacemos uso del puerto de expansioacuten I2S en el C2C1+ no es necesario ocupar un puerto USB permitiendo al usu-ario seleccionar el sistema de reproduccioacuten de audio que desee como Volumio y Debian (DietPi) para reproducir sonido HiFi

HIFI SHIELD 2

HIfI SHIELD 2EL MEJOR SOnIDO quE PODRAS COnSEGuIR En AnDROIDeditado por rob roy (robroy)

oDroiD-c2 y hifi Shield 2 Audio pb +J

primer plano de la placa con anotaciones

Distribucioacuten de los 7 pines i2S del c2c1+

la salida de audio es estaacutendar la salida de color rojo corresponde al canal de audio iz-quierdo y la salida de color blanco correspon-de al canal de audio derecho

ODROID MAGAZINE 18

Detalles

La guiacutea de configuracioacuten de UbuntuLinux para ODROID-C2 estaacute disponible en httpbitly2brrGdG y para ODROID-C1+ en httpbitly2lI7AC7 El sistema operativo oficial Volumio 2 se puede descargar desde httpbitly2kOJNAV y la imagen DietPi basada en Debian se encuentra en httpbitly2ls45yM Puede ver los esquemas en httpbitly2mnukV4

Diagrama por bloques del hifi Shield2

Caracteriacutesticasbull El control de volumen a traveacutes de la interfaz

i2c es una gran caracteriacutestica para mantener una buena calidad del sonido con varios voluacutemenes de salida de audio

bull Los puertos de salida incluyen terminales esteacute-reo rcA chapados en oro

bull La fuente de alimentacioacuten tiene habilitado un regulador de interferencias de ruido ultra-bajo lo cual reduce el ruido de la fuente de alimentacioacuten y aumenta en gran medida el ratio sentildealruido

bull La interfaz I2S permite la descodificacioacuten di-recta de la entrada digital a la salida analoacutegica utili-zando la sincronizacioacuten del reloj maestro

bull La superficie de la PCB estaacute chapada en oro so-bre 2 onzas de cobre lo cual garantiza la continui-dad de la sentildeal y reduce la reflexioacuten y deflacioacuten de la sentildeal

bull Dispone de almohadillas soldadas a la salida de audio balanceada (sentildeal diferencial)

bull La interfaz SPDIF dedicada es nueva admite una definicioacuten de hasta 192khz24bit a traveacutes de una nueva salida oacuteptica (toslink)

bull Este HiFi shield no es compatible con Android y hardkernel no tiene planes para hacerlo compatible y asiacute poder habilitar el controlador i2S en el Kernel y el hAl de Android

El Manual de usuario del ODROID-XU4 disponible en httpbitly1U9Q8yg ha sido revisado hace poco para incluir algunos de los perifeacutericos maacutes recientes como

la Expansion Board SmartPower2 y oCam Puesto que ahora Hardkernel tambieacuten ofrece Ubuntu 1604 todos los ejemplos de coacutedigo se han actualizado para que sean compatibles con el nuevo sistema operativo Si tiene comentarios preguntas o sugerencias visita el hilo de los foros ODROID en httpbitly1RykBrT

MAnuAL Xu4ACTuALIzADOREvISADO PARA uBunTu 1604 y LOS PERIfERICOS MAS RECIEnTESeditado por rob roy (robroy)

MANUAL XU4

el manual del oDroiD-xU4 incluye informacioacuten detallada de los diferentes sistemas operativos software y perifeacutericos disponibles para el oDroiD-xU4

ODROID MAGAZINE 19

El DevOps es complicado Los grandes proyectos de soft-ware como Mesos y Kubernetes desarrollan equipos como los que se encuentran en la mayoriacutea de las empre-

sas y organizaciones tecnoloacutegicas como CoreOS con la finali-dad de ayudar a los desarrolladores a poner sus aplicaciones en funcionamiento Sin embargo iquestcuaacutel seriacutea una buena solucioacuten para un desarrollador en solitario o una pequentildea red domeacutesti-ca iquestCoacutemo podemos usar el coacutedigo a nivel de infraestructura

Uso un portaacutetil Macintosh OSX para desarrollo pero para las aplicaciones de larga duracioacuten o aplicaciones que se ejecu-tan por la noche necesito un entorno remoto siempre activo ya que mi portaacutetil estaraacute fuera de liacutenea o en el tren conmigo mientras voy y vengo del trabajo Tiene su sentido no utilizar el ordenador como un entorno para la puesta en funcionamiento de aplicaciones

El ODROID-XU4 es un ordenador ideal para un entor-no de implementacioacuten remoto ya que es econoacutemico flexible cuenta con excelentes especificaciones teacutecnicas y puede ejecutar Linux Este artiacuteculo tiene por objetivo explicar coacutemo almacenar coacutedigo de implementacioacuten en tu repositorio de proyectos asiacute como automatizar las implementaciones y ejecuciones

Arch LinuxArch Linux es una distribucioacuten de Linux gratuita de coacutedigo

abierto que fue lanzada en 2002 Estaacute centrada en la elegancia la integridad del coacutedigo el minimalismo y la simplicidad y cuenta con que el usuario haga un esfuerzo en comprender el funcionamiento del sistema Arch Linux utiliza en particular un modelo de revisioacuten continua de modo que todo lo que se necesitas para conseguir el software del sistema maacutes reciente es actualizar el sistema de forma perioacutedica

Arch Linux puede ser algo difiacutecil de asimilar ya que uti-liza herramientas diferentes a las de una distribucioacuten Debian El gestor de paquetes se activa a traveacutes de ldquopacmanrdquo en lugar de ldquoapt-getrdquo y existe un gestor complementario de paquetes muy popular llamado ldquoyaourtrdquo Muchos de los servicios o her-ramientas maacutes comunes no se instalan por defecto

Arch Linux esta hecho principalmente para procesadores x86 pero un proyecto llamado Arch Linux ARM (ALARM) tiene una distribucioacuten ARM de Arch Linux para arquitectu-ras AArch64 ARMv8 y ARMv7 Hardkernel el fabricante de ODROIDs es de hecho un patrocinador del proyecto Arch Linux ARM

HOME DATA CENTER

HOME DATA CEnTERIMPLEMEnTACIOn DEL CODIGO COn ARCHLInuXpor John Skilbeck

Configurar la redDeberaacutes asignarle a tu dispositivo una direccioacuten IP LAN

DHCP reservada y en el mejor de los casos un nombre de host que se propagaraacute a lo largo de tu red por medio del servidor DNS de tu router De esta forma en nuestro entorno de desar-rollolocal podremos utilizar un nombre de host para resolver siempre el entorno de implementacioacutenremoto

Por ejemplo en mi red reservo el 192168249 a la direc-cioacuten MAC de mi ODROID Tambieacuten configuro una entrada DNS que asigna a esa direccioacuten IP ldquoodroidrdquo Utilizar un firm-ware personalizado en el router como Tomato USB o DD-WRT lo hace extremadamente faacutecil ya que esos firmwares convierten tu router en un pequentildeo ordenador Linux con una aplicacioacuten web GUI muy pulida aunque su implementacioacuten estaacute fuera del alcance de este artiacuteculo Si operas con subredes aseguacuterate dirigir el puerto hacia el puerto externo que se asigna al puerto SSH del dispositivo odroid ya que Git se ejecuta a traveacutes de SSH

Configurar el proyectoLoacutegicamente desearaacutes estandarizar el flujo de trabajo de la

implementacioacuten Esto haraacute que el trabajo con proyectos sea

el home data center de John es una auteacutentica obra de arte

ODROID MAGAZINE 20

extremadamente faacutecil y eliminas muchos de los cambios de contexto mental que utilizas cuando trabaja en varios proyec-tos Crearemos una carpeta para alojar todos nuestros archivos relacionados con implementaciones Coloca los archivos eje-cutables en ldquodeploybinrdquo y cualquier archivo cron en ldquodeploytasksrdquo (maacutes informacioacuten sobre esta cuestioacuten maacutes adelante)

Navega hasta el directorio del proyecto en una ventana de Terminal y luego escribe los siguientes comandos

$ mkdir -p deploybin

$ mkdir -p deploytasks

$ cd deploybin ampamp touch run-job ampamp

chmod u+x run-job ampamp cd -

$ cd deploytasks ampamp touch crontab

Tambieacuten puede estandarizar doacutende colocar tu coacutedigo fuente De esta forma le seraacute maacutes faacutecil a otras personas ver coacutemo se or-ganiza tu proyecto y conocer queacute es el coacutedigo fuente y queacute no

$ mkdir src

$ cd src ampamp (place source code here ie python core

py clojure coreclj nodejs appjs)

Simplificar los puntos de entradaIniciar una aplicacioacuten puede resultar algo confuso con todos

los comandos que se pueden ejecutar en diferentes lenguajes Por ejemplo puede usar Java ldquojava -jar [my-jar] jarrdquo o python ldquopython my-apppyrdquo y tu aplicacioacuten tambieacuten puede necesitar varios argumentos Todo esto deberiacutea simplificarse y resumirse en un archivo ldquodeploybinrun-jobrdquo

binsh

set -e

CMD=rdquosrcduckrdquo

exec $CMD $

Crear el archivo cronArch Linux no viene con un cliente o demonio cron por

defecto Instaacutelalo con ldquosudo pacman -Syu cronierdquo Utilizando cron puede ejecutar comandos en intervalos de tiempo espe-cificados haciendo uso de la sintaxis especial de cron Normal-mente se almacena en el archivo crontab del usuario al que puedes acceder con ldquocrontab -erdquo Sin embargo esto es demasi-ado manual y queremos usar coacutedigo como infraestructura Cron tambieacuten tiene algunos subdirectorios muy uacutetiles en ldquoetccronrdquo como ldquoetccrondailyrdquo yrdquoetccronhourly ldquo si co-locamos los archivos aquiacute eacutestos se ejecutaraacuten en los intervalos especificados

Revisa el archivo de ldquodeploytaskscrontabrdquo que colocare-mos en ldquoetccrondrdquo que se crea automaacuteticamente con nuestro script ldquoposttreceiverdquo

variables

SHELL=binbash

PATH=binusrbinusrlocalbinusrsbinusrlo-

calsbin

MAILTO=[your-email-address]gmailcom

cmd=rdquodeploybinrun-jobrdquo

app_dir=rdquohomeskilbjodeployappduckdnsrdquo

jobs

5 skilbjo cd ldquo$app_dirrdquo $cmd gtdevnull

Aquiacute tienes el esquema general de la estructura de un simple proyecto El uacutenico ejecutable del proyecto es un uacutenico script shell ubicado en ldquosrcrdquo

$ tree

READMEmd

deploy

bin

post-receive

run-job

tasks

crontab

src

duck

4 directories 5 files

GitPrimero queremos agregar una URL remota a nuestro

proyecto en nuestro entorno local

$ git remote add odroid sshodroid~deploygit

duckdnsgit

Ten en cuenta que dependiendo de la topologiacutea de tu red es posible que tenga que modificar esta url Si no puedes asignar nombres de host la URL de git se veriacutea asiacute donde 192168249 es la direccioacuten IP LAN de tu dispositivo

$ ssh192168249~deploygitduckdnsgit

Si tienes un usuario en tu entorno ODROID distinto al que tienes en tu entorno de desarrollo la url se veriacutea asiacute donde ldquoskilbjordquo es tu nombre de usuario

$ sshskilbjoodroid~deploygitduckdnsgit

Si tu servidor remoto estaacute en una subred diferente y tienes redireccionados los puertos tu url tendriacutea este aspecto donde

HOME DATA CENTER

ODROID MAGAZINE 21

ldquo2222rdquo es tu puerto externo

$ ssh192168122222~deploygitduckdnsgit

En el directorio principal de tu entorno remoto crea una carpeta llamada ldquo~deployrdquo con dos subcarpetas ldquo~deployapprdquo y ldquo~deploygitrdquo Los subdirectorios de ldquo~deploygitrdquo seraacuten los puntos finales de nuestros desarrollos y con un hook ejecutaraacuten comandos de implementacioacuten en los subdirectorios de ldquo~ deployapprdquo

Primero navega hasta el directorio principal del entorno re-moto y a continuacioacuten escribe los siguientes comandos

$ mkdir -p ~deployapp

$ mkdir -p ~deploygit

$ mkdir -p ~deploygitduckdnsgit

$ mkdir -p ~deployappduckdns

Ahora en ldquo~ deploygitduckdnsgithooksrdquo crea un archi-vo ejecutable llamado ldquopost-receiverdquo que se activaraacute con cada accioacuten hacia el punto final

$ cd ~deployappgitduckdnsgithooks

$ touch post-receive ampamp chmod u+x post-receive

$ vim post-receive

Rellena el ejecutable con lo siguiente en el directorio ldquo~deploygitduckdnsgithooksrdquo del entorno remoto

usrbinenv bash

set -eou pipefail

user=$(whoami)

dir=rdquohome$userdeployapprdquo

app=$(basename $(pwd) | sed -e lsquosgitrsquo)

deploy_dir=rdquo$dir$apprdquo

cron_dir=rdquoetccrondrdquo

GIT_WORK_TREE=rdquo$deploy_dirrdquo git checkout -f

cd ldquo$deploy_dirrdquo

build steps here

case ldquo$userrdquo in

(skilbjo) sudo cp deploytaskscrontab ldquo$cron_

dir$apprdquo

esac

you can also do project-specific build steps in

this section like install

dependencies (ie npm install) compile source

code (ie lein uberjar)

as well as if a long-lived app run commands as

well (ie java -jar my_jarjar)

echo ldquoall donerdquo

exit 0

ImplementacioacutenAhora estamos listos para implementar ya que nuestro en-

torno local estaacute configurado para alcanzar el punto final del servidor de implementacioacuten nuestro entorno remoto estaacute con-figurado para recibir la notificacioacuten y revisar el coacutedigo fuente ejecutar cualquier paso de compilacioacuten y colocar una tarea en el directorio cron del sistema para su lanzamiento Ponto todo en praacutectica con el siguiente comando en el directorio del proyecto del entorno local

$ git push odroid

Ademaacutes para ver coacutemo se ha implementado todo esto en un proyecto de ejemplo visita httpbitly2lthYKW

Pasos finalesSe puede antildeadir al flujo anterior algunas caracteriacutesticas

como son muacuteltiples entornos ya sea con muacuteltiples ODROIDs o con un solo ODROID trataacutendolo como un servidor de ser-vicio Esto se puede hacer con subdirectorios bajo ldquo~deployrdquo como ldquo~deploystagingappmy_apprdquo o ldquo~ deployproduc-tionappmy_apprdquo

Ademaacutes podriacuteas antildeadir un servicio de integracioacuten conti-nua como CircleCI que ejecutariacutea una suite de testeo desde cada desarrollo a GitHub y si tiene eacutexito compila una imagen Docker No podriacuteas entonces tener un archivo en el entorno remoto que verificariacutea una imagen de un repositorio Docker y la ejecutariacutea en un intervalo especificado Esto es lo que hacen muchos de los softwares DevOps distribuidos como Mesos y Kubernetes pero en un entorno mucho maacutes rico que BASH y Linux

Referencias

Artiacuteculo Wikipedia de Arch linux httpbitly2l71ADKWebsite Arch linux ArM httpsarchlinuxarmorgArtiacuteculo que leiacute hace unos tres antildeos y que me inspiroacute para escribir mi propio artiacuteculo httpbitly2m5JAct

HOME DATA CENTER

ODROID MAGAZINE 22

odroid ARCADE BOXLA EXPERIEnCIA PERfECTA COn TuS JuEGOS ARCADE fAvORITOSpor brian Kim charles park y John lee

ARCADE BOX

Los ODROIDs tienen mejor rendimiento que las placas de la competencia especialmente en lo que respecta al renderizado de video lo que significa que

las placas ODROID son ideales para jugar lo cual hacen muchos usuarios de ODROID Ya hay disponibles varios sistemas operativos de plataforma de juegos como Lakka (httpbitly1NO8BBC) y ODROID GameStation Tur-bo (httpbitly1ASFO5O) Para disfrutar auacuten maacutes de nuestras sesiones de juegos creamos nuestra propia consola arcade con simples botones GPIO y joysticks y la llama-mos la ODROID Arcade Box Elegimos un ODROID-XU4 para este proyecto porque es el que tiene mejor rendimiento GPU de todos los dispositivos ODROID actuales En este artiacuteculo vamos a describir como hemos creado la ODROID Arcade Box

Requisitos( Figura 3 ndash )Decidimos hacer la ODROID Arcade Box usando

un MDF (tablero de fibra de densidad media) El Shifter Shield del XU4 tambieacuten es uacutetil para utilizar los pines de expansioacuten del ODROID-XU4 Los Joysticks los botones y los cables eran los componentes de entrada y se utilizoacute

Nuestro primer y simple prototipo

ODROID MAGAZINE 23

panel MDf 12t2eA 600x2202eA 600x752eA 220x75taladroplegadoraDesmontadorcinta meacutetricaNavaja multiusoAlicates de punta largaoDroiD-xU4xU4 Shifter shieldSMpS (fuete Alimentacioacuten)

extendedores hDMi USb ethernetenchufe de alimentacioacuten y Switchbisagras 2eAreceptor de puertacaucho 4eAtornillospulsadores 19eAJoystick 2eAcablesterminales

una SMPS (Fuente de alimentacioacuten conmutada) como fuente de alimentacioacuten Las herramientas y las piezas utilizadas las tienes en esta paacutegina

La ODROID Arcade Box necesita un total de 27 entradas (19 entradas para botones y 8 entra-das para joysticks) Las 24 entradas GPIO digi-tales del ODROID-XU4 no son suficientes para las 27 entradas de modo que creamos dos puertos ADC adicionales para los tres botones que nos fal-taban Los valores de entrada ADC se basan en el voltaje de entrada y los valores de entrada digital y analoacutegica se procesan en el demonio GPIO que se describe a continuacioacuten

Disentildeo y montajeLos paneles de la ODROID Arcade Box deben

ser disentildeados y fabricados para que los botones y joysticks esteacuten bien colocados Elegimos MDF 12T teniendo en cuenta el precio y la durabilidad El dise-ntildeo se puede hacer con cualquier herramienta CAD como Google Sketch o SolidWorks Aunque existen muchas plantillas de disentildeo para los paneles de joypad decidimos elegir un disentildeo arcade estaacutendar japoneacutes

El primer paso del montaje es unir la placa al panel MDF Este paso fue faacutecil aunque nos llevo maacutes tiempo que el resto Despueacutes insertamos los joysticks la toma de corri-ente el interruptor y los botones en el panel MDF superior Los conectores HDMI Ethernet y USB se colocaron en la parte trasera del panel MDF El siguiente paso fue montar cada panel MDF usando un taladro para hacer los agujeros luego con tornillos los sujetamos

El uacuteltimo paso del montaje de la ODROID Arcade Box es conectar por cable los pines de expansioacuten del ODROID-XU4 a los componentes de entrada En este proyecto dise-ntildeamos las entradas GPIO externas tal y como se muestra en la paacutegina 26 Los botones Select y Temp estaacuten conecta-dos a puertos de expansioacuten ADC

Configuracion del softwareDesarrollamos un nuevo demonio GPIO llamado gpio_

keyd (httpbitly2ljOZKg) Este demonio es capaz de asignar entradas GPIO y eventos claves usando uinput y wiringPi una libreriacutea de acceso GPIO basada en pines Estaacute disentildeada para que le sea familiar a quiene ya ha utilizado el sistema de cableado Arduino Aunque la blibreriacutea wiring-Pi upstream soacutelo admite Raspberry Pi Hardkernel ofrece una versioacuten de wiringPi para ODROIDs en su repositorio GitHub (httpbitly1Eq3UpF) El moacutedulo uinput es un moacutedulo del kernel de Linux que gestiona el subsistema de entrada del usuario Se puede utilizar para crear y manejar dispositivos de entrada desde una aplicacioacuten

ARCADE BOX

herramientas compentes y lo que hay justamente debajo

esquema de los puertos de expansioacuten

ODROID MAGAZINE 24

Elegimos ODROID GameStation Turbo (httpbitly1ASFO5O) como plataforma de software para nuestra ODROID Arcade Box que tiene integrado uinput Debes asegurarte de que el archivo de dispositivo uinput existe en el sistema operativo elegido porque algunos no tienen dispositivos uinput

$ ls devuinput

Si tu sistema operativo no tiene un archivo de disposi-tivo devuinput entonces seraacute necesario recompilar e in-stalar un nuevo kernel con la opcioacuten de configuracioacuten IN-PUT_UINPUT habilitada La paacutegina Wiki en httpbitly1YIToBI describe coacutemo compilar e instalar la imagen del kernel a partir del coacutedigo fuente

$ make menuconfig

Device Drivers

-gt Input device support

-gt Generic input layer

-gt Miscellaneous device

-gt User level driver support ltgt

Ten en cuenta que wiringPi debe instalarse antes de in-stalar gpio_keyd En la imagen GameStation de ODROID los comandos sudo deben ejecutarse como root porque la cuenta ldquoodroidrdquo no estaacute designada como usuario sudo

$ git clone httpsgithubcomhardkernelwiringPi

git

$ cd wiringPi

$ sudo build

Descarga el coacutedigo fuente gpio_keyd el cual estaacute dis-ponible en nuestro repositorio GitHub El procedimiento para compilar e instalar gpio_keyd es muy simple

$ git clone httpsgithubcombkrepogpio_keydgit

$ cd gpio_keyd

$ make

$ sudo make install

El script gpio_keyd hace referencia a etcgpio_keydconf como el predeterminado para la informacioacuten de los botones y GPIO El archivo de configuracioacuten fue modi-ficado para las 27 entradas de la ODROID Arcade Box Algunas botones ya se utilizaban en el emulador de juego de modo que tuvimos que cambiar la configuracioacuten del emulador para evitar conflictos entre los botones de en-trada GPIO y el emulador Ten en cuenta que el campo ltGPIO pingt en el archivo de configuracioacuten hace referen-

ARCADE BOX

plano del disentildeo de joypad

la oDroiD Arcade box montada

ODROID MAGAZINE 25

cia al nuacutemero wiringPi no al GPIO y al nuacutemero de pin (httpbitly2lbzPIB)

Ejemplo de configuracioacuten para las 27 entradas etcgpio_keydconf

Digital input ltKey codegt ltGPIO typegt ltGPIO pingt ltActive valuegt User 1KEY_LEFT digital 15 0KEY_RIGHT digital 1 0KEY_UP digital 4 0KEY_DOWN digital 16 0KEY_A digital 2 0KEY_S digital 3 0KEY_D digital 30 0KEY_F digital 21 0KEY_Z digital 8 0KEY_X digital 9 0KEY_C digital 7 0KEY_V digital 0 0 User 2KEY_BACKSLASH digital 12 0KEY_SLASH digital 13 0KEY_SEMICOLON digital 14 0KEY_LEFTBRACE digital 5 0KEY_Y digital 26 0KEY_U digital 27 0KEY_I digital 22 0KEY_O digital 23 0KEY_H digital 6 0KEY_J digital 10 0KEY_K digital 11 0KEY_L digital 31 0

Analog input ltKey codegt ltGPIO typegt ltADC portgt ltADC ac-tive valuegtKEY_B analog 0 0KEY_N analog 0 2045KEY_M analog 1 2045

To run gpio_keyd daemon at every startup is conve-nient for ODROID Arcade Box

etcinitdgpio_keyd binsh BEGIN INIT INFO

ARCADE BOX

Mapeo Gpio externo para los botones y Joysticks

cableado de la oDroiD Arcade box

ODROID MAGAZINE 26

Provides gpio_keyd Required-Start $all Required-Stop Default-Start 2 3 4 5 Default-Stop Short-Description Run usrbingpio_keyd if it ex-ist END INIT INFO

PATH=sbinusrsbinbinusrbin

libinitvarssh

liblsbinit-functions

do_start() if [ -x usrbingpio_keyd ] then usrbingpio_keyd -d ES=$ [ ldquo$VERBOSErdquo = no ] ampamp log_end_msg $ES return $ES fi

case ldquo$1rdquo in start) do_start restart|reload|force-reload) echo ldquoError argument lsquo$1rsquo not supportedrdquo gtamp2 exit 3 stop) killall gpio_keyd exit 0 ) echo ldquoUsage $0 start|stoprdquo gtamp2 exit 3 Esac

$ sudo chmod +x etcinitdgpio_keyd$ sudo update-rcd gpio_keyd defaults$ sudo reboot

En los comandos anteriores el script gpio_keyd se ejecuta como un demonio uti-lizando la opcioacuten ldquo-drdquo El uso de gpio_keyd se puede comprobar con la opcioacuten ldquo-hrdquo Comprue-ba de nuevo las teclas usadas por el juego o el emulador despueacutes fija la configuracioacuten del gpio_ keyd correctamente Es ahora cuando estaacutes listo para jugar y disfrutar de tus juegos con tu nueva ODROID Arcade Box

ARCADE BOX

the King of fighters 98 John vs brian

ODROID MAGAZINE 27

En este artiacuteculo analizaremos las diferentes formas que existen para ob-tener los datos del uso de la red

ConfiguracioacutenLa forma normal de analizar los datos

de traacutefico de la red es mediante el uso de datos a traveacutes de las aplicaciones de configuracioacuten del sistema tal y como se muestra en la figura 1

El uso de datos muestra la cantidad total de traacutefico de datos entrante y sa-liente que ha sido utilizada por una apli-cacioacuten Si seleccionas la aplicacioacuten veraacute una pantalla como la que aparece en la Figura 2 que muestra informacioacuten detal-lada sobre el uso de la aplicacioacuten tanto en primer plano como de fondo

La informacioacuten que se muestra den-tro de la aplicacioacuten de Configuracioacuten se almacena en data systemnetstats que requiere acceso root Al eliminar todo lo que hay dentro de esta carpeta se resta-

Como desarrolladores queremos que nuestras aplicaciones sean eficientes y a menudo nos gus-

tariacutea saber cuaacutento ancho de banda de red estaacute utilizando nuestra aplicacioacuten Esto es muy uacutetil por varias razones

bull Para monitorizar y asegurarnos de que la aplicacioacuten es realmente la nuestra y no una aplicacioacuten que ha sido pirateada y publi-cada con diferentes nombres en Play Store

bull Para asegurarnos de que no es-tamos cogiendo ancho de banda innecesario del plan de datos del usuario

bull Para comprobar que el disposi-tivo que estamos usando no estaacute accediendo a Internet sin nuestro consentimiento

blecen las estadiacutesticas de red mostradas en esta aplicacioacuten

Estadiacutesticas de la redLa aplicacioacuten de configuracioacuten nos

puede dar una informacioacuten general so-bre las estadiacutesticas de la red de datos que es un buen comienzo pero a veces necesitamos un anaacutelisis maacutes detallado que puede hacerse a traveacutes del coman-do dumpsys Android cuenta con una poderosa herramienta llamada dumpsys que nos permite obtener una instan-taacutenea o volcado del sistema que pu-ede incluir informacioacuten sobre la red la memoria y otros componentes Lee la documentacioacuten de Android en httpbitly2kK9dep para obtener maacutes infor-macioacuten del sistema Para conseguir maacutes informacioacuten relacionada con la red nos interesa el comando

$ dumpsys netstats detail

La Figura 3 muestra un pantallazo de lo que puedes ver desde una tablet Nexus 7 que ejecuta Lollipop 511

Hay algunas cuestiones importantes para entender las estadiacutesticas

bull Las estadiacutesticas UID muestran el desglose de las aplicaciones de primer plano y de fondo

bull Uid muestra el ID de usuario de la aplicacioacuten que se puede utili-zar para relacionar eacutesta con la in-

DESARROLLO AnDROID AnALIzAnDO EL uSO DE RED DE LAS APLICACIOnESpor Nanik tolaram

DESARROLLO ANDROID

figura 1 - Uso de datos en la configuracioacuten

figura 2 - Desglose del uso de datos de la app

ODROID MAGAZINE 28

$ dumpsys package detail

Este comando te proporcionaraacute una larga lista de informacioacuten sobre los pa-quetes que estaacuten instalados en tu dis-positivo Para las estadiacutesticas de red nos interesa la seccioacuten que se muestra en la Figura 5

La seccioacuten resaltada muestra el userId que se relaciona con el uid que se mues-tra en las estadiacutesticas de red Al relacio-nar este nuacutemero sabemos el nombre del paquete de la aplicacioacuten sobre el que es-tamos leyendo las estadiacutesticas de red

Aplicacioacuten de ejemplo

La aplicacioacuten de ejemplo de este artiacute-culo se puede descargar desde httpbitly2m8WenA que muestra coacutemo etiqu-etar la conexioacuten de red desde distintas

secciones de la aplicacioacuten lo cual puede ayudar a analizar el volumen de traacutefico de datos de la aplicacioacuten La Figura 6 muestra un ejemplo de coacutemo lo vemos si utilizamos Android Device Monitor (dentro de Studio diriacutegete a Tools -gt Android -gt Android Device Monitor)

Tal y como se puede ver en el graacutefico la simple aplicacioacuten tiene 3 conexiones dife-rentes y cada una de ellas estaacute accediendo a un sitio web diferente Al etiquetarlas con

formacioacuten del paquete (que ver-emos en la seccioacuten de detalles del paquete dumpsys) con el objeto de conocer queacute aplicacioacuten utiliza estas estadiacutesticas de red

bull Las etiquetas son uacutetiles si de-sea ver la cantidad de datos que utiliza cada conexioacuten de tu apli-cacioacuten Puedes ver un ejemplo de esto en la Figura 4 que muestra que el uid 10007 tiene las siguien-tes etiquetas 0x30000401 0x30003201 0x30002804 0x10000401 y 0x30000407 Es-tas etiquetas ayudan al desarrol-lador a saber cuaacutentos datos uti-liza cada parte de la aplicacioacuten Estas estadiacutesticas de red en par-ticular estaacuten vinculada al paquete Google Framework que forma parte de Google Play Store

En el siguiente apartado veremos coacutemo escribir una aplicacioacuten etiquetando el hilo que hace la conexioacuten de red para determi-nar la cantidad de datos que se utilizan

Estadiacutesticas de paquetes

En la seccioacuten anterior analizamos el uid que aparece al ejecutar el comando dumpsys netstats Ahora necesitamos sa-ber queacute uid corresponde a la aplicacioacuten en el dispositivo y esto se hace mediante el siguiente comando

DESARROLLO ANDROID

figura 3 ndash estadiacutesticas de red con Dumpsys

figura 4 - estadiacutesticas de etiquetas UiD

figura 5 - Detalles del paquete dumpsys

figura 6 - etiquetas de red

coacutedigos diferentes podemos ver la cantidad de traacutefico que consume cada conexioacuten y esto nos ayudaraacute a ver si nuestra aplicacioacuten utiliza el ancho de banda de un modo eficiente

El coacutedigo del siguiente fragmento muestra el uso de la API TrafficStats interna Esta etiqueta API muestra el subproceso que utiliza actualmente un socket con un identificador y todo el traacute-fico que pasa por la misma conexioacuten se grabaraacute junto Asiacute es como la aplicacioacuten es capaz de agrupar las 3 conexiones diferentes Internamente Android utili-za el moacutedulo xt_qtaguid del kernel para realizar este tipo de etiquetado Tienes disponible maacutes informacioacuten en httpbitly2kU8KXB

public void getUsingNormalURLC

onnection(String urlText int

threadTag)

throws IOException

URL url = null

TrafficStats

setThreadStatsTag(threadTag)

HttpURLConnection urlConnec-

tion = getConnection(url)

try

finally

TrafficStatsclearThread-

StatsTag()

ODROID MAGAZINE 29

Disgustado te subes a tu 4x4 de dominacioacuten del mun-do un vehiacuteculo que desde fuera parece maacutes bien un viejo camioacuten de granja pero por dentro se parece maacutes

al sistema de control de un transbordador espacial porque el conductor del restaurante oriental que realiza las entrega a do-micilio estaacute enfermo Ahora tienes que ir a recoger tu propia comida ldquoQueacute rudimentariordquo piensas cuando sales de tu garaje secreto Justamente cuando vas a parar el vehiacuteculo en un stop oyes un fuerte ruido Sales y te diriges raacutepidamente a la parte posterior del 4x4 donde observas un cubo de basura Te tiras de los pelos y piensas ldquoiexclEsos basureros Neanderthales dejaron otra vez el cubo en mediordquo Ahora te toca recoger los restos de tu cena y la basura de otros

Conforme te vas alejando para hacer tus recados empiezas a pensar en coacutemo evitar este inconveniente en el futuro Varias ideas te vienen a la mente

Un sistema lidar para escanear en 3D el entorno en tiempo real y alarmas sonoras cuando sea necesarioUn brazo ciberneacutetico colocado en la parte posterior del 4x4 que procese video para detectar objetos agarrarlos y moverlosUna simple camara trasera

Empiezas a considerar la viabilidad de cada una

Muy bueno pero demasiado complicado y costosoAuacuten mejor y un proyecto propio de un cientiacutefico loco pero demasi-ado complicado y costosoya tengo dos iexclpero estaba demasiado preocupado en mis pensa-mientos para prestarles atencioacuten

Lo que necesitas es algo simple sin complicaciones y barato que haga sonar una alarma para alertarte incluso cuando estar absorto en tus pensamientos ldquoAhardquo Recuerdas haber visto un nuevo producto en ameriDroid que puede hacer precisamente esto Se trata de un microcontrolador conectado al USB que soporta hasta 6 sensores ultrasoacutenicos con simples comandos en serie (httpbitly2l26ptV) ldquoiexclPerfectordquo Piensas

Regresas a tu laboratorio subterraacuteneo con el pollo Kung Pao en la mano te apresurar a encender tus monitores entras en el sitio web ameriDroid y pides un kit ldquoUSB Ultrasonic Ranging Sensorrdquo con 6 sensores y carcasas

Vas sintiendo una sensacioacuten de alivio a medida que regresas a los 12 proyectos en lo que ya estabas trabajando a la espera de que pasen un par de diacuteas hasta que llegue tu nuevo pedido Mientras te comes tu Kung Pao dibujas un diagrama de coacutemo quieres colocar los sensores en la parte posterior de tu vehiacuteculo

Un par de diacuteas maacutes tarde el kit llega Inmediatamente em-piezas a montar el kit y los sensores en la parte posterior de tu 4x4 teniendo cuidado de usar sellador de silicona para pro-teger los sensores de la lluvia aguanieve y nieve que puedas encontrar durante tus aventuras para dominar el mundo

A continuacioacuten consultas las instrucciones proporcionadas por ameriDroid con el kit sobre coacutemo controlar y leer los sen-sores desde tu fiel ODROID-C2 y VU7 que montaste en el salpicadero para este propoacutesito

Conectando el cable USBEl cable USB suministrado debe conectarse al microcon-

trolador (la pequentildea placa de circuito con filas de pines que sobresalen) El microcontrolador tiene una fila de 4 o 6 pines

DETECTAR LA PRESEnCIACROnICAS DE un CIEnTIfICO LOCOpor bo lechnowsky

SENSOR ULTRASONICO

ODROID MAGAZINE 30

en un extremo Si tiene 6 pines ceacutentrate en los 4 pines centrales y sigue estas instrucciones

Negro - conectar a GNDrojo - conectar a VccVerde - conectar a rxi

blanco - conectar a txD

Conectando los sensoresultrasoacutenicos

En cada sensor ultrasoacutenico hay cuatro pines marcados Vcc Trig Echo Gnd Para el primer sensor ultrasoacutenico conecta el pin 2 del microcontrolador al pin ldquoTrigrdquo del sensor ultrasoacutenico Conecta el pin 3 del microcontrolador al pin ldquoEchordquo del sensor Conecte el pin ldquoVccrdquo del sensor a DC 5V (el pin ldquoVCCrdquo del microcontrolador suministra 5V) y el pin ldquoGndrdquo del sensor a una conexioacuten a tierra como por ejemplo los pines ldquoGNDrdquo del microcontrolador

Si conectas un segundo sensor de ultrasonidos conecta ldquoTrigrdquo al pin 4 y ldquoEchordquo al pin 5 Continuacutea conectando los siguientes pines a los sensores hasta los pines 12 y 13 si al final optas por conectar los seis sensores ultrasonidos

Conexioacuten del softwareUtilizas un programa terminal como PuTTY Screen o tu

lenguaje de script o programacioacuten favorito para conectarte al puerto serie que aparece cuando te conectas el sensor ultrasoacuteni-co Esto variaraacute en funcioacuten del sistema operativo que utilizas para conectarte al microcontrolador En Windows consultar el ldquoAdministrador de dispositivosrdquo es la forma maacutes comuacuten de averiguarlo En Linux ldquodmesgrdquo o ldquolsusbrdquo son las formas de de-tectar a queacute puerto estaacute conectado Deberiacuteas ver algo denomi-nado ldquoPL2303rdquo que es la conexioacuten del microcontrolador Si recibes informacioacuten basura en tu terminal cuando te conectes aseguacuterate de que los ajustes en serie son 9600 baudios 8 bits ninguno (paridad) y 1 bit de parada Aquiacute tienes una lista de los comandos que puede aceptar el microcontrolador

bull debug on Activa la retroalimentacioacuten detallada Estaacute deshabilitada por defecto nos proporcionaraacute aclaracio-nes sobre los errores de entrada

bull debug off desactiva la retroalimentacioacuten detalladabull init x y activa un HC-SR04 en los pines especificados

X es trigger Y es echo Estos deben ser pines digitales El dispositivo 0 estaacute preestablecido en los pines 2 y 3 de modo que no es necesario especificar estos pines La seleccioacuten de pines no vaacutelidos devolveraacute un signo de ex-clamacioacuten ()

bull ping enviacutea una sola lectura del HCSR04 previamente utilizado Si no se ha utilizado todaviacutea se usaraacute el dis-positivo 0 Si al comando le sigue un espacio y un nuacutemero entre 0-100 (exclusivo) se realizaraacute ese nuacutemero de lecturas emitiendo primero el promedio de esas lec-

SENSOR ULTRASONICO

turas despueacutes el nuacutemero de lecturas fallidas (que no cuentan para el promedio) y luego los valores miacutenimo y maacuteximo de lectura separados por espacios En cual-quier caso si una sentildeal se desconecta automaacuteticamente devolveraacute -1

bull start Hace ping constantemente a todos los dispositivos conectados en secuencia Debido a que los dispositivos se utilizan uno a uno el flujo de datos de este comando seraacute maacutes raacutepido si los dispositivos miden distancias cor-tas Si este comando le sigue un espacio y un nuacutemero mayor que 0 la placa esperaraacute estos milisegundos entre la lectura del uacuteltimo dispositivo y la lectura del primer dispositivo El resultado de este comando seraacute la lectura de cada dispositivo (con un uacutenico espacio despueacutes de cada uno) y una vuelta tras el uacuteltimo dispositivo

bull stop detiene la operacioacuten ldquostartrdquo soacutelo es efectivo tras haber iniciado ldquostartrdquo

bull mode emite el modo de medicioacuten del flujo M para meacutetrico (miliacutemetros) I para Imperial (deacutecimas de pul-gada) o R para Raw (la longitud de pulso en microse-gundos devuelta por el HC-SR04) El valor predeter-minado es M

bull timeout emite el tiempo de espera actual para lecturas de la sentildeal El tiempo de espera es la mayor cantidad de microsegundos que la placa esperaraacute antes de declarar que el HC-SR04 ha realizado una mala lectura lo cual no es necesariamente lo mismo que el pulso maacutes largo que la placa aceptaraacute del HC-SR04 Cuando la placa mide el pulso del HC-SR04 primero espera a que el HC-SR04 comience a enviar un pulso Este tiempo cuenta para el tiempo de espera Cuando este comando le sigue un espacio y un nuacutemero el tiempo de espera se ajusta a ese nuacutemero El valor predeterminado es 1 segundo (1000000 microsegundos)

bull ver emite informacioacuten de versioacuten y creacuteditos

Si cualquier comando (o ninguacuten comando) estaacute precedido por un uacutenico diacutegito de 0-5 (inclusive) seguido de un espacio el dispositivo que corresponde a ese diacutegito se seleccionaraacute para ser usado con el siguiente comando ldquopingrdquo Cada vez que la placa esteacute lista para un comando emitiraacute ldquogtrdquo para la serie La uacutenica excepcioacuten estaacute tras el comando ldquostartrdquo que no solicitaraacute entrada hasta que sea reconocido ldquostoprdquo

ODROID MAGAZINE 31

iquestCoacutemo empezaste con los ordenadoresCuando empeceacute mi negocio tuve que decidir queacute plat-

aforma de hardware iba a utilizar para la recogida de datos del traacutefico Simplemente para que no pienses mal de miacute mis caacutemaras de traacutefico no son las que se usan para multar por exceso de velocidad o algo asiacute Mi sistema estaba desti-nado suavizar el flujo de traacutefico fijando los controles oacutepti-mos de las sentildeales de traacutefico Anteriormente usaba un PC industrial para ejecutar mi software de reconocimiento de imaacutegenes Ahora uso la familia de dispositivos ODROID para esta cuestioacuten

iquestQueacute te atrajo de la plataforma ODROID En 2012 useacute Google para buscar una plataforma que

fuera muy compacta y al mismo tiempo potente para que cubriera mis necesidades que resultoacute ser la placa

Por favor haacuteblanos un poco sobre tiSoy ingeniero de electroacutenica y software en Rusia desde

hace 47 antildeos Naciacute en Siberia y tras terminar la escuela me mudeacute a Moscuacute para estudiar en la universidad Ser estudi-ante en el Instituto de Aviacioacuten de Moscuacute (MAI) fue una experiencia increiacuteble probablemente la mejor de mi vida A principios de los 90 llegoacute a Rusia la era de los microordena-dores soliacutea jugar a un juego de saltos en una CPU z80 y el i486 Tras finalizar mis estudios universitarios y de posgrado me convertiacute en ingeniero Trabajeacute en unos cuantos puestos de trabajo para diferentes empresas y finalmente decidiacute em-prender mi propio negocio En 2006 puse en marcha una iniciativa para crear sistemas de recuento del traacutefico de au-tomoacuteviles Estoy casado y tengo una hija de 21 antildeos llamada Lena que trabaja como enfermera Mi esposa Nadezhda es disentildeadora de vestuario de produccioacuten pero ahora trabaja como disentildeadora web Ella es aficionada a la fotografiacutea digi-tal y le encanta su caacutemara reacuteflex digital

COnOCIEnDO un ODROIDIAnvIACHESLAv ALEKSEEveditado por rob roy (robroy)

CONOCIENDO UN ODROIDIAN

Viacheslav disfruta tocando la guitarra y escuchando muacutesica

1995 en el campus MAi probando uno de los primeros equipos Vr comerciales del mundo que funcionaba a 640x480 a 30fps Utiliz-aba un sensor magneacutetico en la nuca para la posicioacuten de la cabeza la mejor broma que se podiacutea gastar a alguien era colocar un imaacuten cerca de la espalda y sacudirlo iexcllos gritos estaban garantizados cuando el mundo en 3D daba vueltas sin cesar

ODROID MAGAZINE 32

ODROID-X2 Con sus cuatro nuacutecleos funcionando a 17 GHz calculaba con facilidad los algoritmos de reconteo del traacutefico de automoacuteviles Maacutes tarde cambieacute al U3 y el XU4

iquestCuaacutel es tu ODROID favorito y por queacuteDe momento mi favorito es el XU4 Mi sistema estaacute

basado en el tratamiento de fotogramas de video en tiempo real por lo que el bus USB 30 del XU4 es bastante bueno para una caacutemara con una interfaz de captura de viacutedeo Para mi sistema es muy importante tener una buena conexioacuten entre la caacutemara de viacutedeo y la CPU Probablemente tendreacute que echar un vistazo a las interfaces de nivel inferior como MIPI CSI-2 que por desgracia estaacuten ausente en el XU4 Recientemente he estado aprendiendo como usar la caacute-mara oCam GS BW La caacutemara es buena en siacute misma pero para un uso industrial al aire libre tengo que implementar un software de control de exposicioacuten automaacutetica y posible-mente de control de apertura de la lente que todaviacutea estaacute en estudio

MEET AN ODROIDIAN

Una vieja joya el mini ordenador Nixdorf

An old gem the Nixdorf mini computer

CONOCIENDO UN ODROIDIAN

iquestQueacute aficiones e intereses tienes aparte de los ordenadoresDisfruto conduciendo y leyendo sobre coches y viendo

los campeonatos de carreras de F1 Tambieacuten me gusta via-jar pescar escuchar muacutesica y tocar la guitarra Tengo un gato siberiano llamado Leia y soy fan de Star Wars

iquestQueacute consejo le dariacuteas a alguien que quiere aprender maacutes sobre la programacioacuten

Hacer software es algo increiacuteble y miacutestico Es una fusioacuten de arte y tecnologiacutea Nada te inspira maacutes que tu aplicacioacuten cuando empieza a cobrar vida Sin embargo siempre estaacute ahiacute el otro lado de la Fuerza Estar listo para instruirte inc-esantemente El desarrollo de software es una de las activi-dades que cambia maacutes raacutepido Si tienes pensado dejar de hacer software en uno o dos antildeos puede dejar de aprender ahora El conocimiento se volveraacute anticuado en un par de antildeos maacutes o menos Para estar en lo maacutes alto siempre tienes que correr Es similar a la cancioacutenrdquoRun like Hellrdquo de Pink Floyd Si estaacutes listo para vivir de esta forma seguro que tendraacutes eacutexito

ODROID MAGAZINE 33

Page 6: Estación ARCADE · gias de marketing, administración de medios sociales y producción multimedia impresa, web, vídeo y cine. Ges-tionando múltiples cuentas con agencias y productores

En este proyecto vamos a convertir el ODROID-C2 (httpbitLy 1oTJBya) en un inteligente timbre IoT que tomaraacute una foto de quienquiera que lo haga sonar

y la enviaraacute por correo electroacutenico al titular de una cuenta de Gmail Ademaacutes el dispositivo archivaraacute las fotos por fecha y hora dando la posibilidad de comprobar cualquier actividad sospechosa o simplemente para mantener un registro de todas las personas que tocan el timbre Es faacutecil ver que este ldquointeli-genterdquo timbre que utiliza un ODROID-C2 como piedra an-gular es una poderosa herramienta de seguridad y vigilancia el cual seraacute muy uacutetil para cualquier vivienda

Requisitos de hardwarebull ODROID-C2 (httpbitly1oTJBya)bull Webcam ODROID (httpbitly2iBHKPD)bull Adaptador Wi-fi (httpbitly1M4LdiC)bull 1x mini placa de pruebasbull 1x Resistencia 1 KΩbull 1x Resistencia 10 KΩbull 1x Pulsadorbull ~8x cables dumpon (el kit Tinkering C httpbit

ly1YNPN6kes una buena opcioacuten para este y futuros proyectos)

Requisitos de Softwarebull Ubuntu 1604 v20 de Hardkernel (httpbit

ly2cBibbk)bull Python 27 or 33 (preinstalado en Ubuntu)bull Libreriacutea WiringPi para controlar los pines GPIO del

ODROID-C2 Puedes aprender a instalarla con la guiacutea que hay disponible en httpbitly2ba6h8o

Montando el dispositivo IoT Para cablear las conexiones usamos los cables macho a hem-

bra y macho a macho Dupont El extremo hembra del cable Dupont macho a hembra se conecta al cabezal macho del ODROID-C2 y el otro extremo a los orificios de la placa de pruebas Ve consultando el esquema de distribucioacuten de los pines

de Hardkernel a medida que vayas creando las conexiones Este esquema lo puedes encontrar en httpbitly2aXAlmt El pin fiacutesico 1 es VCC y proporciona 33V a nuestro circuito co-nectamos el pin en la primera liacutenea vertical de nuestra placa de pruebas cerca del borde Puesto que vamos a utilizar el pin 6 como puesta a tierra comuacuten eacuteste lo conectaremos a la segunda liacutenea vertical de nuestra placa de pruebas El resto del circuito es muy simple puedes seguir el esquema de la Figura 1

La Webcam ODROID la tienes que conectar al ODROID-C2 a traveacutes de uno de los puertos USB disponibles en la placa El timbre se controla con el pin 15 tal y como puedes ver en la figura Ahora que tenemos el hardware listo iexclVamos a sumergirnos en el coacutedigo y hacer que el timbre suene ldquointeli-gentementerdquo

SoftwareLa parte central del coacutedigo ha sido extraiacuteda de un proyecto

Github disponible en httpbitly2jEXRbR No obstante este coacutedigo de ejemplo ha sido modificado en gran medida

TIMBRE IOTRECIBE un AvISO POR CORREO ELECTROnICO DE LA PERSOnA quE LLAMA A Tu PuERTApor Miltiadis Melissas (miltos)

TIMBRE

figura 1 - esquema del timbre

ODROID MAGAZINE 6

para conseguir que funcione correcta-mente en el ODROID-C2 Lo maacutes importante de todo es que el re-mapeo desde RPiGPIO a la libreriacutea WiringPi2 ya estaacute terminado puesto que Wiring-Pi2 es compatible con el ODROID-C2 Consulta la excelente guiacutea GPIO pro-porcionada por Hardkernel en httpbitly2jEUjWX Todo el coacutedigo esta descrito en los siguientes apartados de-limitado entre lsquoltgtrsquo con su correspon-diente descripcioacuten debajo

El coacutedigo baacutesicode odroidbellpy

ltimport wiringpi2 as odroidgt

Empezaremos importando la libreriacutea wiringpi2 Las instrucciones para in-stalar esta libreriacutea y poder controlar los pines GPIO del ODROID-C2 la puedes encontrar en httpbitly2ba6h8o

ltimport timegt

Importamos el moacutedulo time

ltimport osgt

Importamos el moacutedulo os

ltimport globgt

Importamos el moacutedulo glob

ltimport sysgt

TIMBRE

figura 2 - el sistema completo c2

Importamos el moacutedulo sys

ltodroidwiringPiSetup()gt

Hemos configurado el moacutedulo wi-ringPi2 conforme a la tabla que nos proporciona Hardkernel en httpbitly2aXAlmt

ltButton = 3gt

Este es en realidad el pin fiacutesico 15 seguacuten la tabla de httpbitly2aXAlmt

ltodroidpinMode(Button0)gt

Fijamos el pulsador como entrada

ltodroid

pullUpDnControl(Button1)gt

Activamos la resistencia de parada y arrastre En este caso parado tal y como lo indica el argumento 1

loop

Estamos entrando en un bucle ya que los dispositivos IoT siempre estaacuten en modo de espera

ltprint(ldquoProgram Runningrdquo)gt

La uacutenica finalidad de esto es la moni-torizacioacuten

oses

while Trueloops forever till

keyboard interrupt (ctr + C)gt

ltif odroiddigitalRead(Button)

== False when button is un-

pressedgt

ltsysstderrwrite(ldquordquo)gt

Si no se presiona el timbre imprimi-mos puntos en la pantalla usando la li-breriacutea sys

lttimesleep(1)gt

Se comprueba si se ha tocado el pul-sadortimbre cada segundo

ltelsegt

ltprint(ldquoButton Pressedrdquo)gt

Se ha presionado el pulsadortimbre

------| photo amp Bell

|------

Get FileName

ltnow = timestrftime(ldquoDatem-

d-yTimeH-M-Srdquo)gt

Declaramos la variable now con la fe-cha y hora que usaremos en la foto

Make command to run odroidC2

sh

ltcommand = ldquobash odroidC2sh

ldquo + str(now)gt

Invocamos el script shell odroidC2sh (ver a continuacioacuten)

-- odroidC2sh is an Shell

script that

-- is responsible for tak-

ing the photo and

-- making the Doorbell

Noise

--- We insert the ldquoNowrdquo ar-

gument so the python

--- script knows what the

filename of the

--- picture will be so it

can pass it on into the

ODROID MAGAZINE 7

ltmpv ringtonemp3gt

Finalmente haremos sonar el timbre usando un programa llamado mpv que ya estaacute incluido en Ubuntu 1604 v20 de Hardkernel (httpbitly2cBibbk) En otras palabras usamos el Mplayer para reproducir este archivo

Configurar el coacutedigo de Gmail

La mayoriacutea de la gente tiene una cuenta de Gmail Si no la tienes es muy faacutecil crearte una y lo maacutes importante de todo es gratis En realidad para que este script de Gmail funcione correctamente necesitamos dos cuentas de correo elec-troacutenico el correo electroacutenico del remi-tente y la cuenta de correo electroacutenico del destinatario y siempre es asiacute Por supuesto puede enviar un correo elec-troacutenico desde y hacia la misma cuenta pero es maacutes elegante crear una segunda cuenta de correo electroacutenico con el fin de estar al tanto de las fotos con el registro de la fecha y hora por separado Tambieacuten recomiendo que la cuenta de correo elec-troacutenico del destinatario sea la que utilices en tu dispositivo moacutevil para que el dis-positivo te avise cada vez que alguien lla-me a tu puerta No olvides permitir que ldquo las aplicaciones menos segurasrdquo tengan acceso a tu cuenta de Gmail (httpbitly124TgWN)

Vamos a examinar el script python llamado IoTOdroidpy

ltfrom emailmimetext import MIM-

ETextgt

ltfrom emailmimemultipart import

MIMEMultipartgt

Usamos esos dos moacutedulos porque necesitamos enviar un correo electroacutenico limpio con un remitente un receptor y un asunto

ltfrom emailmimeapplication im-

port MIMEApplicationgt

Tambieacuten importamos el moacutedulo re-

Script shell OdroidC2sh

El script OdroidC2sh es respon-sable de tomar la foto y hacer sonar el timbre La funcioacuten del argumento lsquoNowrsquo es pasar el nombre del archivo de la foto al script de Gmail En otras palabras es el conector entre nuestro coacutedigo baacutesico odroidbellpy y el script Odroid-IoTNo-tifierpy El script OdroidC2sh es muy simple

ltcd photosgt

Cambiamos desde directorio actual al directorio ltphotosgt

ltecho ldquoTaking the Photordquogt

ltnow=$1gt

ldquoNowrdquo es la fecha y hora de registro del nombre del archivo

ltechogt

ltfswebcam -d devvideo0 $now

jpggt

Este es el comando baacutesico para tomar la foto Utilizamos el comando fsweb-cam Si la aplicacioacuten fswebcam no estaacute instalada en tu sistema puedes instalarla con el siguiente comando

$ sudo apt-get install fswebcam

La sintaxis del comando es obvia toma una foto y usa la fecha y hora de registro como nombre de archivo Cada vez que se pulse el pulsador OdroidC2sh es activado por odroidbellpy El paraacute-metro -d determina el recurso a utilizar en nuestro caso devvideo0

ltecho ldquoPic Takenrdquogt

ltechordquordquogt

ltecho ldquoRinging Bellrdquogt

ltecho ldquordquogt

ltcd gt

Cambia de nuevo al directorio padre

--- email script (so it

knows what file to email

run command

ltossystem(command)gt

A continuacioacuten invocamos el co-mando system para ejecutar el script de correo electroacutenico

diagnostics

ltprint(ldquoFilenamerdquo now)gt

Imprimimos el ldquofilenamerdquo de la foto con la fecha y hora actuales

----| Email |----

ltprint(ldquoEmailrdquo)emailgt

ltemailcommand = lsquosudo python

IoTOdroidpy ldquoThis person is at

your doorrdquorsquo + lsquo ldquophotosrsquo + now +

lsquojpgrdquorsquogt

Enviamos la foto a la cuenta de Gmail del titular con la fecha y hora y el asunto ldquoThis person is at your doorrdquo

ltossystem(emailcommand) run-

ning the Email script withgt

-- the subject as ldquoSomeone

is ringing the doorbellrdquo and the

filename

-- We made before at the

-Photo amp Bell- section

Y finalmente lo enviamos

-- End Diagnostic Info

print(ldquoDone Processrdquo)

Todo estaacute hecho asiacute que el script fi-naliza su trabajo

-space out for next ldquoPress of

Buttonrdquo

ltprint(ldquordquo)gt

ltprint(ldquordquo)gt

Hacemos hueco para el siguiente ci-clo (proacutexima llamada al timbre)

TIMBRE

ODROID MAGAZINE 8

figura 3 - Alerta de correo electroacutenico de que alguien estaacute en la puerta

ltserverstarttls()gt

Configuramos y entramos en modo TLS TLS significa Transport Layer Se-curity (Seguridad de la capa de trans-porte) de modo que cualquier comando SMTP que siga este modo seraacute cifrado

ltserverlogin(lsquoltFrom

EmailgtrsquorsquoltFrom passwordgtrsquo)gt

Es hora de entrar en tu cuenta de Gmail de modo que necesitamos las credenciales correctas

ltserversendmail(msg[lsquoFromrsquo]

emaillist msgas_string())gt

Usando el anterior comando final-mente enviamos el correo electroacutenico Procura evitar el spoofing e introduce aquiacute tu direccioacuten de correo electroacutenico real El paraacutemetro emaillist es el que

hemos definido antes y el uacuteltimo paraacute-metro (msaas_string ()) el mensaje en forma de cadena con el archivo adjunto que es en este caso la foto El resultado lo puedes apreciar en la Figura 3

Testeando y ejecu-tando el coacutedigo

Desde el terminal (CTRL-T) eje-cutamos odroidbellpy con privilegios sudo

$ sudo python odroidbellpy

En este momento el dispositivo IoT se pone en modo de espera y apa-

ltmsg[lsquoReply-torsquo] = lsquoxyzgmail

comrsquogt

Correo electroacutenico del destinatario

ltmsgpreamble = lsquoMultipart

massagenrsquogt

El atributo preamble contiene el tex-to principal extra-blindado de los docu-mentos MIME por eso lo incluimos aquiacute

ltpart = MIMEText(ldquoHello The

doorbell is ringing A photo of

the person ringing the doorbell

has been attachedrdquo)gt

El cuerpo del mensaje

ltmsgattach(part)gt

ltpart =

MIMEApplication(open(str(sys

argv[2])rdquorbrdquo)read())gt

ltpartadd_header(lsquoContent-

Dispositionrsquo lsquoattachmentrsquo

filename=str(sysargv[2]))gt

Adjuntamos la foto al mensaje

ltserver = smtplibSMTP(ldquosmtp

gmailcom587rdquo)gt

Especificamos el servidor smtp que queremos usar y el puerto que utiliza el servidor de Gmail con el puerto 587 Tambieacuten puede usar el puerto 465 aunque no es mala idea comprobar con Google el puerto correcto por si acaso ha cambiado

ltserverehlo()gt

Especificamos el servidor smtp que queremos usar y el puerto que utiliza el servidor de Gmail con el puerto 587 Tambieacuten puede usar el puerto 465 aunque no es mala idea comprobar con Google el puerto correcto por si acaso ha cambiado

sponsable del archivo adjunto MIME MIME representa las Extensiones Mul-tiuso para el Correo en Internet Es una forma de identificar los archivos en In-ternet seguacuten su naturaleza y formato

ltimport smtplibgt

ltfrom smtplib import SMTPgt

Esta es la baacutesica y nativa libreriacutea en Python para enviar correos electroacutenicos de modo que no hay necesidad de insta-lar libreriacuteas externas smtplib Desde esta libreriacutea importamos la funcioacuten SMTP

ltimport sysgt

Importamos el moacutedulo de funcio-nes y paraacutemetros especiacuteficas del sistema puesto que necesitaremos el script ltargvgt de este moacutedulo (ver a continuacioacuten)

ltrecipients = [lsquoltYourEmailgtrsquo]gt

Tu direccioacuten de correo electroacutenico ya que tuacute eres el destinatario de las fotos

ltemaillist = [elemstrip()

split(lsquorsquo) for elem in recipi-

ents]gt

Hacemos una lista de correo elec-troacutenico en la que separaremos y quita-remos los caracteres pertinentes de cada elemento de la lista de destinatarios

ltmsg = MIMEMultipart()gt

Definimos el variable message (msg) como una Extensioacuten Multiuso para el Correo en Internet llamando a la fun-cioacuten MIMEMultipart

ltmsg[lsquoSubjectrsquo] = str(sys

argv[1])gt

El asunto del nuestro mensaje

ltmsg[lsquoFromrsquo] = lsquoltFrom Emailgtrsquogt

Tu direccioacuten de correo electroacutenico

TIMBRE

ODROID MAGAZINE 9

import wiringpi2 as odroid

import time

import os

import glob

import sys

odroidwiringPiSetup()

Button = 3

odroidpinMode(Button0)

odroidpullUpDnControl(Button1)

loop

print(ldquoProgram Runningrdquo)

while Trueloops forever till

keyboard interupt (ctr + C)

if odroiddigitalRead(Button)

== False when button not

pressed

sysstderrwrite(ldquordquo)

timesleep(1)

else

print(ldquoButton Pressedrdquo)

------| photo amp Bell

|------

Get FileName

now = timestrftime(ldquoDatem-

d-yTimeH-M-Srdquo)

Make command to run

odroidC2sh

command = ldquobash odroidC2sh ldquo

+ str(now)

-- odroidC2sh is an Shell

script that

-- is responsible for tak-

ing the photo and

-- making the Doorbell

Noise

--- We insert the ldquoNowrdquo ar-

gument so the python

--- script knows what the

file name of the

--- picture will be so it

can pass it on into the

--- email script (so it

knows what file to email

figura 4 ndash el script python del timbre en ejecucioacuten

run command

ossystem(command)

diagnostics

print(ldquoFilenamerdquo now)

----| Email |----

print(ldquoEmailrdquo)email

emailcommand = lsquosudo python

IoTOdroidpy ldquoSomeone is ringing

the doorbellrdquorsquo + lsquo ldquophotosrsquo +

now + lsquojpgrdquorsquo

ossystem(emailcommand) run-

ning the Email script with

-- the subject as ldquoSomeone

is ringing the doorebellrdquo and the

filename

-- We made before at the

-Photo amp Bell- section

-- End Diagnostic Info

print(ldquoDone Processrdquo)

-space out for next ldquoPress

of Buttonrdquo

print(ldquordquo)

print(ldquordquo)

OdroidC2sh

binsh

cd photos

echo ldquoTaking the Photordquo

now=$1 Now is the filename time

stamp

take pic

fswebcam -d devvideo0 $nowjpg

echo ldquoPic Takenrdquo

echordquordquo

ring Bell

echo ldquoRinging Bellrdquo

echo ldquordquo

echo ldquordquo

cd

mpv ringtonemp3

IoTOdroidpy

from emailmimetext import MIM-

EText

from emailmimeapplication im-

port MIMEApplication

rece en pantalla el mensaje ldquoProgram is runningrdquo Al mismo tiempo aparecen puntos ldquordquo en la pantalla uno a uno indicando al usuario que el dispositivo estaacute funcionando con normalidad Cu-ando alguien pulsa el botoacuten (timbre) el script OdroidC2sh se ejecuta con una doble finalidad Primero toma una in-

stantaacutenea de la persona que hace sonar el timbre En segundo lugar enviacutea el correo electroacutenico a traveacutes de IoTOdroidpy a la cuenta de Gmail del propietario con la fecha y hora de registro de la foto que se adjunta Despueacutes vuelve al modo de espera y el timbre IoT suena

Notas finalesPor supuesto este proyecto se podriacutea

mejorar de muchas formas Por ejemplo se podriacutea antildeadir un LED en el timbre IOT que indicara su correcto funciona-miento Un dispositivo maacutes complejo similar a eacuteste podriacutea usarse como timbre comercial con la ayuda de un moacutedulo placa releacute Tampoco seriacutea complicado incluir la posibilidad de que grabase una pequentildea grabacioacuten de viacutedeo junto con las fotos haciendo que el timbre ldquointeli-genterdquo sea auacuten maacutes inteligente Ademaacutes como dice el viejo refraacuten ldquoiexclla perfeccioacuten es el eterno enemigo de lo funcionalrdquo

Coacutedigo deltimbre IoT

Aquiacute tienes una copia de todo el coacute-digo Al final de este artiacuteculo tienes un enlace a la paacutegina github que tambieacuten contiene el coacutedigo

Odroidbellpy

TIMBRE

ODROID MAGAZINE 10

from emailmimemultipart import

MIMEMultipart

from smtplib import SMTP

import smtplib

import sys

recipients = [lsquoabcgmailcomrsquo]

emaillist = [elemstrip()

split(lsquorsquo) for elem in recipi-

ents]

msg = MIMEMultipart()

msg[lsquoSubjectrsquo] = str(sysargv[1])

msg[lsquoFromrsquo] = lsquoxyzgmailcomrsquo

msg[lsquoReply-torsquo] = lsquoabcgmailcomrsquo

msgpreamble = lsquoMultipart

massagenrsquo

part = MIMEText(ldquoHello There is

someone ringing your doorbell A

picture of this person has been

atachedrdquo)

msgattach(part)

part =

MIMEApplication(open(str(sys

argv[2])rdquorbrdquo)read())

partadd_header(lsquoContent-

Dispositionrsquo lsquoattachmentrsquo

filename=str(sysargv[2]))

msgattach(part)

server = smtplibSMTP(ldquosmtp

gmailcom587rdquo)

serverehlo()

serverstarttls()

serverlogin(lsquoxyzgmail

comrsquorsquoyourpassword herersquo)

serversendmail(msg[lsquoFromrsquo]

emaillist msgas_string())

El coacutedigo del proyecto estaacute disponible en httpbitly2jMAdMY usando el siguiente comando

$ git clone

httpsgithubcommiltiadisme-

lissas

IoTOdroidC2Doorbellgit

TIMBRE

A finales de 2016 los usuarios de Cyanogenmod se horrorizaron cuando Cyanogen anuncioacute la

cancelacioacuten de sus servicios dejando a todos los usuarios que dependiacutean de Cyanogenmod sin soporte Sin em-bargo en poco tiempo llegariacutea una so-lucioacuten en forma de LineageOS Si eres un usuario del ODROID-XU3 XU4 es el momento perfecto para colaborar con la versioacuten de LineageOS en los foros ODROID

Caracteriacutesticas- Android 711 Nougat lineageoS 141- Kernel 3109- openGl eS 112030 (aceleracioacuten por GpU)- opencl 11 ep (aceleracioacuten por GpU)- funcioacuten multiusuario habilitada (hasta 8 usuarios)- ethernet integrado y soporte para ether-net Gigabit USb 30 - Soporte para rtl8188cUS rtl8191SU y USb Wireless ralinkt- Soporte bluetooth USb (ble A2dp Sink)- Soporte para dongle GpS USb- Anclaje a red USb - punto de acceso Wi-fi portaacutetil- Soporte DAc USb nativo para Android

LInEAGEOS-141 ODROID-Xu3Xu4OLvIDATE DE CyAnOGEn EL fuTuRO ESTA AquIpor voodik editado por bruno Doiche

LINEAGEOS

- Soporte para Webcam USb UVc- Soporte hDMi-cec- Selinux

Problemas conocidosEn este momento soacutelo admite moacutedu-

los Bluetooth de bajo consumo v40 (BLE) Consulta el Moacutedulo Bluetooth 2

Coacutemo instalarloEn primer lugar necesitas preparar

tu emmcsd con imaacutegenes especiales de auto-instalacioacuten

La puedes encontrar aquiacutehttpophmdrjrnetvoodik5422

ODROID-XU3AndroidCM-141-ATV

Alpha-01_110217

Graba la imagen en tu eMMCsd a traveacutes de Win32DiskImager y arranca el dispositivo Tendraacute que esperar paci-entemente durante el primer arranque ya que el proceso de actualizacioacuten puede llegar a tardar hasta 20 minutos

Coacutedigo fuente Kernel

$ git clone httpsgithubcom

voodikandroid_kernel_hardkernel

_odroidxu3 -b cm-140_5422

ODROID MAGAZINE 11

SNES 3DO y Sega Genesis El juego teniacutea diferentes escenarios para jugar la selva la nieve y el desierto

Open Fodder ofreciacutea 23 misiones que se dividiacutean en varias fases En total suponiacutea superar 72 niveles para llevar

Este mes me gustariacutea hablar de un juego llamado Open Fodder se trata de un remake del claacutesico

juego de Amiga Cannon Fodder desar-rollado por Sensible Software en 1993 Utiliza los datos del juego original Can-non Fodder para conseguir una experi-encia muy similar al juego original en tu ODROID

Muchos de los populares juegos de Linux de hoy en diacutea como Stratagus y Freeciv son en realidad remakes de claacutesicos juegos de DOS de mediados y finales de los 90 y Open Fodder no es diferente El remake de Cannon Fodder es un juego disparos accioacuten y estrategia donde controlas a un pequentildeo grupo de soldados que avanza a traveacutes de varias docenas de niveles para matar a los sol-dados enemigos destruir tanques echar abajo edificios y derrotar a tus enemigos El juego fue lanzado por primera vez para Amiga en 1993 y fue exportado por sus desarrolladores a MS-DOS Atari Jaguar

a tu escuadroacuten a la victoria Cuando se lanzoacute el juego fue muy elogiado por varias revistas de juego Amiga con pun-tuaciones que llevaban al 95 por ciento y fue considerado como uno de los mejo-res juegos lanzados en 1993 En general siguioacute siendo uno de los mejores juegos jamaacutes creado para la plataforma Amiga durante sus 11 antildeos de vida

Desde un punto de vista maacutes poliacutetico el juego lleva impliacutecito un intenso men-saje sobre la guerra en siacute misma puesto que juegas y llevar a tus soldados a una muerte inevitable Cada misioacuten se inicia

JuEGOS LInuXOPEn fODDERpor tobias Schaaf (meveric)

JUEGOS LINUX

figura 1 - el logotipo de cannon fodder en el cual estaacute basado open fodder

figuras 2 3 y 4 - los niveles de selva desierto y nieve en open fodder

figuras 5 y 6 - A medida que avanzas en el juego tu larga liacutenea de reclutas se con-vierte gradualmente en cruces alineadas como en un cementerio

ODROID MAGAZINE 12

nas segundas partes ademaacutes de algunas misiones de bonificacioacuten Cannon Fod-der 2 salioacute un antildeo maacutes tarde pero fue maacutes bien un ldquodisco de datosrdquo con ex-pansiones que una secuela ya que en su mayor parte presentaba maacutes misiones en lugar de nuevas caracteriacutesticas Tambieacuten estaba el X-Mas de Amiga que ofreciacutea algunas misiones diferentes basadas en el juego Cannon Fodder

Ejecutando Open Fodder

Open Fodder es un remake del motor del juego Cannon Fodder que lleva el juego a los sistemas operativos modernos Al igual que otras migraciones del motor del juego (como OpenTTD) puede uti-lizar los datos del juego original con esta versioacuten del motor para ejecutar el juego en tus dispositivos modernos Esta mi-gracioacuten tambieacuten cuenta con una versioacuten exportada para los dispositivos ARM lo que significa que podemos ejecutarlo igualmente en nuestros ODROIDs

Todaviacutea estaacute en desarrollo pero ya funciona bastante bien Como de cos-tumbre se puede instalar desde mi repo-sitorio y puesto que soacutelo requiere SDL2 y SDL2 Mixer como dependencias prin-cipales deberiacutea funcionar en Debian y

con un nuevo grupo de reclutas que se alinean esperando a unirse al combate Los soldados desechables (de ahiacute el nom-bre de cannon fodder Carne de Cantildeon) poco a poco se convierten en cruces alin-eadas dando forma a un cementerio mil-itar a medida que vas completando cada misioacuten formaacutendose maacutes y maacutes filas con-forme vas enterrando a tus predecesores Sin embargo los desarrolladores le di-eron un cierto toque de humor ya que los primeros soldados de tu escuadroacuten (y por tanto los casi seguro que moriraacuten) llevan de hecho los nombres de las seis personas que componiacutean el equipo de desarrollo del juego

Si nos fijamos bien el juego incor-poraba algunos detalles bastante intere-santes Por un lado tiene su propia can-cioacuten ldquo War never been so much funrdquo que suena durante la intro del juego iexclUno de los desarrolladores del juego Jon Hare compuso la muacutesica junto con el compositor Richard Joseph Si teniacuteas el Amiga CD32 tambieacuten recordaraacutes una pista adicional que incluiacutea un video en el cual los desarrolladores se disparaban entre siacute con armas de juguete (httpbitly2l67bFy) iexclSin duda se divirtieron bastante desarrollando este juego

Cannon Fodder tambieacuten tuvo algu-

JUEGOS LINUX

Ubuntu por igual las puedes encontrar en mi lista principal de paquetes para armhf y jessiemain para arm64

Se puede instalar con este comando en un dispositivo ODROID que ejecute Debian suponiendo que ya tengas con-figurados mis repositorios o esteacutes usando una de mis imaacutegenes de Debian (httpbitly13v98ly)

$ apt-get install

openfodder-odroid

He alterado ligeramente el juego para que siempre se ejecute en modo pantalla completa aunque si lo deseas puedes cambiar al modo de ventana simple-mente pulsando F11 cuando tenga el juego activado

Convirtiendo los datos del juego

Por siacute sola mi versioacuten de Open Fod-der viene con el especial Amiga X-Mas ademaacutes de varios niveles demo dis-ponibles de forma gratuita Si quieres jugar el juego real tendraacutes que importar los datos desde un CD Cannon Fodder

Si estaacute usando un ODROID para ju-gar al Open Fodder puedes localizar las carpetas de los datos del juego en la car-peta $HOMEopenfodderData Por ejemplo homeodroidopenfodderDataDos_CD es una de esas carpetas de datos del juego Existen varias carpe-tas de datos del juego que puedes usar dependiendo de la versioacuten que tengas del juego Cannon Fodder

Dos_CDAunque el juego es compatible con

muchas y diferentes fuentes del juego actualmente soacutelo Dos_CD parece ser una versioacuten de Open Fodder ldquototal-mente compatiblerdquo con muy pocos er-rores y problemas El resto de fuentes del juego pueden tener problemas

Aquiacute tienes un consejo raacutepido Aunque se llama Dos_CD cogeraacute cu-alquier versioacuten de DOS de Cannon Fodder que puedas encontrar Si tienes

figura 7 - Sensible Software - los desarrolladores de cannon fodder

ODROID MAGAZINE 13

WHDLoad en un Amiga (o WinUAE) para extraer los archivos del juego y co-piarlos en la carpeta DataAmigardquo No lo he probado pero si tienes la ldquoCannon Fodder Collectionrdquo de Amiga CD32 no oficial puedes copiar el contenido de FodderNew en esta carpeta lo que tendraacute como resultado niveles completamente diferentes Puede considerarse como una versioacuten maacutes compleja del juego aunque a la vez maacutes divertida Por lo tanto bien poner los archivos originales de Amiga aquiacute o bien los archivos FodderNew de la ldquoCannon Fodder Collectionrdquo

Dos2_CDDos2_CD es en realidad la carpeta

de la versioacuten DOS de Cannon Fodder 2 pero tambieacuten funciona con la versioacuten GoG Desafortunadamente tiene algu-nos problemas el maacutes grave es que el juego no tiene ninguacuten tipo de sonido o muacutesica Aparte de esto todo parece fun-cionar correctamente pero desconozco coacutemo reaccionaraacute en niveles posteriores La carpeta Data tambieacuten incluye las car-petas WAV Plus AmigaFormat_XMAS y Custom En WAV se almacenan los efectos de sonido por defecto para to-dos los juegos (Cannon Fodder) Plus es una demo del nuacutemero 31 la revista Amiga Power y AmigaFormat_XMAS es el Amiga Format Christmas Special Tambieacuten hay una carpeta Custom que te permite jugar otros juegos y mapas pero necesitan la versioacuten (CD) de DOS o de lo contrario no apareceraacuten

Notas finalesOpen Fodder es un buen proyecto

que te permite ejecutar este increiacuteble juego en sistemas modernos Realmente me gusta y estoy deseando ver coacutemo pro-gresa Espero que las versiones de Amiga y Cannon Fodder 2 sean pronto total-mente compatibles Tal vez incluso poda-mos ver mejoras graacuteficas con el tiempo Me gustariacutea ver graacuteficos maacutes modernos ya que el juego es bastante antiguo y los graacuteficos no son los maacutes idoneos para res-oluciones 1080p

la versioacuten de disco de Cannon Fodder simplemente copia el CF_ENGDAT en la carpeta Dos_CD La versioacuten original de CD DOS teniacutea un archivo llamado cf_cddat Cambiar el nombre a CF_ENGDAT y copiarlo a la carpeta Dos_CD Si tienes la versioacuten GoG del juego soacutelo tiene que copiar CF_ENG DAT a la carpeta Dos_CD iexclEsta es una forma raacutepida y legal de conseguir el juego si estaacutes interesado

Aseguacuterate de que el nombre del ar-chivo este en mayuacutescula ya que el juego tiene en cuenta esta cuestioacuten Intenta que coincida todo para asegurarte de que las cosas funcionen sin problemas

Amiga_CDAmiga CD32 tambieacuten contaba con

una versioacuten de este juego Esta es la ver-sioacuten que incluye el video al que hemos hecho referencia anteriormente En el CD de Amiga CD32 hay una carpeta llamada Fodder El contenido de esta carpeta debe copiarse a la carpeta Ami-ga_CD Puedes extraer la segunda pista del CD y almacenarla como Track2flv en la misma carpeta con la finalidad de tener el archivo de video

Me topeacute con algunos problemas cu-ando haciacutea esto y descubriacute nuevamente que el juego buscaba muchos archivos en mayuacutesculas asiacute que utiliceacute el siguiente comando para copiar todos los archivos y tenerlos tambieacuten en mayuacutesculas en la carpeta Amiga_CD$ for files in `ls` do cp $files

`echo $files | tr lsquo[lower]rsquo

lsquo[upper]rsquo` done

Asiacute funcionaba bien pero teniacutea algu-nos fallos Por ejemplo la animacioacuten del helicoacuteptero al inicio de cada misioacuten no apareciacutea y el cursor cuando se guarda un archivo se distorsionaba Aparte de esto no he visto problemas importantes en la versioacuten Amiga CD32

AmigaLa Informacioacuten de desarrollador de

Open Fodder dice ldquoUsar el instalador

JUEGOS LINUXJUEGOS ANDROID

CAuSALITy un JuEGO DE ROMPE-CABEzAS COn PARA-DOJAS DE vIAJES En EL TIEMPO por bruno Doiche

Configura tuacute mismo los entornos extrantildeos e insoacutelitos y

ayuda a un grupo de astronautas varados a encon-trar una ruta hacia un lugar seguro Cada nivel al que te enfrentas representa un nuevo reto donde necesitas llevar a tu astronauta a una salida que coincida con su color Los maacutergenes de tiempo son cortos aunque es muy divertido Aunque formas parte de tan soacutelo una fraccioacuten de tiempo de la vida de tu personaje iexclten cuidado pasaraacutes un montoacuten de tiempo enganchado a este juego

httpsplaygooglecomstoreappsdetailsid=comlojugamesandroidCausality

el entorno 3D isomeacutetrico es magniacute-fico a menudo no superaba el nivel porque los graacuteficos me cautivaban

ODROID MAGAZINE 14

tePi necesitan estar conectados a otros distintos en el ODROID-C2 porque parece haber un conflicto La interfaz UART ocupa estos pines y el estado por defecto del ODROID (1=high en Pin 8) no es lo que espera la RemotePi (GPIO debe entrar en el valor por defecto 0=low para cortar la energiacutea tras el apagado) Pero puesto que necesitas utilizar cables de todos modos para conectar la Remot-ePi esto no supondraacute ninguacuten problema ya que simplemente puedes reconectar los cables a otros pines GPIO

Como evitamos el circuito de ali-mentacioacuten del ODROID encendieacutendo-lo a traveacutes de GPIO tambieacuten pasamos por alto la proteccioacuten ante subidas de tensioacuten 2526A del dispositivo pero no te preocupes La RemotePi tambieacuten tiene proteccioacuten ante subidas de tensioacuten que deberiacutea coincidir con el mismo val-or que en el caso de la RemotePi board para la Raspberry Pi 3 Sin embargo la RemotePi para la Raspberry Pi 2 es de soacutelo 2A Esto estaacute bien porque el valor es menor a los 26A del ODROID de modo el polyfuse de la RemotePi se ac-tivariacutea antes si conectas demasiados dis-

La RemotePi board (httpbitly2l8JcWU) que convierte cu-alquier mando a distancia en un

interruptor de encendido para tu orde-nador de placa reducida puede ser com-patible con el ODROIDC2 si sigues esta guiacutea Si utilizas tu dispositivo como centro multimedia esta placa te propor-cionara un receptor de infrarrojos y un circuito de alimentacioacuten asiacute como un botoacuten de encendido Puedes encender y apagar tu ODROID completamente a traveacutes de una sentildeal infrarrojos (IR) y simplemente presionar el botoacuten de en-cendido para apagarlo y reiniciarlo con seguridad La placa RemotePi es respon-sable del modo espera que absorbe una miacutenima energiacutea mientras el ODROID estaacute completamente apagado Por uacutel-timo la placa alimenta tu dispositivo a traveacutes de GPIO lo cual requiere un cable microUSB para conectarlo a la Re-motePi en lugar de utilizar un adaptador de corriente normal

Configuracioacuten de hardware

Puesto que la RemotePi estaba pen-sada originalmente para la Raspberry Pi 2 necesitaraacutes utilizar cables adiciona-les en lugar de colocarla justamente en cima del C2 para evitar interferir con el disipador de calor asiacute que debes re-cablear algunos pines Es necesario utili-zar cables con el diaacutemetro adecuado para los pines de 5V y puesta a tierra ya que la corriente podriacutea estar entre los 2A y 26A dependiendo de cuaacutentos dispositi-vos USB conectes a tu dispositivo

Los pines GPIO 8 y 10 de la Remo-

positivos no alimentados de forma exter-na que no es una buena idea en un SBC al fin al cabo No obstante debido a esta diferencia de amperaje una RemotePi para la Raspberry Pi 3 seriacutea la mejor op-cioacuten para este proyecto

Como resultado del nuevo cableado el firmware de RemotePi ya no se puede configurar de forma normal aunque nunca he usado esta funcioacuten Si fuera necesario configurar o actualizar el firm-ware necesitaraacutes volver a conectar los pines 8 y 10 de la RemotePi a los pines 8 y 10 del ODROID durante la actu-alizacioacuten del firmware y luego deshacer los cambios una vez que la actualizacioacuten haya finalizado Otra posibilidad es simplemente conectar una Raspberry Pi para actualizar el firmware Esto suena a un montoacuten de problemas pero en re-alidad simplemente es extender la con-exioacuten del cabezal y cambiar una liacutenea en el script principal y dos liacuteneas en otro script opcional si haces uso de ello

Re-cableando laconexioacuten GPIO

Dado que la RemotePi estaacute disentildeada

REMOTEPI BOARD PARA EL ODROID-C2por inifity85

REMOTEPI

figura 1 - remotepi board

ODROID MAGAZINE 15

ergiacutea completamenteIrswitchsh (solo cambia el script

original de MSL Digital de GPIOpin1 = 14 a GPIOpin1 = 225)

binbash

prevent restarting XBMC at

shutdown This is only used for

OpenElec before V5

LOCKDIR=rdquovarlockrdquo

LOCKFILE=rdquoxbmcdisabledrdquo

this is the GPIO pin receiving

the shut-down signal

Raspberry Pi pin8 GPIOpin1=14

Odroid-C2 pin26 GPIOpin1=225

GPIOpin1=225

functions

add_omit_pids()

omit_pids=rdquo$omit_pids -o $1rdquo

safe_shutdown ()

for OpenElec before V5

touch ldquo$LOCKDIR$LOCKFILErdquo

for OpenElec V5 and later

systemctl stop kodi

add_omit_pids $(pidof connmand)

add_omit_pids $(pidof dbus-dae-

mon)

killall5 -15 $omit_pids

for seq in `seq 1 10` do

usleep 500000

clear gt devtty1

killall5 -18 $omit_pids || break

done

sync

umount -a gtdevnull 2gtamp1

poweroff -f

echo ldquo$GPIOpin1rdquo gt sysclass

gpioexport

echo ldquoinrdquo gt sysclassgpio

gpio$GPIOpin1direction

while true do

sleep 1

power=$(cat sysclassgpio

gpio$GPIOpin1value)

if [ $power = 0 ] then

echo ldquooutrdquo gt sysclassgpio

gpio$GPIOpin1direction

echo ldquo1rdquo gt sysclassgpio

una carcasa personalizada de modo que el receptor integrado podriacutea estar oculto y no ser uacutetil En ese caso puedes desac-tivar el IR del ODROID en favor del re-ceptor externo GPIO-IR en la RemotePi y conectar el pin 12 Tienes disponible maacutes informacioacuten sobre el cambio al receptor GPIOIR en LibreELEC en httpbitly2lpDl27

Scripts de apagado para LibreELEC

Los dos scripts tratados a continu-acioacuten pueden descargarse desde la paacutegina de soporte de MSL Digital Solutions en httpbitly2kMxyVG En esta paacutegina tambieacuten encontraras una guiacutea para utili-zar estos scripts en otros sistemas opera-tivos como Volumio y RuneAudio

El script irswitchsh se usa para el apagado seguro a traveacutes de sistema In-frarrojos Tras pulsar el correspondiente botoacuten el sistema se apagaraacute de forma se-gura luego RemotePi esperaraacute a que el GPIO225 alcance el estado 0 (low) que aparece tras el cierre exitoso del sistema Finalmente cortaraacute la energiacutea

El script shutdownsh se usa para el apagado seguro a traveacutes de la interfaz del programa o script Despueacutes de navegar hasta el botoacuten de apagado en la GUI el sistema se apagaraacute de forma segura luego RemotePi esperaraacute a que el GPIO225 alcance el estado 0 (low) que apareceraacute tras apagarse el sistema de forma adec-uada y segura Finalmente cortaraacute la en-

originalmente para una Raspberry Pi desgraciadamente no es soacutelo enchufar y usar Necesitaraacutes volver a cablear dos pines usando los cables de todos los pines tal y como se muestra en la Figura 2 Re-cablea el pin 8 de la RemotePi al pin 26 del ODROID-C2 y el pin 10 de la RemotePi al pin 7 del ODROID-C2

Si no quieres utilizar el receptor IR de la RemotePi para el mando a distan-cia de LibreELEC puedes dejar desco-nectado el pin 12 La placa continuaraacute encendieacutendose y apagaacutendose a traveacutes del comando de control remoto IR pero el control de la GUI de LibreELEC seraacute asumido por el receptor de infrarrojos integrado en el ODROID Sin embargo si has comprado una RemotePi con un receptor IR y un LED externo es posible que hayas decidido colocarla dentro de

REMOTEPI

figura 3 - la remotepi ha sido recableada y montada en una carcasa personalizada

figura 2 - re-cableado Gpio

ODROID MAGAZINE 16

Centro Multimedia por ejemplo Esos comandos de apagado se equiparaacuten a eventos internos similar a cuando nave-gas por el menuacute de apagado de Kodi Sin utilizar este segundo script el sistema se cerraraacute con seguridad pero la placa Re-motePi no recibiriacutea ninguna indicacioacuten para monitorizar el GPIO225 de modo que no cortariacutea la energiacutea tras apagarse el sistema correctamente

Usando el receptor IR de la RemotePi

Si deseas utilizar el receptor IR de la RemotePi en lugar del receptor IR ODROID integrado tendraacutes que des-activar el sistema IR integrado y activar el receptor IR GPIO Para hacer esto en Ubuntu puede consultar el artiacuteculo de la Wiki de Hardkernel en httpbitly2l8KrWg Para Libre-ELEC echa un vistazo a mi mini-guiacutea en httpbitly2lLKj2A Para preguntas comentari-os o sugerencias visita el hilo original en httpbitly2mgFGKk

gpio$GPIOpin1value

sleep 3

safe_shutdown

fi

done

Shutdownsh (solo cambia GPIOpin =15 a GPIOpin =249 y GPIOpin1 =14 a GPIOpin1 =225)

binbash

if [ ldquo$1rdquo = ldquorebootrdquo ] then

Raspberry Pi pin10 GPIOpin=15

Odroid-C2 pin7 GPIOpin=249

GPIOpin=249

Raspberry Pi pin8 GPIOpin1=14

Odroid-C2 pin26 GPIOpin1=225

GPIOpin1=225

echo ldquo$GPIOpinrdquo gt sysclass

gpioexport

execute shutdown sequence on

pin

echo ldquooutrdquo gt sysclassgpio

gpio$GPIOpindirection

echo ldquo1rdquo gt sysclassgpio

gpio$GPIOpinvalue

usleep 125000

echo ldquo0rdquo gt sysclassgpio

gpio$GPIOpinvalue

usleep 200000

echo ldquo1rdquo gt sysclassgpio

gpio$GPIOpinvalue

usleep 400000

echo ldquo0rdquo gt sysclassgpio

gpio$GPIOpinvalue

set GPIO 14 high to feedback

shutdown to RemotePi Board

because the irswitchsh has

already been terminated

echo ldquo$GPIOpin1rdquo gt sysclass

gpioexport

echo ldquooutrdquo gt sysclassgpio

gpio$GPIOpin1direction

echo ldquo1rdquo gt sysclassgpio

gpio$GPIOpin1value

usleep 4000000

fi

El script shutdownsh es uacutetil si a vec-es usas las aplicaciones remotas Android Yatse o Kore o hotkeys para apagar tu

REMOTEPI

ODROID Talk Subreddit

httpwwwredditcomrodroid

ODROID Magazine

estaacute en Reddit

ODROID MAGAZINE 17

El HiFi Shield 2 (39$ httpbitly2lHSlZJ) es un Con-vertidor Digital a Analoacutegico de Alta definicioacuten (DAC) para el ODROID-C2 y el ODROID-C1+ Se trata de

una placa de sonido especial para el ODROID-C2 y C1 + que estaacute optimizada para mejorar la calidad de reproduccioacuten del sonido Ofrece un sonido muy bien equilibrado consistente intenso amplio y muy bien dimensionado por niveles Hemos analizado la calidad de audio de la salida HiFi Shield 2 DAC con un equipo estaacutendar de la industria del sonido llamado Au-dio Precision Audio Precision es un analizador de audio de alto rendimiento optimizado para la produccioacuten de audio digital

Usando el chip DAC PCM5242 de uacuteltima generacioacuten de Texas Instrument conocido como Burr-Brown el HiFi Shield 2 soporta formatos de audio de 16 24 y 32 bits con una ra-tio THD+N miacutenima (0002) y una dinaacutemica ideal (114dB +) ademaacutes de sorprendentes tasas de muestreo de 384 kHz La interfaz dedicada SPDIF soporta una definicioacuten de hasta 192kHz24bit a traveacutes de una salida oacuteptica (Toslink)

Si hacemos uso del puerto de expansioacuten I2S en el C2C1+ no es necesario ocupar un puerto USB permitiendo al usu-ario seleccionar el sistema de reproduccioacuten de audio que desee como Volumio y Debian (DietPi) para reproducir sonido HiFi

HIFI SHIELD 2

HIfI SHIELD 2EL MEJOR SOnIDO quE PODRAS COnSEGuIR En AnDROIDeditado por rob roy (robroy)

oDroiD-c2 y hifi Shield 2 Audio pb +J

primer plano de la placa con anotaciones

Distribucioacuten de los 7 pines i2S del c2c1+

la salida de audio es estaacutendar la salida de color rojo corresponde al canal de audio iz-quierdo y la salida de color blanco correspon-de al canal de audio derecho

ODROID MAGAZINE 18

Detalles

La guiacutea de configuracioacuten de UbuntuLinux para ODROID-C2 estaacute disponible en httpbitly2brrGdG y para ODROID-C1+ en httpbitly2lI7AC7 El sistema operativo oficial Volumio 2 se puede descargar desde httpbitly2kOJNAV y la imagen DietPi basada en Debian se encuentra en httpbitly2ls45yM Puede ver los esquemas en httpbitly2mnukV4

Diagrama por bloques del hifi Shield2

Caracteriacutesticasbull El control de volumen a traveacutes de la interfaz

i2c es una gran caracteriacutestica para mantener una buena calidad del sonido con varios voluacutemenes de salida de audio

bull Los puertos de salida incluyen terminales esteacute-reo rcA chapados en oro

bull La fuente de alimentacioacuten tiene habilitado un regulador de interferencias de ruido ultra-bajo lo cual reduce el ruido de la fuente de alimentacioacuten y aumenta en gran medida el ratio sentildealruido

bull La interfaz I2S permite la descodificacioacuten di-recta de la entrada digital a la salida analoacutegica utili-zando la sincronizacioacuten del reloj maestro

bull La superficie de la PCB estaacute chapada en oro so-bre 2 onzas de cobre lo cual garantiza la continui-dad de la sentildeal y reduce la reflexioacuten y deflacioacuten de la sentildeal

bull Dispone de almohadillas soldadas a la salida de audio balanceada (sentildeal diferencial)

bull La interfaz SPDIF dedicada es nueva admite una definicioacuten de hasta 192khz24bit a traveacutes de una nueva salida oacuteptica (toslink)

bull Este HiFi shield no es compatible con Android y hardkernel no tiene planes para hacerlo compatible y asiacute poder habilitar el controlador i2S en el Kernel y el hAl de Android

El Manual de usuario del ODROID-XU4 disponible en httpbitly1U9Q8yg ha sido revisado hace poco para incluir algunos de los perifeacutericos maacutes recientes como

la Expansion Board SmartPower2 y oCam Puesto que ahora Hardkernel tambieacuten ofrece Ubuntu 1604 todos los ejemplos de coacutedigo se han actualizado para que sean compatibles con el nuevo sistema operativo Si tiene comentarios preguntas o sugerencias visita el hilo de los foros ODROID en httpbitly1RykBrT

MAnuAL Xu4ACTuALIzADOREvISADO PARA uBunTu 1604 y LOS PERIfERICOS MAS RECIEnTESeditado por rob roy (robroy)

MANUAL XU4

el manual del oDroiD-xU4 incluye informacioacuten detallada de los diferentes sistemas operativos software y perifeacutericos disponibles para el oDroiD-xU4

ODROID MAGAZINE 19

El DevOps es complicado Los grandes proyectos de soft-ware como Mesos y Kubernetes desarrollan equipos como los que se encuentran en la mayoriacutea de las empre-

sas y organizaciones tecnoloacutegicas como CoreOS con la finali-dad de ayudar a los desarrolladores a poner sus aplicaciones en funcionamiento Sin embargo iquestcuaacutel seriacutea una buena solucioacuten para un desarrollador en solitario o una pequentildea red domeacutesti-ca iquestCoacutemo podemos usar el coacutedigo a nivel de infraestructura

Uso un portaacutetil Macintosh OSX para desarrollo pero para las aplicaciones de larga duracioacuten o aplicaciones que se ejecu-tan por la noche necesito un entorno remoto siempre activo ya que mi portaacutetil estaraacute fuera de liacutenea o en el tren conmigo mientras voy y vengo del trabajo Tiene su sentido no utilizar el ordenador como un entorno para la puesta en funcionamiento de aplicaciones

El ODROID-XU4 es un ordenador ideal para un entor-no de implementacioacuten remoto ya que es econoacutemico flexible cuenta con excelentes especificaciones teacutecnicas y puede ejecutar Linux Este artiacuteculo tiene por objetivo explicar coacutemo almacenar coacutedigo de implementacioacuten en tu repositorio de proyectos asiacute como automatizar las implementaciones y ejecuciones

Arch LinuxArch Linux es una distribucioacuten de Linux gratuita de coacutedigo

abierto que fue lanzada en 2002 Estaacute centrada en la elegancia la integridad del coacutedigo el minimalismo y la simplicidad y cuenta con que el usuario haga un esfuerzo en comprender el funcionamiento del sistema Arch Linux utiliza en particular un modelo de revisioacuten continua de modo que todo lo que se necesitas para conseguir el software del sistema maacutes reciente es actualizar el sistema de forma perioacutedica

Arch Linux puede ser algo difiacutecil de asimilar ya que uti-liza herramientas diferentes a las de una distribucioacuten Debian El gestor de paquetes se activa a traveacutes de ldquopacmanrdquo en lugar de ldquoapt-getrdquo y existe un gestor complementario de paquetes muy popular llamado ldquoyaourtrdquo Muchos de los servicios o her-ramientas maacutes comunes no se instalan por defecto

Arch Linux esta hecho principalmente para procesadores x86 pero un proyecto llamado Arch Linux ARM (ALARM) tiene una distribucioacuten ARM de Arch Linux para arquitectu-ras AArch64 ARMv8 y ARMv7 Hardkernel el fabricante de ODROIDs es de hecho un patrocinador del proyecto Arch Linux ARM

HOME DATA CENTER

HOME DATA CEnTERIMPLEMEnTACIOn DEL CODIGO COn ARCHLInuXpor John Skilbeck

Configurar la redDeberaacutes asignarle a tu dispositivo una direccioacuten IP LAN

DHCP reservada y en el mejor de los casos un nombre de host que se propagaraacute a lo largo de tu red por medio del servidor DNS de tu router De esta forma en nuestro entorno de desar-rollolocal podremos utilizar un nombre de host para resolver siempre el entorno de implementacioacutenremoto

Por ejemplo en mi red reservo el 192168249 a la direc-cioacuten MAC de mi ODROID Tambieacuten configuro una entrada DNS que asigna a esa direccioacuten IP ldquoodroidrdquo Utilizar un firm-ware personalizado en el router como Tomato USB o DD-WRT lo hace extremadamente faacutecil ya que esos firmwares convierten tu router en un pequentildeo ordenador Linux con una aplicacioacuten web GUI muy pulida aunque su implementacioacuten estaacute fuera del alcance de este artiacuteculo Si operas con subredes aseguacuterate dirigir el puerto hacia el puerto externo que se asigna al puerto SSH del dispositivo odroid ya que Git se ejecuta a traveacutes de SSH

Configurar el proyectoLoacutegicamente desearaacutes estandarizar el flujo de trabajo de la

implementacioacuten Esto haraacute que el trabajo con proyectos sea

el home data center de John es una auteacutentica obra de arte

ODROID MAGAZINE 20

extremadamente faacutecil y eliminas muchos de los cambios de contexto mental que utilizas cuando trabaja en varios proyec-tos Crearemos una carpeta para alojar todos nuestros archivos relacionados con implementaciones Coloca los archivos eje-cutables en ldquodeploybinrdquo y cualquier archivo cron en ldquodeploytasksrdquo (maacutes informacioacuten sobre esta cuestioacuten maacutes adelante)

Navega hasta el directorio del proyecto en una ventana de Terminal y luego escribe los siguientes comandos

$ mkdir -p deploybin

$ mkdir -p deploytasks

$ cd deploybin ampamp touch run-job ampamp

chmod u+x run-job ampamp cd -

$ cd deploytasks ampamp touch crontab

Tambieacuten puede estandarizar doacutende colocar tu coacutedigo fuente De esta forma le seraacute maacutes faacutecil a otras personas ver coacutemo se or-ganiza tu proyecto y conocer queacute es el coacutedigo fuente y queacute no

$ mkdir src

$ cd src ampamp (place source code here ie python core

py clojure coreclj nodejs appjs)

Simplificar los puntos de entradaIniciar una aplicacioacuten puede resultar algo confuso con todos

los comandos que se pueden ejecutar en diferentes lenguajes Por ejemplo puede usar Java ldquojava -jar [my-jar] jarrdquo o python ldquopython my-apppyrdquo y tu aplicacioacuten tambieacuten puede necesitar varios argumentos Todo esto deberiacutea simplificarse y resumirse en un archivo ldquodeploybinrun-jobrdquo

binsh

set -e

CMD=rdquosrcduckrdquo

exec $CMD $

Crear el archivo cronArch Linux no viene con un cliente o demonio cron por

defecto Instaacutelalo con ldquosudo pacman -Syu cronierdquo Utilizando cron puede ejecutar comandos en intervalos de tiempo espe-cificados haciendo uso de la sintaxis especial de cron Normal-mente se almacena en el archivo crontab del usuario al que puedes acceder con ldquocrontab -erdquo Sin embargo esto es demasi-ado manual y queremos usar coacutedigo como infraestructura Cron tambieacuten tiene algunos subdirectorios muy uacutetiles en ldquoetccronrdquo como ldquoetccrondailyrdquo yrdquoetccronhourly ldquo si co-locamos los archivos aquiacute eacutestos se ejecutaraacuten en los intervalos especificados

Revisa el archivo de ldquodeploytaskscrontabrdquo que colocare-mos en ldquoetccrondrdquo que se crea automaacuteticamente con nuestro script ldquoposttreceiverdquo

variables

SHELL=binbash

PATH=binusrbinusrlocalbinusrsbinusrlo-

calsbin

MAILTO=[your-email-address]gmailcom

cmd=rdquodeploybinrun-jobrdquo

app_dir=rdquohomeskilbjodeployappduckdnsrdquo

jobs

5 skilbjo cd ldquo$app_dirrdquo $cmd gtdevnull

Aquiacute tienes el esquema general de la estructura de un simple proyecto El uacutenico ejecutable del proyecto es un uacutenico script shell ubicado en ldquosrcrdquo

$ tree

READMEmd

deploy

bin

post-receive

run-job

tasks

crontab

src

duck

4 directories 5 files

GitPrimero queremos agregar una URL remota a nuestro

proyecto en nuestro entorno local

$ git remote add odroid sshodroid~deploygit

duckdnsgit

Ten en cuenta que dependiendo de la topologiacutea de tu red es posible que tenga que modificar esta url Si no puedes asignar nombres de host la URL de git se veriacutea asiacute donde 192168249 es la direccioacuten IP LAN de tu dispositivo

$ ssh192168249~deploygitduckdnsgit

Si tienes un usuario en tu entorno ODROID distinto al que tienes en tu entorno de desarrollo la url se veriacutea asiacute donde ldquoskilbjordquo es tu nombre de usuario

$ sshskilbjoodroid~deploygitduckdnsgit

Si tu servidor remoto estaacute en una subred diferente y tienes redireccionados los puertos tu url tendriacutea este aspecto donde

HOME DATA CENTER

ODROID MAGAZINE 21

ldquo2222rdquo es tu puerto externo

$ ssh192168122222~deploygitduckdnsgit

En el directorio principal de tu entorno remoto crea una carpeta llamada ldquo~deployrdquo con dos subcarpetas ldquo~deployapprdquo y ldquo~deploygitrdquo Los subdirectorios de ldquo~deploygitrdquo seraacuten los puntos finales de nuestros desarrollos y con un hook ejecutaraacuten comandos de implementacioacuten en los subdirectorios de ldquo~ deployapprdquo

Primero navega hasta el directorio principal del entorno re-moto y a continuacioacuten escribe los siguientes comandos

$ mkdir -p ~deployapp

$ mkdir -p ~deploygit

$ mkdir -p ~deploygitduckdnsgit

$ mkdir -p ~deployappduckdns

Ahora en ldquo~ deploygitduckdnsgithooksrdquo crea un archi-vo ejecutable llamado ldquopost-receiverdquo que se activaraacute con cada accioacuten hacia el punto final

$ cd ~deployappgitduckdnsgithooks

$ touch post-receive ampamp chmod u+x post-receive

$ vim post-receive

Rellena el ejecutable con lo siguiente en el directorio ldquo~deploygitduckdnsgithooksrdquo del entorno remoto

usrbinenv bash

set -eou pipefail

user=$(whoami)

dir=rdquohome$userdeployapprdquo

app=$(basename $(pwd) | sed -e lsquosgitrsquo)

deploy_dir=rdquo$dir$apprdquo

cron_dir=rdquoetccrondrdquo

GIT_WORK_TREE=rdquo$deploy_dirrdquo git checkout -f

cd ldquo$deploy_dirrdquo

build steps here

case ldquo$userrdquo in

(skilbjo) sudo cp deploytaskscrontab ldquo$cron_

dir$apprdquo

esac

you can also do project-specific build steps in

this section like install

dependencies (ie npm install) compile source

code (ie lein uberjar)

as well as if a long-lived app run commands as

well (ie java -jar my_jarjar)

echo ldquoall donerdquo

exit 0

ImplementacioacutenAhora estamos listos para implementar ya que nuestro en-

torno local estaacute configurado para alcanzar el punto final del servidor de implementacioacuten nuestro entorno remoto estaacute con-figurado para recibir la notificacioacuten y revisar el coacutedigo fuente ejecutar cualquier paso de compilacioacuten y colocar una tarea en el directorio cron del sistema para su lanzamiento Ponto todo en praacutectica con el siguiente comando en el directorio del proyecto del entorno local

$ git push odroid

Ademaacutes para ver coacutemo se ha implementado todo esto en un proyecto de ejemplo visita httpbitly2lthYKW

Pasos finalesSe puede antildeadir al flujo anterior algunas caracteriacutesticas

como son muacuteltiples entornos ya sea con muacuteltiples ODROIDs o con un solo ODROID trataacutendolo como un servidor de ser-vicio Esto se puede hacer con subdirectorios bajo ldquo~deployrdquo como ldquo~deploystagingappmy_apprdquo o ldquo~ deployproduc-tionappmy_apprdquo

Ademaacutes podriacuteas antildeadir un servicio de integracioacuten conti-nua como CircleCI que ejecutariacutea una suite de testeo desde cada desarrollo a GitHub y si tiene eacutexito compila una imagen Docker No podriacuteas entonces tener un archivo en el entorno remoto que verificariacutea una imagen de un repositorio Docker y la ejecutariacutea en un intervalo especificado Esto es lo que hacen muchos de los softwares DevOps distribuidos como Mesos y Kubernetes pero en un entorno mucho maacutes rico que BASH y Linux

Referencias

Artiacuteculo Wikipedia de Arch linux httpbitly2l71ADKWebsite Arch linux ArM httpsarchlinuxarmorgArtiacuteculo que leiacute hace unos tres antildeos y que me inspiroacute para escribir mi propio artiacuteculo httpbitly2m5JAct

HOME DATA CENTER

ODROID MAGAZINE 22

odroid ARCADE BOXLA EXPERIEnCIA PERfECTA COn TuS JuEGOS ARCADE fAvORITOSpor brian Kim charles park y John lee

ARCADE BOX

Los ODROIDs tienen mejor rendimiento que las placas de la competencia especialmente en lo que respecta al renderizado de video lo que significa que

las placas ODROID son ideales para jugar lo cual hacen muchos usuarios de ODROID Ya hay disponibles varios sistemas operativos de plataforma de juegos como Lakka (httpbitly1NO8BBC) y ODROID GameStation Tur-bo (httpbitly1ASFO5O) Para disfrutar auacuten maacutes de nuestras sesiones de juegos creamos nuestra propia consola arcade con simples botones GPIO y joysticks y la llama-mos la ODROID Arcade Box Elegimos un ODROID-XU4 para este proyecto porque es el que tiene mejor rendimiento GPU de todos los dispositivos ODROID actuales En este artiacuteculo vamos a describir como hemos creado la ODROID Arcade Box

Requisitos( Figura 3 ndash )Decidimos hacer la ODROID Arcade Box usando

un MDF (tablero de fibra de densidad media) El Shifter Shield del XU4 tambieacuten es uacutetil para utilizar los pines de expansioacuten del ODROID-XU4 Los Joysticks los botones y los cables eran los componentes de entrada y se utilizoacute

Nuestro primer y simple prototipo

ODROID MAGAZINE 23

panel MDf 12t2eA 600x2202eA 600x752eA 220x75taladroplegadoraDesmontadorcinta meacutetricaNavaja multiusoAlicates de punta largaoDroiD-xU4xU4 Shifter shieldSMpS (fuete Alimentacioacuten)

extendedores hDMi USb ethernetenchufe de alimentacioacuten y Switchbisagras 2eAreceptor de puertacaucho 4eAtornillospulsadores 19eAJoystick 2eAcablesterminales

una SMPS (Fuente de alimentacioacuten conmutada) como fuente de alimentacioacuten Las herramientas y las piezas utilizadas las tienes en esta paacutegina

La ODROID Arcade Box necesita un total de 27 entradas (19 entradas para botones y 8 entra-das para joysticks) Las 24 entradas GPIO digi-tales del ODROID-XU4 no son suficientes para las 27 entradas de modo que creamos dos puertos ADC adicionales para los tres botones que nos fal-taban Los valores de entrada ADC se basan en el voltaje de entrada y los valores de entrada digital y analoacutegica se procesan en el demonio GPIO que se describe a continuacioacuten

Disentildeo y montajeLos paneles de la ODROID Arcade Box deben

ser disentildeados y fabricados para que los botones y joysticks esteacuten bien colocados Elegimos MDF 12T teniendo en cuenta el precio y la durabilidad El dise-ntildeo se puede hacer con cualquier herramienta CAD como Google Sketch o SolidWorks Aunque existen muchas plantillas de disentildeo para los paneles de joypad decidimos elegir un disentildeo arcade estaacutendar japoneacutes

El primer paso del montaje es unir la placa al panel MDF Este paso fue faacutecil aunque nos llevo maacutes tiempo que el resto Despueacutes insertamos los joysticks la toma de corri-ente el interruptor y los botones en el panel MDF superior Los conectores HDMI Ethernet y USB se colocaron en la parte trasera del panel MDF El siguiente paso fue montar cada panel MDF usando un taladro para hacer los agujeros luego con tornillos los sujetamos

El uacuteltimo paso del montaje de la ODROID Arcade Box es conectar por cable los pines de expansioacuten del ODROID-XU4 a los componentes de entrada En este proyecto dise-ntildeamos las entradas GPIO externas tal y como se muestra en la paacutegina 26 Los botones Select y Temp estaacuten conecta-dos a puertos de expansioacuten ADC

Configuracion del softwareDesarrollamos un nuevo demonio GPIO llamado gpio_

keyd (httpbitly2ljOZKg) Este demonio es capaz de asignar entradas GPIO y eventos claves usando uinput y wiringPi una libreriacutea de acceso GPIO basada en pines Estaacute disentildeada para que le sea familiar a quiene ya ha utilizado el sistema de cableado Arduino Aunque la blibreriacutea wiring-Pi upstream soacutelo admite Raspberry Pi Hardkernel ofrece una versioacuten de wiringPi para ODROIDs en su repositorio GitHub (httpbitly1Eq3UpF) El moacutedulo uinput es un moacutedulo del kernel de Linux que gestiona el subsistema de entrada del usuario Se puede utilizar para crear y manejar dispositivos de entrada desde una aplicacioacuten

ARCADE BOX

herramientas compentes y lo que hay justamente debajo

esquema de los puertos de expansioacuten

ODROID MAGAZINE 24

Elegimos ODROID GameStation Turbo (httpbitly1ASFO5O) como plataforma de software para nuestra ODROID Arcade Box que tiene integrado uinput Debes asegurarte de que el archivo de dispositivo uinput existe en el sistema operativo elegido porque algunos no tienen dispositivos uinput

$ ls devuinput

Si tu sistema operativo no tiene un archivo de disposi-tivo devuinput entonces seraacute necesario recompilar e in-stalar un nuevo kernel con la opcioacuten de configuracioacuten IN-PUT_UINPUT habilitada La paacutegina Wiki en httpbitly1YIToBI describe coacutemo compilar e instalar la imagen del kernel a partir del coacutedigo fuente

$ make menuconfig

Device Drivers

-gt Input device support

-gt Generic input layer

-gt Miscellaneous device

-gt User level driver support ltgt

Ten en cuenta que wiringPi debe instalarse antes de in-stalar gpio_keyd En la imagen GameStation de ODROID los comandos sudo deben ejecutarse como root porque la cuenta ldquoodroidrdquo no estaacute designada como usuario sudo

$ git clone httpsgithubcomhardkernelwiringPi

git

$ cd wiringPi

$ sudo build

Descarga el coacutedigo fuente gpio_keyd el cual estaacute dis-ponible en nuestro repositorio GitHub El procedimiento para compilar e instalar gpio_keyd es muy simple

$ git clone httpsgithubcombkrepogpio_keydgit

$ cd gpio_keyd

$ make

$ sudo make install

El script gpio_keyd hace referencia a etcgpio_keydconf como el predeterminado para la informacioacuten de los botones y GPIO El archivo de configuracioacuten fue modi-ficado para las 27 entradas de la ODROID Arcade Box Algunas botones ya se utilizaban en el emulador de juego de modo que tuvimos que cambiar la configuracioacuten del emulador para evitar conflictos entre los botones de en-trada GPIO y el emulador Ten en cuenta que el campo ltGPIO pingt en el archivo de configuracioacuten hace referen-

ARCADE BOX

plano del disentildeo de joypad

la oDroiD Arcade box montada

ODROID MAGAZINE 25

cia al nuacutemero wiringPi no al GPIO y al nuacutemero de pin (httpbitly2lbzPIB)

Ejemplo de configuracioacuten para las 27 entradas etcgpio_keydconf

Digital input ltKey codegt ltGPIO typegt ltGPIO pingt ltActive valuegt User 1KEY_LEFT digital 15 0KEY_RIGHT digital 1 0KEY_UP digital 4 0KEY_DOWN digital 16 0KEY_A digital 2 0KEY_S digital 3 0KEY_D digital 30 0KEY_F digital 21 0KEY_Z digital 8 0KEY_X digital 9 0KEY_C digital 7 0KEY_V digital 0 0 User 2KEY_BACKSLASH digital 12 0KEY_SLASH digital 13 0KEY_SEMICOLON digital 14 0KEY_LEFTBRACE digital 5 0KEY_Y digital 26 0KEY_U digital 27 0KEY_I digital 22 0KEY_O digital 23 0KEY_H digital 6 0KEY_J digital 10 0KEY_K digital 11 0KEY_L digital 31 0

Analog input ltKey codegt ltGPIO typegt ltADC portgt ltADC ac-tive valuegtKEY_B analog 0 0KEY_N analog 0 2045KEY_M analog 1 2045

To run gpio_keyd daemon at every startup is conve-nient for ODROID Arcade Box

etcinitdgpio_keyd binsh BEGIN INIT INFO

ARCADE BOX

Mapeo Gpio externo para los botones y Joysticks

cableado de la oDroiD Arcade box

ODROID MAGAZINE 26

Provides gpio_keyd Required-Start $all Required-Stop Default-Start 2 3 4 5 Default-Stop Short-Description Run usrbingpio_keyd if it ex-ist END INIT INFO

PATH=sbinusrsbinbinusrbin

libinitvarssh

liblsbinit-functions

do_start() if [ -x usrbingpio_keyd ] then usrbingpio_keyd -d ES=$ [ ldquo$VERBOSErdquo = no ] ampamp log_end_msg $ES return $ES fi

case ldquo$1rdquo in start) do_start restart|reload|force-reload) echo ldquoError argument lsquo$1rsquo not supportedrdquo gtamp2 exit 3 stop) killall gpio_keyd exit 0 ) echo ldquoUsage $0 start|stoprdquo gtamp2 exit 3 Esac

$ sudo chmod +x etcinitdgpio_keyd$ sudo update-rcd gpio_keyd defaults$ sudo reboot

En los comandos anteriores el script gpio_keyd se ejecuta como un demonio uti-lizando la opcioacuten ldquo-drdquo El uso de gpio_keyd se puede comprobar con la opcioacuten ldquo-hrdquo Comprue-ba de nuevo las teclas usadas por el juego o el emulador despueacutes fija la configuracioacuten del gpio_ keyd correctamente Es ahora cuando estaacutes listo para jugar y disfrutar de tus juegos con tu nueva ODROID Arcade Box

ARCADE BOX

the King of fighters 98 John vs brian

ODROID MAGAZINE 27

En este artiacuteculo analizaremos las diferentes formas que existen para ob-tener los datos del uso de la red

ConfiguracioacutenLa forma normal de analizar los datos

de traacutefico de la red es mediante el uso de datos a traveacutes de las aplicaciones de configuracioacuten del sistema tal y como se muestra en la figura 1

El uso de datos muestra la cantidad total de traacutefico de datos entrante y sa-liente que ha sido utilizada por una apli-cacioacuten Si seleccionas la aplicacioacuten veraacute una pantalla como la que aparece en la Figura 2 que muestra informacioacuten detal-lada sobre el uso de la aplicacioacuten tanto en primer plano como de fondo

La informacioacuten que se muestra den-tro de la aplicacioacuten de Configuracioacuten se almacena en data systemnetstats que requiere acceso root Al eliminar todo lo que hay dentro de esta carpeta se resta-

Como desarrolladores queremos que nuestras aplicaciones sean eficientes y a menudo nos gus-

tariacutea saber cuaacutento ancho de banda de red estaacute utilizando nuestra aplicacioacuten Esto es muy uacutetil por varias razones

bull Para monitorizar y asegurarnos de que la aplicacioacuten es realmente la nuestra y no una aplicacioacuten que ha sido pirateada y publi-cada con diferentes nombres en Play Store

bull Para asegurarnos de que no es-tamos cogiendo ancho de banda innecesario del plan de datos del usuario

bull Para comprobar que el disposi-tivo que estamos usando no estaacute accediendo a Internet sin nuestro consentimiento

blecen las estadiacutesticas de red mostradas en esta aplicacioacuten

Estadiacutesticas de la redLa aplicacioacuten de configuracioacuten nos

puede dar una informacioacuten general so-bre las estadiacutesticas de la red de datos que es un buen comienzo pero a veces necesitamos un anaacutelisis maacutes detallado que puede hacerse a traveacutes del coman-do dumpsys Android cuenta con una poderosa herramienta llamada dumpsys que nos permite obtener una instan-taacutenea o volcado del sistema que pu-ede incluir informacioacuten sobre la red la memoria y otros componentes Lee la documentacioacuten de Android en httpbitly2kK9dep para obtener maacutes infor-macioacuten del sistema Para conseguir maacutes informacioacuten relacionada con la red nos interesa el comando

$ dumpsys netstats detail

La Figura 3 muestra un pantallazo de lo que puedes ver desde una tablet Nexus 7 que ejecuta Lollipop 511

Hay algunas cuestiones importantes para entender las estadiacutesticas

bull Las estadiacutesticas UID muestran el desglose de las aplicaciones de primer plano y de fondo

bull Uid muestra el ID de usuario de la aplicacioacuten que se puede utili-zar para relacionar eacutesta con la in-

DESARROLLO AnDROID AnALIzAnDO EL uSO DE RED DE LAS APLICACIOnESpor Nanik tolaram

DESARROLLO ANDROID

figura 1 - Uso de datos en la configuracioacuten

figura 2 - Desglose del uso de datos de la app

ODROID MAGAZINE 28

$ dumpsys package detail

Este comando te proporcionaraacute una larga lista de informacioacuten sobre los pa-quetes que estaacuten instalados en tu dis-positivo Para las estadiacutesticas de red nos interesa la seccioacuten que se muestra en la Figura 5

La seccioacuten resaltada muestra el userId que se relaciona con el uid que se mues-tra en las estadiacutesticas de red Al relacio-nar este nuacutemero sabemos el nombre del paquete de la aplicacioacuten sobre el que es-tamos leyendo las estadiacutesticas de red

Aplicacioacuten de ejemplo

La aplicacioacuten de ejemplo de este artiacute-culo se puede descargar desde httpbitly2m8WenA que muestra coacutemo etiqu-etar la conexioacuten de red desde distintas

secciones de la aplicacioacuten lo cual puede ayudar a analizar el volumen de traacutefico de datos de la aplicacioacuten La Figura 6 muestra un ejemplo de coacutemo lo vemos si utilizamos Android Device Monitor (dentro de Studio diriacutegete a Tools -gt Android -gt Android Device Monitor)

Tal y como se puede ver en el graacutefico la simple aplicacioacuten tiene 3 conexiones dife-rentes y cada una de ellas estaacute accediendo a un sitio web diferente Al etiquetarlas con

formacioacuten del paquete (que ver-emos en la seccioacuten de detalles del paquete dumpsys) con el objeto de conocer queacute aplicacioacuten utiliza estas estadiacutesticas de red

bull Las etiquetas son uacutetiles si de-sea ver la cantidad de datos que utiliza cada conexioacuten de tu apli-cacioacuten Puedes ver un ejemplo de esto en la Figura 4 que muestra que el uid 10007 tiene las siguien-tes etiquetas 0x30000401 0x30003201 0x30002804 0x10000401 y 0x30000407 Es-tas etiquetas ayudan al desarrol-lador a saber cuaacutentos datos uti-liza cada parte de la aplicacioacuten Estas estadiacutesticas de red en par-ticular estaacuten vinculada al paquete Google Framework que forma parte de Google Play Store

En el siguiente apartado veremos coacutemo escribir una aplicacioacuten etiquetando el hilo que hace la conexioacuten de red para determi-nar la cantidad de datos que se utilizan

Estadiacutesticas de paquetes

En la seccioacuten anterior analizamos el uid que aparece al ejecutar el comando dumpsys netstats Ahora necesitamos sa-ber queacute uid corresponde a la aplicacioacuten en el dispositivo y esto se hace mediante el siguiente comando

DESARROLLO ANDROID

figura 3 ndash estadiacutesticas de red con Dumpsys

figura 4 - estadiacutesticas de etiquetas UiD

figura 5 - Detalles del paquete dumpsys

figura 6 - etiquetas de red

coacutedigos diferentes podemos ver la cantidad de traacutefico que consume cada conexioacuten y esto nos ayudaraacute a ver si nuestra aplicacioacuten utiliza el ancho de banda de un modo eficiente

El coacutedigo del siguiente fragmento muestra el uso de la API TrafficStats interna Esta etiqueta API muestra el subproceso que utiliza actualmente un socket con un identificador y todo el traacute-fico que pasa por la misma conexioacuten se grabaraacute junto Asiacute es como la aplicacioacuten es capaz de agrupar las 3 conexiones diferentes Internamente Android utili-za el moacutedulo xt_qtaguid del kernel para realizar este tipo de etiquetado Tienes disponible maacutes informacioacuten en httpbitly2kU8KXB

public void getUsingNormalURLC

onnection(String urlText int

threadTag)

throws IOException

URL url = null

TrafficStats

setThreadStatsTag(threadTag)

HttpURLConnection urlConnec-

tion = getConnection(url)

try

finally

TrafficStatsclearThread-

StatsTag()

ODROID MAGAZINE 29

Disgustado te subes a tu 4x4 de dominacioacuten del mun-do un vehiacuteculo que desde fuera parece maacutes bien un viejo camioacuten de granja pero por dentro se parece maacutes

al sistema de control de un transbordador espacial porque el conductor del restaurante oriental que realiza las entrega a do-micilio estaacute enfermo Ahora tienes que ir a recoger tu propia comida ldquoQueacute rudimentariordquo piensas cuando sales de tu garaje secreto Justamente cuando vas a parar el vehiacuteculo en un stop oyes un fuerte ruido Sales y te diriges raacutepidamente a la parte posterior del 4x4 donde observas un cubo de basura Te tiras de los pelos y piensas ldquoiexclEsos basureros Neanderthales dejaron otra vez el cubo en mediordquo Ahora te toca recoger los restos de tu cena y la basura de otros

Conforme te vas alejando para hacer tus recados empiezas a pensar en coacutemo evitar este inconveniente en el futuro Varias ideas te vienen a la mente

Un sistema lidar para escanear en 3D el entorno en tiempo real y alarmas sonoras cuando sea necesarioUn brazo ciberneacutetico colocado en la parte posterior del 4x4 que procese video para detectar objetos agarrarlos y moverlosUna simple camara trasera

Empiezas a considerar la viabilidad de cada una

Muy bueno pero demasiado complicado y costosoAuacuten mejor y un proyecto propio de un cientiacutefico loco pero demasi-ado complicado y costosoya tengo dos iexclpero estaba demasiado preocupado en mis pensa-mientos para prestarles atencioacuten

Lo que necesitas es algo simple sin complicaciones y barato que haga sonar una alarma para alertarte incluso cuando estar absorto en tus pensamientos ldquoAhardquo Recuerdas haber visto un nuevo producto en ameriDroid que puede hacer precisamente esto Se trata de un microcontrolador conectado al USB que soporta hasta 6 sensores ultrasoacutenicos con simples comandos en serie (httpbitly2l26ptV) ldquoiexclPerfectordquo Piensas

Regresas a tu laboratorio subterraacuteneo con el pollo Kung Pao en la mano te apresurar a encender tus monitores entras en el sitio web ameriDroid y pides un kit ldquoUSB Ultrasonic Ranging Sensorrdquo con 6 sensores y carcasas

Vas sintiendo una sensacioacuten de alivio a medida que regresas a los 12 proyectos en lo que ya estabas trabajando a la espera de que pasen un par de diacuteas hasta que llegue tu nuevo pedido Mientras te comes tu Kung Pao dibujas un diagrama de coacutemo quieres colocar los sensores en la parte posterior de tu vehiacuteculo

Un par de diacuteas maacutes tarde el kit llega Inmediatamente em-piezas a montar el kit y los sensores en la parte posterior de tu 4x4 teniendo cuidado de usar sellador de silicona para pro-teger los sensores de la lluvia aguanieve y nieve que puedas encontrar durante tus aventuras para dominar el mundo

A continuacioacuten consultas las instrucciones proporcionadas por ameriDroid con el kit sobre coacutemo controlar y leer los sen-sores desde tu fiel ODROID-C2 y VU7 que montaste en el salpicadero para este propoacutesito

Conectando el cable USBEl cable USB suministrado debe conectarse al microcon-

trolador (la pequentildea placa de circuito con filas de pines que sobresalen) El microcontrolador tiene una fila de 4 o 6 pines

DETECTAR LA PRESEnCIACROnICAS DE un CIEnTIfICO LOCOpor bo lechnowsky

SENSOR ULTRASONICO

ODROID MAGAZINE 30

en un extremo Si tiene 6 pines ceacutentrate en los 4 pines centrales y sigue estas instrucciones

Negro - conectar a GNDrojo - conectar a VccVerde - conectar a rxi

blanco - conectar a txD

Conectando los sensoresultrasoacutenicos

En cada sensor ultrasoacutenico hay cuatro pines marcados Vcc Trig Echo Gnd Para el primer sensor ultrasoacutenico conecta el pin 2 del microcontrolador al pin ldquoTrigrdquo del sensor ultrasoacutenico Conecta el pin 3 del microcontrolador al pin ldquoEchordquo del sensor Conecte el pin ldquoVccrdquo del sensor a DC 5V (el pin ldquoVCCrdquo del microcontrolador suministra 5V) y el pin ldquoGndrdquo del sensor a una conexioacuten a tierra como por ejemplo los pines ldquoGNDrdquo del microcontrolador

Si conectas un segundo sensor de ultrasonidos conecta ldquoTrigrdquo al pin 4 y ldquoEchordquo al pin 5 Continuacutea conectando los siguientes pines a los sensores hasta los pines 12 y 13 si al final optas por conectar los seis sensores ultrasonidos

Conexioacuten del softwareUtilizas un programa terminal como PuTTY Screen o tu

lenguaje de script o programacioacuten favorito para conectarte al puerto serie que aparece cuando te conectas el sensor ultrasoacuteni-co Esto variaraacute en funcioacuten del sistema operativo que utilizas para conectarte al microcontrolador En Windows consultar el ldquoAdministrador de dispositivosrdquo es la forma maacutes comuacuten de averiguarlo En Linux ldquodmesgrdquo o ldquolsusbrdquo son las formas de de-tectar a queacute puerto estaacute conectado Deberiacuteas ver algo denomi-nado ldquoPL2303rdquo que es la conexioacuten del microcontrolador Si recibes informacioacuten basura en tu terminal cuando te conectes aseguacuterate de que los ajustes en serie son 9600 baudios 8 bits ninguno (paridad) y 1 bit de parada Aquiacute tienes una lista de los comandos que puede aceptar el microcontrolador

bull debug on Activa la retroalimentacioacuten detallada Estaacute deshabilitada por defecto nos proporcionaraacute aclaracio-nes sobre los errores de entrada

bull debug off desactiva la retroalimentacioacuten detalladabull init x y activa un HC-SR04 en los pines especificados

X es trigger Y es echo Estos deben ser pines digitales El dispositivo 0 estaacute preestablecido en los pines 2 y 3 de modo que no es necesario especificar estos pines La seleccioacuten de pines no vaacutelidos devolveraacute un signo de ex-clamacioacuten ()

bull ping enviacutea una sola lectura del HCSR04 previamente utilizado Si no se ha utilizado todaviacutea se usaraacute el dis-positivo 0 Si al comando le sigue un espacio y un nuacutemero entre 0-100 (exclusivo) se realizaraacute ese nuacutemero de lecturas emitiendo primero el promedio de esas lec-

SENSOR ULTRASONICO

turas despueacutes el nuacutemero de lecturas fallidas (que no cuentan para el promedio) y luego los valores miacutenimo y maacuteximo de lectura separados por espacios En cual-quier caso si una sentildeal se desconecta automaacuteticamente devolveraacute -1

bull start Hace ping constantemente a todos los dispositivos conectados en secuencia Debido a que los dispositivos se utilizan uno a uno el flujo de datos de este comando seraacute maacutes raacutepido si los dispositivos miden distancias cor-tas Si este comando le sigue un espacio y un nuacutemero mayor que 0 la placa esperaraacute estos milisegundos entre la lectura del uacuteltimo dispositivo y la lectura del primer dispositivo El resultado de este comando seraacute la lectura de cada dispositivo (con un uacutenico espacio despueacutes de cada uno) y una vuelta tras el uacuteltimo dispositivo

bull stop detiene la operacioacuten ldquostartrdquo soacutelo es efectivo tras haber iniciado ldquostartrdquo

bull mode emite el modo de medicioacuten del flujo M para meacutetrico (miliacutemetros) I para Imperial (deacutecimas de pul-gada) o R para Raw (la longitud de pulso en microse-gundos devuelta por el HC-SR04) El valor predeter-minado es M

bull timeout emite el tiempo de espera actual para lecturas de la sentildeal El tiempo de espera es la mayor cantidad de microsegundos que la placa esperaraacute antes de declarar que el HC-SR04 ha realizado una mala lectura lo cual no es necesariamente lo mismo que el pulso maacutes largo que la placa aceptaraacute del HC-SR04 Cuando la placa mide el pulso del HC-SR04 primero espera a que el HC-SR04 comience a enviar un pulso Este tiempo cuenta para el tiempo de espera Cuando este comando le sigue un espacio y un nuacutemero el tiempo de espera se ajusta a ese nuacutemero El valor predeterminado es 1 segundo (1000000 microsegundos)

bull ver emite informacioacuten de versioacuten y creacuteditos

Si cualquier comando (o ninguacuten comando) estaacute precedido por un uacutenico diacutegito de 0-5 (inclusive) seguido de un espacio el dispositivo que corresponde a ese diacutegito se seleccionaraacute para ser usado con el siguiente comando ldquopingrdquo Cada vez que la placa esteacute lista para un comando emitiraacute ldquogtrdquo para la serie La uacutenica excepcioacuten estaacute tras el comando ldquostartrdquo que no solicitaraacute entrada hasta que sea reconocido ldquostoprdquo

ODROID MAGAZINE 31

iquestCoacutemo empezaste con los ordenadoresCuando empeceacute mi negocio tuve que decidir queacute plat-

aforma de hardware iba a utilizar para la recogida de datos del traacutefico Simplemente para que no pienses mal de miacute mis caacutemaras de traacutefico no son las que se usan para multar por exceso de velocidad o algo asiacute Mi sistema estaba desti-nado suavizar el flujo de traacutefico fijando los controles oacutepti-mos de las sentildeales de traacutefico Anteriormente usaba un PC industrial para ejecutar mi software de reconocimiento de imaacutegenes Ahora uso la familia de dispositivos ODROID para esta cuestioacuten

iquestQueacute te atrajo de la plataforma ODROID En 2012 useacute Google para buscar una plataforma que

fuera muy compacta y al mismo tiempo potente para que cubriera mis necesidades que resultoacute ser la placa

Por favor haacuteblanos un poco sobre tiSoy ingeniero de electroacutenica y software en Rusia desde

hace 47 antildeos Naciacute en Siberia y tras terminar la escuela me mudeacute a Moscuacute para estudiar en la universidad Ser estudi-ante en el Instituto de Aviacioacuten de Moscuacute (MAI) fue una experiencia increiacuteble probablemente la mejor de mi vida A principios de los 90 llegoacute a Rusia la era de los microordena-dores soliacutea jugar a un juego de saltos en una CPU z80 y el i486 Tras finalizar mis estudios universitarios y de posgrado me convertiacute en ingeniero Trabajeacute en unos cuantos puestos de trabajo para diferentes empresas y finalmente decidiacute em-prender mi propio negocio En 2006 puse en marcha una iniciativa para crear sistemas de recuento del traacutefico de au-tomoacuteviles Estoy casado y tengo una hija de 21 antildeos llamada Lena que trabaja como enfermera Mi esposa Nadezhda es disentildeadora de vestuario de produccioacuten pero ahora trabaja como disentildeadora web Ella es aficionada a la fotografiacutea digi-tal y le encanta su caacutemara reacuteflex digital

COnOCIEnDO un ODROIDIAnvIACHESLAv ALEKSEEveditado por rob roy (robroy)

CONOCIENDO UN ODROIDIAN

Viacheslav disfruta tocando la guitarra y escuchando muacutesica

1995 en el campus MAi probando uno de los primeros equipos Vr comerciales del mundo que funcionaba a 640x480 a 30fps Utiliz-aba un sensor magneacutetico en la nuca para la posicioacuten de la cabeza la mejor broma que se podiacutea gastar a alguien era colocar un imaacuten cerca de la espalda y sacudirlo iexcllos gritos estaban garantizados cuando el mundo en 3D daba vueltas sin cesar

ODROID MAGAZINE 32

ODROID-X2 Con sus cuatro nuacutecleos funcionando a 17 GHz calculaba con facilidad los algoritmos de reconteo del traacutefico de automoacuteviles Maacutes tarde cambieacute al U3 y el XU4

iquestCuaacutel es tu ODROID favorito y por queacuteDe momento mi favorito es el XU4 Mi sistema estaacute

basado en el tratamiento de fotogramas de video en tiempo real por lo que el bus USB 30 del XU4 es bastante bueno para una caacutemara con una interfaz de captura de viacutedeo Para mi sistema es muy importante tener una buena conexioacuten entre la caacutemara de viacutedeo y la CPU Probablemente tendreacute que echar un vistazo a las interfaces de nivel inferior como MIPI CSI-2 que por desgracia estaacuten ausente en el XU4 Recientemente he estado aprendiendo como usar la caacute-mara oCam GS BW La caacutemara es buena en siacute misma pero para un uso industrial al aire libre tengo que implementar un software de control de exposicioacuten automaacutetica y posible-mente de control de apertura de la lente que todaviacutea estaacute en estudio

MEET AN ODROIDIAN

Una vieja joya el mini ordenador Nixdorf

An old gem the Nixdorf mini computer

CONOCIENDO UN ODROIDIAN

iquestQueacute aficiones e intereses tienes aparte de los ordenadoresDisfruto conduciendo y leyendo sobre coches y viendo

los campeonatos de carreras de F1 Tambieacuten me gusta via-jar pescar escuchar muacutesica y tocar la guitarra Tengo un gato siberiano llamado Leia y soy fan de Star Wars

iquestQueacute consejo le dariacuteas a alguien que quiere aprender maacutes sobre la programacioacuten

Hacer software es algo increiacuteble y miacutestico Es una fusioacuten de arte y tecnologiacutea Nada te inspira maacutes que tu aplicacioacuten cuando empieza a cobrar vida Sin embargo siempre estaacute ahiacute el otro lado de la Fuerza Estar listo para instruirte inc-esantemente El desarrollo de software es una de las activi-dades que cambia maacutes raacutepido Si tienes pensado dejar de hacer software en uno o dos antildeos puede dejar de aprender ahora El conocimiento se volveraacute anticuado en un par de antildeos maacutes o menos Para estar en lo maacutes alto siempre tienes que correr Es similar a la cancioacutenrdquoRun like Hellrdquo de Pink Floyd Si estaacutes listo para vivir de esta forma seguro que tendraacutes eacutexito

ODROID MAGAZINE 33

Page 7: Estación ARCADE · gias de marketing, administración de medios sociales y producción multimedia impresa, web, vídeo y cine. Ges-tionando múltiples cuentas con agencias y productores

para conseguir que funcione correcta-mente en el ODROID-C2 Lo maacutes importante de todo es que el re-mapeo desde RPiGPIO a la libreriacutea WiringPi2 ya estaacute terminado puesto que Wiring-Pi2 es compatible con el ODROID-C2 Consulta la excelente guiacutea GPIO pro-porcionada por Hardkernel en httpbitly2jEUjWX Todo el coacutedigo esta descrito en los siguientes apartados de-limitado entre lsquoltgtrsquo con su correspon-diente descripcioacuten debajo

El coacutedigo baacutesicode odroidbellpy

ltimport wiringpi2 as odroidgt

Empezaremos importando la libreriacutea wiringpi2 Las instrucciones para in-stalar esta libreriacutea y poder controlar los pines GPIO del ODROID-C2 la puedes encontrar en httpbitly2ba6h8o

ltimport timegt

Importamos el moacutedulo time

ltimport osgt

Importamos el moacutedulo os

ltimport globgt

Importamos el moacutedulo glob

ltimport sysgt

TIMBRE

figura 2 - el sistema completo c2

Importamos el moacutedulo sys

ltodroidwiringPiSetup()gt

Hemos configurado el moacutedulo wi-ringPi2 conforme a la tabla que nos proporciona Hardkernel en httpbitly2aXAlmt

ltButton = 3gt

Este es en realidad el pin fiacutesico 15 seguacuten la tabla de httpbitly2aXAlmt

ltodroidpinMode(Button0)gt

Fijamos el pulsador como entrada

ltodroid

pullUpDnControl(Button1)gt

Activamos la resistencia de parada y arrastre En este caso parado tal y como lo indica el argumento 1

loop

Estamos entrando en un bucle ya que los dispositivos IoT siempre estaacuten en modo de espera

ltprint(ldquoProgram Runningrdquo)gt

La uacutenica finalidad de esto es la moni-torizacioacuten

oses

while Trueloops forever till

keyboard interrupt (ctr + C)gt

ltif odroiddigitalRead(Button)

== False when button is un-

pressedgt

ltsysstderrwrite(ldquordquo)gt

Si no se presiona el timbre imprimi-mos puntos en la pantalla usando la li-breriacutea sys

lttimesleep(1)gt

Se comprueba si se ha tocado el pul-sadortimbre cada segundo

ltelsegt

ltprint(ldquoButton Pressedrdquo)gt

Se ha presionado el pulsadortimbre

------| photo amp Bell

|------

Get FileName

ltnow = timestrftime(ldquoDatem-

d-yTimeH-M-Srdquo)gt

Declaramos la variable now con la fe-cha y hora que usaremos en la foto

Make command to run odroidC2

sh

ltcommand = ldquobash odroidC2sh

ldquo + str(now)gt

Invocamos el script shell odroidC2sh (ver a continuacioacuten)

-- odroidC2sh is an Shell

script that

-- is responsible for tak-

ing the photo and

-- making the Doorbell

Noise

--- We insert the ldquoNowrdquo ar-

gument so the python

--- script knows what the

filename of the

--- picture will be so it

can pass it on into the

ODROID MAGAZINE 7

ltmpv ringtonemp3gt

Finalmente haremos sonar el timbre usando un programa llamado mpv que ya estaacute incluido en Ubuntu 1604 v20 de Hardkernel (httpbitly2cBibbk) En otras palabras usamos el Mplayer para reproducir este archivo

Configurar el coacutedigo de Gmail

La mayoriacutea de la gente tiene una cuenta de Gmail Si no la tienes es muy faacutecil crearte una y lo maacutes importante de todo es gratis En realidad para que este script de Gmail funcione correctamente necesitamos dos cuentas de correo elec-troacutenico el correo electroacutenico del remi-tente y la cuenta de correo electroacutenico del destinatario y siempre es asiacute Por supuesto puede enviar un correo elec-troacutenico desde y hacia la misma cuenta pero es maacutes elegante crear una segunda cuenta de correo electroacutenico con el fin de estar al tanto de las fotos con el registro de la fecha y hora por separado Tambieacuten recomiendo que la cuenta de correo elec-troacutenico del destinatario sea la que utilices en tu dispositivo moacutevil para que el dis-positivo te avise cada vez que alguien lla-me a tu puerta No olvides permitir que ldquo las aplicaciones menos segurasrdquo tengan acceso a tu cuenta de Gmail (httpbitly124TgWN)

Vamos a examinar el script python llamado IoTOdroidpy

ltfrom emailmimetext import MIM-

ETextgt

ltfrom emailmimemultipart import

MIMEMultipartgt

Usamos esos dos moacutedulos porque necesitamos enviar un correo electroacutenico limpio con un remitente un receptor y un asunto

ltfrom emailmimeapplication im-

port MIMEApplicationgt

Tambieacuten importamos el moacutedulo re-

Script shell OdroidC2sh

El script OdroidC2sh es respon-sable de tomar la foto y hacer sonar el timbre La funcioacuten del argumento lsquoNowrsquo es pasar el nombre del archivo de la foto al script de Gmail En otras palabras es el conector entre nuestro coacutedigo baacutesico odroidbellpy y el script Odroid-IoTNo-tifierpy El script OdroidC2sh es muy simple

ltcd photosgt

Cambiamos desde directorio actual al directorio ltphotosgt

ltecho ldquoTaking the Photordquogt

ltnow=$1gt

ldquoNowrdquo es la fecha y hora de registro del nombre del archivo

ltechogt

ltfswebcam -d devvideo0 $now

jpggt

Este es el comando baacutesico para tomar la foto Utilizamos el comando fsweb-cam Si la aplicacioacuten fswebcam no estaacute instalada en tu sistema puedes instalarla con el siguiente comando

$ sudo apt-get install fswebcam

La sintaxis del comando es obvia toma una foto y usa la fecha y hora de registro como nombre de archivo Cada vez que se pulse el pulsador OdroidC2sh es activado por odroidbellpy El paraacute-metro -d determina el recurso a utilizar en nuestro caso devvideo0

ltecho ldquoPic Takenrdquogt

ltechordquordquogt

ltecho ldquoRinging Bellrdquogt

ltecho ldquordquogt

ltcd gt

Cambia de nuevo al directorio padre

--- email script (so it

knows what file to email

run command

ltossystem(command)gt

A continuacioacuten invocamos el co-mando system para ejecutar el script de correo electroacutenico

diagnostics

ltprint(ldquoFilenamerdquo now)gt

Imprimimos el ldquofilenamerdquo de la foto con la fecha y hora actuales

----| Email |----

ltprint(ldquoEmailrdquo)emailgt

ltemailcommand = lsquosudo python

IoTOdroidpy ldquoThis person is at

your doorrdquorsquo + lsquo ldquophotosrsquo + now +

lsquojpgrdquorsquogt

Enviamos la foto a la cuenta de Gmail del titular con la fecha y hora y el asunto ldquoThis person is at your doorrdquo

ltossystem(emailcommand) run-

ning the Email script withgt

-- the subject as ldquoSomeone

is ringing the doorbellrdquo and the

filename

-- We made before at the

-Photo amp Bell- section

Y finalmente lo enviamos

-- End Diagnostic Info

print(ldquoDone Processrdquo)

Todo estaacute hecho asiacute que el script fi-naliza su trabajo

-space out for next ldquoPress of

Buttonrdquo

ltprint(ldquordquo)gt

ltprint(ldquordquo)gt

Hacemos hueco para el siguiente ci-clo (proacutexima llamada al timbre)

TIMBRE

ODROID MAGAZINE 8

figura 3 - Alerta de correo electroacutenico de que alguien estaacute en la puerta

ltserverstarttls()gt

Configuramos y entramos en modo TLS TLS significa Transport Layer Se-curity (Seguridad de la capa de trans-porte) de modo que cualquier comando SMTP que siga este modo seraacute cifrado

ltserverlogin(lsquoltFrom

EmailgtrsquorsquoltFrom passwordgtrsquo)gt

Es hora de entrar en tu cuenta de Gmail de modo que necesitamos las credenciales correctas

ltserversendmail(msg[lsquoFromrsquo]

emaillist msgas_string())gt

Usando el anterior comando final-mente enviamos el correo electroacutenico Procura evitar el spoofing e introduce aquiacute tu direccioacuten de correo electroacutenico real El paraacutemetro emaillist es el que

hemos definido antes y el uacuteltimo paraacute-metro (msaas_string ()) el mensaje en forma de cadena con el archivo adjunto que es en este caso la foto El resultado lo puedes apreciar en la Figura 3

Testeando y ejecu-tando el coacutedigo

Desde el terminal (CTRL-T) eje-cutamos odroidbellpy con privilegios sudo

$ sudo python odroidbellpy

En este momento el dispositivo IoT se pone en modo de espera y apa-

ltmsg[lsquoReply-torsquo] = lsquoxyzgmail

comrsquogt

Correo electroacutenico del destinatario

ltmsgpreamble = lsquoMultipart

massagenrsquogt

El atributo preamble contiene el tex-to principal extra-blindado de los docu-mentos MIME por eso lo incluimos aquiacute

ltpart = MIMEText(ldquoHello The

doorbell is ringing A photo of

the person ringing the doorbell

has been attachedrdquo)gt

El cuerpo del mensaje

ltmsgattach(part)gt

ltpart =

MIMEApplication(open(str(sys

argv[2])rdquorbrdquo)read())gt

ltpartadd_header(lsquoContent-

Dispositionrsquo lsquoattachmentrsquo

filename=str(sysargv[2]))gt

Adjuntamos la foto al mensaje

ltserver = smtplibSMTP(ldquosmtp

gmailcom587rdquo)gt

Especificamos el servidor smtp que queremos usar y el puerto que utiliza el servidor de Gmail con el puerto 587 Tambieacuten puede usar el puerto 465 aunque no es mala idea comprobar con Google el puerto correcto por si acaso ha cambiado

ltserverehlo()gt

Especificamos el servidor smtp que queremos usar y el puerto que utiliza el servidor de Gmail con el puerto 587 Tambieacuten puede usar el puerto 465 aunque no es mala idea comprobar con Google el puerto correcto por si acaso ha cambiado

sponsable del archivo adjunto MIME MIME representa las Extensiones Mul-tiuso para el Correo en Internet Es una forma de identificar los archivos en In-ternet seguacuten su naturaleza y formato

ltimport smtplibgt

ltfrom smtplib import SMTPgt

Esta es la baacutesica y nativa libreriacutea en Python para enviar correos electroacutenicos de modo que no hay necesidad de insta-lar libreriacuteas externas smtplib Desde esta libreriacutea importamos la funcioacuten SMTP

ltimport sysgt

Importamos el moacutedulo de funcio-nes y paraacutemetros especiacuteficas del sistema puesto que necesitaremos el script ltargvgt de este moacutedulo (ver a continuacioacuten)

ltrecipients = [lsquoltYourEmailgtrsquo]gt

Tu direccioacuten de correo electroacutenico ya que tuacute eres el destinatario de las fotos

ltemaillist = [elemstrip()

split(lsquorsquo) for elem in recipi-

ents]gt

Hacemos una lista de correo elec-troacutenico en la que separaremos y quita-remos los caracteres pertinentes de cada elemento de la lista de destinatarios

ltmsg = MIMEMultipart()gt

Definimos el variable message (msg) como una Extensioacuten Multiuso para el Correo en Internet llamando a la fun-cioacuten MIMEMultipart

ltmsg[lsquoSubjectrsquo] = str(sys

argv[1])gt

El asunto del nuestro mensaje

ltmsg[lsquoFromrsquo] = lsquoltFrom Emailgtrsquogt

Tu direccioacuten de correo electroacutenico

TIMBRE

ODROID MAGAZINE 9

import wiringpi2 as odroid

import time

import os

import glob

import sys

odroidwiringPiSetup()

Button = 3

odroidpinMode(Button0)

odroidpullUpDnControl(Button1)

loop

print(ldquoProgram Runningrdquo)

while Trueloops forever till

keyboard interupt (ctr + C)

if odroiddigitalRead(Button)

== False when button not

pressed

sysstderrwrite(ldquordquo)

timesleep(1)

else

print(ldquoButton Pressedrdquo)

------| photo amp Bell

|------

Get FileName

now = timestrftime(ldquoDatem-

d-yTimeH-M-Srdquo)

Make command to run

odroidC2sh

command = ldquobash odroidC2sh ldquo

+ str(now)

-- odroidC2sh is an Shell

script that

-- is responsible for tak-

ing the photo and

-- making the Doorbell

Noise

--- We insert the ldquoNowrdquo ar-

gument so the python

--- script knows what the

file name of the

--- picture will be so it

can pass it on into the

--- email script (so it

knows what file to email

figura 4 ndash el script python del timbre en ejecucioacuten

run command

ossystem(command)

diagnostics

print(ldquoFilenamerdquo now)

----| Email |----

print(ldquoEmailrdquo)email

emailcommand = lsquosudo python

IoTOdroidpy ldquoSomeone is ringing

the doorbellrdquorsquo + lsquo ldquophotosrsquo +

now + lsquojpgrdquorsquo

ossystem(emailcommand) run-

ning the Email script with

-- the subject as ldquoSomeone

is ringing the doorebellrdquo and the

filename

-- We made before at the

-Photo amp Bell- section

-- End Diagnostic Info

print(ldquoDone Processrdquo)

-space out for next ldquoPress

of Buttonrdquo

print(ldquordquo)

print(ldquordquo)

OdroidC2sh

binsh

cd photos

echo ldquoTaking the Photordquo

now=$1 Now is the filename time

stamp

take pic

fswebcam -d devvideo0 $nowjpg

echo ldquoPic Takenrdquo

echordquordquo

ring Bell

echo ldquoRinging Bellrdquo

echo ldquordquo

echo ldquordquo

cd

mpv ringtonemp3

IoTOdroidpy

from emailmimetext import MIM-

EText

from emailmimeapplication im-

port MIMEApplication

rece en pantalla el mensaje ldquoProgram is runningrdquo Al mismo tiempo aparecen puntos ldquordquo en la pantalla uno a uno indicando al usuario que el dispositivo estaacute funcionando con normalidad Cu-ando alguien pulsa el botoacuten (timbre) el script OdroidC2sh se ejecuta con una doble finalidad Primero toma una in-

stantaacutenea de la persona que hace sonar el timbre En segundo lugar enviacutea el correo electroacutenico a traveacutes de IoTOdroidpy a la cuenta de Gmail del propietario con la fecha y hora de registro de la foto que se adjunta Despueacutes vuelve al modo de espera y el timbre IoT suena

Notas finalesPor supuesto este proyecto se podriacutea

mejorar de muchas formas Por ejemplo se podriacutea antildeadir un LED en el timbre IOT que indicara su correcto funciona-miento Un dispositivo maacutes complejo similar a eacuteste podriacutea usarse como timbre comercial con la ayuda de un moacutedulo placa releacute Tampoco seriacutea complicado incluir la posibilidad de que grabase una pequentildea grabacioacuten de viacutedeo junto con las fotos haciendo que el timbre ldquointeli-genterdquo sea auacuten maacutes inteligente Ademaacutes como dice el viejo refraacuten ldquoiexclla perfeccioacuten es el eterno enemigo de lo funcionalrdquo

Coacutedigo deltimbre IoT

Aquiacute tienes una copia de todo el coacute-digo Al final de este artiacuteculo tienes un enlace a la paacutegina github que tambieacuten contiene el coacutedigo

Odroidbellpy

TIMBRE

ODROID MAGAZINE 10

from emailmimemultipart import

MIMEMultipart

from smtplib import SMTP

import smtplib

import sys

recipients = [lsquoabcgmailcomrsquo]

emaillist = [elemstrip()

split(lsquorsquo) for elem in recipi-

ents]

msg = MIMEMultipart()

msg[lsquoSubjectrsquo] = str(sysargv[1])

msg[lsquoFromrsquo] = lsquoxyzgmailcomrsquo

msg[lsquoReply-torsquo] = lsquoabcgmailcomrsquo

msgpreamble = lsquoMultipart

massagenrsquo

part = MIMEText(ldquoHello There is

someone ringing your doorbell A

picture of this person has been

atachedrdquo)

msgattach(part)

part =

MIMEApplication(open(str(sys

argv[2])rdquorbrdquo)read())

partadd_header(lsquoContent-

Dispositionrsquo lsquoattachmentrsquo

filename=str(sysargv[2]))

msgattach(part)

server = smtplibSMTP(ldquosmtp

gmailcom587rdquo)

serverehlo()

serverstarttls()

serverlogin(lsquoxyzgmail

comrsquorsquoyourpassword herersquo)

serversendmail(msg[lsquoFromrsquo]

emaillist msgas_string())

El coacutedigo del proyecto estaacute disponible en httpbitly2jMAdMY usando el siguiente comando

$ git clone

httpsgithubcommiltiadisme-

lissas

IoTOdroidC2Doorbellgit

TIMBRE

A finales de 2016 los usuarios de Cyanogenmod se horrorizaron cuando Cyanogen anuncioacute la

cancelacioacuten de sus servicios dejando a todos los usuarios que dependiacutean de Cyanogenmod sin soporte Sin em-bargo en poco tiempo llegariacutea una so-lucioacuten en forma de LineageOS Si eres un usuario del ODROID-XU3 XU4 es el momento perfecto para colaborar con la versioacuten de LineageOS en los foros ODROID

Caracteriacutesticas- Android 711 Nougat lineageoS 141- Kernel 3109- openGl eS 112030 (aceleracioacuten por GpU)- opencl 11 ep (aceleracioacuten por GpU)- funcioacuten multiusuario habilitada (hasta 8 usuarios)- ethernet integrado y soporte para ether-net Gigabit USb 30 - Soporte para rtl8188cUS rtl8191SU y USb Wireless ralinkt- Soporte bluetooth USb (ble A2dp Sink)- Soporte para dongle GpS USb- Anclaje a red USb - punto de acceso Wi-fi portaacutetil- Soporte DAc USb nativo para Android

LInEAGEOS-141 ODROID-Xu3Xu4OLvIDATE DE CyAnOGEn EL fuTuRO ESTA AquIpor voodik editado por bruno Doiche

LINEAGEOS

- Soporte para Webcam USb UVc- Soporte hDMi-cec- Selinux

Problemas conocidosEn este momento soacutelo admite moacutedu-

los Bluetooth de bajo consumo v40 (BLE) Consulta el Moacutedulo Bluetooth 2

Coacutemo instalarloEn primer lugar necesitas preparar

tu emmcsd con imaacutegenes especiales de auto-instalacioacuten

La puedes encontrar aquiacutehttpophmdrjrnetvoodik5422

ODROID-XU3AndroidCM-141-ATV

Alpha-01_110217

Graba la imagen en tu eMMCsd a traveacutes de Win32DiskImager y arranca el dispositivo Tendraacute que esperar paci-entemente durante el primer arranque ya que el proceso de actualizacioacuten puede llegar a tardar hasta 20 minutos

Coacutedigo fuente Kernel

$ git clone httpsgithubcom

voodikandroid_kernel_hardkernel

_odroidxu3 -b cm-140_5422

ODROID MAGAZINE 11

SNES 3DO y Sega Genesis El juego teniacutea diferentes escenarios para jugar la selva la nieve y el desierto

Open Fodder ofreciacutea 23 misiones que se dividiacutean en varias fases En total suponiacutea superar 72 niveles para llevar

Este mes me gustariacutea hablar de un juego llamado Open Fodder se trata de un remake del claacutesico

juego de Amiga Cannon Fodder desar-rollado por Sensible Software en 1993 Utiliza los datos del juego original Can-non Fodder para conseguir una experi-encia muy similar al juego original en tu ODROID

Muchos de los populares juegos de Linux de hoy en diacutea como Stratagus y Freeciv son en realidad remakes de claacutesicos juegos de DOS de mediados y finales de los 90 y Open Fodder no es diferente El remake de Cannon Fodder es un juego disparos accioacuten y estrategia donde controlas a un pequentildeo grupo de soldados que avanza a traveacutes de varias docenas de niveles para matar a los sol-dados enemigos destruir tanques echar abajo edificios y derrotar a tus enemigos El juego fue lanzado por primera vez para Amiga en 1993 y fue exportado por sus desarrolladores a MS-DOS Atari Jaguar

a tu escuadroacuten a la victoria Cuando se lanzoacute el juego fue muy elogiado por varias revistas de juego Amiga con pun-tuaciones que llevaban al 95 por ciento y fue considerado como uno de los mejo-res juegos lanzados en 1993 En general siguioacute siendo uno de los mejores juegos jamaacutes creado para la plataforma Amiga durante sus 11 antildeos de vida

Desde un punto de vista maacutes poliacutetico el juego lleva impliacutecito un intenso men-saje sobre la guerra en siacute misma puesto que juegas y llevar a tus soldados a una muerte inevitable Cada misioacuten se inicia

JuEGOS LInuXOPEn fODDERpor tobias Schaaf (meveric)

JUEGOS LINUX

figura 1 - el logotipo de cannon fodder en el cual estaacute basado open fodder

figuras 2 3 y 4 - los niveles de selva desierto y nieve en open fodder

figuras 5 y 6 - A medida que avanzas en el juego tu larga liacutenea de reclutas se con-vierte gradualmente en cruces alineadas como en un cementerio

ODROID MAGAZINE 12

nas segundas partes ademaacutes de algunas misiones de bonificacioacuten Cannon Fod-der 2 salioacute un antildeo maacutes tarde pero fue maacutes bien un ldquodisco de datosrdquo con ex-pansiones que una secuela ya que en su mayor parte presentaba maacutes misiones en lugar de nuevas caracteriacutesticas Tambieacuten estaba el X-Mas de Amiga que ofreciacutea algunas misiones diferentes basadas en el juego Cannon Fodder

Ejecutando Open Fodder

Open Fodder es un remake del motor del juego Cannon Fodder que lleva el juego a los sistemas operativos modernos Al igual que otras migraciones del motor del juego (como OpenTTD) puede uti-lizar los datos del juego original con esta versioacuten del motor para ejecutar el juego en tus dispositivos modernos Esta mi-gracioacuten tambieacuten cuenta con una versioacuten exportada para los dispositivos ARM lo que significa que podemos ejecutarlo igualmente en nuestros ODROIDs

Todaviacutea estaacute en desarrollo pero ya funciona bastante bien Como de cos-tumbre se puede instalar desde mi repo-sitorio y puesto que soacutelo requiere SDL2 y SDL2 Mixer como dependencias prin-cipales deberiacutea funcionar en Debian y

con un nuevo grupo de reclutas que se alinean esperando a unirse al combate Los soldados desechables (de ahiacute el nom-bre de cannon fodder Carne de Cantildeon) poco a poco se convierten en cruces alin-eadas dando forma a un cementerio mil-itar a medida que vas completando cada misioacuten formaacutendose maacutes y maacutes filas con-forme vas enterrando a tus predecesores Sin embargo los desarrolladores le di-eron un cierto toque de humor ya que los primeros soldados de tu escuadroacuten (y por tanto los casi seguro que moriraacuten) llevan de hecho los nombres de las seis personas que componiacutean el equipo de desarrollo del juego

Si nos fijamos bien el juego incor-poraba algunos detalles bastante intere-santes Por un lado tiene su propia can-cioacuten ldquo War never been so much funrdquo que suena durante la intro del juego iexclUno de los desarrolladores del juego Jon Hare compuso la muacutesica junto con el compositor Richard Joseph Si teniacuteas el Amiga CD32 tambieacuten recordaraacutes una pista adicional que incluiacutea un video en el cual los desarrolladores se disparaban entre siacute con armas de juguete (httpbitly2l67bFy) iexclSin duda se divirtieron bastante desarrollando este juego

Cannon Fodder tambieacuten tuvo algu-

JUEGOS LINUX

Ubuntu por igual las puedes encontrar en mi lista principal de paquetes para armhf y jessiemain para arm64

Se puede instalar con este comando en un dispositivo ODROID que ejecute Debian suponiendo que ya tengas con-figurados mis repositorios o esteacutes usando una de mis imaacutegenes de Debian (httpbitly13v98ly)

$ apt-get install

openfodder-odroid

He alterado ligeramente el juego para que siempre se ejecute en modo pantalla completa aunque si lo deseas puedes cambiar al modo de ventana simple-mente pulsando F11 cuando tenga el juego activado

Convirtiendo los datos del juego

Por siacute sola mi versioacuten de Open Fod-der viene con el especial Amiga X-Mas ademaacutes de varios niveles demo dis-ponibles de forma gratuita Si quieres jugar el juego real tendraacutes que importar los datos desde un CD Cannon Fodder

Si estaacute usando un ODROID para ju-gar al Open Fodder puedes localizar las carpetas de los datos del juego en la car-peta $HOMEopenfodderData Por ejemplo homeodroidopenfodderDataDos_CD es una de esas carpetas de datos del juego Existen varias carpe-tas de datos del juego que puedes usar dependiendo de la versioacuten que tengas del juego Cannon Fodder

Dos_CDAunque el juego es compatible con

muchas y diferentes fuentes del juego actualmente soacutelo Dos_CD parece ser una versioacuten de Open Fodder ldquototal-mente compatiblerdquo con muy pocos er-rores y problemas El resto de fuentes del juego pueden tener problemas

Aquiacute tienes un consejo raacutepido Aunque se llama Dos_CD cogeraacute cu-alquier versioacuten de DOS de Cannon Fodder que puedas encontrar Si tienes

figura 7 - Sensible Software - los desarrolladores de cannon fodder

ODROID MAGAZINE 13

WHDLoad en un Amiga (o WinUAE) para extraer los archivos del juego y co-piarlos en la carpeta DataAmigardquo No lo he probado pero si tienes la ldquoCannon Fodder Collectionrdquo de Amiga CD32 no oficial puedes copiar el contenido de FodderNew en esta carpeta lo que tendraacute como resultado niveles completamente diferentes Puede considerarse como una versioacuten maacutes compleja del juego aunque a la vez maacutes divertida Por lo tanto bien poner los archivos originales de Amiga aquiacute o bien los archivos FodderNew de la ldquoCannon Fodder Collectionrdquo

Dos2_CDDos2_CD es en realidad la carpeta

de la versioacuten DOS de Cannon Fodder 2 pero tambieacuten funciona con la versioacuten GoG Desafortunadamente tiene algu-nos problemas el maacutes grave es que el juego no tiene ninguacuten tipo de sonido o muacutesica Aparte de esto todo parece fun-cionar correctamente pero desconozco coacutemo reaccionaraacute en niveles posteriores La carpeta Data tambieacuten incluye las car-petas WAV Plus AmigaFormat_XMAS y Custom En WAV se almacenan los efectos de sonido por defecto para to-dos los juegos (Cannon Fodder) Plus es una demo del nuacutemero 31 la revista Amiga Power y AmigaFormat_XMAS es el Amiga Format Christmas Special Tambieacuten hay una carpeta Custom que te permite jugar otros juegos y mapas pero necesitan la versioacuten (CD) de DOS o de lo contrario no apareceraacuten

Notas finalesOpen Fodder es un buen proyecto

que te permite ejecutar este increiacuteble juego en sistemas modernos Realmente me gusta y estoy deseando ver coacutemo pro-gresa Espero que las versiones de Amiga y Cannon Fodder 2 sean pronto total-mente compatibles Tal vez incluso poda-mos ver mejoras graacuteficas con el tiempo Me gustariacutea ver graacuteficos maacutes modernos ya que el juego es bastante antiguo y los graacuteficos no son los maacutes idoneos para res-oluciones 1080p

la versioacuten de disco de Cannon Fodder simplemente copia el CF_ENGDAT en la carpeta Dos_CD La versioacuten original de CD DOS teniacutea un archivo llamado cf_cddat Cambiar el nombre a CF_ENGDAT y copiarlo a la carpeta Dos_CD Si tienes la versioacuten GoG del juego soacutelo tiene que copiar CF_ENG DAT a la carpeta Dos_CD iexclEsta es una forma raacutepida y legal de conseguir el juego si estaacutes interesado

Aseguacuterate de que el nombre del ar-chivo este en mayuacutescula ya que el juego tiene en cuenta esta cuestioacuten Intenta que coincida todo para asegurarte de que las cosas funcionen sin problemas

Amiga_CDAmiga CD32 tambieacuten contaba con

una versioacuten de este juego Esta es la ver-sioacuten que incluye el video al que hemos hecho referencia anteriormente En el CD de Amiga CD32 hay una carpeta llamada Fodder El contenido de esta carpeta debe copiarse a la carpeta Ami-ga_CD Puedes extraer la segunda pista del CD y almacenarla como Track2flv en la misma carpeta con la finalidad de tener el archivo de video

Me topeacute con algunos problemas cu-ando haciacutea esto y descubriacute nuevamente que el juego buscaba muchos archivos en mayuacutesculas asiacute que utiliceacute el siguiente comando para copiar todos los archivos y tenerlos tambieacuten en mayuacutesculas en la carpeta Amiga_CD$ for files in `ls` do cp $files

`echo $files | tr lsquo[lower]rsquo

lsquo[upper]rsquo` done

Asiacute funcionaba bien pero teniacutea algu-nos fallos Por ejemplo la animacioacuten del helicoacuteptero al inicio de cada misioacuten no apareciacutea y el cursor cuando se guarda un archivo se distorsionaba Aparte de esto no he visto problemas importantes en la versioacuten Amiga CD32

AmigaLa Informacioacuten de desarrollador de

Open Fodder dice ldquoUsar el instalador

JUEGOS LINUXJUEGOS ANDROID

CAuSALITy un JuEGO DE ROMPE-CABEzAS COn PARA-DOJAS DE vIAJES En EL TIEMPO por bruno Doiche

Configura tuacute mismo los entornos extrantildeos e insoacutelitos y

ayuda a un grupo de astronautas varados a encon-trar una ruta hacia un lugar seguro Cada nivel al que te enfrentas representa un nuevo reto donde necesitas llevar a tu astronauta a una salida que coincida con su color Los maacutergenes de tiempo son cortos aunque es muy divertido Aunque formas parte de tan soacutelo una fraccioacuten de tiempo de la vida de tu personaje iexclten cuidado pasaraacutes un montoacuten de tiempo enganchado a este juego

httpsplaygooglecomstoreappsdetailsid=comlojugamesandroidCausality

el entorno 3D isomeacutetrico es magniacute-fico a menudo no superaba el nivel porque los graacuteficos me cautivaban

ODROID MAGAZINE 14

tePi necesitan estar conectados a otros distintos en el ODROID-C2 porque parece haber un conflicto La interfaz UART ocupa estos pines y el estado por defecto del ODROID (1=high en Pin 8) no es lo que espera la RemotePi (GPIO debe entrar en el valor por defecto 0=low para cortar la energiacutea tras el apagado) Pero puesto que necesitas utilizar cables de todos modos para conectar la Remot-ePi esto no supondraacute ninguacuten problema ya que simplemente puedes reconectar los cables a otros pines GPIO

Como evitamos el circuito de ali-mentacioacuten del ODROID encendieacutendo-lo a traveacutes de GPIO tambieacuten pasamos por alto la proteccioacuten ante subidas de tensioacuten 2526A del dispositivo pero no te preocupes La RemotePi tambieacuten tiene proteccioacuten ante subidas de tensioacuten que deberiacutea coincidir con el mismo val-or que en el caso de la RemotePi board para la Raspberry Pi 3 Sin embargo la RemotePi para la Raspberry Pi 2 es de soacutelo 2A Esto estaacute bien porque el valor es menor a los 26A del ODROID de modo el polyfuse de la RemotePi se ac-tivariacutea antes si conectas demasiados dis-

La RemotePi board (httpbitly2l8JcWU) que convierte cu-alquier mando a distancia en un

interruptor de encendido para tu orde-nador de placa reducida puede ser com-patible con el ODROIDC2 si sigues esta guiacutea Si utilizas tu dispositivo como centro multimedia esta placa te propor-cionara un receptor de infrarrojos y un circuito de alimentacioacuten asiacute como un botoacuten de encendido Puedes encender y apagar tu ODROID completamente a traveacutes de una sentildeal infrarrojos (IR) y simplemente presionar el botoacuten de en-cendido para apagarlo y reiniciarlo con seguridad La placa RemotePi es respon-sable del modo espera que absorbe una miacutenima energiacutea mientras el ODROID estaacute completamente apagado Por uacutel-timo la placa alimenta tu dispositivo a traveacutes de GPIO lo cual requiere un cable microUSB para conectarlo a la Re-motePi en lugar de utilizar un adaptador de corriente normal

Configuracioacuten de hardware

Puesto que la RemotePi estaba pen-sada originalmente para la Raspberry Pi 2 necesitaraacutes utilizar cables adiciona-les en lugar de colocarla justamente en cima del C2 para evitar interferir con el disipador de calor asiacute que debes re-cablear algunos pines Es necesario utili-zar cables con el diaacutemetro adecuado para los pines de 5V y puesta a tierra ya que la corriente podriacutea estar entre los 2A y 26A dependiendo de cuaacutentos dispositi-vos USB conectes a tu dispositivo

Los pines GPIO 8 y 10 de la Remo-

positivos no alimentados de forma exter-na que no es una buena idea en un SBC al fin al cabo No obstante debido a esta diferencia de amperaje una RemotePi para la Raspberry Pi 3 seriacutea la mejor op-cioacuten para este proyecto

Como resultado del nuevo cableado el firmware de RemotePi ya no se puede configurar de forma normal aunque nunca he usado esta funcioacuten Si fuera necesario configurar o actualizar el firm-ware necesitaraacutes volver a conectar los pines 8 y 10 de la RemotePi a los pines 8 y 10 del ODROID durante la actu-alizacioacuten del firmware y luego deshacer los cambios una vez que la actualizacioacuten haya finalizado Otra posibilidad es simplemente conectar una Raspberry Pi para actualizar el firmware Esto suena a un montoacuten de problemas pero en re-alidad simplemente es extender la con-exioacuten del cabezal y cambiar una liacutenea en el script principal y dos liacuteneas en otro script opcional si haces uso de ello

Re-cableando laconexioacuten GPIO

Dado que la RemotePi estaacute disentildeada

REMOTEPI BOARD PARA EL ODROID-C2por inifity85

REMOTEPI

figura 1 - remotepi board

ODROID MAGAZINE 15

ergiacutea completamenteIrswitchsh (solo cambia el script

original de MSL Digital de GPIOpin1 = 14 a GPIOpin1 = 225)

binbash

prevent restarting XBMC at

shutdown This is only used for

OpenElec before V5

LOCKDIR=rdquovarlockrdquo

LOCKFILE=rdquoxbmcdisabledrdquo

this is the GPIO pin receiving

the shut-down signal

Raspberry Pi pin8 GPIOpin1=14

Odroid-C2 pin26 GPIOpin1=225

GPIOpin1=225

functions

add_omit_pids()

omit_pids=rdquo$omit_pids -o $1rdquo

safe_shutdown ()

for OpenElec before V5

touch ldquo$LOCKDIR$LOCKFILErdquo

for OpenElec V5 and later

systemctl stop kodi

add_omit_pids $(pidof connmand)

add_omit_pids $(pidof dbus-dae-

mon)

killall5 -15 $omit_pids

for seq in `seq 1 10` do

usleep 500000

clear gt devtty1

killall5 -18 $omit_pids || break

done

sync

umount -a gtdevnull 2gtamp1

poweroff -f

echo ldquo$GPIOpin1rdquo gt sysclass

gpioexport

echo ldquoinrdquo gt sysclassgpio

gpio$GPIOpin1direction

while true do

sleep 1

power=$(cat sysclassgpio

gpio$GPIOpin1value)

if [ $power = 0 ] then

echo ldquooutrdquo gt sysclassgpio

gpio$GPIOpin1direction

echo ldquo1rdquo gt sysclassgpio

una carcasa personalizada de modo que el receptor integrado podriacutea estar oculto y no ser uacutetil En ese caso puedes desac-tivar el IR del ODROID en favor del re-ceptor externo GPIO-IR en la RemotePi y conectar el pin 12 Tienes disponible maacutes informacioacuten sobre el cambio al receptor GPIOIR en LibreELEC en httpbitly2lpDl27

Scripts de apagado para LibreELEC

Los dos scripts tratados a continu-acioacuten pueden descargarse desde la paacutegina de soporte de MSL Digital Solutions en httpbitly2kMxyVG En esta paacutegina tambieacuten encontraras una guiacutea para utili-zar estos scripts en otros sistemas opera-tivos como Volumio y RuneAudio

El script irswitchsh se usa para el apagado seguro a traveacutes de sistema In-frarrojos Tras pulsar el correspondiente botoacuten el sistema se apagaraacute de forma se-gura luego RemotePi esperaraacute a que el GPIO225 alcance el estado 0 (low) que aparece tras el cierre exitoso del sistema Finalmente cortaraacute la energiacutea

El script shutdownsh se usa para el apagado seguro a traveacutes de la interfaz del programa o script Despueacutes de navegar hasta el botoacuten de apagado en la GUI el sistema se apagaraacute de forma segura luego RemotePi esperaraacute a que el GPIO225 alcance el estado 0 (low) que apareceraacute tras apagarse el sistema de forma adec-uada y segura Finalmente cortaraacute la en-

originalmente para una Raspberry Pi desgraciadamente no es soacutelo enchufar y usar Necesitaraacutes volver a cablear dos pines usando los cables de todos los pines tal y como se muestra en la Figura 2 Re-cablea el pin 8 de la RemotePi al pin 26 del ODROID-C2 y el pin 10 de la RemotePi al pin 7 del ODROID-C2

Si no quieres utilizar el receptor IR de la RemotePi para el mando a distan-cia de LibreELEC puedes dejar desco-nectado el pin 12 La placa continuaraacute encendieacutendose y apagaacutendose a traveacutes del comando de control remoto IR pero el control de la GUI de LibreELEC seraacute asumido por el receptor de infrarrojos integrado en el ODROID Sin embargo si has comprado una RemotePi con un receptor IR y un LED externo es posible que hayas decidido colocarla dentro de

REMOTEPI

figura 3 - la remotepi ha sido recableada y montada en una carcasa personalizada

figura 2 - re-cableado Gpio

ODROID MAGAZINE 16

Centro Multimedia por ejemplo Esos comandos de apagado se equiparaacuten a eventos internos similar a cuando nave-gas por el menuacute de apagado de Kodi Sin utilizar este segundo script el sistema se cerraraacute con seguridad pero la placa Re-motePi no recibiriacutea ninguna indicacioacuten para monitorizar el GPIO225 de modo que no cortariacutea la energiacutea tras apagarse el sistema correctamente

Usando el receptor IR de la RemotePi

Si deseas utilizar el receptor IR de la RemotePi en lugar del receptor IR ODROID integrado tendraacutes que des-activar el sistema IR integrado y activar el receptor IR GPIO Para hacer esto en Ubuntu puede consultar el artiacuteculo de la Wiki de Hardkernel en httpbitly2l8KrWg Para Libre-ELEC echa un vistazo a mi mini-guiacutea en httpbitly2lLKj2A Para preguntas comentari-os o sugerencias visita el hilo original en httpbitly2mgFGKk

gpio$GPIOpin1value

sleep 3

safe_shutdown

fi

done

Shutdownsh (solo cambia GPIOpin =15 a GPIOpin =249 y GPIOpin1 =14 a GPIOpin1 =225)

binbash

if [ ldquo$1rdquo = ldquorebootrdquo ] then

Raspberry Pi pin10 GPIOpin=15

Odroid-C2 pin7 GPIOpin=249

GPIOpin=249

Raspberry Pi pin8 GPIOpin1=14

Odroid-C2 pin26 GPIOpin1=225

GPIOpin1=225

echo ldquo$GPIOpinrdquo gt sysclass

gpioexport

execute shutdown sequence on

pin

echo ldquooutrdquo gt sysclassgpio

gpio$GPIOpindirection

echo ldquo1rdquo gt sysclassgpio

gpio$GPIOpinvalue

usleep 125000

echo ldquo0rdquo gt sysclassgpio

gpio$GPIOpinvalue

usleep 200000

echo ldquo1rdquo gt sysclassgpio

gpio$GPIOpinvalue

usleep 400000

echo ldquo0rdquo gt sysclassgpio

gpio$GPIOpinvalue

set GPIO 14 high to feedback

shutdown to RemotePi Board

because the irswitchsh has

already been terminated

echo ldquo$GPIOpin1rdquo gt sysclass

gpioexport

echo ldquooutrdquo gt sysclassgpio

gpio$GPIOpin1direction

echo ldquo1rdquo gt sysclassgpio

gpio$GPIOpin1value

usleep 4000000

fi

El script shutdownsh es uacutetil si a vec-es usas las aplicaciones remotas Android Yatse o Kore o hotkeys para apagar tu

REMOTEPI

ODROID Talk Subreddit

httpwwwredditcomrodroid

ODROID Magazine

estaacute en Reddit

ODROID MAGAZINE 17

El HiFi Shield 2 (39$ httpbitly2lHSlZJ) es un Con-vertidor Digital a Analoacutegico de Alta definicioacuten (DAC) para el ODROID-C2 y el ODROID-C1+ Se trata de

una placa de sonido especial para el ODROID-C2 y C1 + que estaacute optimizada para mejorar la calidad de reproduccioacuten del sonido Ofrece un sonido muy bien equilibrado consistente intenso amplio y muy bien dimensionado por niveles Hemos analizado la calidad de audio de la salida HiFi Shield 2 DAC con un equipo estaacutendar de la industria del sonido llamado Au-dio Precision Audio Precision es un analizador de audio de alto rendimiento optimizado para la produccioacuten de audio digital

Usando el chip DAC PCM5242 de uacuteltima generacioacuten de Texas Instrument conocido como Burr-Brown el HiFi Shield 2 soporta formatos de audio de 16 24 y 32 bits con una ra-tio THD+N miacutenima (0002) y una dinaacutemica ideal (114dB +) ademaacutes de sorprendentes tasas de muestreo de 384 kHz La interfaz dedicada SPDIF soporta una definicioacuten de hasta 192kHz24bit a traveacutes de una salida oacuteptica (Toslink)

Si hacemos uso del puerto de expansioacuten I2S en el C2C1+ no es necesario ocupar un puerto USB permitiendo al usu-ario seleccionar el sistema de reproduccioacuten de audio que desee como Volumio y Debian (DietPi) para reproducir sonido HiFi

HIFI SHIELD 2

HIfI SHIELD 2EL MEJOR SOnIDO quE PODRAS COnSEGuIR En AnDROIDeditado por rob roy (robroy)

oDroiD-c2 y hifi Shield 2 Audio pb +J

primer plano de la placa con anotaciones

Distribucioacuten de los 7 pines i2S del c2c1+

la salida de audio es estaacutendar la salida de color rojo corresponde al canal de audio iz-quierdo y la salida de color blanco correspon-de al canal de audio derecho

ODROID MAGAZINE 18

Detalles

La guiacutea de configuracioacuten de UbuntuLinux para ODROID-C2 estaacute disponible en httpbitly2brrGdG y para ODROID-C1+ en httpbitly2lI7AC7 El sistema operativo oficial Volumio 2 se puede descargar desde httpbitly2kOJNAV y la imagen DietPi basada en Debian se encuentra en httpbitly2ls45yM Puede ver los esquemas en httpbitly2mnukV4

Diagrama por bloques del hifi Shield2

Caracteriacutesticasbull El control de volumen a traveacutes de la interfaz

i2c es una gran caracteriacutestica para mantener una buena calidad del sonido con varios voluacutemenes de salida de audio

bull Los puertos de salida incluyen terminales esteacute-reo rcA chapados en oro

bull La fuente de alimentacioacuten tiene habilitado un regulador de interferencias de ruido ultra-bajo lo cual reduce el ruido de la fuente de alimentacioacuten y aumenta en gran medida el ratio sentildealruido

bull La interfaz I2S permite la descodificacioacuten di-recta de la entrada digital a la salida analoacutegica utili-zando la sincronizacioacuten del reloj maestro

bull La superficie de la PCB estaacute chapada en oro so-bre 2 onzas de cobre lo cual garantiza la continui-dad de la sentildeal y reduce la reflexioacuten y deflacioacuten de la sentildeal

bull Dispone de almohadillas soldadas a la salida de audio balanceada (sentildeal diferencial)

bull La interfaz SPDIF dedicada es nueva admite una definicioacuten de hasta 192khz24bit a traveacutes de una nueva salida oacuteptica (toslink)

bull Este HiFi shield no es compatible con Android y hardkernel no tiene planes para hacerlo compatible y asiacute poder habilitar el controlador i2S en el Kernel y el hAl de Android

El Manual de usuario del ODROID-XU4 disponible en httpbitly1U9Q8yg ha sido revisado hace poco para incluir algunos de los perifeacutericos maacutes recientes como

la Expansion Board SmartPower2 y oCam Puesto que ahora Hardkernel tambieacuten ofrece Ubuntu 1604 todos los ejemplos de coacutedigo se han actualizado para que sean compatibles con el nuevo sistema operativo Si tiene comentarios preguntas o sugerencias visita el hilo de los foros ODROID en httpbitly1RykBrT

MAnuAL Xu4ACTuALIzADOREvISADO PARA uBunTu 1604 y LOS PERIfERICOS MAS RECIEnTESeditado por rob roy (robroy)

MANUAL XU4

el manual del oDroiD-xU4 incluye informacioacuten detallada de los diferentes sistemas operativos software y perifeacutericos disponibles para el oDroiD-xU4

ODROID MAGAZINE 19

El DevOps es complicado Los grandes proyectos de soft-ware como Mesos y Kubernetes desarrollan equipos como los que se encuentran en la mayoriacutea de las empre-

sas y organizaciones tecnoloacutegicas como CoreOS con la finali-dad de ayudar a los desarrolladores a poner sus aplicaciones en funcionamiento Sin embargo iquestcuaacutel seriacutea una buena solucioacuten para un desarrollador en solitario o una pequentildea red domeacutesti-ca iquestCoacutemo podemos usar el coacutedigo a nivel de infraestructura

Uso un portaacutetil Macintosh OSX para desarrollo pero para las aplicaciones de larga duracioacuten o aplicaciones que se ejecu-tan por la noche necesito un entorno remoto siempre activo ya que mi portaacutetil estaraacute fuera de liacutenea o en el tren conmigo mientras voy y vengo del trabajo Tiene su sentido no utilizar el ordenador como un entorno para la puesta en funcionamiento de aplicaciones

El ODROID-XU4 es un ordenador ideal para un entor-no de implementacioacuten remoto ya que es econoacutemico flexible cuenta con excelentes especificaciones teacutecnicas y puede ejecutar Linux Este artiacuteculo tiene por objetivo explicar coacutemo almacenar coacutedigo de implementacioacuten en tu repositorio de proyectos asiacute como automatizar las implementaciones y ejecuciones

Arch LinuxArch Linux es una distribucioacuten de Linux gratuita de coacutedigo

abierto que fue lanzada en 2002 Estaacute centrada en la elegancia la integridad del coacutedigo el minimalismo y la simplicidad y cuenta con que el usuario haga un esfuerzo en comprender el funcionamiento del sistema Arch Linux utiliza en particular un modelo de revisioacuten continua de modo que todo lo que se necesitas para conseguir el software del sistema maacutes reciente es actualizar el sistema de forma perioacutedica

Arch Linux puede ser algo difiacutecil de asimilar ya que uti-liza herramientas diferentes a las de una distribucioacuten Debian El gestor de paquetes se activa a traveacutes de ldquopacmanrdquo en lugar de ldquoapt-getrdquo y existe un gestor complementario de paquetes muy popular llamado ldquoyaourtrdquo Muchos de los servicios o her-ramientas maacutes comunes no se instalan por defecto

Arch Linux esta hecho principalmente para procesadores x86 pero un proyecto llamado Arch Linux ARM (ALARM) tiene una distribucioacuten ARM de Arch Linux para arquitectu-ras AArch64 ARMv8 y ARMv7 Hardkernel el fabricante de ODROIDs es de hecho un patrocinador del proyecto Arch Linux ARM

HOME DATA CENTER

HOME DATA CEnTERIMPLEMEnTACIOn DEL CODIGO COn ARCHLInuXpor John Skilbeck

Configurar la redDeberaacutes asignarle a tu dispositivo una direccioacuten IP LAN

DHCP reservada y en el mejor de los casos un nombre de host que se propagaraacute a lo largo de tu red por medio del servidor DNS de tu router De esta forma en nuestro entorno de desar-rollolocal podremos utilizar un nombre de host para resolver siempre el entorno de implementacioacutenremoto

Por ejemplo en mi red reservo el 192168249 a la direc-cioacuten MAC de mi ODROID Tambieacuten configuro una entrada DNS que asigna a esa direccioacuten IP ldquoodroidrdquo Utilizar un firm-ware personalizado en el router como Tomato USB o DD-WRT lo hace extremadamente faacutecil ya que esos firmwares convierten tu router en un pequentildeo ordenador Linux con una aplicacioacuten web GUI muy pulida aunque su implementacioacuten estaacute fuera del alcance de este artiacuteculo Si operas con subredes aseguacuterate dirigir el puerto hacia el puerto externo que se asigna al puerto SSH del dispositivo odroid ya que Git se ejecuta a traveacutes de SSH

Configurar el proyectoLoacutegicamente desearaacutes estandarizar el flujo de trabajo de la

implementacioacuten Esto haraacute que el trabajo con proyectos sea

el home data center de John es una auteacutentica obra de arte

ODROID MAGAZINE 20

extremadamente faacutecil y eliminas muchos de los cambios de contexto mental que utilizas cuando trabaja en varios proyec-tos Crearemos una carpeta para alojar todos nuestros archivos relacionados con implementaciones Coloca los archivos eje-cutables en ldquodeploybinrdquo y cualquier archivo cron en ldquodeploytasksrdquo (maacutes informacioacuten sobre esta cuestioacuten maacutes adelante)

Navega hasta el directorio del proyecto en una ventana de Terminal y luego escribe los siguientes comandos

$ mkdir -p deploybin

$ mkdir -p deploytasks

$ cd deploybin ampamp touch run-job ampamp

chmod u+x run-job ampamp cd -

$ cd deploytasks ampamp touch crontab

Tambieacuten puede estandarizar doacutende colocar tu coacutedigo fuente De esta forma le seraacute maacutes faacutecil a otras personas ver coacutemo se or-ganiza tu proyecto y conocer queacute es el coacutedigo fuente y queacute no

$ mkdir src

$ cd src ampamp (place source code here ie python core

py clojure coreclj nodejs appjs)

Simplificar los puntos de entradaIniciar una aplicacioacuten puede resultar algo confuso con todos

los comandos que se pueden ejecutar en diferentes lenguajes Por ejemplo puede usar Java ldquojava -jar [my-jar] jarrdquo o python ldquopython my-apppyrdquo y tu aplicacioacuten tambieacuten puede necesitar varios argumentos Todo esto deberiacutea simplificarse y resumirse en un archivo ldquodeploybinrun-jobrdquo

binsh

set -e

CMD=rdquosrcduckrdquo

exec $CMD $

Crear el archivo cronArch Linux no viene con un cliente o demonio cron por

defecto Instaacutelalo con ldquosudo pacman -Syu cronierdquo Utilizando cron puede ejecutar comandos en intervalos de tiempo espe-cificados haciendo uso de la sintaxis especial de cron Normal-mente se almacena en el archivo crontab del usuario al que puedes acceder con ldquocrontab -erdquo Sin embargo esto es demasi-ado manual y queremos usar coacutedigo como infraestructura Cron tambieacuten tiene algunos subdirectorios muy uacutetiles en ldquoetccronrdquo como ldquoetccrondailyrdquo yrdquoetccronhourly ldquo si co-locamos los archivos aquiacute eacutestos se ejecutaraacuten en los intervalos especificados

Revisa el archivo de ldquodeploytaskscrontabrdquo que colocare-mos en ldquoetccrondrdquo que se crea automaacuteticamente con nuestro script ldquoposttreceiverdquo

variables

SHELL=binbash

PATH=binusrbinusrlocalbinusrsbinusrlo-

calsbin

MAILTO=[your-email-address]gmailcom

cmd=rdquodeploybinrun-jobrdquo

app_dir=rdquohomeskilbjodeployappduckdnsrdquo

jobs

5 skilbjo cd ldquo$app_dirrdquo $cmd gtdevnull

Aquiacute tienes el esquema general de la estructura de un simple proyecto El uacutenico ejecutable del proyecto es un uacutenico script shell ubicado en ldquosrcrdquo

$ tree

READMEmd

deploy

bin

post-receive

run-job

tasks

crontab

src

duck

4 directories 5 files

GitPrimero queremos agregar una URL remota a nuestro

proyecto en nuestro entorno local

$ git remote add odroid sshodroid~deploygit

duckdnsgit

Ten en cuenta que dependiendo de la topologiacutea de tu red es posible que tenga que modificar esta url Si no puedes asignar nombres de host la URL de git se veriacutea asiacute donde 192168249 es la direccioacuten IP LAN de tu dispositivo

$ ssh192168249~deploygitduckdnsgit

Si tienes un usuario en tu entorno ODROID distinto al que tienes en tu entorno de desarrollo la url se veriacutea asiacute donde ldquoskilbjordquo es tu nombre de usuario

$ sshskilbjoodroid~deploygitduckdnsgit

Si tu servidor remoto estaacute en una subred diferente y tienes redireccionados los puertos tu url tendriacutea este aspecto donde

HOME DATA CENTER

ODROID MAGAZINE 21

ldquo2222rdquo es tu puerto externo

$ ssh192168122222~deploygitduckdnsgit

En el directorio principal de tu entorno remoto crea una carpeta llamada ldquo~deployrdquo con dos subcarpetas ldquo~deployapprdquo y ldquo~deploygitrdquo Los subdirectorios de ldquo~deploygitrdquo seraacuten los puntos finales de nuestros desarrollos y con un hook ejecutaraacuten comandos de implementacioacuten en los subdirectorios de ldquo~ deployapprdquo

Primero navega hasta el directorio principal del entorno re-moto y a continuacioacuten escribe los siguientes comandos

$ mkdir -p ~deployapp

$ mkdir -p ~deploygit

$ mkdir -p ~deploygitduckdnsgit

$ mkdir -p ~deployappduckdns

Ahora en ldquo~ deploygitduckdnsgithooksrdquo crea un archi-vo ejecutable llamado ldquopost-receiverdquo que se activaraacute con cada accioacuten hacia el punto final

$ cd ~deployappgitduckdnsgithooks

$ touch post-receive ampamp chmod u+x post-receive

$ vim post-receive

Rellena el ejecutable con lo siguiente en el directorio ldquo~deploygitduckdnsgithooksrdquo del entorno remoto

usrbinenv bash

set -eou pipefail

user=$(whoami)

dir=rdquohome$userdeployapprdquo

app=$(basename $(pwd) | sed -e lsquosgitrsquo)

deploy_dir=rdquo$dir$apprdquo

cron_dir=rdquoetccrondrdquo

GIT_WORK_TREE=rdquo$deploy_dirrdquo git checkout -f

cd ldquo$deploy_dirrdquo

build steps here

case ldquo$userrdquo in

(skilbjo) sudo cp deploytaskscrontab ldquo$cron_

dir$apprdquo

esac

you can also do project-specific build steps in

this section like install

dependencies (ie npm install) compile source

code (ie lein uberjar)

as well as if a long-lived app run commands as

well (ie java -jar my_jarjar)

echo ldquoall donerdquo

exit 0

ImplementacioacutenAhora estamos listos para implementar ya que nuestro en-

torno local estaacute configurado para alcanzar el punto final del servidor de implementacioacuten nuestro entorno remoto estaacute con-figurado para recibir la notificacioacuten y revisar el coacutedigo fuente ejecutar cualquier paso de compilacioacuten y colocar una tarea en el directorio cron del sistema para su lanzamiento Ponto todo en praacutectica con el siguiente comando en el directorio del proyecto del entorno local

$ git push odroid

Ademaacutes para ver coacutemo se ha implementado todo esto en un proyecto de ejemplo visita httpbitly2lthYKW

Pasos finalesSe puede antildeadir al flujo anterior algunas caracteriacutesticas

como son muacuteltiples entornos ya sea con muacuteltiples ODROIDs o con un solo ODROID trataacutendolo como un servidor de ser-vicio Esto se puede hacer con subdirectorios bajo ldquo~deployrdquo como ldquo~deploystagingappmy_apprdquo o ldquo~ deployproduc-tionappmy_apprdquo

Ademaacutes podriacuteas antildeadir un servicio de integracioacuten conti-nua como CircleCI que ejecutariacutea una suite de testeo desde cada desarrollo a GitHub y si tiene eacutexito compila una imagen Docker No podriacuteas entonces tener un archivo en el entorno remoto que verificariacutea una imagen de un repositorio Docker y la ejecutariacutea en un intervalo especificado Esto es lo que hacen muchos de los softwares DevOps distribuidos como Mesos y Kubernetes pero en un entorno mucho maacutes rico que BASH y Linux

Referencias

Artiacuteculo Wikipedia de Arch linux httpbitly2l71ADKWebsite Arch linux ArM httpsarchlinuxarmorgArtiacuteculo que leiacute hace unos tres antildeos y que me inspiroacute para escribir mi propio artiacuteculo httpbitly2m5JAct

HOME DATA CENTER

ODROID MAGAZINE 22

odroid ARCADE BOXLA EXPERIEnCIA PERfECTA COn TuS JuEGOS ARCADE fAvORITOSpor brian Kim charles park y John lee

ARCADE BOX

Los ODROIDs tienen mejor rendimiento que las placas de la competencia especialmente en lo que respecta al renderizado de video lo que significa que

las placas ODROID son ideales para jugar lo cual hacen muchos usuarios de ODROID Ya hay disponibles varios sistemas operativos de plataforma de juegos como Lakka (httpbitly1NO8BBC) y ODROID GameStation Tur-bo (httpbitly1ASFO5O) Para disfrutar auacuten maacutes de nuestras sesiones de juegos creamos nuestra propia consola arcade con simples botones GPIO y joysticks y la llama-mos la ODROID Arcade Box Elegimos un ODROID-XU4 para este proyecto porque es el que tiene mejor rendimiento GPU de todos los dispositivos ODROID actuales En este artiacuteculo vamos a describir como hemos creado la ODROID Arcade Box

Requisitos( Figura 3 ndash )Decidimos hacer la ODROID Arcade Box usando

un MDF (tablero de fibra de densidad media) El Shifter Shield del XU4 tambieacuten es uacutetil para utilizar los pines de expansioacuten del ODROID-XU4 Los Joysticks los botones y los cables eran los componentes de entrada y se utilizoacute

Nuestro primer y simple prototipo

ODROID MAGAZINE 23

panel MDf 12t2eA 600x2202eA 600x752eA 220x75taladroplegadoraDesmontadorcinta meacutetricaNavaja multiusoAlicates de punta largaoDroiD-xU4xU4 Shifter shieldSMpS (fuete Alimentacioacuten)

extendedores hDMi USb ethernetenchufe de alimentacioacuten y Switchbisagras 2eAreceptor de puertacaucho 4eAtornillospulsadores 19eAJoystick 2eAcablesterminales

una SMPS (Fuente de alimentacioacuten conmutada) como fuente de alimentacioacuten Las herramientas y las piezas utilizadas las tienes en esta paacutegina

La ODROID Arcade Box necesita un total de 27 entradas (19 entradas para botones y 8 entra-das para joysticks) Las 24 entradas GPIO digi-tales del ODROID-XU4 no son suficientes para las 27 entradas de modo que creamos dos puertos ADC adicionales para los tres botones que nos fal-taban Los valores de entrada ADC se basan en el voltaje de entrada y los valores de entrada digital y analoacutegica se procesan en el demonio GPIO que se describe a continuacioacuten

Disentildeo y montajeLos paneles de la ODROID Arcade Box deben

ser disentildeados y fabricados para que los botones y joysticks esteacuten bien colocados Elegimos MDF 12T teniendo en cuenta el precio y la durabilidad El dise-ntildeo se puede hacer con cualquier herramienta CAD como Google Sketch o SolidWorks Aunque existen muchas plantillas de disentildeo para los paneles de joypad decidimos elegir un disentildeo arcade estaacutendar japoneacutes

El primer paso del montaje es unir la placa al panel MDF Este paso fue faacutecil aunque nos llevo maacutes tiempo que el resto Despueacutes insertamos los joysticks la toma de corri-ente el interruptor y los botones en el panel MDF superior Los conectores HDMI Ethernet y USB se colocaron en la parte trasera del panel MDF El siguiente paso fue montar cada panel MDF usando un taladro para hacer los agujeros luego con tornillos los sujetamos

El uacuteltimo paso del montaje de la ODROID Arcade Box es conectar por cable los pines de expansioacuten del ODROID-XU4 a los componentes de entrada En este proyecto dise-ntildeamos las entradas GPIO externas tal y como se muestra en la paacutegina 26 Los botones Select y Temp estaacuten conecta-dos a puertos de expansioacuten ADC

Configuracion del softwareDesarrollamos un nuevo demonio GPIO llamado gpio_

keyd (httpbitly2ljOZKg) Este demonio es capaz de asignar entradas GPIO y eventos claves usando uinput y wiringPi una libreriacutea de acceso GPIO basada en pines Estaacute disentildeada para que le sea familiar a quiene ya ha utilizado el sistema de cableado Arduino Aunque la blibreriacutea wiring-Pi upstream soacutelo admite Raspberry Pi Hardkernel ofrece una versioacuten de wiringPi para ODROIDs en su repositorio GitHub (httpbitly1Eq3UpF) El moacutedulo uinput es un moacutedulo del kernel de Linux que gestiona el subsistema de entrada del usuario Se puede utilizar para crear y manejar dispositivos de entrada desde una aplicacioacuten

ARCADE BOX

herramientas compentes y lo que hay justamente debajo

esquema de los puertos de expansioacuten

ODROID MAGAZINE 24

Elegimos ODROID GameStation Turbo (httpbitly1ASFO5O) como plataforma de software para nuestra ODROID Arcade Box que tiene integrado uinput Debes asegurarte de que el archivo de dispositivo uinput existe en el sistema operativo elegido porque algunos no tienen dispositivos uinput

$ ls devuinput

Si tu sistema operativo no tiene un archivo de disposi-tivo devuinput entonces seraacute necesario recompilar e in-stalar un nuevo kernel con la opcioacuten de configuracioacuten IN-PUT_UINPUT habilitada La paacutegina Wiki en httpbitly1YIToBI describe coacutemo compilar e instalar la imagen del kernel a partir del coacutedigo fuente

$ make menuconfig

Device Drivers

-gt Input device support

-gt Generic input layer

-gt Miscellaneous device

-gt User level driver support ltgt

Ten en cuenta que wiringPi debe instalarse antes de in-stalar gpio_keyd En la imagen GameStation de ODROID los comandos sudo deben ejecutarse como root porque la cuenta ldquoodroidrdquo no estaacute designada como usuario sudo

$ git clone httpsgithubcomhardkernelwiringPi

git

$ cd wiringPi

$ sudo build

Descarga el coacutedigo fuente gpio_keyd el cual estaacute dis-ponible en nuestro repositorio GitHub El procedimiento para compilar e instalar gpio_keyd es muy simple

$ git clone httpsgithubcombkrepogpio_keydgit

$ cd gpio_keyd

$ make

$ sudo make install

El script gpio_keyd hace referencia a etcgpio_keydconf como el predeterminado para la informacioacuten de los botones y GPIO El archivo de configuracioacuten fue modi-ficado para las 27 entradas de la ODROID Arcade Box Algunas botones ya se utilizaban en el emulador de juego de modo que tuvimos que cambiar la configuracioacuten del emulador para evitar conflictos entre los botones de en-trada GPIO y el emulador Ten en cuenta que el campo ltGPIO pingt en el archivo de configuracioacuten hace referen-

ARCADE BOX

plano del disentildeo de joypad

la oDroiD Arcade box montada

ODROID MAGAZINE 25

cia al nuacutemero wiringPi no al GPIO y al nuacutemero de pin (httpbitly2lbzPIB)

Ejemplo de configuracioacuten para las 27 entradas etcgpio_keydconf

Digital input ltKey codegt ltGPIO typegt ltGPIO pingt ltActive valuegt User 1KEY_LEFT digital 15 0KEY_RIGHT digital 1 0KEY_UP digital 4 0KEY_DOWN digital 16 0KEY_A digital 2 0KEY_S digital 3 0KEY_D digital 30 0KEY_F digital 21 0KEY_Z digital 8 0KEY_X digital 9 0KEY_C digital 7 0KEY_V digital 0 0 User 2KEY_BACKSLASH digital 12 0KEY_SLASH digital 13 0KEY_SEMICOLON digital 14 0KEY_LEFTBRACE digital 5 0KEY_Y digital 26 0KEY_U digital 27 0KEY_I digital 22 0KEY_O digital 23 0KEY_H digital 6 0KEY_J digital 10 0KEY_K digital 11 0KEY_L digital 31 0

Analog input ltKey codegt ltGPIO typegt ltADC portgt ltADC ac-tive valuegtKEY_B analog 0 0KEY_N analog 0 2045KEY_M analog 1 2045

To run gpio_keyd daemon at every startup is conve-nient for ODROID Arcade Box

etcinitdgpio_keyd binsh BEGIN INIT INFO

ARCADE BOX

Mapeo Gpio externo para los botones y Joysticks

cableado de la oDroiD Arcade box

ODROID MAGAZINE 26

Provides gpio_keyd Required-Start $all Required-Stop Default-Start 2 3 4 5 Default-Stop Short-Description Run usrbingpio_keyd if it ex-ist END INIT INFO

PATH=sbinusrsbinbinusrbin

libinitvarssh

liblsbinit-functions

do_start() if [ -x usrbingpio_keyd ] then usrbingpio_keyd -d ES=$ [ ldquo$VERBOSErdquo = no ] ampamp log_end_msg $ES return $ES fi

case ldquo$1rdquo in start) do_start restart|reload|force-reload) echo ldquoError argument lsquo$1rsquo not supportedrdquo gtamp2 exit 3 stop) killall gpio_keyd exit 0 ) echo ldquoUsage $0 start|stoprdquo gtamp2 exit 3 Esac

$ sudo chmod +x etcinitdgpio_keyd$ sudo update-rcd gpio_keyd defaults$ sudo reboot

En los comandos anteriores el script gpio_keyd se ejecuta como un demonio uti-lizando la opcioacuten ldquo-drdquo El uso de gpio_keyd se puede comprobar con la opcioacuten ldquo-hrdquo Comprue-ba de nuevo las teclas usadas por el juego o el emulador despueacutes fija la configuracioacuten del gpio_ keyd correctamente Es ahora cuando estaacutes listo para jugar y disfrutar de tus juegos con tu nueva ODROID Arcade Box

ARCADE BOX

the King of fighters 98 John vs brian

ODROID MAGAZINE 27

En este artiacuteculo analizaremos las diferentes formas que existen para ob-tener los datos del uso de la red

ConfiguracioacutenLa forma normal de analizar los datos

de traacutefico de la red es mediante el uso de datos a traveacutes de las aplicaciones de configuracioacuten del sistema tal y como se muestra en la figura 1

El uso de datos muestra la cantidad total de traacutefico de datos entrante y sa-liente que ha sido utilizada por una apli-cacioacuten Si seleccionas la aplicacioacuten veraacute una pantalla como la que aparece en la Figura 2 que muestra informacioacuten detal-lada sobre el uso de la aplicacioacuten tanto en primer plano como de fondo

La informacioacuten que se muestra den-tro de la aplicacioacuten de Configuracioacuten se almacena en data systemnetstats que requiere acceso root Al eliminar todo lo que hay dentro de esta carpeta se resta-

Como desarrolladores queremos que nuestras aplicaciones sean eficientes y a menudo nos gus-

tariacutea saber cuaacutento ancho de banda de red estaacute utilizando nuestra aplicacioacuten Esto es muy uacutetil por varias razones

bull Para monitorizar y asegurarnos de que la aplicacioacuten es realmente la nuestra y no una aplicacioacuten que ha sido pirateada y publi-cada con diferentes nombres en Play Store

bull Para asegurarnos de que no es-tamos cogiendo ancho de banda innecesario del plan de datos del usuario

bull Para comprobar que el disposi-tivo que estamos usando no estaacute accediendo a Internet sin nuestro consentimiento

blecen las estadiacutesticas de red mostradas en esta aplicacioacuten

Estadiacutesticas de la redLa aplicacioacuten de configuracioacuten nos

puede dar una informacioacuten general so-bre las estadiacutesticas de la red de datos que es un buen comienzo pero a veces necesitamos un anaacutelisis maacutes detallado que puede hacerse a traveacutes del coman-do dumpsys Android cuenta con una poderosa herramienta llamada dumpsys que nos permite obtener una instan-taacutenea o volcado del sistema que pu-ede incluir informacioacuten sobre la red la memoria y otros componentes Lee la documentacioacuten de Android en httpbitly2kK9dep para obtener maacutes infor-macioacuten del sistema Para conseguir maacutes informacioacuten relacionada con la red nos interesa el comando

$ dumpsys netstats detail

La Figura 3 muestra un pantallazo de lo que puedes ver desde una tablet Nexus 7 que ejecuta Lollipop 511

Hay algunas cuestiones importantes para entender las estadiacutesticas

bull Las estadiacutesticas UID muestran el desglose de las aplicaciones de primer plano y de fondo

bull Uid muestra el ID de usuario de la aplicacioacuten que se puede utili-zar para relacionar eacutesta con la in-

DESARROLLO AnDROID AnALIzAnDO EL uSO DE RED DE LAS APLICACIOnESpor Nanik tolaram

DESARROLLO ANDROID

figura 1 - Uso de datos en la configuracioacuten

figura 2 - Desglose del uso de datos de la app

ODROID MAGAZINE 28

$ dumpsys package detail

Este comando te proporcionaraacute una larga lista de informacioacuten sobre los pa-quetes que estaacuten instalados en tu dis-positivo Para las estadiacutesticas de red nos interesa la seccioacuten que se muestra en la Figura 5

La seccioacuten resaltada muestra el userId que se relaciona con el uid que se mues-tra en las estadiacutesticas de red Al relacio-nar este nuacutemero sabemos el nombre del paquete de la aplicacioacuten sobre el que es-tamos leyendo las estadiacutesticas de red

Aplicacioacuten de ejemplo

La aplicacioacuten de ejemplo de este artiacute-culo se puede descargar desde httpbitly2m8WenA que muestra coacutemo etiqu-etar la conexioacuten de red desde distintas

secciones de la aplicacioacuten lo cual puede ayudar a analizar el volumen de traacutefico de datos de la aplicacioacuten La Figura 6 muestra un ejemplo de coacutemo lo vemos si utilizamos Android Device Monitor (dentro de Studio diriacutegete a Tools -gt Android -gt Android Device Monitor)

Tal y como se puede ver en el graacutefico la simple aplicacioacuten tiene 3 conexiones dife-rentes y cada una de ellas estaacute accediendo a un sitio web diferente Al etiquetarlas con

formacioacuten del paquete (que ver-emos en la seccioacuten de detalles del paquete dumpsys) con el objeto de conocer queacute aplicacioacuten utiliza estas estadiacutesticas de red

bull Las etiquetas son uacutetiles si de-sea ver la cantidad de datos que utiliza cada conexioacuten de tu apli-cacioacuten Puedes ver un ejemplo de esto en la Figura 4 que muestra que el uid 10007 tiene las siguien-tes etiquetas 0x30000401 0x30003201 0x30002804 0x10000401 y 0x30000407 Es-tas etiquetas ayudan al desarrol-lador a saber cuaacutentos datos uti-liza cada parte de la aplicacioacuten Estas estadiacutesticas de red en par-ticular estaacuten vinculada al paquete Google Framework que forma parte de Google Play Store

En el siguiente apartado veremos coacutemo escribir una aplicacioacuten etiquetando el hilo que hace la conexioacuten de red para determi-nar la cantidad de datos que se utilizan

Estadiacutesticas de paquetes

En la seccioacuten anterior analizamos el uid que aparece al ejecutar el comando dumpsys netstats Ahora necesitamos sa-ber queacute uid corresponde a la aplicacioacuten en el dispositivo y esto se hace mediante el siguiente comando

DESARROLLO ANDROID

figura 3 ndash estadiacutesticas de red con Dumpsys

figura 4 - estadiacutesticas de etiquetas UiD

figura 5 - Detalles del paquete dumpsys

figura 6 - etiquetas de red

coacutedigos diferentes podemos ver la cantidad de traacutefico que consume cada conexioacuten y esto nos ayudaraacute a ver si nuestra aplicacioacuten utiliza el ancho de banda de un modo eficiente

El coacutedigo del siguiente fragmento muestra el uso de la API TrafficStats interna Esta etiqueta API muestra el subproceso que utiliza actualmente un socket con un identificador y todo el traacute-fico que pasa por la misma conexioacuten se grabaraacute junto Asiacute es como la aplicacioacuten es capaz de agrupar las 3 conexiones diferentes Internamente Android utili-za el moacutedulo xt_qtaguid del kernel para realizar este tipo de etiquetado Tienes disponible maacutes informacioacuten en httpbitly2kU8KXB

public void getUsingNormalURLC

onnection(String urlText int

threadTag)

throws IOException

URL url = null

TrafficStats

setThreadStatsTag(threadTag)

HttpURLConnection urlConnec-

tion = getConnection(url)

try

finally

TrafficStatsclearThread-

StatsTag()

ODROID MAGAZINE 29

Disgustado te subes a tu 4x4 de dominacioacuten del mun-do un vehiacuteculo que desde fuera parece maacutes bien un viejo camioacuten de granja pero por dentro se parece maacutes

al sistema de control de un transbordador espacial porque el conductor del restaurante oriental que realiza las entrega a do-micilio estaacute enfermo Ahora tienes que ir a recoger tu propia comida ldquoQueacute rudimentariordquo piensas cuando sales de tu garaje secreto Justamente cuando vas a parar el vehiacuteculo en un stop oyes un fuerte ruido Sales y te diriges raacutepidamente a la parte posterior del 4x4 donde observas un cubo de basura Te tiras de los pelos y piensas ldquoiexclEsos basureros Neanderthales dejaron otra vez el cubo en mediordquo Ahora te toca recoger los restos de tu cena y la basura de otros

Conforme te vas alejando para hacer tus recados empiezas a pensar en coacutemo evitar este inconveniente en el futuro Varias ideas te vienen a la mente

Un sistema lidar para escanear en 3D el entorno en tiempo real y alarmas sonoras cuando sea necesarioUn brazo ciberneacutetico colocado en la parte posterior del 4x4 que procese video para detectar objetos agarrarlos y moverlosUna simple camara trasera

Empiezas a considerar la viabilidad de cada una

Muy bueno pero demasiado complicado y costosoAuacuten mejor y un proyecto propio de un cientiacutefico loco pero demasi-ado complicado y costosoya tengo dos iexclpero estaba demasiado preocupado en mis pensa-mientos para prestarles atencioacuten

Lo que necesitas es algo simple sin complicaciones y barato que haga sonar una alarma para alertarte incluso cuando estar absorto en tus pensamientos ldquoAhardquo Recuerdas haber visto un nuevo producto en ameriDroid que puede hacer precisamente esto Se trata de un microcontrolador conectado al USB que soporta hasta 6 sensores ultrasoacutenicos con simples comandos en serie (httpbitly2l26ptV) ldquoiexclPerfectordquo Piensas

Regresas a tu laboratorio subterraacuteneo con el pollo Kung Pao en la mano te apresurar a encender tus monitores entras en el sitio web ameriDroid y pides un kit ldquoUSB Ultrasonic Ranging Sensorrdquo con 6 sensores y carcasas

Vas sintiendo una sensacioacuten de alivio a medida que regresas a los 12 proyectos en lo que ya estabas trabajando a la espera de que pasen un par de diacuteas hasta que llegue tu nuevo pedido Mientras te comes tu Kung Pao dibujas un diagrama de coacutemo quieres colocar los sensores en la parte posterior de tu vehiacuteculo

Un par de diacuteas maacutes tarde el kit llega Inmediatamente em-piezas a montar el kit y los sensores en la parte posterior de tu 4x4 teniendo cuidado de usar sellador de silicona para pro-teger los sensores de la lluvia aguanieve y nieve que puedas encontrar durante tus aventuras para dominar el mundo

A continuacioacuten consultas las instrucciones proporcionadas por ameriDroid con el kit sobre coacutemo controlar y leer los sen-sores desde tu fiel ODROID-C2 y VU7 que montaste en el salpicadero para este propoacutesito

Conectando el cable USBEl cable USB suministrado debe conectarse al microcon-

trolador (la pequentildea placa de circuito con filas de pines que sobresalen) El microcontrolador tiene una fila de 4 o 6 pines

DETECTAR LA PRESEnCIACROnICAS DE un CIEnTIfICO LOCOpor bo lechnowsky

SENSOR ULTRASONICO

ODROID MAGAZINE 30

en un extremo Si tiene 6 pines ceacutentrate en los 4 pines centrales y sigue estas instrucciones

Negro - conectar a GNDrojo - conectar a VccVerde - conectar a rxi

blanco - conectar a txD

Conectando los sensoresultrasoacutenicos

En cada sensor ultrasoacutenico hay cuatro pines marcados Vcc Trig Echo Gnd Para el primer sensor ultrasoacutenico conecta el pin 2 del microcontrolador al pin ldquoTrigrdquo del sensor ultrasoacutenico Conecta el pin 3 del microcontrolador al pin ldquoEchordquo del sensor Conecte el pin ldquoVccrdquo del sensor a DC 5V (el pin ldquoVCCrdquo del microcontrolador suministra 5V) y el pin ldquoGndrdquo del sensor a una conexioacuten a tierra como por ejemplo los pines ldquoGNDrdquo del microcontrolador

Si conectas un segundo sensor de ultrasonidos conecta ldquoTrigrdquo al pin 4 y ldquoEchordquo al pin 5 Continuacutea conectando los siguientes pines a los sensores hasta los pines 12 y 13 si al final optas por conectar los seis sensores ultrasonidos

Conexioacuten del softwareUtilizas un programa terminal como PuTTY Screen o tu

lenguaje de script o programacioacuten favorito para conectarte al puerto serie que aparece cuando te conectas el sensor ultrasoacuteni-co Esto variaraacute en funcioacuten del sistema operativo que utilizas para conectarte al microcontrolador En Windows consultar el ldquoAdministrador de dispositivosrdquo es la forma maacutes comuacuten de averiguarlo En Linux ldquodmesgrdquo o ldquolsusbrdquo son las formas de de-tectar a queacute puerto estaacute conectado Deberiacuteas ver algo denomi-nado ldquoPL2303rdquo que es la conexioacuten del microcontrolador Si recibes informacioacuten basura en tu terminal cuando te conectes aseguacuterate de que los ajustes en serie son 9600 baudios 8 bits ninguno (paridad) y 1 bit de parada Aquiacute tienes una lista de los comandos que puede aceptar el microcontrolador

bull debug on Activa la retroalimentacioacuten detallada Estaacute deshabilitada por defecto nos proporcionaraacute aclaracio-nes sobre los errores de entrada

bull debug off desactiva la retroalimentacioacuten detalladabull init x y activa un HC-SR04 en los pines especificados

X es trigger Y es echo Estos deben ser pines digitales El dispositivo 0 estaacute preestablecido en los pines 2 y 3 de modo que no es necesario especificar estos pines La seleccioacuten de pines no vaacutelidos devolveraacute un signo de ex-clamacioacuten ()

bull ping enviacutea una sola lectura del HCSR04 previamente utilizado Si no se ha utilizado todaviacutea se usaraacute el dis-positivo 0 Si al comando le sigue un espacio y un nuacutemero entre 0-100 (exclusivo) se realizaraacute ese nuacutemero de lecturas emitiendo primero el promedio de esas lec-

SENSOR ULTRASONICO

turas despueacutes el nuacutemero de lecturas fallidas (que no cuentan para el promedio) y luego los valores miacutenimo y maacuteximo de lectura separados por espacios En cual-quier caso si una sentildeal se desconecta automaacuteticamente devolveraacute -1

bull start Hace ping constantemente a todos los dispositivos conectados en secuencia Debido a que los dispositivos se utilizan uno a uno el flujo de datos de este comando seraacute maacutes raacutepido si los dispositivos miden distancias cor-tas Si este comando le sigue un espacio y un nuacutemero mayor que 0 la placa esperaraacute estos milisegundos entre la lectura del uacuteltimo dispositivo y la lectura del primer dispositivo El resultado de este comando seraacute la lectura de cada dispositivo (con un uacutenico espacio despueacutes de cada uno) y una vuelta tras el uacuteltimo dispositivo

bull stop detiene la operacioacuten ldquostartrdquo soacutelo es efectivo tras haber iniciado ldquostartrdquo

bull mode emite el modo de medicioacuten del flujo M para meacutetrico (miliacutemetros) I para Imperial (deacutecimas de pul-gada) o R para Raw (la longitud de pulso en microse-gundos devuelta por el HC-SR04) El valor predeter-minado es M

bull timeout emite el tiempo de espera actual para lecturas de la sentildeal El tiempo de espera es la mayor cantidad de microsegundos que la placa esperaraacute antes de declarar que el HC-SR04 ha realizado una mala lectura lo cual no es necesariamente lo mismo que el pulso maacutes largo que la placa aceptaraacute del HC-SR04 Cuando la placa mide el pulso del HC-SR04 primero espera a que el HC-SR04 comience a enviar un pulso Este tiempo cuenta para el tiempo de espera Cuando este comando le sigue un espacio y un nuacutemero el tiempo de espera se ajusta a ese nuacutemero El valor predeterminado es 1 segundo (1000000 microsegundos)

bull ver emite informacioacuten de versioacuten y creacuteditos

Si cualquier comando (o ninguacuten comando) estaacute precedido por un uacutenico diacutegito de 0-5 (inclusive) seguido de un espacio el dispositivo que corresponde a ese diacutegito se seleccionaraacute para ser usado con el siguiente comando ldquopingrdquo Cada vez que la placa esteacute lista para un comando emitiraacute ldquogtrdquo para la serie La uacutenica excepcioacuten estaacute tras el comando ldquostartrdquo que no solicitaraacute entrada hasta que sea reconocido ldquostoprdquo

ODROID MAGAZINE 31

iquestCoacutemo empezaste con los ordenadoresCuando empeceacute mi negocio tuve que decidir queacute plat-

aforma de hardware iba a utilizar para la recogida de datos del traacutefico Simplemente para que no pienses mal de miacute mis caacutemaras de traacutefico no son las que se usan para multar por exceso de velocidad o algo asiacute Mi sistema estaba desti-nado suavizar el flujo de traacutefico fijando los controles oacutepti-mos de las sentildeales de traacutefico Anteriormente usaba un PC industrial para ejecutar mi software de reconocimiento de imaacutegenes Ahora uso la familia de dispositivos ODROID para esta cuestioacuten

iquestQueacute te atrajo de la plataforma ODROID En 2012 useacute Google para buscar una plataforma que

fuera muy compacta y al mismo tiempo potente para que cubriera mis necesidades que resultoacute ser la placa

Por favor haacuteblanos un poco sobre tiSoy ingeniero de electroacutenica y software en Rusia desde

hace 47 antildeos Naciacute en Siberia y tras terminar la escuela me mudeacute a Moscuacute para estudiar en la universidad Ser estudi-ante en el Instituto de Aviacioacuten de Moscuacute (MAI) fue una experiencia increiacuteble probablemente la mejor de mi vida A principios de los 90 llegoacute a Rusia la era de los microordena-dores soliacutea jugar a un juego de saltos en una CPU z80 y el i486 Tras finalizar mis estudios universitarios y de posgrado me convertiacute en ingeniero Trabajeacute en unos cuantos puestos de trabajo para diferentes empresas y finalmente decidiacute em-prender mi propio negocio En 2006 puse en marcha una iniciativa para crear sistemas de recuento del traacutefico de au-tomoacuteviles Estoy casado y tengo una hija de 21 antildeos llamada Lena que trabaja como enfermera Mi esposa Nadezhda es disentildeadora de vestuario de produccioacuten pero ahora trabaja como disentildeadora web Ella es aficionada a la fotografiacutea digi-tal y le encanta su caacutemara reacuteflex digital

COnOCIEnDO un ODROIDIAnvIACHESLAv ALEKSEEveditado por rob roy (robroy)

CONOCIENDO UN ODROIDIAN

Viacheslav disfruta tocando la guitarra y escuchando muacutesica

1995 en el campus MAi probando uno de los primeros equipos Vr comerciales del mundo que funcionaba a 640x480 a 30fps Utiliz-aba un sensor magneacutetico en la nuca para la posicioacuten de la cabeza la mejor broma que se podiacutea gastar a alguien era colocar un imaacuten cerca de la espalda y sacudirlo iexcllos gritos estaban garantizados cuando el mundo en 3D daba vueltas sin cesar

ODROID MAGAZINE 32

ODROID-X2 Con sus cuatro nuacutecleos funcionando a 17 GHz calculaba con facilidad los algoritmos de reconteo del traacutefico de automoacuteviles Maacutes tarde cambieacute al U3 y el XU4

iquestCuaacutel es tu ODROID favorito y por queacuteDe momento mi favorito es el XU4 Mi sistema estaacute

basado en el tratamiento de fotogramas de video en tiempo real por lo que el bus USB 30 del XU4 es bastante bueno para una caacutemara con una interfaz de captura de viacutedeo Para mi sistema es muy importante tener una buena conexioacuten entre la caacutemara de viacutedeo y la CPU Probablemente tendreacute que echar un vistazo a las interfaces de nivel inferior como MIPI CSI-2 que por desgracia estaacuten ausente en el XU4 Recientemente he estado aprendiendo como usar la caacute-mara oCam GS BW La caacutemara es buena en siacute misma pero para un uso industrial al aire libre tengo que implementar un software de control de exposicioacuten automaacutetica y posible-mente de control de apertura de la lente que todaviacutea estaacute en estudio

MEET AN ODROIDIAN

Una vieja joya el mini ordenador Nixdorf

An old gem the Nixdorf mini computer

CONOCIENDO UN ODROIDIAN

iquestQueacute aficiones e intereses tienes aparte de los ordenadoresDisfruto conduciendo y leyendo sobre coches y viendo

los campeonatos de carreras de F1 Tambieacuten me gusta via-jar pescar escuchar muacutesica y tocar la guitarra Tengo un gato siberiano llamado Leia y soy fan de Star Wars

iquestQueacute consejo le dariacuteas a alguien que quiere aprender maacutes sobre la programacioacuten

Hacer software es algo increiacuteble y miacutestico Es una fusioacuten de arte y tecnologiacutea Nada te inspira maacutes que tu aplicacioacuten cuando empieza a cobrar vida Sin embargo siempre estaacute ahiacute el otro lado de la Fuerza Estar listo para instruirte inc-esantemente El desarrollo de software es una de las activi-dades que cambia maacutes raacutepido Si tienes pensado dejar de hacer software en uno o dos antildeos puede dejar de aprender ahora El conocimiento se volveraacute anticuado en un par de antildeos maacutes o menos Para estar en lo maacutes alto siempre tienes que correr Es similar a la cancioacutenrdquoRun like Hellrdquo de Pink Floyd Si estaacutes listo para vivir de esta forma seguro que tendraacutes eacutexito

ODROID MAGAZINE 33

Page 8: Estación ARCADE · gias de marketing, administración de medios sociales y producción multimedia impresa, web, vídeo y cine. Ges-tionando múltiples cuentas con agencias y productores

ltmpv ringtonemp3gt

Finalmente haremos sonar el timbre usando un programa llamado mpv que ya estaacute incluido en Ubuntu 1604 v20 de Hardkernel (httpbitly2cBibbk) En otras palabras usamos el Mplayer para reproducir este archivo

Configurar el coacutedigo de Gmail

La mayoriacutea de la gente tiene una cuenta de Gmail Si no la tienes es muy faacutecil crearte una y lo maacutes importante de todo es gratis En realidad para que este script de Gmail funcione correctamente necesitamos dos cuentas de correo elec-troacutenico el correo electroacutenico del remi-tente y la cuenta de correo electroacutenico del destinatario y siempre es asiacute Por supuesto puede enviar un correo elec-troacutenico desde y hacia la misma cuenta pero es maacutes elegante crear una segunda cuenta de correo electroacutenico con el fin de estar al tanto de las fotos con el registro de la fecha y hora por separado Tambieacuten recomiendo que la cuenta de correo elec-troacutenico del destinatario sea la que utilices en tu dispositivo moacutevil para que el dis-positivo te avise cada vez que alguien lla-me a tu puerta No olvides permitir que ldquo las aplicaciones menos segurasrdquo tengan acceso a tu cuenta de Gmail (httpbitly124TgWN)

Vamos a examinar el script python llamado IoTOdroidpy

ltfrom emailmimetext import MIM-

ETextgt

ltfrom emailmimemultipart import

MIMEMultipartgt

Usamos esos dos moacutedulos porque necesitamos enviar un correo electroacutenico limpio con un remitente un receptor y un asunto

ltfrom emailmimeapplication im-

port MIMEApplicationgt

Tambieacuten importamos el moacutedulo re-

Script shell OdroidC2sh

El script OdroidC2sh es respon-sable de tomar la foto y hacer sonar el timbre La funcioacuten del argumento lsquoNowrsquo es pasar el nombre del archivo de la foto al script de Gmail En otras palabras es el conector entre nuestro coacutedigo baacutesico odroidbellpy y el script Odroid-IoTNo-tifierpy El script OdroidC2sh es muy simple

ltcd photosgt

Cambiamos desde directorio actual al directorio ltphotosgt

ltecho ldquoTaking the Photordquogt

ltnow=$1gt

ldquoNowrdquo es la fecha y hora de registro del nombre del archivo

ltechogt

ltfswebcam -d devvideo0 $now

jpggt

Este es el comando baacutesico para tomar la foto Utilizamos el comando fsweb-cam Si la aplicacioacuten fswebcam no estaacute instalada en tu sistema puedes instalarla con el siguiente comando

$ sudo apt-get install fswebcam

La sintaxis del comando es obvia toma una foto y usa la fecha y hora de registro como nombre de archivo Cada vez que se pulse el pulsador OdroidC2sh es activado por odroidbellpy El paraacute-metro -d determina el recurso a utilizar en nuestro caso devvideo0

ltecho ldquoPic Takenrdquogt

ltechordquordquogt

ltecho ldquoRinging Bellrdquogt

ltecho ldquordquogt

ltcd gt

Cambia de nuevo al directorio padre

--- email script (so it

knows what file to email

run command

ltossystem(command)gt

A continuacioacuten invocamos el co-mando system para ejecutar el script de correo electroacutenico

diagnostics

ltprint(ldquoFilenamerdquo now)gt

Imprimimos el ldquofilenamerdquo de la foto con la fecha y hora actuales

----| Email |----

ltprint(ldquoEmailrdquo)emailgt

ltemailcommand = lsquosudo python

IoTOdroidpy ldquoThis person is at

your doorrdquorsquo + lsquo ldquophotosrsquo + now +

lsquojpgrdquorsquogt

Enviamos la foto a la cuenta de Gmail del titular con la fecha y hora y el asunto ldquoThis person is at your doorrdquo

ltossystem(emailcommand) run-

ning the Email script withgt

-- the subject as ldquoSomeone

is ringing the doorbellrdquo and the

filename

-- We made before at the

-Photo amp Bell- section

Y finalmente lo enviamos

-- End Diagnostic Info

print(ldquoDone Processrdquo)

Todo estaacute hecho asiacute que el script fi-naliza su trabajo

-space out for next ldquoPress of

Buttonrdquo

ltprint(ldquordquo)gt

ltprint(ldquordquo)gt

Hacemos hueco para el siguiente ci-clo (proacutexima llamada al timbre)

TIMBRE

ODROID MAGAZINE 8

figura 3 - Alerta de correo electroacutenico de que alguien estaacute en la puerta

ltserverstarttls()gt

Configuramos y entramos en modo TLS TLS significa Transport Layer Se-curity (Seguridad de la capa de trans-porte) de modo que cualquier comando SMTP que siga este modo seraacute cifrado

ltserverlogin(lsquoltFrom

EmailgtrsquorsquoltFrom passwordgtrsquo)gt

Es hora de entrar en tu cuenta de Gmail de modo que necesitamos las credenciales correctas

ltserversendmail(msg[lsquoFromrsquo]

emaillist msgas_string())gt

Usando el anterior comando final-mente enviamos el correo electroacutenico Procura evitar el spoofing e introduce aquiacute tu direccioacuten de correo electroacutenico real El paraacutemetro emaillist es el que

hemos definido antes y el uacuteltimo paraacute-metro (msaas_string ()) el mensaje en forma de cadena con el archivo adjunto que es en este caso la foto El resultado lo puedes apreciar en la Figura 3

Testeando y ejecu-tando el coacutedigo

Desde el terminal (CTRL-T) eje-cutamos odroidbellpy con privilegios sudo

$ sudo python odroidbellpy

En este momento el dispositivo IoT se pone en modo de espera y apa-

ltmsg[lsquoReply-torsquo] = lsquoxyzgmail

comrsquogt

Correo electroacutenico del destinatario

ltmsgpreamble = lsquoMultipart

massagenrsquogt

El atributo preamble contiene el tex-to principal extra-blindado de los docu-mentos MIME por eso lo incluimos aquiacute

ltpart = MIMEText(ldquoHello The

doorbell is ringing A photo of

the person ringing the doorbell

has been attachedrdquo)gt

El cuerpo del mensaje

ltmsgattach(part)gt

ltpart =

MIMEApplication(open(str(sys

argv[2])rdquorbrdquo)read())gt

ltpartadd_header(lsquoContent-

Dispositionrsquo lsquoattachmentrsquo

filename=str(sysargv[2]))gt

Adjuntamos la foto al mensaje

ltserver = smtplibSMTP(ldquosmtp

gmailcom587rdquo)gt

Especificamos el servidor smtp que queremos usar y el puerto que utiliza el servidor de Gmail con el puerto 587 Tambieacuten puede usar el puerto 465 aunque no es mala idea comprobar con Google el puerto correcto por si acaso ha cambiado

ltserverehlo()gt

Especificamos el servidor smtp que queremos usar y el puerto que utiliza el servidor de Gmail con el puerto 587 Tambieacuten puede usar el puerto 465 aunque no es mala idea comprobar con Google el puerto correcto por si acaso ha cambiado

sponsable del archivo adjunto MIME MIME representa las Extensiones Mul-tiuso para el Correo en Internet Es una forma de identificar los archivos en In-ternet seguacuten su naturaleza y formato

ltimport smtplibgt

ltfrom smtplib import SMTPgt

Esta es la baacutesica y nativa libreriacutea en Python para enviar correos electroacutenicos de modo que no hay necesidad de insta-lar libreriacuteas externas smtplib Desde esta libreriacutea importamos la funcioacuten SMTP

ltimport sysgt

Importamos el moacutedulo de funcio-nes y paraacutemetros especiacuteficas del sistema puesto que necesitaremos el script ltargvgt de este moacutedulo (ver a continuacioacuten)

ltrecipients = [lsquoltYourEmailgtrsquo]gt

Tu direccioacuten de correo electroacutenico ya que tuacute eres el destinatario de las fotos

ltemaillist = [elemstrip()

split(lsquorsquo) for elem in recipi-

ents]gt

Hacemos una lista de correo elec-troacutenico en la que separaremos y quita-remos los caracteres pertinentes de cada elemento de la lista de destinatarios

ltmsg = MIMEMultipart()gt

Definimos el variable message (msg) como una Extensioacuten Multiuso para el Correo en Internet llamando a la fun-cioacuten MIMEMultipart

ltmsg[lsquoSubjectrsquo] = str(sys

argv[1])gt

El asunto del nuestro mensaje

ltmsg[lsquoFromrsquo] = lsquoltFrom Emailgtrsquogt

Tu direccioacuten de correo electroacutenico

TIMBRE

ODROID MAGAZINE 9

import wiringpi2 as odroid

import time

import os

import glob

import sys

odroidwiringPiSetup()

Button = 3

odroidpinMode(Button0)

odroidpullUpDnControl(Button1)

loop

print(ldquoProgram Runningrdquo)

while Trueloops forever till

keyboard interupt (ctr + C)

if odroiddigitalRead(Button)

== False when button not

pressed

sysstderrwrite(ldquordquo)

timesleep(1)

else

print(ldquoButton Pressedrdquo)

------| photo amp Bell

|------

Get FileName

now = timestrftime(ldquoDatem-

d-yTimeH-M-Srdquo)

Make command to run

odroidC2sh

command = ldquobash odroidC2sh ldquo

+ str(now)

-- odroidC2sh is an Shell

script that

-- is responsible for tak-

ing the photo and

-- making the Doorbell

Noise

--- We insert the ldquoNowrdquo ar-

gument so the python

--- script knows what the

file name of the

--- picture will be so it

can pass it on into the

--- email script (so it

knows what file to email

figura 4 ndash el script python del timbre en ejecucioacuten

run command

ossystem(command)

diagnostics

print(ldquoFilenamerdquo now)

----| Email |----

print(ldquoEmailrdquo)email

emailcommand = lsquosudo python

IoTOdroidpy ldquoSomeone is ringing

the doorbellrdquorsquo + lsquo ldquophotosrsquo +

now + lsquojpgrdquorsquo

ossystem(emailcommand) run-

ning the Email script with

-- the subject as ldquoSomeone

is ringing the doorebellrdquo and the

filename

-- We made before at the

-Photo amp Bell- section

-- End Diagnostic Info

print(ldquoDone Processrdquo)

-space out for next ldquoPress

of Buttonrdquo

print(ldquordquo)

print(ldquordquo)

OdroidC2sh

binsh

cd photos

echo ldquoTaking the Photordquo

now=$1 Now is the filename time

stamp

take pic

fswebcam -d devvideo0 $nowjpg

echo ldquoPic Takenrdquo

echordquordquo

ring Bell

echo ldquoRinging Bellrdquo

echo ldquordquo

echo ldquordquo

cd

mpv ringtonemp3

IoTOdroidpy

from emailmimetext import MIM-

EText

from emailmimeapplication im-

port MIMEApplication

rece en pantalla el mensaje ldquoProgram is runningrdquo Al mismo tiempo aparecen puntos ldquordquo en la pantalla uno a uno indicando al usuario que el dispositivo estaacute funcionando con normalidad Cu-ando alguien pulsa el botoacuten (timbre) el script OdroidC2sh se ejecuta con una doble finalidad Primero toma una in-

stantaacutenea de la persona que hace sonar el timbre En segundo lugar enviacutea el correo electroacutenico a traveacutes de IoTOdroidpy a la cuenta de Gmail del propietario con la fecha y hora de registro de la foto que se adjunta Despueacutes vuelve al modo de espera y el timbre IoT suena

Notas finalesPor supuesto este proyecto se podriacutea

mejorar de muchas formas Por ejemplo se podriacutea antildeadir un LED en el timbre IOT que indicara su correcto funciona-miento Un dispositivo maacutes complejo similar a eacuteste podriacutea usarse como timbre comercial con la ayuda de un moacutedulo placa releacute Tampoco seriacutea complicado incluir la posibilidad de que grabase una pequentildea grabacioacuten de viacutedeo junto con las fotos haciendo que el timbre ldquointeli-genterdquo sea auacuten maacutes inteligente Ademaacutes como dice el viejo refraacuten ldquoiexclla perfeccioacuten es el eterno enemigo de lo funcionalrdquo

Coacutedigo deltimbre IoT

Aquiacute tienes una copia de todo el coacute-digo Al final de este artiacuteculo tienes un enlace a la paacutegina github que tambieacuten contiene el coacutedigo

Odroidbellpy

TIMBRE

ODROID MAGAZINE 10

from emailmimemultipart import

MIMEMultipart

from smtplib import SMTP

import smtplib

import sys

recipients = [lsquoabcgmailcomrsquo]

emaillist = [elemstrip()

split(lsquorsquo) for elem in recipi-

ents]

msg = MIMEMultipart()

msg[lsquoSubjectrsquo] = str(sysargv[1])

msg[lsquoFromrsquo] = lsquoxyzgmailcomrsquo

msg[lsquoReply-torsquo] = lsquoabcgmailcomrsquo

msgpreamble = lsquoMultipart

massagenrsquo

part = MIMEText(ldquoHello There is

someone ringing your doorbell A

picture of this person has been

atachedrdquo)

msgattach(part)

part =

MIMEApplication(open(str(sys

argv[2])rdquorbrdquo)read())

partadd_header(lsquoContent-

Dispositionrsquo lsquoattachmentrsquo

filename=str(sysargv[2]))

msgattach(part)

server = smtplibSMTP(ldquosmtp

gmailcom587rdquo)

serverehlo()

serverstarttls()

serverlogin(lsquoxyzgmail

comrsquorsquoyourpassword herersquo)

serversendmail(msg[lsquoFromrsquo]

emaillist msgas_string())

El coacutedigo del proyecto estaacute disponible en httpbitly2jMAdMY usando el siguiente comando

$ git clone

httpsgithubcommiltiadisme-

lissas

IoTOdroidC2Doorbellgit

TIMBRE

A finales de 2016 los usuarios de Cyanogenmod se horrorizaron cuando Cyanogen anuncioacute la

cancelacioacuten de sus servicios dejando a todos los usuarios que dependiacutean de Cyanogenmod sin soporte Sin em-bargo en poco tiempo llegariacutea una so-lucioacuten en forma de LineageOS Si eres un usuario del ODROID-XU3 XU4 es el momento perfecto para colaborar con la versioacuten de LineageOS en los foros ODROID

Caracteriacutesticas- Android 711 Nougat lineageoS 141- Kernel 3109- openGl eS 112030 (aceleracioacuten por GpU)- opencl 11 ep (aceleracioacuten por GpU)- funcioacuten multiusuario habilitada (hasta 8 usuarios)- ethernet integrado y soporte para ether-net Gigabit USb 30 - Soporte para rtl8188cUS rtl8191SU y USb Wireless ralinkt- Soporte bluetooth USb (ble A2dp Sink)- Soporte para dongle GpS USb- Anclaje a red USb - punto de acceso Wi-fi portaacutetil- Soporte DAc USb nativo para Android

LInEAGEOS-141 ODROID-Xu3Xu4OLvIDATE DE CyAnOGEn EL fuTuRO ESTA AquIpor voodik editado por bruno Doiche

LINEAGEOS

- Soporte para Webcam USb UVc- Soporte hDMi-cec- Selinux

Problemas conocidosEn este momento soacutelo admite moacutedu-

los Bluetooth de bajo consumo v40 (BLE) Consulta el Moacutedulo Bluetooth 2

Coacutemo instalarloEn primer lugar necesitas preparar

tu emmcsd con imaacutegenes especiales de auto-instalacioacuten

La puedes encontrar aquiacutehttpophmdrjrnetvoodik5422

ODROID-XU3AndroidCM-141-ATV

Alpha-01_110217

Graba la imagen en tu eMMCsd a traveacutes de Win32DiskImager y arranca el dispositivo Tendraacute que esperar paci-entemente durante el primer arranque ya que el proceso de actualizacioacuten puede llegar a tardar hasta 20 minutos

Coacutedigo fuente Kernel

$ git clone httpsgithubcom

voodikandroid_kernel_hardkernel

_odroidxu3 -b cm-140_5422

ODROID MAGAZINE 11

SNES 3DO y Sega Genesis El juego teniacutea diferentes escenarios para jugar la selva la nieve y el desierto

Open Fodder ofreciacutea 23 misiones que se dividiacutean en varias fases En total suponiacutea superar 72 niveles para llevar

Este mes me gustariacutea hablar de un juego llamado Open Fodder se trata de un remake del claacutesico

juego de Amiga Cannon Fodder desar-rollado por Sensible Software en 1993 Utiliza los datos del juego original Can-non Fodder para conseguir una experi-encia muy similar al juego original en tu ODROID

Muchos de los populares juegos de Linux de hoy en diacutea como Stratagus y Freeciv son en realidad remakes de claacutesicos juegos de DOS de mediados y finales de los 90 y Open Fodder no es diferente El remake de Cannon Fodder es un juego disparos accioacuten y estrategia donde controlas a un pequentildeo grupo de soldados que avanza a traveacutes de varias docenas de niveles para matar a los sol-dados enemigos destruir tanques echar abajo edificios y derrotar a tus enemigos El juego fue lanzado por primera vez para Amiga en 1993 y fue exportado por sus desarrolladores a MS-DOS Atari Jaguar

a tu escuadroacuten a la victoria Cuando se lanzoacute el juego fue muy elogiado por varias revistas de juego Amiga con pun-tuaciones que llevaban al 95 por ciento y fue considerado como uno de los mejo-res juegos lanzados en 1993 En general siguioacute siendo uno de los mejores juegos jamaacutes creado para la plataforma Amiga durante sus 11 antildeos de vida

Desde un punto de vista maacutes poliacutetico el juego lleva impliacutecito un intenso men-saje sobre la guerra en siacute misma puesto que juegas y llevar a tus soldados a una muerte inevitable Cada misioacuten se inicia

JuEGOS LInuXOPEn fODDERpor tobias Schaaf (meveric)

JUEGOS LINUX

figura 1 - el logotipo de cannon fodder en el cual estaacute basado open fodder

figuras 2 3 y 4 - los niveles de selva desierto y nieve en open fodder

figuras 5 y 6 - A medida que avanzas en el juego tu larga liacutenea de reclutas se con-vierte gradualmente en cruces alineadas como en un cementerio

ODROID MAGAZINE 12

nas segundas partes ademaacutes de algunas misiones de bonificacioacuten Cannon Fod-der 2 salioacute un antildeo maacutes tarde pero fue maacutes bien un ldquodisco de datosrdquo con ex-pansiones que una secuela ya que en su mayor parte presentaba maacutes misiones en lugar de nuevas caracteriacutesticas Tambieacuten estaba el X-Mas de Amiga que ofreciacutea algunas misiones diferentes basadas en el juego Cannon Fodder

Ejecutando Open Fodder

Open Fodder es un remake del motor del juego Cannon Fodder que lleva el juego a los sistemas operativos modernos Al igual que otras migraciones del motor del juego (como OpenTTD) puede uti-lizar los datos del juego original con esta versioacuten del motor para ejecutar el juego en tus dispositivos modernos Esta mi-gracioacuten tambieacuten cuenta con una versioacuten exportada para los dispositivos ARM lo que significa que podemos ejecutarlo igualmente en nuestros ODROIDs

Todaviacutea estaacute en desarrollo pero ya funciona bastante bien Como de cos-tumbre se puede instalar desde mi repo-sitorio y puesto que soacutelo requiere SDL2 y SDL2 Mixer como dependencias prin-cipales deberiacutea funcionar en Debian y

con un nuevo grupo de reclutas que se alinean esperando a unirse al combate Los soldados desechables (de ahiacute el nom-bre de cannon fodder Carne de Cantildeon) poco a poco se convierten en cruces alin-eadas dando forma a un cementerio mil-itar a medida que vas completando cada misioacuten formaacutendose maacutes y maacutes filas con-forme vas enterrando a tus predecesores Sin embargo los desarrolladores le di-eron un cierto toque de humor ya que los primeros soldados de tu escuadroacuten (y por tanto los casi seguro que moriraacuten) llevan de hecho los nombres de las seis personas que componiacutean el equipo de desarrollo del juego

Si nos fijamos bien el juego incor-poraba algunos detalles bastante intere-santes Por un lado tiene su propia can-cioacuten ldquo War never been so much funrdquo que suena durante la intro del juego iexclUno de los desarrolladores del juego Jon Hare compuso la muacutesica junto con el compositor Richard Joseph Si teniacuteas el Amiga CD32 tambieacuten recordaraacutes una pista adicional que incluiacutea un video en el cual los desarrolladores se disparaban entre siacute con armas de juguete (httpbitly2l67bFy) iexclSin duda se divirtieron bastante desarrollando este juego

Cannon Fodder tambieacuten tuvo algu-

JUEGOS LINUX

Ubuntu por igual las puedes encontrar en mi lista principal de paquetes para armhf y jessiemain para arm64

Se puede instalar con este comando en un dispositivo ODROID que ejecute Debian suponiendo que ya tengas con-figurados mis repositorios o esteacutes usando una de mis imaacutegenes de Debian (httpbitly13v98ly)

$ apt-get install

openfodder-odroid

He alterado ligeramente el juego para que siempre se ejecute en modo pantalla completa aunque si lo deseas puedes cambiar al modo de ventana simple-mente pulsando F11 cuando tenga el juego activado

Convirtiendo los datos del juego

Por siacute sola mi versioacuten de Open Fod-der viene con el especial Amiga X-Mas ademaacutes de varios niveles demo dis-ponibles de forma gratuita Si quieres jugar el juego real tendraacutes que importar los datos desde un CD Cannon Fodder

Si estaacute usando un ODROID para ju-gar al Open Fodder puedes localizar las carpetas de los datos del juego en la car-peta $HOMEopenfodderData Por ejemplo homeodroidopenfodderDataDos_CD es una de esas carpetas de datos del juego Existen varias carpe-tas de datos del juego que puedes usar dependiendo de la versioacuten que tengas del juego Cannon Fodder

Dos_CDAunque el juego es compatible con

muchas y diferentes fuentes del juego actualmente soacutelo Dos_CD parece ser una versioacuten de Open Fodder ldquototal-mente compatiblerdquo con muy pocos er-rores y problemas El resto de fuentes del juego pueden tener problemas

Aquiacute tienes un consejo raacutepido Aunque se llama Dos_CD cogeraacute cu-alquier versioacuten de DOS de Cannon Fodder que puedas encontrar Si tienes

figura 7 - Sensible Software - los desarrolladores de cannon fodder

ODROID MAGAZINE 13

WHDLoad en un Amiga (o WinUAE) para extraer los archivos del juego y co-piarlos en la carpeta DataAmigardquo No lo he probado pero si tienes la ldquoCannon Fodder Collectionrdquo de Amiga CD32 no oficial puedes copiar el contenido de FodderNew en esta carpeta lo que tendraacute como resultado niveles completamente diferentes Puede considerarse como una versioacuten maacutes compleja del juego aunque a la vez maacutes divertida Por lo tanto bien poner los archivos originales de Amiga aquiacute o bien los archivos FodderNew de la ldquoCannon Fodder Collectionrdquo

Dos2_CDDos2_CD es en realidad la carpeta

de la versioacuten DOS de Cannon Fodder 2 pero tambieacuten funciona con la versioacuten GoG Desafortunadamente tiene algu-nos problemas el maacutes grave es que el juego no tiene ninguacuten tipo de sonido o muacutesica Aparte de esto todo parece fun-cionar correctamente pero desconozco coacutemo reaccionaraacute en niveles posteriores La carpeta Data tambieacuten incluye las car-petas WAV Plus AmigaFormat_XMAS y Custom En WAV se almacenan los efectos de sonido por defecto para to-dos los juegos (Cannon Fodder) Plus es una demo del nuacutemero 31 la revista Amiga Power y AmigaFormat_XMAS es el Amiga Format Christmas Special Tambieacuten hay una carpeta Custom que te permite jugar otros juegos y mapas pero necesitan la versioacuten (CD) de DOS o de lo contrario no apareceraacuten

Notas finalesOpen Fodder es un buen proyecto

que te permite ejecutar este increiacuteble juego en sistemas modernos Realmente me gusta y estoy deseando ver coacutemo pro-gresa Espero que las versiones de Amiga y Cannon Fodder 2 sean pronto total-mente compatibles Tal vez incluso poda-mos ver mejoras graacuteficas con el tiempo Me gustariacutea ver graacuteficos maacutes modernos ya que el juego es bastante antiguo y los graacuteficos no son los maacutes idoneos para res-oluciones 1080p

la versioacuten de disco de Cannon Fodder simplemente copia el CF_ENGDAT en la carpeta Dos_CD La versioacuten original de CD DOS teniacutea un archivo llamado cf_cddat Cambiar el nombre a CF_ENGDAT y copiarlo a la carpeta Dos_CD Si tienes la versioacuten GoG del juego soacutelo tiene que copiar CF_ENG DAT a la carpeta Dos_CD iexclEsta es una forma raacutepida y legal de conseguir el juego si estaacutes interesado

Aseguacuterate de que el nombre del ar-chivo este en mayuacutescula ya que el juego tiene en cuenta esta cuestioacuten Intenta que coincida todo para asegurarte de que las cosas funcionen sin problemas

Amiga_CDAmiga CD32 tambieacuten contaba con

una versioacuten de este juego Esta es la ver-sioacuten que incluye el video al que hemos hecho referencia anteriormente En el CD de Amiga CD32 hay una carpeta llamada Fodder El contenido de esta carpeta debe copiarse a la carpeta Ami-ga_CD Puedes extraer la segunda pista del CD y almacenarla como Track2flv en la misma carpeta con la finalidad de tener el archivo de video

Me topeacute con algunos problemas cu-ando haciacutea esto y descubriacute nuevamente que el juego buscaba muchos archivos en mayuacutesculas asiacute que utiliceacute el siguiente comando para copiar todos los archivos y tenerlos tambieacuten en mayuacutesculas en la carpeta Amiga_CD$ for files in `ls` do cp $files

`echo $files | tr lsquo[lower]rsquo

lsquo[upper]rsquo` done

Asiacute funcionaba bien pero teniacutea algu-nos fallos Por ejemplo la animacioacuten del helicoacuteptero al inicio de cada misioacuten no apareciacutea y el cursor cuando se guarda un archivo se distorsionaba Aparte de esto no he visto problemas importantes en la versioacuten Amiga CD32

AmigaLa Informacioacuten de desarrollador de

Open Fodder dice ldquoUsar el instalador

JUEGOS LINUXJUEGOS ANDROID

CAuSALITy un JuEGO DE ROMPE-CABEzAS COn PARA-DOJAS DE vIAJES En EL TIEMPO por bruno Doiche

Configura tuacute mismo los entornos extrantildeos e insoacutelitos y

ayuda a un grupo de astronautas varados a encon-trar una ruta hacia un lugar seguro Cada nivel al que te enfrentas representa un nuevo reto donde necesitas llevar a tu astronauta a una salida que coincida con su color Los maacutergenes de tiempo son cortos aunque es muy divertido Aunque formas parte de tan soacutelo una fraccioacuten de tiempo de la vida de tu personaje iexclten cuidado pasaraacutes un montoacuten de tiempo enganchado a este juego

httpsplaygooglecomstoreappsdetailsid=comlojugamesandroidCausality

el entorno 3D isomeacutetrico es magniacute-fico a menudo no superaba el nivel porque los graacuteficos me cautivaban

ODROID MAGAZINE 14

tePi necesitan estar conectados a otros distintos en el ODROID-C2 porque parece haber un conflicto La interfaz UART ocupa estos pines y el estado por defecto del ODROID (1=high en Pin 8) no es lo que espera la RemotePi (GPIO debe entrar en el valor por defecto 0=low para cortar la energiacutea tras el apagado) Pero puesto que necesitas utilizar cables de todos modos para conectar la Remot-ePi esto no supondraacute ninguacuten problema ya que simplemente puedes reconectar los cables a otros pines GPIO

Como evitamos el circuito de ali-mentacioacuten del ODROID encendieacutendo-lo a traveacutes de GPIO tambieacuten pasamos por alto la proteccioacuten ante subidas de tensioacuten 2526A del dispositivo pero no te preocupes La RemotePi tambieacuten tiene proteccioacuten ante subidas de tensioacuten que deberiacutea coincidir con el mismo val-or que en el caso de la RemotePi board para la Raspberry Pi 3 Sin embargo la RemotePi para la Raspberry Pi 2 es de soacutelo 2A Esto estaacute bien porque el valor es menor a los 26A del ODROID de modo el polyfuse de la RemotePi se ac-tivariacutea antes si conectas demasiados dis-

La RemotePi board (httpbitly2l8JcWU) que convierte cu-alquier mando a distancia en un

interruptor de encendido para tu orde-nador de placa reducida puede ser com-patible con el ODROIDC2 si sigues esta guiacutea Si utilizas tu dispositivo como centro multimedia esta placa te propor-cionara un receptor de infrarrojos y un circuito de alimentacioacuten asiacute como un botoacuten de encendido Puedes encender y apagar tu ODROID completamente a traveacutes de una sentildeal infrarrojos (IR) y simplemente presionar el botoacuten de en-cendido para apagarlo y reiniciarlo con seguridad La placa RemotePi es respon-sable del modo espera que absorbe una miacutenima energiacutea mientras el ODROID estaacute completamente apagado Por uacutel-timo la placa alimenta tu dispositivo a traveacutes de GPIO lo cual requiere un cable microUSB para conectarlo a la Re-motePi en lugar de utilizar un adaptador de corriente normal

Configuracioacuten de hardware

Puesto que la RemotePi estaba pen-sada originalmente para la Raspberry Pi 2 necesitaraacutes utilizar cables adiciona-les en lugar de colocarla justamente en cima del C2 para evitar interferir con el disipador de calor asiacute que debes re-cablear algunos pines Es necesario utili-zar cables con el diaacutemetro adecuado para los pines de 5V y puesta a tierra ya que la corriente podriacutea estar entre los 2A y 26A dependiendo de cuaacutentos dispositi-vos USB conectes a tu dispositivo

Los pines GPIO 8 y 10 de la Remo-

positivos no alimentados de forma exter-na que no es una buena idea en un SBC al fin al cabo No obstante debido a esta diferencia de amperaje una RemotePi para la Raspberry Pi 3 seriacutea la mejor op-cioacuten para este proyecto

Como resultado del nuevo cableado el firmware de RemotePi ya no se puede configurar de forma normal aunque nunca he usado esta funcioacuten Si fuera necesario configurar o actualizar el firm-ware necesitaraacutes volver a conectar los pines 8 y 10 de la RemotePi a los pines 8 y 10 del ODROID durante la actu-alizacioacuten del firmware y luego deshacer los cambios una vez que la actualizacioacuten haya finalizado Otra posibilidad es simplemente conectar una Raspberry Pi para actualizar el firmware Esto suena a un montoacuten de problemas pero en re-alidad simplemente es extender la con-exioacuten del cabezal y cambiar una liacutenea en el script principal y dos liacuteneas en otro script opcional si haces uso de ello

Re-cableando laconexioacuten GPIO

Dado que la RemotePi estaacute disentildeada

REMOTEPI BOARD PARA EL ODROID-C2por inifity85

REMOTEPI

figura 1 - remotepi board

ODROID MAGAZINE 15

ergiacutea completamenteIrswitchsh (solo cambia el script

original de MSL Digital de GPIOpin1 = 14 a GPIOpin1 = 225)

binbash

prevent restarting XBMC at

shutdown This is only used for

OpenElec before V5

LOCKDIR=rdquovarlockrdquo

LOCKFILE=rdquoxbmcdisabledrdquo

this is the GPIO pin receiving

the shut-down signal

Raspberry Pi pin8 GPIOpin1=14

Odroid-C2 pin26 GPIOpin1=225

GPIOpin1=225

functions

add_omit_pids()

omit_pids=rdquo$omit_pids -o $1rdquo

safe_shutdown ()

for OpenElec before V5

touch ldquo$LOCKDIR$LOCKFILErdquo

for OpenElec V5 and later

systemctl stop kodi

add_omit_pids $(pidof connmand)

add_omit_pids $(pidof dbus-dae-

mon)

killall5 -15 $omit_pids

for seq in `seq 1 10` do

usleep 500000

clear gt devtty1

killall5 -18 $omit_pids || break

done

sync

umount -a gtdevnull 2gtamp1

poweroff -f

echo ldquo$GPIOpin1rdquo gt sysclass

gpioexport

echo ldquoinrdquo gt sysclassgpio

gpio$GPIOpin1direction

while true do

sleep 1

power=$(cat sysclassgpio

gpio$GPIOpin1value)

if [ $power = 0 ] then

echo ldquooutrdquo gt sysclassgpio

gpio$GPIOpin1direction

echo ldquo1rdquo gt sysclassgpio

una carcasa personalizada de modo que el receptor integrado podriacutea estar oculto y no ser uacutetil En ese caso puedes desac-tivar el IR del ODROID en favor del re-ceptor externo GPIO-IR en la RemotePi y conectar el pin 12 Tienes disponible maacutes informacioacuten sobre el cambio al receptor GPIOIR en LibreELEC en httpbitly2lpDl27

Scripts de apagado para LibreELEC

Los dos scripts tratados a continu-acioacuten pueden descargarse desde la paacutegina de soporte de MSL Digital Solutions en httpbitly2kMxyVG En esta paacutegina tambieacuten encontraras una guiacutea para utili-zar estos scripts en otros sistemas opera-tivos como Volumio y RuneAudio

El script irswitchsh se usa para el apagado seguro a traveacutes de sistema In-frarrojos Tras pulsar el correspondiente botoacuten el sistema se apagaraacute de forma se-gura luego RemotePi esperaraacute a que el GPIO225 alcance el estado 0 (low) que aparece tras el cierre exitoso del sistema Finalmente cortaraacute la energiacutea

El script shutdownsh se usa para el apagado seguro a traveacutes de la interfaz del programa o script Despueacutes de navegar hasta el botoacuten de apagado en la GUI el sistema se apagaraacute de forma segura luego RemotePi esperaraacute a que el GPIO225 alcance el estado 0 (low) que apareceraacute tras apagarse el sistema de forma adec-uada y segura Finalmente cortaraacute la en-

originalmente para una Raspberry Pi desgraciadamente no es soacutelo enchufar y usar Necesitaraacutes volver a cablear dos pines usando los cables de todos los pines tal y como se muestra en la Figura 2 Re-cablea el pin 8 de la RemotePi al pin 26 del ODROID-C2 y el pin 10 de la RemotePi al pin 7 del ODROID-C2

Si no quieres utilizar el receptor IR de la RemotePi para el mando a distan-cia de LibreELEC puedes dejar desco-nectado el pin 12 La placa continuaraacute encendieacutendose y apagaacutendose a traveacutes del comando de control remoto IR pero el control de la GUI de LibreELEC seraacute asumido por el receptor de infrarrojos integrado en el ODROID Sin embargo si has comprado una RemotePi con un receptor IR y un LED externo es posible que hayas decidido colocarla dentro de

REMOTEPI

figura 3 - la remotepi ha sido recableada y montada en una carcasa personalizada

figura 2 - re-cableado Gpio

ODROID MAGAZINE 16

Centro Multimedia por ejemplo Esos comandos de apagado se equiparaacuten a eventos internos similar a cuando nave-gas por el menuacute de apagado de Kodi Sin utilizar este segundo script el sistema se cerraraacute con seguridad pero la placa Re-motePi no recibiriacutea ninguna indicacioacuten para monitorizar el GPIO225 de modo que no cortariacutea la energiacutea tras apagarse el sistema correctamente

Usando el receptor IR de la RemotePi

Si deseas utilizar el receptor IR de la RemotePi en lugar del receptor IR ODROID integrado tendraacutes que des-activar el sistema IR integrado y activar el receptor IR GPIO Para hacer esto en Ubuntu puede consultar el artiacuteculo de la Wiki de Hardkernel en httpbitly2l8KrWg Para Libre-ELEC echa un vistazo a mi mini-guiacutea en httpbitly2lLKj2A Para preguntas comentari-os o sugerencias visita el hilo original en httpbitly2mgFGKk

gpio$GPIOpin1value

sleep 3

safe_shutdown

fi

done

Shutdownsh (solo cambia GPIOpin =15 a GPIOpin =249 y GPIOpin1 =14 a GPIOpin1 =225)

binbash

if [ ldquo$1rdquo = ldquorebootrdquo ] then

Raspberry Pi pin10 GPIOpin=15

Odroid-C2 pin7 GPIOpin=249

GPIOpin=249

Raspberry Pi pin8 GPIOpin1=14

Odroid-C2 pin26 GPIOpin1=225

GPIOpin1=225

echo ldquo$GPIOpinrdquo gt sysclass

gpioexport

execute shutdown sequence on

pin

echo ldquooutrdquo gt sysclassgpio

gpio$GPIOpindirection

echo ldquo1rdquo gt sysclassgpio

gpio$GPIOpinvalue

usleep 125000

echo ldquo0rdquo gt sysclassgpio

gpio$GPIOpinvalue

usleep 200000

echo ldquo1rdquo gt sysclassgpio

gpio$GPIOpinvalue

usleep 400000

echo ldquo0rdquo gt sysclassgpio

gpio$GPIOpinvalue

set GPIO 14 high to feedback

shutdown to RemotePi Board

because the irswitchsh has

already been terminated

echo ldquo$GPIOpin1rdquo gt sysclass

gpioexport

echo ldquooutrdquo gt sysclassgpio

gpio$GPIOpin1direction

echo ldquo1rdquo gt sysclassgpio

gpio$GPIOpin1value

usleep 4000000

fi

El script shutdownsh es uacutetil si a vec-es usas las aplicaciones remotas Android Yatse o Kore o hotkeys para apagar tu

REMOTEPI

ODROID Talk Subreddit

httpwwwredditcomrodroid

ODROID Magazine

estaacute en Reddit

ODROID MAGAZINE 17

El HiFi Shield 2 (39$ httpbitly2lHSlZJ) es un Con-vertidor Digital a Analoacutegico de Alta definicioacuten (DAC) para el ODROID-C2 y el ODROID-C1+ Se trata de

una placa de sonido especial para el ODROID-C2 y C1 + que estaacute optimizada para mejorar la calidad de reproduccioacuten del sonido Ofrece un sonido muy bien equilibrado consistente intenso amplio y muy bien dimensionado por niveles Hemos analizado la calidad de audio de la salida HiFi Shield 2 DAC con un equipo estaacutendar de la industria del sonido llamado Au-dio Precision Audio Precision es un analizador de audio de alto rendimiento optimizado para la produccioacuten de audio digital

Usando el chip DAC PCM5242 de uacuteltima generacioacuten de Texas Instrument conocido como Burr-Brown el HiFi Shield 2 soporta formatos de audio de 16 24 y 32 bits con una ra-tio THD+N miacutenima (0002) y una dinaacutemica ideal (114dB +) ademaacutes de sorprendentes tasas de muestreo de 384 kHz La interfaz dedicada SPDIF soporta una definicioacuten de hasta 192kHz24bit a traveacutes de una salida oacuteptica (Toslink)

Si hacemos uso del puerto de expansioacuten I2S en el C2C1+ no es necesario ocupar un puerto USB permitiendo al usu-ario seleccionar el sistema de reproduccioacuten de audio que desee como Volumio y Debian (DietPi) para reproducir sonido HiFi

HIFI SHIELD 2

HIfI SHIELD 2EL MEJOR SOnIDO quE PODRAS COnSEGuIR En AnDROIDeditado por rob roy (robroy)

oDroiD-c2 y hifi Shield 2 Audio pb +J

primer plano de la placa con anotaciones

Distribucioacuten de los 7 pines i2S del c2c1+

la salida de audio es estaacutendar la salida de color rojo corresponde al canal de audio iz-quierdo y la salida de color blanco correspon-de al canal de audio derecho

ODROID MAGAZINE 18

Detalles

La guiacutea de configuracioacuten de UbuntuLinux para ODROID-C2 estaacute disponible en httpbitly2brrGdG y para ODROID-C1+ en httpbitly2lI7AC7 El sistema operativo oficial Volumio 2 se puede descargar desde httpbitly2kOJNAV y la imagen DietPi basada en Debian se encuentra en httpbitly2ls45yM Puede ver los esquemas en httpbitly2mnukV4

Diagrama por bloques del hifi Shield2

Caracteriacutesticasbull El control de volumen a traveacutes de la interfaz

i2c es una gran caracteriacutestica para mantener una buena calidad del sonido con varios voluacutemenes de salida de audio

bull Los puertos de salida incluyen terminales esteacute-reo rcA chapados en oro

bull La fuente de alimentacioacuten tiene habilitado un regulador de interferencias de ruido ultra-bajo lo cual reduce el ruido de la fuente de alimentacioacuten y aumenta en gran medida el ratio sentildealruido

bull La interfaz I2S permite la descodificacioacuten di-recta de la entrada digital a la salida analoacutegica utili-zando la sincronizacioacuten del reloj maestro

bull La superficie de la PCB estaacute chapada en oro so-bre 2 onzas de cobre lo cual garantiza la continui-dad de la sentildeal y reduce la reflexioacuten y deflacioacuten de la sentildeal

bull Dispone de almohadillas soldadas a la salida de audio balanceada (sentildeal diferencial)

bull La interfaz SPDIF dedicada es nueva admite una definicioacuten de hasta 192khz24bit a traveacutes de una nueva salida oacuteptica (toslink)

bull Este HiFi shield no es compatible con Android y hardkernel no tiene planes para hacerlo compatible y asiacute poder habilitar el controlador i2S en el Kernel y el hAl de Android

El Manual de usuario del ODROID-XU4 disponible en httpbitly1U9Q8yg ha sido revisado hace poco para incluir algunos de los perifeacutericos maacutes recientes como

la Expansion Board SmartPower2 y oCam Puesto que ahora Hardkernel tambieacuten ofrece Ubuntu 1604 todos los ejemplos de coacutedigo se han actualizado para que sean compatibles con el nuevo sistema operativo Si tiene comentarios preguntas o sugerencias visita el hilo de los foros ODROID en httpbitly1RykBrT

MAnuAL Xu4ACTuALIzADOREvISADO PARA uBunTu 1604 y LOS PERIfERICOS MAS RECIEnTESeditado por rob roy (robroy)

MANUAL XU4

el manual del oDroiD-xU4 incluye informacioacuten detallada de los diferentes sistemas operativos software y perifeacutericos disponibles para el oDroiD-xU4

ODROID MAGAZINE 19

El DevOps es complicado Los grandes proyectos de soft-ware como Mesos y Kubernetes desarrollan equipos como los que se encuentran en la mayoriacutea de las empre-

sas y organizaciones tecnoloacutegicas como CoreOS con la finali-dad de ayudar a los desarrolladores a poner sus aplicaciones en funcionamiento Sin embargo iquestcuaacutel seriacutea una buena solucioacuten para un desarrollador en solitario o una pequentildea red domeacutesti-ca iquestCoacutemo podemos usar el coacutedigo a nivel de infraestructura

Uso un portaacutetil Macintosh OSX para desarrollo pero para las aplicaciones de larga duracioacuten o aplicaciones que se ejecu-tan por la noche necesito un entorno remoto siempre activo ya que mi portaacutetil estaraacute fuera de liacutenea o en el tren conmigo mientras voy y vengo del trabajo Tiene su sentido no utilizar el ordenador como un entorno para la puesta en funcionamiento de aplicaciones

El ODROID-XU4 es un ordenador ideal para un entor-no de implementacioacuten remoto ya que es econoacutemico flexible cuenta con excelentes especificaciones teacutecnicas y puede ejecutar Linux Este artiacuteculo tiene por objetivo explicar coacutemo almacenar coacutedigo de implementacioacuten en tu repositorio de proyectos asiacute como automatizar las implementaciones y ejecuciones

Arch LinuxArch Linux es una distribucioacuten de Linux gratuita de coacutedigo

abierto que fue lanzada en 2002 Estaacute centrada en la elegancia la integridad del coacutedigo el minimalismo y la simplicidad y cuenta con que el usuario haga un esfuerzo en comprender el funcionamiento del sistema Arch Linux utiliza en particular un modelo de revisioacuten continua de modo que todo lo que se necesitas para conseguir el software del sistema maacutes reciente es actualizar el sistema de forma perioacutedica

Arch Linux puede ser algo difiacutecil de asimilar ya que uti-liza herramientas diferentes a las de una distribucioacuten Debian El gestor de paquetes se activa a traveacutes de ldquopacmanrdquo en lugar de ldquoapt-getrdquo y existe un gestor complementario de paquetes muy popular llamado ldquoyaourtrdquo Muchos de los servicios o her-ramientas maacutes comunes no se instalan por defecto

Arch Linux esta hecho principalmente para procesadores x86 pero un proyecto llamado Arch Linux ARM (ALARM) tiene una distribucioacuten ARM de Arch Linux para arquitectu-ras AArch64 ARMv8 y ARMv7 Hardkernel el fabricante de ODROIDs es de hecho un patrocinador del proyecto Arch Linux ARM

HOME DATA CENTER

HOME DATA CEnTERIMPLEMEnTACIOn DEL CODIGO COn ARCHLInuXpor John Skilbeck

Configurar la redDeberaacutes asignarle a tu dispositivo una direccioacuten IP LAN

DHCP reservada y en el mejor de los casos un nombre de host que se propagaraacute a lo largo de tu red por medio del servidor DNS de tu router De esta forma en nuestro entorno de desar-rollolocal podremos utilizar un nombre de host para resolver siempre el entorno de implementacioacutenremoto

Por ejemplo en mi red reservo el 192168249 a la direc-cioacuten MAC de mi ODROID Tambieacuten configuro una entrada DNS que asigna a esa direccioacuten IP ldquoodroidrdquo Utilizar un firm-ware personalizado en el router como Tomato USB o DD-WRT lo hace extremadamente faacutecil ya que esos firmwares convierten tu router en un pequentildeo ordenador Linux con una aplicacioacuten web GUI muy pulida aunque su implementacioacuten estaacute fuera del alcance de este artiacuteculo Si operas con subredes aseguacuterate dirigir el puerto hacia el puerto externo que se asigna al puerto SSH del dispositivo odroid ya que Git se ejecuta a traveacutes de SSH

Configurar el proyectoLoacutegicamente desearaacutes estandarizar el flujo de trabajo de la

implementacioacuten Esto haraacute que el trabajo con proyectos sea

el home data center de John es una auteacutentica obra de arte

ODROID MAGAZINE 20

extremadamente faacutecil y eliminas muchos de los cambios de contexto mental que utilizas cuando trabaja en varios proyec-tos Crearemos una carpeta para alojar todos nuestros archivos relacionados con implementaciones Coloca los archivos eje-cutables en ldquodeploybinrdquo y cualquier archivo cron en ldquodeploytasksrdquo (maacutes informacioacuten sobre esta cuestioacuten maacutes adelante)

Navega hasta el directorio del proyecto en una ventana de Terminal y luego escribe los siguientes comandos

$ mkdir -p deploybin

$ mkdir -p deploytasks

$ cd deploybin ampamp touch run-job ampamp

chmod u+x run-job ampamp cd -

$ cd deploytasks ampamp touch crontab

Tambieacuten puede estandarizar doacutende colocar tu coacutedigo fuente De esta forma le seraacute maacutes faacutecil a otras personas ver coacutemo se or-ganiza tu proyecto y conocer queacute es el coacutedigo fuente y queacute no

$ mkdir src

$ cd src ampamp (place source code here ie python core

py clojure coreclj nodejs appjs)

Simplificar los puntos de entradaIniciar una aplicacioacuten puede resultar algo confuso con todos

los comandos que se pueden ejecutar en diferentes lenguajes Por ejemplo puede usar Java ldquojava -jar [my-jar] jarrdquo o python ldquopython my-apppyrdquo y tu aplicacioacuten tambieacuten puede necesitar varios argumentos Todo esto deberiacutea simplificarse y resumirse en un archivo ldquodeploybinrun-jobrdquo

binsh

set -e

CMD=rdquosrcduckrdquo

exec $CMD $

Crear el archivo cronArch Linux no viene con un cliente o demonio cron por

defecto Instaacutelalo con ldquosudo pacman -Syu cronierdquo Utilizando cron puede ejecutar comandos en intervalos de tiempo espe-cificados haciendo uso de la sintaxis especial de cron Normal-mente se almacena en el archivo crontab del usuario al que puedes acceder con ldquocrontab -erdquo Sin embargo esto es demasi-ado manual y queremos usar coacutedigo como infraestructura Cron tambieacuten tiene algunos subdirectorios muy uacutetiles en ldquoetccronrdquo como ldquoetccrondailyrdquo yrdquoetccronhourly ldquo si co-locamos los archivos aquiacute eacutestos se ejecutaraacuten en los intervalos especificados

Revisa el archivo de ldquodeploytaskscrontabrdquo que colocare-mos en ldquoetccrondrdquo que se crea automaacuteticamente con nuestro script ldquoposttreceiverdquo

variables

SHELL=binbash

PATH=binusrbinusrlocalbinusrsbinusrlo-

calsbin

MAILTO=[your-email-address]gmailcom

cmd=rdquodeploybinrun-jobrdquo

app_dir=rdquohomeskilbjodeployappduckdnsrdquo

jobs

5 skilbjo cd ldquo$app_dirrdquo $cmd gtdevnull

Aquiacute tienes el esquema general de la estructura de un simple proyecto El uacutenico ejecutable del proyecto es un uacutenico script shell ubicado en ldquosrcrdquo

$ tree

READMEmd

deploy

bin

post-receive

run-job

tasks

crontab

src

duck

4 directories 5 files

GitPrimero queremos agregar una URL remota a nuestro

proyecto en nuestro entorno local

$ git remote add odroid sshodroid~deploygit

duckdnsgit

Ten en cuenta que dependiendo de la topologiacutea de tu red es posible que tenga que modificar esta url Si no puedes asignar nombres de host la URL de git se veriacutea asiacute donde 192168249 es la direccioacuten IP LAN de tu dispositivo

$ ssh192168249~deploygitduckdnsgit

Si tienes un usuario en tu entorno ODROID distinto al que tienes en tu entorno de desarrollo la url se veriacutea asiacute donde ldquoskilbjordquo es tu nombre de usuario

$ sshskilbjoodroid~deploygitduckdnsgit

Si tu servidor remoto estaacute en una subred diferente y tienes redireccionados los puertos tu url tendriacutea este aspecto donde

HOME DATA CENTER

ODROID MAGAZINE 21

ldquo2222rdquo es tu puerto externo

$ ssh192168122222~deploygitduckdnsgit

En el directorio principal de tu entorno remoto crea una carpeta llamada ldquo~deployrdquo con dos subcarpetas ldquo~deployapprdquo y ldquo~deploygitrdquo Los subdirectorios de ldquo~deploygitrdquo seraacuten los puntos finales de nuestros desarrollos y con un hook ejecutaraacuten comandos de implementacioacuten en los subdirectorios de ldquo~ deployapprdquo

Primero navega hasta el directorio principal del entorno re-moto y a continuacioacuten escribe los siguientes comandos

$ mkdir -p ~deployapp

$ mkdir -p ~deploygit

$ mkdir -p ~deploygitduckdnsgit

$ mkdir -p ~deployappduckdns

Ahora en ldquo~ deploygitduckdnsgithooksrdquo crea un archi-vo ejecutable llamado ldquopost-receiverdquo que se activaraacute con cada accioacuten hacia el punto final

$ cd ~deployappgitduckdnsgithooks

$ touch post-receive ampamp chmod u+x post-receive

$ vim post-receive

Rellena el ejecutable con lo siguiente en el directorio ldquo~deploygitduckdnsgithooksrdquo del entorno remoto

usrbinenv bash

set -eou pipefail

user=$(whoami)

dir=rdquohome$userdeployapprdquo

app=$(basename $(pwd) | sed -e lsquosgitrsquo)

deploy_dir=rdquo$dir$apprdquo

cron_dir=rdquoetccrondrdquo

GIT_WORK_TREE=rdquo$deploy_dirrdquo git checkout -f

cd ldquo$deploy_dirrdquo

build steps here

case ldquo$userrdquo in

(skilbjo) sudo cp deploytaskscrontab ldquo$cron_

dir$apprdquo

esac

you can also do project-specific build steps in

this section like install

dependencies (ie npm install) compile source

code (ie lein uberjar)

as well as if a long-lived app run commands as

well (ie java -jar my_jarjar)

echo ldquoall donerdquo

exit 0

ImplementacioacutenAhora estamos listos para implementar ya que nuestro en-

torno local estaacute configurado para alcanzar el punto final del servidor de implementacioacuten nuestro entorno remoto estaacute con-figurado para recibir la notificacioacuten y revisar el coacutedigo fuente ejecutar cualquier paso de compilacioacuten y colocar una tarea en el directorio cron del sistema para su lanzamiento Ponto todo en praacutectica con el siguiente comando en el directorio del proyecto del entorno local

$ git push odroid

Ademaacutes para ver coacutemo se ha implementado todo esto en un proyecto de ejemplo visita httpbitly2lthYKW

Pasos finalesSe puede antildeadir al flujo anterior algunas caracteriacutesticas

como son muacuteltiples entornos ya sea con muacuteltiples ODROIDs o con un solo ODROID trataacutendolo como un servidor de ser-vicio Esto se puede hacer con subdirectorios bajo ldquo~deployrdquo como ldquo~deploystagingappmy_apprdquo o ldquo~ deployproduc-tionappmy_apprdquo

Ademaacutes podriacuteas antildeadir un servicio de integracioacuten conti-nua como CircleCI que ejecutariacutea una suite de testeo desde cada desarrollo a GitHub y si tiene eacutexito compila una imagen Docker No podriacuteas entonces tener un archivo en el entorno remoto que verificariacutea una imagen de un repositorio Docker y la ejecutariacutea en un intervalo especificado Esto es lo que hacen muchos de los softwares DevOps distribuidos como Mesos y Kubernetes pero en un entorno mucho maacutes rico que BASH y Linux

Referencias

Artiacuteculo Wikipedia de Arch linux httpbitly2l71ADKWebsite Arch linux ArM httpsarchlinuxarmorgArtiacuteculo que leiacute hace unos tres antildeos y que me inspiroacute para escribir mi propio artiacuteculo httpbitly2m5JAct

HOME DATA CENTER

ODROID MAGAZINE 22

odroid ARCADE BOXLA EXPERIEnCIA PERfECTA COn TuS JuEGOS ARCADE fAvORITOSpor brian Kim charles park y John lee

ARCADE BOX

Los ODROIDs tienen mejor rendimiento que las placas de la competencia especialmente en lo que respecta al renderizado de video lo que significa que

las placas ODROID son ideales para jugar lo cual hacen muchos usuarios de ODROID Ya hay disponibles varios sistemas operativos de plataforma de juegos como Lakka (httpbitly1NO8BBC) y ODROID GameStation Tur-bo (httpbitly1ASFO5O) Para disfrutar auacuten maacutes de nuestras sesiones de juegos creamos nuestra propia consola arcade con simples botones GPIO y joysticks y la llama-mos la ODROID Arcade Box Elegimos un ODROID-XU4 para este proyecto porque es el que tiene mejor rendimiento GPU de todos los dispositivos ODROID actuales En este artiacuteculo vamos a describir como hemos creado la ODROID Arcade Box

Requisitos( Figura 3 ndash )Decidimos hacer la ODROID Arcade Box usando

un MDF (tablero de fibra de densidad media) El Shifter Shield del XU4 tambieacuten es uacutetil para utilizar los pines de expansioacuten del ODROID-XU4 Los Joysticks los botones y los cables eran los componentes de entrada y se utilizoacute

Nuestro primer y simple prototipo

ODROID MAGAZINE 23

panel MDf 12t2eA 600x2202eA 600x752eA 220x75taladroplegadoraDesmontadorcinta meacutetricaNavaja multiusoAlicates de punta largaoDroiD-xU4xU4 Shifter shieldSMpS (fuete Alimentacioacuten)

extendedores hDMi USb ethernetenchufe de alimentacioacuten y Switchbisagras 2eAreceptor de puertacaucho 4eAtornillospulsadores 19eAJoystick 2eAcablesterminales

una SMPS (Fuente de alimentacioacuten conmutada) como fuente de alimentacioacuten Las herramientas y las piezas utilizadas las tienes en esta paacutegina

La ODROID Arcade Box necesita un total de 27 entradas (19 entradas para botones y 8 entra-das para joysticks) Las 24 entradas GPIO digi-tales del ODROID-XU4 no son suficientes para las 27 entradas de modo que creamos dos puertos ADC adicionales para los tres botones que nos fal-taban Los valores de entrada ADC se basan en el voltaje de entrada y los valores de entrada digital y analoacutegica se procesan en el demonio GPIO que se describe a continuacioacuten

Disentildeo y montajeLos paneles de la ODROID Arcade Box deben

ser disentildeados y fabricados para que los botones y joysticks esteacuten bien colocados Elegimos MDF 12T teniendo en cuenta el precio y la durabilidad El dise-ntildeo se puede hacer con cualquier herramienta CAD como Google Sketch o SolidWorks Aunque existen muchas plantillas de disentildeo para los paneles de joypad decidimos elegir un disentildeo arcade estaacutendar japoneacutes

El primer paso del montaje es unir la placa al panel MDF Este paso fue faacutecil aunque nos llevo maacutes tiempo que el resto Despueacutes insertamos los joysticks la toma de corri-ente el interruptor y los botones en el panel MDF superior Los conectores HDMI Ethernet y USB se colocaron en la parte trasera del panel MDF El siguiente paso fue montar cada panel MDF usando un taladro para hacer los agujeros luego con tornillos los sujetamos

El uacuteltimo paso del montaje de la ODROID Arcade Box es conectar por cable los pines de expansioacuten del ODROID-XU4 a los componentes de entrada En este proyecto dise-ntildeamos las entradas GPIO externas tal y como se muestra en la paacutegina 26 Los botones Select y Temp estaacuten conecta-dos a puertos de expansioacuten ADC

Configuracion del softwareDesarrollamos un nuevo demonio GPIO llamado gpio_

keyd (httpbitly2ljOZKg) Este demonio es capaz de asignar entradas GPIO y eventos claves usando uinput y wiringPi una libreriacutea de acceso GPIO basada en pines Estaacute disentildeada para que le sea familiar a quiene ya ha utilizado el sistema de cableado Arduino Aunque la blibreriacutea wiring-Pi upstream soacutelo admite Raspberry Pi Hardkernel ofrece una versioacuten de wiringPi para ODROIDs en su repositorio GitHub (httpbitly1Eq3UpF) El moacutedulo uinput es un moacutedulo del kernel de Linux que gestiona el subsistema de entrada del usuario Se puede utilizar para crear y manejar dispositivos de entrada desde una aplicacioacuten

ARCADE BOX

herramientas compentes y lo que hay justamente debajo

esquema de los puertos de expansioacuten

ODROID MAGAZINE 24

Elegimos ODROID GameStation Turbo (httpbitly1ASFO5O) como plataforma de software para nuestra ODROID Arcade Box que tiene integrado uinput Debes asegurarte de que el archivo de dispositivo uinput existe en el sistema operativo elegido porque algunos no tienen dispositivos uinput

$ ls devuinput

Si tu sistema operativo no tiene un archivo de disposi-tivo devuinput entonces seraacute necesario recompilar e in-stalar un nuevo kernel con la opcioacuten de configuracioacuten IN-PUT_UINPUT habilitada La paacutegina Wiki en httpbitly1YIToBI describe coacutemo compilar e instalar la imagen del kernel a partir del coacutedigo fuente

$ make menuconfig

Device Drivers

-gt Input device support

-gt Generic input layer

-gt Miscellaneous device

-gt User level driver support ltgt

Ten en cuenta que wiringPi debe instalarse antes de in-stalar gpio_keyd En la imagen GameStation de ODROID los comandos sudo deben ejecutarse como root porque la cuenta ldquoodroidrdquo no estaacute designada como usuario sudo

$ git clone httpsgithubcomhardkernelwiringPi

git

$ cd wiringPi

$ sudo build

Descarga el coacutedigo fuente gpio_keyd el cual estaacute dis-ponible en nuestro repositorio GitHub El procedimiento para compilar e instalar gpio_keyd es muy simple

$ git clone httpsgithubcombkrepogpio_keydgit

$ cd gpio_keyd

$ make

$ sudo make install

El script gpio_keyd hace referencia a etcgpio_keydconf como el predeterminado para la informacioacuten de los botones y GPIO El archivo de configuracioacuten fue modi-ficado para las 27 entradas de la ODROID Arcade Box Algunas botones ya se utilizaban en el emulador de juego de modo que tuvimos que cambiar la configuracioacuten del emulador para evitar conflictos entre los botones de en-trada GPIO y el emulador Ten en cuenta que el campo ltGPIO pingt en el archivo de configuracioacuten hace referen-

ARCADE BOX

plano del disentildeo de joypad

la oDroiD Arcade box montada

ODROID MAGAZINE 25

cia al nuacutemero wiringPi no al GPIO y al nuacutemero de pin (httpbitly2lbzPIB)

Ejemplo de configuracioacuten para las 27 entradas etcgpio_keydconf

Digital input ltKey codegt ltGPIO typegt ltGPIO pingt ltActive valuegt User 1KEY_LEFT digital 15 0KEY_RIGHT digital 1 0KEY_UP digital 4 0KEY_DOWN digital 16 0KEY_A digital 2 0KEY_S digital 3 0KEY_D digital 30 0KEY_F digital 21 0KEY_Z digital 8 0KEY_X digital 9 0KEY_C digital 7 0KEY_V digital 0 0 User 2KEY_BACKSLASH digital 12 0KEY_SLASH digital 13 0KEY_SEMICOLON digital 14 0KEY_LEFTBRACE digital 5 0KEY_Y digital 26 0KEY_U digital 27 0KEY_I digital 22 0KEY_O digital 23 0KEY_H digital 6 0KEY_J digital 10 0KEY_K digital 11 0KEY_L digital 31 0

Analog input ltKey codegt ltGPIO typegt ltADC portgt ltADC ac-tive valuegtKEY_B analog 0 0KEY_N analog 0 2045KEY_M analog 1 2045

To run gpio_keyd daemon at every startup is conve-nient for ODROID Arcade Box

etcinitdgpio_keyd binsh BEGIN INIT INFO

ARCADE BOX

Mapeo Gpio externo para los botones y Joysticks

cableado de la oDroiD Arcade box

ODROID MAGAZINE 26

Provides gpio_keyd Required-Start $all Required-Stop Default-Start 2 3 4 5 Default-Stop Short-Description Run usrbingpio_keyd if it ex-ist END INIT INFO

PATH=sbinusrsbinbinusrbin

libinitvarssh

liblsbinit-functions

do_start() if [ -x usrbingpio_keyd ] then usrbingpio_keyd -d ES=$ [ ldquo$VERBOSErdquo = no ] ampamp log_end_msg $ES return $ES fi

case ldquo$1rdquo in start) do_start restart|reload|force-reload) echo ldquoError argument lsquo$1rsquo not supportedrdquo gtamp2 exit 3 stop) killall gpio_keyd exit 0 ) echo ldquoUsage $0 start|stoprdquo gtamp2 exit 3 Esac

$ sudo chmod +x etcinitdgpio_keyd$ sudo update-rcd gpio_keyd defaults$ sudo reboot

En los comandos anteriores el script gpio_keyd se ejecuta como un demonio uti-lizando la opcioacuten ldquo-drdquo El uso de gpio_keyd se puede comprobar con la opcioacuten ldquo-hrdquo Comprue-ba de nuevo las teclas usadas por el juego o el emulador despueacutes fija la configuracioacuten del gpio_ keyd correctamente Es ahora cuando estaacutes listo para jugar y disfrutar de tus juegos con tu nueva ODROID Arcade Box

ARCADE BOX

the King of fighters 98 John vs brian

ODROID MAGAZINE 27

En este artiacuteculo analizaremos las diferentes formas que existen para ob-tener los datos del uso de la red

ConfiguracioacutenLa forma normal de analizar los datos

de traacutefico de la red es mediante el uso de datos a traveacutes de las aplicaciones de configuracioacuten del sistema tal y como se muestra en la figura 1

El uso de datos muestra la cantidad total de traacutefico de datos entrante y sa-liente que ha sido utilizada por una apli-cacioacuten Si seleccionas la aplicacioacuten veraacute una pantalla como la que aparece en la Figura 2 que muestra informacioacuten detal-lada sobre el uso de la aplicacioacuten tanto en primer plano como de fondo

La informacioacuten que se muestra den-tro de la aplicacioacuten de Configuracioacuten se almacena en data systemnetstats que requiere acceso root Al eliminar todo lo que hay dentro de esta carpeta se resta-

Como desarrolladores queremos que nuestras aplicaciones sean eficientes y a menudo nos gus-

tariacutea saber cuaacutento ancho de banda de red estaacute utilizando nuestra aplicacioacuten Esto es muy uacutetil por varias razones

bull Para monitorizar y asegurarnos de que la aplicacioacuten es realmente la nuestra y no una aplicacioacuten que ha sido pirateada y publi-cada con diferentes nombres en Play Store

bull Para asegurarnos de que no es-tamos cogiendo ancho de banda innecesario del plan de datos del usuario

bull Para comprobar que el disposi-tivo que estamos usando no estaacute accediendo a Internet sin nuestro consentimiento

blecen las estadiacutesticas de red mostradas en esta aplicacioacuten

Estadiacutesticas de la redLa aplicacioacuten de configuracioacuten nos

puede dar una informacioacuten general so-bre las estadiacutesticas de la red de datos que es un buen comienzo pero a veces necesitamos un anaacutelisis maacutes detallado que puede hacerse a traveacutes del coman-do dumpsys Android cuenta con una poderosa herramienta llamada dumpsys que nos permite obtener una instan-taacutenea o volcado del sistema que pu-ede incluir informacioacuten sobre la red la memoria y otros componentes Lee la documentacioacuten de Android en httpbitly2kK9dep para obtener maacutes infor-macioacuten del sistema Para conseguir maacutes informacioacuten relacionada con la red nos interesa el comando

$ dumpsys netstats detail

La Figura 3 muestra un pantallazo de lo que puedes ver desde una tablet Nexus 7 que ejecuta Lollipop 511

Hay algunas cuestiones importantes para entender las estadiacutesticas

bull Las estadiacutesticas UID muestran el desglose de las aplicaciones de primer plano y de fondo

bull Uid muestra el ID de usuario de la aplicacioacuten que se puede utili-zar para relacionar eacutesta con la in-

DESARROLLO AnDROID AnALIzAnDO EL uSO DE RED DE LAS APLICACIOnESpor Nanik tolaram

DESARROLLO ANDROID

figura 1 - Uso de datos en la configuracioacuten

figura 2 - Desglose del uso de datos de la app

ODROID MAGAZINE 28

$ dumpsys package detail

Este comando te proporcionaraacute una larga lista de informacioacuten sobre los pa-quetes que estaacuten instalados en tu dis-positivo Para las estadiacutesticas de red nos interesa la seccioacuten que se muestra en la Figura 5

La seccioacuten resaltada muestra el userId que se relaciona con el uid que se mues-tra en las estadiacutesticas de red Al relacio-nar este nuacutemero sabemos el nombre del paquete de la aplicacioacuten sobre el que es-tamos leyendo las estadiacutesticas de red

Aplicacioacuten de ejemplo

La aplicacioacuten de ejemplo de este artiacute-culo se puede descargar desde httpbitly2m8WenA que muestra coacutemo etiqu-etar la conexioacuten de red desde distintas

secciones de la aplicacioacuten lo cual puede ayudar a analizar el volumen de traacutefico de datos de la aplicacioacuten La Figura 6 muestra un ejemplo de coacutemo lo vemos si utilizamos Android Device Monitor (dentro de Studio diriacutegete a Tools -gt Android -gt Android Device Monitor)

Tal y como se puede ver en el graacutefico la simple aplicacioacuten tiene 3 conexiones dife-rentes y cada una de ellas estaacute accediendo a un sitio web diferente Al etiquetarlas con

formacioacuten del paquete (que ver-emos en la seccioacuten de detalles del paquete dumpsys) con el objeto de conocer queacute aplicacioacuten utiliza estas estadiacutesticas de red

bull Las etiquetas son uacutetiles si de-sea ver la cantidad de datos que utiliza cada conexioacuten de tu apli-cacioacuten Puedes ver un ejemplo de esto en la Figura 4 que muestra que el uid 10007 tiene las siguien-tes etiquetas 0x30000401 0x30003201 0x30002804 0x10000401 y 0x30000407 Es-tas etiquetas ayudan al desarrol-lador a saber cuaacutentos datos uti-liza cada parte de la aplicacioacuten Estas estadiacutesticas de red en par-ticular estaacuten vinculada al paquete Google Framework que forma parte de Google Play Store

En el siguiente apartado veremos coacutemo escribir una aplicacioacuten etiquetando el hilo que hace la conexioacuten de red para determi-nar la cantidad de datos que se utilizan

Estadiacutesticas de paquetes

En la seccioacuten anterior analizamos el uid que aparece al ejecutar el comando dumpsys netstats Ahora necesitamos sa-ber queacute uid corresponde a la aplicacioacuten en el dispositivo y esto se hace mediante el siguiente comando

DESARROLLO ANDROID

figura 3 ndash estadiacutesticas de red con Dumpsys

figura 4 - estadiacutesticas de etiquetas UiD

figura 5 - Detalles del paquete dumpsys

figura 6 - etiquetas de red

coacutedigos diferentes podemos ver la cantidad de traacutefico que consume cada conexioacuten y esto nos ayudaraacute a ver si nuestra aplicacioacuten utiliza el ancho de banda de un modo eficiente

El coacutedigo del siguiente fragmento muestra el uso de la API TrafficStats interna Esta etiqueta API muestra el subproceso que utiliza actualmente un socket con un identificador y todo el traacute-fico que pasa por la misma conexioacuten se grabaraacute junto Asiacute es como la aplicacioacuten es capaz de agrupar las 3 conexiones diferentes Internamente Android utili-za el moacutedulo xt_qtaguid del kernel para realizar este tipo de etiquetado Tienes disponible maacutes informacioacuten en httpbitly2kU8KXB

public void getUsingNormalURLC

onnection(String urlText int

threadTag)

throws IOException

URL url = null

TrafficStats

setThreadStatsTag(threadTag)

HttpURLConnection urlConnec-

tion = getConnection(url)

try

finally

TrafficStatsclearThread-

StatsTag()

ODROID MAGAZINE 29

Disgustado te subes a tu 4x4 de dominacioacuten del mun-do un vehiacuteculo que desde fuera parece maacutes bien un viejo camioacuten de granja pero por dentro se parece maacutes

al sistema de control de un transbordador espacial porque el conductor del restaurante oriental que realiza las entrega a do-micilio estaacute enfermo Ahora tienes que ir a recoger tu propia comida ldquoQueacute rudimentariordquo piensas cuando sales de tu garaje secreto Justamente cuando vas a parar el vehiacuteculo en un stop oyes un fuerte ruido Sales y te diriges raacutepidamente a la parte posterior del 4x4 donde observas un cubo de basura Te tiras de los pelos y piensas ldquoiexclEsos basureros Neanderthales dejaron otra vez el cubo en mediordquo Ahora te toca recoger los restos de tu cena y la basura de otros

Conforme te vas alejando para hacer tus recados empiezas a pensar en coacutemo evitar este inconveniente en el futuro Varias ideas te vienen a la mente

Un sistema lidar para escanear en 3D el entorno en tiempo real y alarmas sonoras cuando sea necesarioUn brazo ciberneacutetico colocado en la parte posterior del 4x4 que procese video para detectar objetos agarrarlos y moverlosUna simple camara trasera

Empiezas a considerar la viabilidad de cada una

Muy bueno pero demasiado complicado y costosoAuacuten mejor y un proyecto propio de un cientiacutefico loco pero demasi-ado complicado y costosoya tengo dos iexclpero estaba demasiado preocupado en mis pensa-mientos para prestarles atencioacuten

Lo que necesitas es algo simple sin complicaciones y barato que haga sonar una alarma para alertarte incluso cuando estar absorto en tus pensamientos ldquoAhardquo Recuerdas haber visto un nuevo producto en ameriDroid que puede hacer precisamente esto Se trata de un microcontrolador conectado al USB que soporta hasta 6 sensores ultrasoacutenicos con simples comandos en serie (httpbitly2l26ptV) ldquoiexclPerfectordquo Piensas

Regresas a tu laboratorio subterraacuteneo con el pollo Kung Pao en la mano te apresurar a encender tus monitores entras en el sitio web ameriDroid y pides un kit ldquoUSB Ultrasonic Ranging Sensorrdquo con 6 sensores y carcasas

Vas sintiendo una sensacioacuten de alivio a medida que regresas a los 12 proyectos en lo que ya estabas trabajando a la espera de que pasen un par de diacuteas hasta que llegue tu nuevo pedido Mientras te comes tu Kung Pao dibujas un diagrama de coacutemo quieres colocar los sensores en la parte posterior de tu vehiacuteculo

Un par de diacuteas maacutes tarde el kit llega Inmediatamente em-piezas a montar el kit y los sensores en la parte posterior de tu 4x4 teniendo cuidado de usar sellador de silicona para pro-teger los sensores de la lluvia aguanieve y nieve que puedas encontrar durante tus aventuras para dominar el mundo

A continuacioacuten consultas las instrucciones proporcionadas por ameriDroid con el kit sobre coacutemo controlar y leer los sen-sores desde tu fiel ODROID-C2 y VU7 que montaste en el salpicadero para este propoacutesito

Conectando el cable USBEl cable USB suministrado debe conectarse al microcon-

trolador (la pequentildea placa de circuito con filas de pines que sobresalen) El microcontrolador tiene una fila de 4 o 6 pines

DETECTAR LA PRESEnCIACROnICAS DE un CIEnTIfICO LOCOpor bo lechnowsky

SENSOR ULTRASONICO

ODROID MAGAZINE 30

en un extremo Si tiene 6 pines ceacutentrate en los 4 pines centrales y sigue estas instrucciones

Negro - conectar a GNDrojo - conectar a VccVerde - conectar a rxi

blanco - conectar a txD

Conectando los sensoresultrasoacutenicos

En cada sensor ultrasoacutenico hay cuatro pines marcados Vcc Trig Echo Gnd Para el primer sensor ultrasoacutenico conecta el pin 2 del microcontrolador al pin ldquoTrigrdquo del sensor ultrasoacutenico Conecta el pin 3 del microcontrolador al pin ldquoEchordquo del sensor Conecte el pin ldquoVccrdquo del sensor a DC 5V (el pin ldquoVCCrdquo del microcontrolador suministra 5V) y el pin ldquoGndrdquo del sensor a una conexioacuten a tierra como por ejemplo los pines ldquoGNDrdquo del microcontrolador

Si conectas un segundo sensor de ultrasonidos conecta ldquoTrigrdquo al pin 4 y ldquoEchordquo al pin 5 Continuacutea conectando los siguientes pines a los sensores hasta los pines 12 y 13 si al final optas por conectar los seis sensores ultrasonidos

Conexioacuten del softwareUtilizas un programa terminal como PuTTY Screen o tu

lenguaje de script o programacioacuten favorito para conectarte al puerto serie que aparece cuando te conectas el sensor ultrasoacuteni-co Esto variaraacute en funcioacuten del sistema operativo que utilizas para conectarte al microcontrolador En Windows consultar el ldquoAdministrador de dispositivosrdquo es la forma maacutes comuacuten de averiguarlo En Linux ldquodmesgrdquo o ldquolsusbrdquo son las formas de de-tectar a queacute puerto estaacute conectado Deberiacuteas ver algo denomi-nado ldquoPL2303rdquo que es la conexioacuten del microcontrolador Si recibes informacioacuten basura en tu terminal cuando te conectes aseguacuterate de que los ajustes en serie son 9600 baudios 8 bits ninguno (paridad) y 1 bit de parada Aquiacute tienes una lista de los comandos que puede aceptar el microcontrolador

bull debug on Activa la retroalimentacioacuten detallada Estaacute deshabilitada por defecto nos proporcionaraacute aclaracio-nes sobre los errores de entrada

bull debug off desactiva la retroalimentacioacuten detalladabull init x y activa un HC-SR04 en los pines especificados

X es trigger Y es echo Estos deben ser pines digitales El dispositivo 0 estaacute preestablecido en los pines 2 y 3 de modo que no es necesario especificar estos pines La seleccioacuten de pines no vaacutelidos devolveraacute un signo de ex-clamacioacuten ()

bull ping enviacutea una sola lectura del HCSR04 previamente utilizado Si no se ha utilizado todaviacutea se usaraacute el dis-positivo 0 Si al comando le sigue un espacio y un nuacutemero entre 0-100 (exclusivo) se realizaraacute ese nuacutemero de lecturas emitiendo primero el promedio de esas lec-

SENSOR ULTRASONICO

turas despueacutes el nuacutemero de lecturas fallidas (que no cuentan para el promedio) y luego los valores miacutenimo y maacuteximo de lectura separados por espacios En cual-quier caso si una sentildeal se desconecta automaacuteticamente devolveraacute -1

bull start Hace ping constantemente a todos los dispositivos conectados en secuencia Debido a que los dispositivos se utilizan uno a uno el flujo de datos de este comando seraacute maacutes raacutepido si los dispositivos miden distancias cor-tas Si este comando le sigue un espacio y un nuacutemero mayor que 0 la placa esperaraacute estos milisegundos entre la lectura del uacuteltimo dispositivo y la lectura del primer dispositivo El resultado de este comando seraacute la lectura de cada dispositivo (con un uacutenico espacio despueacutes de cada uno) y una vuelta tras el uacuteltimo dispositivo

bull stop detiene la operacioacuten ldquostartrdquo soacutelo es efectivo tras haber iniciado ldquostartrdquo

bull mode emite el modo de medicioacuten del flujo M para meacutetrico (miliacutemetros) I para Imperial (deacutecimas de pul-gada) o R para Raw (la longitud de pulso en microse-gundos devuelta por el HC-SR04) El valor predeter-minado es M

bull timeout emite el tiempo de espera actual para lecturas de la sentildeal El tiempo de espera es la mayor cantidad de microsegundos que la placa esperaraacute antes de declarar que el HC-SR04 ha realizado una mala lectura lo cual no es necesariamente lo mismo que el pulso maacutes largo que la placa aceptaraacute del HC-SR04 Cuando la placa mide el pulso del HC-SR04 primero espera a que el HC-SR04 comience a enviar un pulso Este tiempo cuenta para el tiempo de espera Cuando este comando le sigue un espacio y un nuacutemero el tiempo de espera se ajusta a ese nuacutemero El valor predeterminado es 1 segundo (1000000 microsegundos)

bull ver emite informacioacuten de versioacuten y creacuteditos

Si cualquier comando (o ninguacuten comando) estaacute precedido por un uacutenico diacutegito de 0-5 (inclusive) seguido de un espacio el dispositivo que corresponde a ese diacutegito se seleccionaraacute para ser usado con el siguiente comando ldquopingrdquo Cada vez que la placa esteacute lista para un comando emitiraacute ldquogtrdquo para la serie La uacutenica excepcioacuten estaacute tras el comando ldquostartrdquo que no solicitaraacute entrada hasta que sea reconocido ldquostoprdquo

ODROID MAGAZINE 31

iquestCoacutemo empezaste con los ordenadoresCuando empeceacute mi negocio tuve que decidir queacute plat-

aforma de hardware iba a utilizar para la recogida de datos del traacutefico Simplemente para que no pienses mal de miacute mis caacutemaras de traacutefico no son las que se usan para multar por exceso de velocidad o algo asiacute Mi sistema estaba desti-nado suavizar el flujo de traacutefico fijando los controles oacutepti-mos de las sentildeales de traacutefico Anteriormente usaba un PC industrial para ejecutar mi software de reconocimiento de imaacutegenes Ahora uso la familia de dispositivos ODROID para esta cuestioacuten

iquestQueacute te atrajo de la plataforma ODROID En 2012 useacute Google para buscar una plataforma que

fuera muy compacta y al mismo tiempo potente para que cubriera mis necesidades que resultoacute ser la placa

Por favor haacuteblanos un poco sobre tiSoy ingeniero de electroacutenica y software en Rusia desde

hace 47 antildeos Naciacute en Siberia y tras terminar la escuela me mudeacute a Moscuacute para estudiar en la universidad Ser estudi-ante en el Instituto de Aviacioacuten de Moscuacute (MAI) fue una experiencia increiacuteble probablemente la mejor de mi vida A principios de los 90 llegoacute a Rusia la era de los microordena-dores soliacutea jugar a un juego de saltos en una CPU z80 y el i486 Tras finalizar mis estudios universitarios y de posgrado me convertiacute en ingeniero Trabajeacute en unos cuantos puestos de trabajo para diferentes empresas y finalmente decidiacute em-prender mi propio negocio En 2006 puse en marcha una iniciativa para crear sistemas de recuento del traacutefico de au-tomoacuteviles Estoy casado y tengo una hija de 21 antildeos llamada Lena que trabaja como enfermera Mi esposa Nadezhda es disentildeadora de vestuario de produccioacuten pero ahora trabaja como disentildeadora web Ella es aficionada a la fotografiacutea digi-tal y le encanta su caacutemara reacuteflex digital

COnOCIEnDO un ODROIDIAnvIACHESLAv ALEKSEEveditado por rob roy (robroy)

CONOCIENDO UN ODROIDIAN

Viacheslav disfruta tocando la guitarra y escuchando muacutesica

1995 en el campus MAi probando uno de los primeros equipos Vr comerciales del mundo que funcionaba a 640x480 a 30fps Utiliz-aba un sensor magneacutetico en la nuca para la posicioacuten de la cabeza la mejor broma que se podiacutea gastar a alguien era colocar un imaacuten cerca de la espalda y sacudirlo iexcllos gritos estaban garantizados cuando el mundo en 3D daba vueltas sin cesar

ODROID MAGAZINE 32

ODROID-X2 Con sus cuatro nuacutecleos funcionando a 17 GHz calculaba con facilidad los algoritmos de reconteo del traacutefico de automoacuteviles Maacutes tarde cambieacute al U3 y el XU4

iquestCuaacutel es tu ODROID favorito y por queacuteDe momento mi favorito es el XU4 Mi sistema estaacute

basado en el tratamiento de fotogramas de video en tiempo real por lo que el bus USB 30 del XU4 es bastante bueno para una caacutemara con una interfaz de captura de viacutedeo Para mi sistema es muy importante tener una buena conexioacuten entre la caacutemara de viacutedeo y la CPU Probablemente tendreacute que echar un vistazo a las interfaces de nivel inferior como MIPI CSI-2 que por desgracia estaacuten ausente en el XU4 Recientemente he estado aprendiendo como usar la caacute-mara oCam GS BW La caacutemara es buena en siacute misma pero para un uso industrial al aire libre tengo que implementar un software de control de exposicioacuten automaacutetica y posible-mente de control de apertura de la lente que todaviacutea estaacute en estudio

MEET AN ODROIDIAN

Una vieja joya el mini ordenador Nixdorf

An old gem the Nixdorf mini computer

CONOCIENDO UN ODROIDIAN

iquestQueacute aficiones e intereses tienes aparte de los ordenadoresDisfruto conduciendo y leyendo sobre coches y viendo

los campeonatos de carreras de F1 Tambieacuten me gusta via-jar pescar escuchar muacutesica y tocar la guitarra Tengo un gato siberiano llamado Leia y soy fan de Star Wars

iquestQueacute consejo le dariacuteas a alguien que quiere aprender maacutes sobre la programacioacuten

Hacer software es algo increiacuteble y miacutestico Es una fusioacuten de arte y tecnologiacutea Nada te inspira maacutes que tu aplicacioacuten cuando empieza a cobrar vida Sin embargo siempre estaacute ahiacute el otro lado de la Fuerza Estar listo para instruirte inc-esantemente El desarrollo de software es una de las activi-dades que cambia maacutes raacutepido Si tienes pensado dejar de hacer software en uno o dos antildeos puede dejar de aprender ahora El conocimiento se volveraacute anticuado en un par de antildeos maacutes o menos Para estar en lo maacutes alto siempre tienes que correr Es similar a la cancioacutenrdquoRun like Hellrdquo de Pink Floyd Si estaacutes listo para vivir de esta forma seguro que tendraacutes eacutexito

ODROID MAGAZINE 33

Page 9: Estación ARCADE · gias de marketing, administración de medios sociales y producción multimedia impresa, web, vídeo y cine. Ges-tionando múltiples cuentas con agencias y productores

figura 3 - Alerta de correo electroacutenico de que alguien estaacute en la puerta

ltserverstarttls()gt

Configuramos y entramos en modo TLS TLS significa Transport Layer Se-curity (Seguridad de la capa de trans-porte) de modo que cualquier comando SMTP que siga este modo seraacute cifrado

ltserverlogin(lsquoltFrom

EmailgtrsquorsquoltFrom passwordgtrsquo)gt

Es hora de entrar en tu cuenta de Gmail de modo que necesitamos las credenciales correctas

ltserversendmail(msg[lsquoFromrsquo]

emaillist msgas_string())gt

Usando el anterior comando final-mente enviamos el correo electroacutenico Procura evitar el spoofing e introduce aquiacute tu direccioacuten de correo electroacutenico real El paraacutemetro emaillist es el que

hemos definido antes y el uacuteltimo paraacute-metro (msaas_string ()) el mensaje en forma de cadena con el archivo adjunto que es en este caso la foto El resultado lo puedes apreciar en la Figura 3

Testeando y ejecu-tando el coacutedigo

Desde el terminal (CTRL-T) eje-cutamos odroidbellpy con privilegios sudo

$ sudo python odroidbellpy

En este momento el dispositivo IoT se pone en modo de espera y apa-

ltmsg[lsquoReply-torsquo] = lsquoxyzgmail

comrsquogt

Correo electroacutenico del destinatario

ltmsgpreamble = lsquoMultipart

massagenrsquogt

El atributo preamble contiene el tex-to principal extra-blindado de los docu-mentos MIME por eso lo incluimos aquiacute

ltpart = MIMEText(ldquoHello The

doorbell is ringing A photo of

the person ringing the doorbell

has been attachedrdquo)gt

El cuerpo del mensaje

ltmsgattach(part)gt

ltpart =

MIMEApplication(open(str(sys

argv[2])rdquorbrdquo)read())gt

ltpartadd_header(lsquoContent-

Dispositionrsquo lsquoattachmentrsquo

filename=str(sysargv[2]))gt

Adjuntamos la foto al mensaje

ltserver = smtplibSMTP(ldquosmtp

gmailcom587rdquo)gt

Especificamos el servidor smtp que queremos usar y el puerto que utiliza el servidor de Gmail con el puerto 587 Tambieacuten puede usar el puerto 465 aunque no es mala idea comprobar con Google el puerto correcto por si acaso ha cambiado

ltserverehlo()gt

Especificamos el servidor smtp que queremos usar y el puerto que utiliza el servidor de Gmail con el puerto 587 Tambieacuten puede usar el puerto 465 aunque no es mala idea comprobar con Google el puerto correcto por si acaso ha cambiado

sponsable del archivo adjunto MIME MIME representa las Extensiones Mul-tiuso para el Correo en Internet Es una forma de identificar los archivos en In-ternet seguacuten su naturaleza y formato

ltimport smtplibgt

ltfrom smtplib import SMTPgt

Esta es la baacutesica y nativa libreriacutea en Python para enviar correos electroacutenicos de modo que no hay necesidad de insta-lar libreriacuteas externas smtplib Desde esta libreriacutea importamos la funcioacuten SMTP

ltimport sysgt

Importamos el moacutedulo de funcio-nes y paraacutemetros especiacuteficas del sistema puesto que necesitaremos el script ltargvgt de este moacutedulo (ver a continuacioacuten)

ltrecipients = [lsquoltYourEmailgtrsquo]gt

Tu direccioacuten de correo electroacutenico ya que tuacute eres el destinatario de las fotos

ltemaillist = [elemstrip()

split(lsquorsquo) for elem in recipi-

ents]gt

Hacemos una lista de correo elec-troacutenico en la que separaremos y quita-remos los caracteres pertinentes de cada elemento de la lista de destinatarios

ltmsg = MIMEMultipart()gt

Definimos el variable message (msg) como una Extensioacuten Multiuso para el Correo en Internet llamando a la fun-cioacuten MIMEMultipart

ltmsg[lsquoSubjectrsquo] = str(sys

argv[1])gt

El asunto del nuestro mensaje

ltmsg[lsquoFromrsquo] = lsquoltFrom Emailgtrsquogt

Tu direccioacuten de correo electroacutenico

TIMBRE

ODROID MAGAZINE 9

import wiringpi2 as odroid

import time

import os

import glob

import sys

odroidwiringPiSetup()

Button = 3

odroidpinMode(Button0)

odroidpullUpDnControl(Button1)

loop

print(ldquoProgram Runningrdquo)

while Trueloops forever till

keyboard interupt (ctr + C)

if odroiddigitalRead(Button)

== False when button not

pressed

sysstderrwrite(ldquordquo)

timesleep(1)

else

print(ldquoButton Pressedrdquo)

------| photo amp Bell

|------

Get FileName

now = timestrftime(ldquoDatem-

d-yTimeH-M-Srdquo)

Make command to run

odroidC2sh

command = ldquobash odroidC2sh ldquo

+ str(now)

-- odroidC2sh is an Shell

script that

-- is responsible for tak-

ing the photo and

-- making the Doorbell

Noise

--- We insert the ldquoNowrdquo ar-

gument so the python

--- script knows what the

file name of the

--- picture will be so it

can pass it on into the

--- email script (so it

knows what file to email

figura 4 ndash el script python del timbre en ejecucioacuten

run command

ossystem(command)

diagnostics

print(ldquoFilenamerdquo now)

----| Email |----

print(ldquoEmailrdquo)email

emailcommand = lsquosudo python

IoTOdroidpy ldquoSomeone is ringing

the doorbellrdquorsquo + lsquo ldquophotosrsquo +

now + lsquojpgrdquorsquo

ossystem(emailcommand) run-

ning the Email script with

-- the subject as ldquoSomeone

is ringing the doorebellrdquo and the

filename

-- We made before at the

-Photo amp Bell- section

-- End Diagnostic Info

print(ldquoDone Processrdquo)

-space out for next ldquoPress

of Buttonrdquo

print(ldquordquo)

print(ldquordquo)

OdroidC2sh

binsh

cd photos

echo ldquoTaking the Photordquo

now=$1 Now is the filename time

stamp

take pic

fswebcam -d devvideo0 $nowjpg

echo ldquoPic Takenrdquo

echordquordquo

ring Bell

echo ldquoRinging Bellrdquo

echo ldquordquo

echo ldquordquo

cd

mpv ringtonemp3

IoTOdroidpy

from emailmimetext import MIM-

EText

from emailmimeapplication im-

port MIMEApplication

rece en pantalla el mensaje ldquoProgram is runningrdquo Al mismo tiempo aparecen puntos ldquordquo en la pantalla uno a uno indicando al usuario que el dispositivo estaacute funcionando con normalidad Cu-ando alguien pulsa el botoacuten (timbre) el script OdroidC2sh se ejecuta con una doble finalidad Primero toma una in-

stantaacutenea de la persona que hace sonar el timbre En segundo lugar enviacutea el correo electroacutenico a traveacutes de IoTOdroidpy a la cuenta de Gmail del propietario con la fecha y hora de registro de la foto que se adjunta Despueacutes vuelve al modo de espera y el timbre IoT suena

Notas finalesPor supuesto este proyecto se podriacutea

mejorar de muchas formas Por ejemplo se podriacutea antildeadir un LED en el timbre IOT que indicara su correcto funciona-miento Un dispositivo maacutes complejo similar a eacuteste podriacutea usarse como timbre comercial con la ayuda de un moacutedulo placa releacute Tampoco seriacutea complicado incluir la posibilidad de que grabase una pequentildea grabacioacuten de viacutedeo junto con las fotos haciendo que el timbre ldquointeli-genterdquo sea auacuten maacutes inteligente Ademaacutes como dice el viejo refraacuten ldquoiexclla perfeccioacuten es el eterno enemigo de lo funcionalrdquo

Coacutedigo deltimbre IoT

Aquiacute tienes una copia de todo el coacute-digo Al final de este artiacuteculo tienes un enlace a la paacutegina github que tambieacuten contiene el coacutedigo

Odroidbellpy

TIMBRE

ODROID MAGAZINE 10

from emailmimemultipart import

MIMEMultipart

from smtplib import SMTP

import smtplib

import sys

recipients = [lsquoabcgmailcomrsquo]

emaillist = [elemstrip()

split(lsquorsquo) for elem in recipi-

ents]

msg = MIMEMultipart()

msg[lsquoSubjectrsquo] = str(sysargv[1])

msg[lsquoFromrsquo] = lsquoxyzgmailcomrsquo

msg[lsquoReply-torsquo] = lsquoabcgmailcomrsquo

msgpreamble = lsquoMultipart

massagenrsquo

part = MIMEText(ldquoHello There is

someone ringing your doorbell A

picture of this person has been

atachedrdquo)

msgattach(part)

part =

MIMEApplication(open(str(sys

argv[2])rdquorbrdquo)read())

partadd_header(lsquoContent-

Dispositionrsquo lsquoattachmentrsquo

filename=str(sysargv[2]))

msgattach(part)

server = smtplibSMTP(ldquosmtp

gmailcom587rdquo)

serverehlo()

serverstarttls()

serverlogin(lsquoxyzgmail

comrsquorsquoyourpassword herersquo)

serversendmail(msg[lsquoFromrsquo]

emaillist msgas_string())

El coacutedigo del proyecto estaacute disponible en httpbitly2jMAdMY usando el siguiente comando

$ git clone

httpsgithubcommiltiadisme-

lissas

IoTOdroidC2Doorbellgit

TIMBRE

A finales de 2016 los usuarios de Cyanogenmod se horrorizaron cuando Cyanogen anuncioacute la

cancelacioacuten de sus servicios dejando a todos los usuarios que dependiacutean de Cyanogenmod sin soporte Sin em-bargo en poco tiempo llegariacutea una so-lucioacuten en forma de LineageOS Si eres un usuario del ODROID-XU3 XU4 es el momento perfecto para colaborar con la versioacuten de LineageOS en los foros ODROID

Caracteriacutesticas- Android 711 Nougat lineageoS 141- Kernel 3109- openGl eS 112030 (aceleracioacuten por GpU)- opencl 11 ep (aceleracioacuten por GpU)- funcioacuten multiusuario habilitada (hasta 8 usuarios)- ethernet integrado y soporte para ether-net Gigabit USb 30 - Soporte para rtl8188cUS rtl8191SU y USb Wireless ralinkt- Soporte bluetooth USb (ble A2dp Sink)- Soporte para dongle GpS USb- Anclaje a red USb - punto de acceso Wi-fi portaacutetil- Soporte DAc USb nativo para Android

LInEAGEOS-141 ODROID-Xu3Xu4OLvIDATE DE CyAnOGEn EL fuTuRO ESTA AquIpor voodik editado por bruno Doiche

LINEAGEOS

- Soporte para Webcam USb UVc- Soporte hDMi-cec- Selinux

Problemas conocidosEn este momento soacutelo admite moacutedu-

los Bluetooth de bajo consumo v40 (BLE) Consulta el Moacutedulo Bluetooth 2

Coacutemo instalarloEn primer lugar necesitas preparar

tu emmcsd con imaacutegenes especiales de auto-instalacioacuten

La puedes encontrar aquiacutehttpophmdrjrnetvoodik5422

ODROID-XU3AndroidCM-141-ATV

Alpha-01_110217

Graba la imagen en tu eMMCsd a traveacutes de Win32DiskImager y arranca el dispositivo Tendraacute que esperar paci-entemente durante el primer arranque ya que el proceso de actualizacioacuten puede llegar a tardar hasta 20 minutos

Coacutedigo fuente Kernel

$ git clone httpsgithubcom

voodikandroid_kernel_hardkernel

_odroidxu3 -b cm-140_5422

ODROID MAGAZINE 11

SNES 3DO y Sega Genesis El juego teniacutea diferentes escenarios para jugar la selva la nieve y el desierto

Open Fodder ofreciacutea 23 misiones que se dividiacutean en varias fases En total suponiacutea superar 72 niveles para llevar

Este mes me gustariacutea hablar de un juego llamado Open Fodder se trata de un remake del claacutesico

juego de Amiga Cannon Fodder desar-rollado por Sensible Software en 1993 Utiliza los datos del juego original Can-non Fodder para conseguir una experi-encia muy similar al juego original en tu ODROID

Muchos de los populares juegos de Linux de hoy en diacutea como Stratagus y Freeciv son en realidad remakes de claacutesicos juegos de DOS de mediados y finales de los 90 y Open Fodder no es diferente El remake de Cannon Fodder es un juego disparos accioacuten y estrategia donde controlas a un pequentildeo grupo de soldados que avanza a traveacutes de varias docenas de niveles para matar a los sol-dados enemigos destruir tanques echar abajo edificios y derrotar a tus enemigos El juego fue lanzado por primera vez para Amiga en 1993 y fue exportado por sus desarrolladores a MS-DOS Atari Jaguar

a tu escuadroacuten a la victoria Cuando se lanzoacute el juego fue muy elogiado por varias revistas de juego Amiga con pun-tuaciones que llevaban al 95 por ciento y fue considerado como uno de los mejo-res juegos lanzados en 1993 En general siguioacute siendo uno de los mejores juegos jamaacutes creado para la plataforma Amiga durante sus 11 antildeos de vida

Desde un punto de vista maacutes poliacutetico el juego lleva impliacutecito un intenso men-saje sobre la guerra en siacute misma puesto que juegas y llevar a tus soldados a una muerte inevitable Cada misioacuten se inicia

JuEGOS LInuXOPEn fODDERpor tobias Schaaf (meveric)

JUEGOS LINUX

figura 1 - el logotipo de cannon fodder en el cual estaacute basado open fodder

figuras 2 3 y 4 - los niveles de selva desierto y nieve en open fodder

figuras 5 y 6 - A medida que avanzas en el juego tu larga liacutenea de reclutas se con-vierte gradualmente en cruces alineadas como en un cementerio

ODROID MAGAZINE 12

nas segundas partes ademaacutes de algunas misiones de bonificacioacuten Cannon Fod-der 2 salioacute un antildeo maacutes tarde pero fue maacutes bien un ldquodisco de datosrdquo con ex-pansiones que una secuela ya que en su mayor parte presentaba maacutes misiones en lugar de nuevas caracteriacutesticas Tambieacuten estaba el X-Mas de Amiga que ofreciacutea algunas misiones diferentes basadas en el juego Cannon Fodder

Ejecutando Open Fodder

Open Fodder es un remake del motor del juego Cannon Fodder que lleva el juego a los sistemas operativos modernos Al igual que otras migraciones del motor del juego (como OpenTTD) puede uti-lizar los datos del juego original con esta versioacuten del motor para ejecutar el juego en tus dispositivos modernos Esta mi-gracioacuten tambieacuten cuenta con una versioacuten exportada para los dispositivos ARM lo que significa que podemos ejecutarlo igualmente en nuestros ODROIDs

Todaviacutea estaacute en desarrollo pero ya funciona bastante bien Como de cos-tumbre se puede instalar desde mi repo-sitorio y puesto que soacutelo requiere SDL2 y SDL2 Mixer como dependencias prin-cipales deberiacutea funcionar en Debian y

con un nuevo grupo de reclutas que se alinean esperando a unirse al combate Los soldados desechables (de ahiacute el nom-bre de cannon fodder Carne de Cantildeon) poco a poco se convierten en cruces alin-eadas dando forma a un cementerio mil-itar a medida que vas completando cada misioacuten formaacutendose maacutes y maacutes filas con-forme vas enterrando a tus predecesores Sin embargo los desarrolladores le di-eron un cierto toque de humor ya que los primeros soldados de tu escuadroacuten (y por tanto los casi seguro que moriraacuten) llevan de hecho los nombres de las seis personas que componiacutean el equipo de desarrollo del juego

Si nos fijamos bien el juego incor-poraba algunos detalles bastante intere-santes Por un lado tiene su propia can-cioacuten ldquo War never been so much funrdquo que suena durante la intro del juego iexclUno de los desarrolladores del juego Jon Hare compuso la muacutesica junto con el compositor Richard Joseph Si teniacuteas el Amiga CD32 tambieacuten recordaraacutes una pista adicional que incluiacutea un video en el cual los desarrolladores se disparaban entre siacute con armas de juguete (httpbitly2l67bFy) iexclSin duda se divirtieron bastante desarrollando este juego

Cannon Fodder tambieacuten tuvo algu-

JUEGOS LINUX

Ubuntu por igual las puedes encontrar en mi lista principal de paquetes para armhf y jessiemain para arm64

Se puede instalar con este comando en un dispositivo ODROID que ejecute Debian suponiendo que ya tengas con-figurados mis repositorios o esteacutes usando una de mis imaacutegenes de Debian (httpbitly13v98ly)

$ apt-get install

openfodder-odroid

He alterado ligeramente el juego para que siempre se ejecute en modo pantalla completa aunque si lo deseas puedes cambiar al modo de ventana simple-mente pulsando F11 cuando tenga el juego activado

Convirtiendo los datos del juego

Por siacute sola mi versioacuten de Open Fod-der viene con el especial Amiga X-Mas ademaacutes de varios niveles demo dis-ponibles de forma gratuita Si quieres jugar el juego real tendraacutes que importar los datos desde un CD Cannon Fodder

Si estaacute usando un ODROID para ju-gar al Open Fodder puedes localizar las carpetas de los datos del juego en la car-peta $HOMEopenfodderData Por ejemplo homeodroidopenfodderDataDos_CD es una de esas carpetas de datos del juego Existen varias carpe-tas de datos del juego que puedes usar dependiendo de la versioacuten que tengas del juego Cannon Fodder

Dos_CDAunque el juego es compatible con

muchas y diferentes fuentes del juego actualmente soacutelo Dos_CD parece ser una versioacuten de Open Fodder ldquototal-mente compatiblerdquo con muy pocos er-rores y problemas El resto de fuentes del juego pueden tener problemas

Aquiacute tienes un consejo raacutepido Aunque se llama Dos_CD cogeraacute cu-alquier versioacuten de DOS de Cannon Fodder que puedas encontrar Si tienes

figura 7 - Sensible Software - los desarrolladores de cannon fodder

ODROID MAGAZINE 13

WHDLoad en un Amiga (o WinUAE) para extraer los archivos del juego y co-piarlos en la carpeta DataAmigardquo No lo he probado pero si tienes la ldquoCannon Fodder Collectionrdquo de Amiga CD32 no oficial puedes copiar el contenido de FodderNew en esta carpeta lo que tendraacute como resultado niveles completamente diferentes Puede considerarse como una versioacuten maacutes compleja del juego aunque a la vez maacutes divertida Por lo tanto bien poner los archivos originales de Amiga aquiacute o bien los archivos FodderNew de la ldquoCannon Fodder Collectionrdquo

Dos2_CDDos2_CD es en realidad la carpeta

de la versioacuten DOS de Cannon Fodder 2 pero tambieacuten funciona con la versioacuten GoG Desafortunadamente tiene algu-nos problemas el maacutes grave es que el juego no tiene ninguacuten tipo de sonido o muacutesica Aparte de esto todo parece fun-cionar correctamente pero desconozco coacutemo reaccionaraacute en niveles posteriores La carpeta Data tambieacuten incluye las car-petas WAV Plus AmigaFormat_XMAS y Custom En WAV se almacenan los efectos de sonido por defecto para to-dos los juegos (Cannon Fodder) Plus es una demo del nuacutemero 31 la revista Amiga Power y AmigaFormat_XMAS es el Amiga Format Christmas Special Tambieacuten hay una carpeta Custom que te permite jugar otros juegos y mapas pero necesitan la versioacuten (CD) de DOS o de lo contrario no apareceraacuten

Notas finalesOpen Fodder es un buen proyecto

que te permite ejecutar este increiacuteble juego en sistemas modernos Realmente me gusta y estoy deseando ver coacutemo pro-gresa Espero que las versiones de Amiga y Cannon Fodder 2 sean pronto total-mente compatibles Tal vez incluso poda-mos ver mejoras graacuteficas con el tiempo Me gustariacutea ver graacuteficos maacutes modernos ya que el juego es bastante antiguo y los graacuteficos no son los maacutes idoneos para res-oluciones 1080p

la versioacuten de disco de Cannon Fodder simplemente copia el CF_ENGDAT en la carpeta Dos_CD La versioacuten original de CD DOS teniacutea un archivo llamado cf_cddat Cambiar el nombre a CF_ENGDAT y copiarlo a la carpeta Dos_CD Si tienes la versioacuten GoG del juego soacutelo tiene que copiar CF_ENG DAT a la carpeta Dos_CD iexclEsta es una forma raacutepida y legal de conseguir el juego si estaacutes interesado

Aseguacuterate de que el nombre del ar-chivo este en mayuacutescula ya que el juego tiene en cuenta esta cuestioacuten Intenta que coincida todo para asegurarte de que las cosas funcionen sin problemas

Amiga_CDAmiga CD32 tambieacuten contaba con

una versioacuten de este juego Esta es la ver-sioacuten que incluye el video al que hemos hecho referencia anteriormente En el CD de Amiga CD32 hay una carpeta llamada Fodder El contenido de esta carpeta debe copiarse a la carpeta Ami-ga_CD Puedes extraer la segunda pista del CD y almacenarla como Track2flv en la misma carpeta con la finalidad de tener el archivo de video

Me topeacute con algunos problemas cu-ando haciacutea esto y descubriacute nuevamente que el juego buscaba muchos archivos en mayuacutesculas asiacute que utiliceacute el siguiente comando para copiar todos los archivos y tenerlos tambieacuten en mayuacutesculas en la carpeta Amiga_CD$ for files in `ls` do cp $files

`echo $files | tr lsquo[lower]rsquo

lsquo[upper]rsquo` done

Asiacute funcionaba bien pero teniacutea algu-nos fallos Por ejemplo la animacioacuten del helicoacuteptero al inicio de cada misioacuten no apareciacutea y el cursor cuando se guarda un archivo se distorsionaba Aparte de esto no he visto problemas importantes en la versioacuten Amiga CD32

AmigaLa Informacioacuten de desarrollador de

Open Fodder dice ldquoUsar el instalador

JUEGOS LINUXJUEGOS ANDROID

CAuSALITy un JuEGO DE ROMPE-CABEzAS COn PARA-DOJAS DE vIAJES En EL TIEMPO por bruno Doiche

Configura tuacute mismo los entornos extrantildeos e insoacutelitos y

ayuda a un grupo de astronautas varados a encon-trar una ruta hacia un lugar seguro Cada nivel al que te enfrentas representa un nuevo reto donde necesitas llevar a tu astronauta a una salida que coincida con su color Los maacutergenes de tiempo son cortos aunque es muy divertido Aunque formas parte de tan soacutelo una fraccioacuten de tiempo de la vida de tu personaje iexclten cuidado pasaraacutes un montoacuten de tiempo enganchado a este juego

httpsplaygooglecomstoreappsdetailsid=comlojugamesandroidCausality

el entorno 3D isomeacutetrico es magniacute-fico a menudo no superaba el nivel porque los graacuteficos me cautivaban

ODROID MAGAZINE 14

tePi necesitan estar conectados a otros distintos en el ODROID-C2 porque parece haber un conflicto La interfaz UART ocupa estos pines y el estado por defecto del ODROID (1=high en Pin 8) no es lo que espera la RemotePi (GPIO debe entrar en el valor por defecto 0=low para cortar la energiacutea tras el apagado) Pero puesto que necesitas utilizar cables de todos modos para conectar la Remot-ePi esto no supondraacute ninguacuten problema ya que simplemente puedes reconectar los cables a otros pines GPIO

Como evitamos el circuito de ali-mentacioacuten del ODROID encendieacutendo-lo a traveacutes de GPIO tambieacuten pasamos por alto la proteccioacuten ante subidas de tensioacuten 2526A del dispositivo pero no te preocupes La RemotePi tambieacuten tiene proteccioacuten ante subidas de tensioacuten que deberiacutea coincidir con el mismo val-or que en el caso de la RemotePi board para la Raspberry Pi 3 Sin embargo la RemotePi para la Raspberry Pi 2 es de soacutelo 2A Esto estaacute bien porque el valor es menor a los 26A del ODROID de modo el polyfuse de la RemotePi se ac-tivariacutea antes si conectas demasiados dis-

La RemotePi board (httpbitly2l8JcWU) que convierte cu-alquier mando a distancia en un

interruptor de encendido para tu orde-nador de placa reducida puede ser com-patible con el ODROIDC2 si sigues esta guiacutea Si utilizas tu dispositivo como centro multimedia esta placa te propor-cionara un receptor de infrarrojos y un circuito de alimentacioacuten asiacute como un botoacuten de encendido Puedes encender y apagar tu ODROID completamente a traveacutes de una sentildeal infrarrojos (IR) y simplemente presionar el botoacuten de en-cendido para apagarlo y reiniciarlo con seguridad La placa RemotePi es respon-sable del modo espera que absorbe una miacutenima energiacutea mientras el ODROID estaacute completamente apagado Por uacutel-timo la placa alimenta tu dispositivo a traveacutes de GPIO lo cual requiere un cable microUSB para conectarlo a la Re-motePi en lugar de utilizar un adaptador de corriente normal

Configuracioacuten de hardware

Puesto que la RemotePi estaba pen-sada originalmente para la Raspberry Pi 2 necesitaraacutes utilizar cables adiciona-les en lugar de colocarla justamente en cima del C2 para evitar interferir con el disipador de calor asiacute que debes re-cablear algunos pines Es necesario utili-zar cables con el diaacutemetro adecuado para los pines de 5V y puesta a tierra ya que la corriente podriacutea estar entre los 2A y 26A dependiendo de cuaacutentos dispositi-vos USB conectes a tu dispositivo

Los pines GPIO 8 y 10 de la Remo-

positivos no alimentados de forma exter-na que no es una buena idea en un SBC al fin al cabo No obstante debido a esta diferencia de amperaje una RemotePi para la Raspberry Pi 3 seriacutea la mejor op-cioacuten para este proyecto

Como resultado del nuevo cableado el firmware de RemotePi ya no se puede configurar de forma normal aunque nunca he usado esta funcioacuten Si fuera necesario configurar o actualizar el firm-ware necesitaraacutes volver a conectar los pines 8 y 10 de la RemotePi a los pines 8 y 10 del ODROID durante la actu-alizacioacuten del firmware y luego deshacer los cambios una vez que la actualizacioacuten haya finalizado Otra posibilidad es simplemente conectar una Raspberry Pi para actualizar el firmware Esto suena a un montoacuten de problemas pero en re-alidad simplemente es extender la con-exioacuten del cabezal y cambiar una liacutenea en el script principal y dos liacuteneas en otro script opcional si haces uso de ello

Re-cableando laconexioacuten GPIO

Dado que la RemotePi estaacute disentildeada

REMOTEPI BOARD PARA EL ODROID-C2por inifity85

REMOTEPI

figura 1 - remotepi board

ODROID MAGAZINE 15

ergiacutea completamenteIrswitchsh (solo cambia el script

original de MSL Digital de GPIOpin1 = 14 a GPIOpin1 = 225)

binbash

prevent restarting XBMC at

shutdown This is only used for

OpenElec before V5

LOCKDIR=rdquovarlockrdquo

LOCKFILE=rdquoxbmcdisabledrdquo

this is the GPIO pin receiving

the shut-down signal

Raspberry Pi pin8 GPIOpin1=14

Odroid-C2 pin26 GPIOpin1=225

GPIOpin1=225

functions

add_omit_pids()

omit_pids=rdquo$omit_pids -o $1rdquo

safe_shutdown ()

for OpenElec before V5

touch ldquo$LOCKDIR$LOCKFILErdquo

for OpenElec V5 and later

systemctl stop kodi

add_omit_pids $(pidof connmand)

add_omit_pids $(pidof dbus-dae-

mon)

killall5 -15 $omit_pids

for seq in `seq 1 10` do

usleep 500000

clear gt devtty1

killall5 -18 $omit_pids || break

done

sync

umount -a gtdevnull 2gtamp1

poweroff -f

echo ldquo$GPIOpin1rdquo gt sysclass

gpioexport

echo ldquoinrdquo gt sysclassgpio

gpio$GPIOpin1direction

while true do

sleep 1

power=$(cat sysclassgpio

gpio$GPIOpin1value)

if [ $power = 0 ] then

echo ldquooutrdquo gt sysclassgpio

gpio$GPIOpin1direction

echo ldquo1rdquo gt sysclassgpio

una carcasa personalizada de modo que el receptor integrado podriacutea estar oculto y no ser uacutetil En ese caso puedes desac-tivar el IR del ODROID en favor del re-ceptor externo GPIO-IR en la RemotePi y conectar el pin 12 Tienes disponible maacutes informacioacuten sobre el cambio al receptor GPIOIR en LibreELEC en httpbitly2lpDl27

Scripts de apagado para LibreELEC

Los dos scripts tratados a continu-acioacuten pueden descargarse desde la paacutegina de soporte de MSL Digital Solutions en httpbitly2kMxyVG En esta paacutegina tambieacuten encontraras una guiacutea para utili-zar estos scripts en otros sistemas opera-tivos como Volumio y RuneAudio

El script irswitchsh se usa para el apagado seguro a traveacutes de sistema In-frarrojos Tras pulsar el correspondiente botoacuten el sistema se apagaraacute de forma se-gura luego RemotePi esperaraacute a que el GPIO225 alcance el estado 0 (low) que aparece tras el cierre exitoso del sistema Finalmente cortaraacute la energiacutea

El script shutdownsh se usa para el apagado seguro a traveacutes de la interfaz del programa o script Despueacutes de navegar hasta el botoacuten de apagado en la GUI el sistema se apagaraacute de forma segura luego RemotePi esperaraacute a que el GPIO225 alcance el estado 0 (low) que apareceraacute tras apagarse el sistema de forma adec-uada y segura Finalmente cortaraacute la en-

originalmente para una Raspberry Pi desgraciadamente no es soacutelo enchufar y usar Necesitaraacutes volver a cablear dos pines usando los cables de todos los pines tal y como se muestra en la Figura 2 Re-cablea el pin 8 de la RemotePi al pin 26 del ODROID-C2 y el pin 10 de la RemotePi al pin 7 del ODROID-C2

Si no quieres utilizar el receptor IR de la RemotePi para el mando a distan-cia de LibreELEC puedes dejar desco-nectado el pin 12 La placa continuaraacute encendieacutendose y apagaacutendose a traveacutes del comando de control remoto IR pero el control de la GUI de LibreELEC seraacute asumido por el receptor de infrarrojos integrado en el ODROID Sin embargo si has comprado una RemotePi con un receptor IR y un LED externo es posible que hayas decidido colocarla dentro de

REMOTEPI

figura 3 - la remotepi ha sido recableada y montada en una carcasa personalizada

figura 2 - re-cableado Gpio

ODROID MAGAZINE 16

Centro Multimedia por ejemplo Esos comandos de apagado se equiparaacuten a eventos internos similar a cuando nave-gas por el menuacute de apagado de Kodi Sin utilizar este segundo script el sistema se cerraraacute con seguridad pero la placa Re-motePi no recibiriacutea ninguna indicacioacuten para monitorizar el GPIO225 de modo que no cortariacutea la energiacutea tras apagarse el sistema correctamente

Usando el receptor IR de la RemotePi

Si deseas utilizar el receptor IR de la RemotePi en lugar del receptor IR ODROID integrado tendraacutes que des-activar el sistema IR integrado y activar el receptor IR GPIO Para hacer esto en Ubuntu puede consultar el artiacuteculo de la Wiki de Hardkernel en httpbitly2l8KrWg Para Libre-ELEC echa un vistazo a mi mini-guiacutea en httpbitly2lLKj2A Para preguntas comentari-os o sugerencias visita el hilo original en httpbitly2mgFGKk

gpio$GPIOpin1value

sleep 3

safe_shutdown

fi

done

Shutdownsh (solo cambia GPIOpin =15 a GPIOpin =249 y GPIOpin1 =14 a GPIOpin1 =225)

binbash

if [ ldquo$1rdquo = ldquorebootrdquo ] then

Raspberry Pi pin10 GPIOpin=15

Odroid-C2 pin7 GPIOpin=249

GPIOpin=249

Raspberry Pi pin8 GPIOpin1=14

Odroid-C2 pin26 GPIOpin1=225

GPIOpin1=225

echo ldquo$GPIOpinrdquo gt sysclass

gpioexport

execute shutdown sequence on

pin

echo ldquooutrdquo gt sysclassgpio

gpio$GPIOpindirection

echo ldquo1rdquo gt sysclassgpio

gpio$GPIOpinvalue

usleep 125000

echo ldquo0rdquo gt sysclassgpio

gpio$GPIOpinvalue

usleep 200000

echo ldquo1rdquo gt sysclassgpio

gpio$GPIOpinvalue

usleep 400000

echo ldquo0rdquo gt sysclassgpio

gpio$GPIOpinvalue

set GPIO 14 high to feedback

shutdown to RemotePi Board

because the irswitchsh has

already been terminated

echo ldquo$GPIOpin1rdquo gt sysclass

gpioexport

echo ldquooutrdquo gt sysclassgpio

gpio$GPIOpin1direction

echo ldquo1rdquo gt sysclassgpio

gpio$GPIOpin1value

usleep 4000000

fi

El script shutdownsh es uacutetil si a vec-es usas las aplicaciones remotas Android Yatse o Kore o hotkeys para apagar tu

REMOTEPI

ODROID Talk Subreddit

httpwwwredditcomrodroid

ODROID Magazine

estaacute en Reddit

ODROID MAGAZINE 17

El HiFi Shield 2 (39$ httpbitly2lHSlZJ) es un Con-vertidor Digital a Analoacutegico de Alta definicioacuten (DAC) para el ODROID-C2 y el ODROID-C1+ Se trata de

una placa de sonido especial para el ODROID-C2 y C1 + que estaacute optimizada para mejorar la calidad de reproduccioacuten del sonido Ofrece un sonido muy bien equilibrado consistente intenso amplio y muy bien dimensionado por niveles Hemos analizado la calidad de audio de la salida HiFi Shield 2 DAC con un equipo estaacutendar de la industria del sonido llamado Au-dio Precision Audio Precision es un analizador de audio de alto rendimiento optimizado para la produccioacuten de audio digital

Usando el chip DAC PCM5242 de uacuteltima generacioacuten de Texas Instrument conocido como Burr-Brown el HiFi Shield 2 soporta formatos de audio de 16 24 y 32 bits con una ra-tio THD+N miacutenima (0002) y una dinaacutemica ideal (114dB +) ademaacutes de sorprendentes tasas de muestreo de 384 kHz La interfaz dedicada SPDIF soporta una definicioacuten de hasta 192kHz24bit a traveacutes de una salida oacuteptica (Toslink)

Si hacemos uso del puerto de expansioacuten I2S en el C2C1+ no es necesario ocupar un puerto USB permitiendo al usu-ario seleccionar el sistema de reproduccioacuten de audio que desee como Volumio y Debian (DietPi) para reproducir sonido HiFi

HIFI SHIELD 2

HIfI SHIELD 2EL MEJOR SOnIDO quE PODRAS COnSEGuIR En AnDROIDeditado por rob roy (robroy)

oDroiD-c2 y hifi Shield 2 Audio pb +J

primer plano de la placa con anotaciones

Distribucioacuten de los 7 pines i2S del c2c1+

la salida de audio es estaacutendar la salida de color rojo corresponde al canal de audio iz-quierdo y la salida de color blanco correspon-de al canal de audio derecho

ODROID MAGAZINE 18

Detalles

La guiacutea de configuracioacuten de UbuntuLinux para ODROID-C2 estaacute disponible en httpbitly2brrGdG y para ODROID-C1+ en httpbitly2lI7AC7 El sistema operativo oficial Volumio 2 se puede descargar desde httpbitly2kOJNAV y la imagen DietPi basada en Debian se encuentra en httpbitly2ls45yM Puede ver los esquemas en httpbitly2mnukV4

Diagrama por bloques del hifi Shield2

Caracteriacutesticasbull El control de volumen a traveacutes de la interfaz

i2c es una gran caracteriacutestica para mantener una buena calidad del sonido con varios voluacutemenes de salida de audio

bull Los puertos de salida incluyen terminales esteacute-reo rcA chapados en oro

bull La fuente de alimentacioacuten tiene habilitado un regulador de interferencias de ruido ultra-bajo lo cual reduce el ruido de la fuente de alimentacioacuten y aumenta en gran medida el ratio sentildealruido

bull La interfaz I2S permite la descodificacioacuten di-recta de la entrada digital a la salida analoacutegica utili-zando la sincronizacioacuten del reloj maestro

bull La superficie de la PCB estaacute chapada en oro so-bre 2 onzas de cobre lo cual garantiza la continui-dad de la sentildeal y reduce la reflexioacuten y deflacioacuten de la sentildeal

bull Dispone de almohadillas soldadas a la salida de audio balanceada (sentildeal diferencial)

bull La interfaz SPDIF dedicada es nueva admite una definicioacuten de hasta 192khz24bit a traveacutes de una nueva salida oacuteptica (toslink)

bull Este HiFi shield no es compatible con Android y hardkernel no tiene planes para hacerlo compatible y asiacute poder habilitar el controlador i2S en el Kernel y el hAl de Android

El Manual de usuario del ODROID-XU4 disponible en httpbitly1U9Q8yg ha sido revisado hace poco para incluir algunos de los perifeacutericos maacutes recientes como

la Expansion Board SmartPower2 y oCam Puesto que ahora Hardkernel tambieacuten ofrece Ubuntu 1604 todos los ejemplos de coacutedigo se han actualizado para que sean compatibles con el nuevo sistema operativo Si tiene comentarios preguntas o sugerencias visita el hilo de los foros ODROID en httpbitly1RykBrT

MAnuAL Xu4ACTuALIzADOREvISADO PARA uBunTu 1604 y LOS PERIfERICOS MAS RECIEnTESeditado por rob roy (robroy)

MANUAL XU4

el manual del oDroiD-xU4 incluye informacioacuten detallada de los diferentes sistemas operativos software y perifeacutericos disponibles para el oDroiD-xU4

ODROID MAGAZINE 19

El DevOps es complicado Los grandes proyectos de soft-ware como Mesos y Kubernetes desarrollan equipos como los que se encuentran en la mayoriacutea de las empre-

sas y organizaciones tecnoloacutegicas como CoreOS con la finali-dad de ayudar a los desarrolladores a poner sus aplicaciones en funcionamiento Sin embargo iquestcuaacutel seriacutea una buena solucioacuten para un desarrollador en solitario o una pequentildea red domeacutesti-ca iquestCoacutemo podemos usar el coacutedigo a nivel de infraestructura

Uso un portaacutetil Macintosh OSX para desarrollo pero para las aplicaciones de larga duracioacuten o aplicaciones que se ejecu-tan por la noche necesito un entorno remoto siempre activo ya que mi portaacutetil estaraacute fuera de liacutenea o en el tren conmigo mientras voy y vengo del trabajo Tiene su sentido no utilizar el ordenador como un entorno para la puesta en funcionamiento de aplicaciones

El ODROID-XU4 es un ordenador ideal para un entor-no de implementacioacuten remoto ya que es econoacutemico flexible cuenta con excelentes especificaciones teacutecnicas y puede ejecutar Linux Este artiacuteculo tiene por objetivo explicar coacutemo almacenar coacutedigo de implementacioacuten en tu repositorio de proyectos asiacute como automatizar las implementaciones y ejecuciones

Arch LinuxArch Linux es una distribucioacuten de Linux gratuita de coacutedigo

abierto que fue lanzada en 2002 Estaacute centrada en la elegancia la integridad del coacutedigo el minimalismo y la simplicidad y cuenta con que el usuario haga un esfuerzo en comprender el funcionamiento del sistema Arch Linux utiliza en particular un modelo de revisioacuten continua de modo que todo lo que se necesitas para conseguir el software del sistema maacutes reciente es actualizar el sistema de forma perioacutedica

Arch Linux puede ser algo difiacutecil de asimilar ya que uti-liza herramientas diferentes a las de una distribucioacuten Debian El gestor de paquetes se activa a traveacutes de ldquopacmanrdquo en lugar de ldquoapt-getrdquo y existe un gestor complementario de paquetes muy popular llamado ldquoyaourtrdquo Muchos de los servicios o her-ramientas maacutes comunes no se instalan por defecto

Arch Linux esta hecho principalmente para procesadores x86 pero un proyecto llamado Arch Linux ARM (ALARM) tiene una distribucioacuten ARM de Arch Linux para arquitectu-ras AArch64 ARMv8 y ARMv7 Hardkernel el fabricante de ODROIDs es de hecho un patrocinador del proyecto Arch Linux ARM

HOME DATA CENTER

HOME DATA CEnTERIMPLEMEnTACIOn DEL CODIGO COn ARCHLInuXpor John Skilbeck

Configurar la redDeberaacutes asignarle a tu dispositivo una direccioacuten IP LAN

DHCP reservada y en el mejor de los casos un nombre de host que se propagaraacute a lo largo de tu red por medio del servidor DNS de tu router De esta forma en nuestro entorno de desar-rollolocal podremos utilizar un nombre de host para resolver siempre el entorno de implementacioacutenremoto

Por ejemplo en mi red reservo el 192168249 a la direc-cioacuten MAC de mi ODROID Tambieacuten configuro una entrada DNS que asigna a esa direccioacuten IP ldquoodroidrdquo Utilizar un firm-ware personalizado en el router como Tomato USB o DD-WRT lo hace extremadamente faacutecil ya que esos firmwares convierten tu router en un pequentildeo ordenador Linux con una aplicacioacuten web GUI muy pulida aunque su implementacioacuten estaacute fuera del alcance de este artiacuteculo Si operas con subredes aseguacuterate dirigir el puerto hacia el puerto externo que se asigna al puerto SSH del dispositivo odroid ya que Git se ejecuta a traveacutes de SSH

Configurar el proyectoLoacutegicamente desearaacutes estandarizar el flujo de trabajo de la

implementacioacuten Esto haraacute que el trabajo con proyectos sea

el home data center de John es una auteacutentica obra de arte

ODROID MAGAZINE 20

extremadamente faacutecil y eliminas muchos de los cambios de contexto mental que utilizas cuando trabaja en varios proyec-tos Crearemos una carpeta para alojar todos nuestros archivos relacionados con implementaciones Coloca los archivos eje-cutables en ldquodeploybinrdquo y cualquier archivo cron en ldquodeploytasksrdquo (maacutes informacioacuten sobre esta cuestioacuten maacutes adelante)

Navega hasta el directorio del proyecto en una ventana de Terminal y luego escribe los siguientes comandos

$ mkdir -p deploybin

$ mkdir -p deploytasks

$ cd deploybin ampamp touch run-job ampamp

chmod u+x run-job ampamp cd -

$ cd deploytasks ampamp touch crontab

Tambieacuten puede estandarizar doacutende colocar tu coacutedigo fuente De esta forma le seraacute maacutes faacutecil a otras personas ver coacutemo se or-ganiza tu proyecto y conocer queacute es el coacutedigo fuente y queacute no

$ mkdir src

$ cd src ampamp (place source code here ie python core

py clojure coreclj nodejs appjs)

Simplificar los puntos de entradaIniciar una aplicacioacuten puede resultar algo confuso con todos

los comandos que se pueden ejecutar en diferentes lenguajes Por ejemplo puede usar Java ldquojava -jar [my-jar] jarrdquo o python ldquopython my-apppyrdquo y tu aplicacioacuten tambieacuten puede necesitar varios argumentos Todo esto deberiacutea simplificarse y resumirse en un archivo ldquodeploybinrun-jobrdquo

binsh

set -e

CMD=rdquosrcduckrdquo

exec $CMD $

Crear el archivo cronArch Linux no viene con un cliente o demonio cron por

defecto Instaacutelalo con ldquosudo pacman -Syu cronierdquo Utilizando cron puede ejecutar comandos en intervalos de tiempo espe-cificados haciendo uso de la sintaxis especial de cron Normal-mente se almacena en el archivo crontab del usuario al que puedes acceder con ldquocrontab -erdquo Sin embargo esto es demasi-ado manual y queremos usar coacutedigo como infraestructura Cron tambieacuten tiene algunos subdirectorios muy uacutetiles en ldquoetccronrdquo como ldquoetccrondailyrdquo yrdquoetccronhourly ldquo si co-locamos los archivos aquiacute eacutestos se ejecutaraacuten en los intervalos especificados

Revisa el archivo de ldquodeploytaskscrontabrdquo que colocare-mos en ldquoetccrondrdquo que se crea automaacuteticamente con nuestro script ldquoposttreceiverdquo

variables

SHELL=binbash

PATH=binusrbinusrlocalbinusrsbinusrlo-

calsbin

MAILTO=[your-email-address]gmailcom

cmd=rdquodeploybinrun-jobrdquo

app_dir=rdquohomeskilbjodeployappduckdnsrdquo

jobs

5 skilbjo cd ldquo$app_dirrdquo $cmd gtdevnull

Aquiacute tienes el esquema general de la estructura de un simple proyecto El uacutenico ejecutable del proyecto es un uacutenico script shell ubicado en ldquosrcrdquo

$ tree

READMEmd

deploy

bin

post-receive

run-job

tasks

crontab

src

duck

4 directories 5 files

GitPrimero queremos agregar una URL remota a nuestro

proyecto en nuestro entorno local

$ git remote add odroid sshodroid~deploygit

duckdnsgit

Ten en cuenta que dependiendo de la topologiacutea de tu red es posible que tenga que modificar esta url Si no puedes asignar nombres de host la URL de git se veriacutea asiacute donde 192168249 es la direccioacuten IP LAN de tu dispositivo

$ ssh192168249~deploygitduckdnsgit

Si tienes un usuario en tu entorno ODROID distinto al que tienes en tu entorno de desarrollo la url se veriacutea asiacute donde ldquoskilbjordquo es tu nombre de usuario

$ sshskilbjoodroid~deploygitduckdnsgit

Si tu servidor remoto estaacute en una subred diferente y tienes redireccionados los puertos tu url tendriacutea este aspecto donde

HOME DATA CENTER

ODROID MAGAZINE 21

ldquo2222rdquo es tu puerto externo

$ ssh192168122222~deploygitduckdnsgit

En el directorio principal de tu entorno remoto crea una carpeta llamada ldquo~deployrdquo con dos subcarpetas ldquo~deployapprdquo y ldquo~deploygitrdquo Los subdirectorios de ldquo~deploygitrdquo seraacuten los puntos finales de nuestros desarrollos y con un hook ejecutaraacuten comandos de implementacioacuten en los subdirectorios de ldquo~ deployapprdquo

Primero navega hasta el directorio principal del entorno re-moto y a continuacioacuten escribe los siguientes comandos

$ mkdir -p ~deployapp

$ mkdir -p ~deploygit

$ mkdir -p ~deploygitduckdnsgit

$ mkdir -p ~deployappduckdns

Ahora en ldquo~ deploygitduckdnsgithooksrdquo crea un archi-vo ejecutable llamado ldquopost-receiverdquo que se activaraacute con cada accioacuten hacia el punto final

$ cd ~deployappgitduckdnsgithooks

$ touch post-receive ampamp chmod u+x post-receive

$ vim post-receive

Rellena el ejecutable con lo siguiente en el directorio ldquo~deploygitduckdnsgithooksrdquo del entorno remoto

usrbinenv bash

set -eou pipefail

user=$(whoami)

dir=rdquohome$userdeployapprdquo

app=$(basename $(pwd) | sed -e lsquosgitrsquo)

deploy_dir=rdquo$dir$apprdquo

cron_dir=rdquoetccrondrdquo

GIT_WORK_TREE=rdquo$deploy_dirrdquo git checkout -f

cd ldquo$deploy_dirrdquo

build steps here

case ldquo$userrdquo in

(skilbjo) sudo cp deploytaskscrontab ldquo$cron_

dir$apprdquo

esac

you can also do project-specific build steps in

this section like install

dependencies (ie npm install) compile source

code (ie lein uberjar)

as well as if a long-lived app run commands as

well (ie java -jar my_jarjar)

echo ldquoall donerdquo

exit 0

ImplementacioacutenAhora estamos listos para implementar ya que nuestro en-

torno local estaacute configurado para alcanzar el punto final del servidor de implementacioacuten nuestro entorno remoto estaacute con-figurado para recibir la notificacioacuten y revisar el coacutedigo fuente ejecutar cualquier paso de compilacioacuten y colocar una tarea en el directorio cron del sistema para su lanzamiento Ponto todo en praacutectica con el siguiente comando en el directorio del proyecto del entorno local

$ git push odroid

Ademaacutes para ver coacutemo se ha implementado todo esto en un proyecto de ejemplo visita httpbitly2lthYKW

Pasos finalesSe puede antildeadir al flujo anterior algunas caracteriacutesticas

como son muacuteltiples entornos ya sea con muacuteltiples ODROIDs o con un solo ODROID trataacutendolo como un servidor de ser-vicio Esto se puede hacer con subdirectorios bajo ldquo~deployrdquo como ldquo~deploystagingappmy_apprdquo o ldquo~ deployproduc-tionappmy_apprdquo

Ademaacutes podriacuteas antildeadir un servicio de integracioacuten conti-nua como CircleCI que ejecutariacutea una suite de testeo desde cada desarrollo a GitHub y si tiene eacutexito compila una imagen Docker No podriacuteas entonces tener un archivo en el entorno remoto que verificariacutea una imagen de un repositorio Docker y la ejecutariacutea en un intervalo especificado Esto es lo que hacen muchos de los softwares DevOps distribuidos como Mesos y Kubernetes pero en un entorno mucho maacutes rico que BASH y Linux

Referencias

Artiacuteculo Wikipedia de Arch linux httpbitly2l71ADKWebsite Arch linux ArM httpsarchlinuxarmorgArtiacuteculo que leiacute hace unos tres antildeos y que me inspiroacute para escribir mi propio artiacuteculo httpbitly2m5JAct

HOME DATA CENTER

ODROID MAGAZINE 22

odroid ARCADE BOXLA EXPERIEnCIA PERfECTA COn TuS JuEGOS ARCADE fAvORITOSpor brian Kim charles park y John lee

ARCADE BOX

Los ODROIDs tienen mejor rendimiento que las placas de la competencia especialmente en lo que respecta al renderizado de video lo que significa que

las placas ODROID son ideales para jugar lo cual hacen muchos usuarios de ODROID Ya hay disponibles varios sistemas operativos de plataforma de juegos como Lakka (httpbitly1NO8BBC) y ODROID GameStation Tur-bo (httpbitly1ASFO5O) Para disfrutar auacuten maacutes de nuestras sesiones de juegos creamos nuestra propia consola arcade con simples botones GPIO y joysticks y la llama-mos la ODROID Arcade Box Elegimos un ODROID-XU4 para este proyecto porque es el que tiene mejor rendimiento GPU de todos los dispositivos ODROID actuales En este artiacuteculo vamos a describir como hemos creado la ODROID Arcade Box

Requisitos( Figura 3 ndash )Decidimos hacer la ODROID Arcade Box usando

un MDF (tablero de fibra de densidad media) El Shifter Shield del XU4 tambieacuten es uacutetil para utilizar los pines de expansioacuten del ODROID-XU4 Los Joysticks los botones y los cables eran los componentes de entrada y se utilizoacute

Nuestro primer y simple prototipo

ODROID MAGAZINE 23

panel MDf 12t2eA 600x2202eA 600x752eA 220x75taladroplegadoraDesmontadorcinta meacutetricaNavaja multiusoAlicates de punta largaoDroiD-xU4xU4 Shifter shieldSMpS (fuete Alimentacioacuten)

extendedores hDMi USb ethernetenchufe de alimentacioacuten y Switchbisagras 2eAreceptor de puertacaucho 4eAtornillospulsadores 19eAJoystick 2eAcablesterminales

una SMPS (Fuente de alimentacioacuten conmutada) como fuente de alimentacioacuten Las herramientas y las piezas utilizadas las tienes en esta paacutegina

La ODROID Arcade Box necesita un total de 27 entradas (19 entradas para botones y 8 entra-das para joysticks) Las 24 entradas GPIO digi-tales del ODROID-XU4 no son suficientes para las 27 entradas de modo que creamos dos puertos ADC adicionales para los tres botones que nos fal-taban Los valores de entrada ADC se basan en el voltaje de entrada y los valores de entrada digital y analoacutegica se procesan en el demonio GPIO que se describe a continuacioacuten

Disentildeo y montajeLos paneles de la ODROID Arcade Box deben

ser disentildeados y fabricados para que los botones y joysticks esteacuten bien colocados Elegimos MDF 12T teniendo en cuenta el precio y la durabilidad El dise-ntildeo se puede hacer con cualquier herramienta CAD como Google Sketch o SolidWorks Aunque existen muchas plantillas de disentildeo para los paneles de joypad decidimos elegir un disentildeo arcade estaacutendar japoneacutes

El primer paso del montaje es unir la placa al panel MDF Este paso fue faacutecil aunque nos llevo maacutes tiempo que el resto Despueacutes insertamos los joysticks la toma de corri-ente el interruptor y los botones en el panel MDF superior Los conectores HDMI Ethernet y USB se colocaron en la parte trasera del panel MDF El siguiente paso fue montar cada panel MDF usando un taladro para hacer los agujeros luego con tornillos los sujetamos

El uacuteltimo paso del montaje de la ODROID Arcade Box es conectar por cable los pines de expansioacuten del ODROID-XU4 a los componentes de entrada En este proyecto dise-ntildeamos las entradas GPIO externas tal y como se muestra en la paacutegina 26 Los botones Select y Temp estaacuten conecta-dos a puertos de expansioacuten ADC

Configuracion del softwareDesarrollamos un nuevo demonio GPIO llamado gpio_

keyd (httpbitly2ljOZKg) Este demonio es capaz de asignar entradas GPIO y eventos claves usando uinput y wiringPi una libreriacutea de acceso GPIO basada en pines Estaacute disentildeada para que le sea familiar a quiene ya ha utilizado el sistema de cableado Arduino Aunque la blibreriacutea wiring-Pi upstream soacutelo admite Raspberry Pi Hardkernel ofrece una versioacuten de wiringPi para ODROIDs en su repositorio GitHub (httpbitly1Eq3UpF) El moacutedulo uinput es un moacutedulo del kernel de Linux que gestiona el subsistema de entrada del usuario Se puede utilizar para crear y manejar dispositivos de entrada desde una aplicacioacuten

ARCADE BOX

herramientas compentes y lo que hay justamente debajo

esquema de los puertos de expansioacuten

ODROID MAGAZINE 24

Elegimos ODROID GameStation Turbo (httpbitly1ASFO5O) como plataforma de software para nuestra ODROID Arcade Box que tiene integrado uinput Debes asegurarte de que el archivo de dispositivo uinput existe en el sistema operativo elegido porque algunos no tienen dispositivos uinput

$ ls devuinput

Si tu sistema operativo no tiene un archivo de disposi-tivo devuinput entonces seraacute necesario recompilar e in-stalar un nuevo kernel con la opcioacuten de configuracioacuten IN-PUT_UINPUT habilitada La paacutegina Wiki en httpbitly1YIToBI describe coacutemo compilar e instalar la imagen del kernel a partir del coacutedigo fuente

$ make menuconfig

Device Drivers

-gt Input device support

-gt Generic input layer

-gt Miscellaneous device

-gt User level driver support ltgt

Ten en cuenta que wiringPi debe instalarse antes de in-stalar gpio_keyd En la imagen GameStation de ODROID los comandos sudo deben ejecutarse como root porque la cuenta ldquoodroidrdquo no estaacute designada como usuario sudo

$ git clone httpsgithubcomhardkernelwiringPi

git

$ cd wiringPi

$ sudo build

Descarga el coacutedigo fuente gpio_keyd el cual estaacute dis-ponible en nuestro repositorio GitHub El procedimiento para compilar e instalar gpio_keyd es muy simple

$ git clone httpsgithubcombkrepogpio_keydgit

$ cd gpio_keyd

$ make

$ sudo make install

El script gpio_keyd hace referencia a etcgpio_keydconf como el predeterminado para la informacioacuten de los botones y GPIO El archivo de configuracioacuten fue modi-ficado para las 27 entradas de la ODROID Arcade Box Algunas botones ya se utilizaban en el emulador de juego de modo que tuvimos que cambiar la configuracioacuten del emulador para evitar conflictos entre los botones de en-trada GPIO y el emulador Ten en cuenta que el campo ltGPIO pingt en el archivo de configuracioacuten hace referen-

ARCADE BOX

plano del disentildeo de joypad

la oDroiD Arcade box montada

ODROID MAGAZINE 25

cia al nuacutemero wiringPi no al GPIO y al nuacutemero de pin (httpbitly2lbzPIB)

Ejemplo de configuracioacuten para las 27 entradas etcgpio_keydconf

Digital input ltKey codegt ltGPIO typegt ltGPIO pingt ltActive valuegt User 1KEY_LEFT digital 15 0KEY_RIGHT digital 1 0KEY_UP digital 4 0KEY_DOWN digital 16 0KEY_A digital 2 0KEY_S digital 3 0KEY_D digital 30 0KEY_F digital 21 0KEY_Z digital 8 0KEY_X digital 9 0KEY_C digital 7 0KEY_V digital 0 0 User 2KEY_BACKSLASH digital 12 0KEY_SLASH digital 13 0KEY_SEMICOLON digital 14 0KEY_LEFTBRACE digital 5 0KEY_Y digital 26 0KEY_U digital 27 0KEY_I digital 22 0KEY_O digital 23 0KEY_H digital 6 0KEY_J digital 10 0KEY_K digital 11 0KEY_L digital 31 0

Analog input ltKey codegt ltGPIO typegt ltADC portgt ltADC ac-tive valuegtKEY_B analog 0 0KEY_N analog 0 2045KEY_M analog 1 2045

To run gpio_keyd daemon at every startup is conve-nient for ODROID Arcade Box

etcinitdgpio_keyd binsh BEGIN INIT INFO

ARCADE BOX

Mapeo Gpio externo para los botones y Joysticks

cableado de la oDroiD Arcade box

ODROID MAGAZINE 26

Provides gpio_keyd Required-Start $all Required-Stop Default-Start 2 3 4 5 Default-Stop Short-Description Run usrbingpio_keyd if it ex-ist END INIT INFO

PATH=sbinusrsbinbinusrbin

libinitvarssh

liblsbinit-functions

do_start() if [ -x usrbingpio_keyd ] then usrbingpio_keyd -d ES=$ [ ldquo$VERBOSErdquo = no ] ampamp log_end_msg $ES return $ES fi

case ldquo$1rdquo in start) do_start restart|reload|force-reload) echo ldquoError argument lsquo$1rsquo not supportedrdquo gtamp2 exit 3 stop) killall gpio_keyd exit 0 ) echo ldquoUsage $0 start|stoprdquo gtamp2 exit 3 Esac

$ sudo chmod +x etcinitdgpio_keyd$ sudo update-rcd gpio_keyd defaults$ sudo reboot

En los comandos anteriores el script gpio_keyd se ejecuta como un demonio uti-lizando la opcioacuten ldquo-drdquo El uso de gpio_keyd se puede comprobar con la opcioacuten ldquo-hrdquo Comprue-ba de nuevo las teclas usadas por el juego o el emulador despueacutes fija la configuracioacuten del gpio_ keyd correctamente Es ahora cuando estaacutes listo para jugar y disfrutar de tus juegos con tu nueva ODROID Arcade Box

ARCADE BOX

the King of fighters 98 John vs brian

ODROID MAGAZINE 27

En este artiacuteculo analizaremos las diferentes formas que existen para ob-tener los datos del uso de la red

ConfiguracioacutenLa forma normal de analizar los datos

de traacutefico de la red es mediante el uso de datos a traveacutes de las aplicaciones de configuracioacuten del sistema tal y como se muestra en la figura 1

El uso de datos muestra la cantidad total de traacutefico de datos entrante y sa-liente que ha sido utilizada por una apli-cacioacuten Si seleccionas la aplicacioacuten veraacute una pantalla como la que aparece en la Figura 2 que muestra informacioacuten detal-lada sobre el uso de la aplicacioacuten tanto en primer plano como de fondo

La informacioacuten que se muestra den-tro de la aplicacioacuten de Configuracioacuten se almacena en data systemnetstats que requiere acceso root Al eliminar todo lo que hay dentro de esta carpeta se resta-

Como desarrolladores queremos que nuestras aplicaciones sean eficientes y a menudo nos gus-

tariacutea saber cuaacutento ancho de banda de red estaacute utilizando nuestra aplicacioacuten Esto es muy uacutetil por varias razones

bull Para monitorizar y asegurarnos de que la aplicacioacuten es realmente la nuestra y no una aplicacioacuten que ha sido pirateada y publi-cada con diferentes nombres en Play Store

bull Para asegurarnos de que no es-tamos cogiendo ancho de banda innecesario del plan de datos del usuario

bull Para comprobar que el disposi-tivo que estamos usando no estaacute accediendo a Internet sin nuestro consentimiento

blecen las estadiacutesticas de red mostradas en esta aplicacioacuten

Estadiacutesticas de la redLa aplicacioacuten de configuracioacuten nos

puede dar una informacioacuten general so-bre las estadiacutesticas de la red de datos que es un buen comienzo pero a veces necesitamos un anaacutelisis maacutes detallado que puede hacerse a traveacutes del coman-do dumpsys Android cuenta con una poderosa herramienta llamada dumpsys que nos permite obtener una instan-taacutenea o volcado del sistema que pu-ede incluir informacioacuten sobre la red la memoria y otros componentes Lee la documentacioacuten de Android en httpbitly2kK9dep para obtener maacutes infor-macioacuten del sistema Para conseguir maacutes informacioacuten relacionada con la red nos interesa el comando

$ dumpsys netstats detail

La Figura 3 muestra un pantallazo de lo que puedes ver desde una tablet Nexus 7 que ejecuta Lollipop 511

Hay algunas cuestiones importantes para entender las estadiacutesticas

bull Las estadiacutesticas UID muestran el desglose de las aplicaciones de primer plano y de fondo

bull Uid muestra el ID de usuario de la aplicacioacuten que se puede utili-zar para relacionar eacutesta con la in-

DESARROLLO AnDROID AnALIzAnDO EL uSO DE RED DE LAS APLICACIOnESpor Nanik tolaram

DESARROLLO ANDROID

figura 1 - Uso de datos en la configuracioacuten

figura 2 - Desglose del uso de datos de la app

ODROID MAGAZINE 28

$ dumpsys package detail

Este comando te proporcionaraacute una larga lista de informacioacuten sobre los pa-quetes que estaacuten instalados en tu dis-positivo Para las estadiacutesticas de red nos interesa la seccioacuten que se muestra en la Figura 5

La seccioacuten resaltada muestra el userId que se relaciona con el uid que se mues-tra en las estadiacutesticas de red Al relacio-nar este nuacutemero sabemos el nombre del paquete de la aplicacioacuten sobre el que es-tamos leyendo las estadiacutesticas de red

Aplicacioacuten de ejemplo

La aplicacioacuten de ejemplo de este artiacute-culo se puede descargar desde httpbitly2m8WenA que muestra coacutemo etiqu-etar la conexioacuten de red desde distintas

secciones de la aplicacioacuten lo cual puede ayudar a analizar el volumen de traacutefico de datos de la aplicacioacuten La Figura 6 muestra un ejemplo de coacutemo lo vemos si utilizamos Android Device Monitor (dentro de Studio diriacutegete a Tools -gt Android -gt Android Device Monitor)

Tal y como se puede ver en el graacutefico la simple aplicacioacuten tiene 3 conexiones dife-rentes y cada una de ellas estaacute accediendo a un sitio web diferente Al etiquetarlas con

formacioacuten del paquete (que ver-emos en la seccioacuten de detalles del paquete dumpsys) con el objeto de conocer queacute aplicacioacuten utiliza estas estadiacutesticas de red

bull Las etiquetas son uacutetiles si de-sea ver la cantidad de datos que utiliza cada conexioacuten de tu apli-cacioacuten Puedes ver un ejemplo de esto en la Figura 4 que muestra que el uid 10007 tiene las siguien-tes etiquetas 0x30000401 0x30003201 0x30002804 0x10000401 y 0x30000407 Es-tas etiquetas ayudan al desarrol-lador a saber cuaacutentos datos uti-liza cada parte de la aplicacioacuten Estas estadiacutesticas de red en par-ticular estaacuten vinculada al paquete Google Framework que forma parte de Google Play Store

En el siguiente apartado veremos coacutemo escribir una aplicacioacuten etiquetando el hilo que hace la conexioacuten de red para determi-nar la cantidad de datos que se utilizan

Estadiacutesticas de paquetes

En la seccioacuten anterior analizamos el uid que aparece al ejecutar el comando dumpsys netstats Ahora necesitamos sa-ber queacute uid corresponde a la aplicacioacuten en el dispositivo y esto se hace mediante el siguiente comando

DESARROLLO ANDROID

figura 3 ndash estadiacutesticas de red con Dumpsys

figura 4 - estadiacutesticas de etiquetas UiD

figura 5 - Detalles del paquete dumpsys

figura 6 - etiquetas de red

coacutedigos diferentes podemos ver la cantidad de traacutefico que consume cada conexioacuten y esto nos ayudaraacute a ver si nuestra aplicacioacuten utiliza el ancho de banda de un modo eficiente

El coacutedigo del siguiente fragmento muestra el uso de la API TrafficStats interna Esta etiqueta API muestra el subproceso que utiliza actualmente un socket con un identificador y todo el traacute-fico que pasa por la misma conexioacuten se grabaraacute junto Asiacute es como la aplicacioacuten es capaz de agrupar las 3 conexiones diferentes Internamente Android utili-za el moacutedulo xt_qtaguid del kernel para realizar este tipo de etiquetado Tienes disponible maacutes informacioacuten en httpbitly2kU8KXB

public void getUsingNormalURLC

onnection(String urlText int

threadTag)

throws IOException

URL url = null

TrafficStats

setThreadStatsTag(threadTag)

HttpURLConnection urlConnec-

tion = getConnection(url)

try

finally

TrafficStatsclearThread-

StatsTag()

ODROID MAGAZINE 29

Disgustado te subes a tu 4x4 de dominacioacuten del mun-do un vehiacuteculo que desde fuera parece maacutes bien un viejo camioacuten de granja pero por dentro se parece maacutes

al sistema de control de un transbordador espacial porque el conductor del restaurante oriental que realiza las entrega a do-micilio estaacute enfermo Ahora tienes que ir a recoger tu propia comida ldquoQueacute rudimentariordquo piensas cuando sales de tu garaje secreto Justamente cuando vas a parar el vehiacuteculo en un stop oyes un fuerte ruido Sales y te diriges raacutepidamente a la parte posterior del 4x4 donde observas un cubo de basura Te tiras de los pelos y piensas ldquoiexclEsos basureros Neanderthales dejaron otra vez el cubo en mediordquo Ahora te toca recoger los restos de tu cena y la basura de otros

Conforme te vas alejando para hacer tus recados empiezas a pensar en coacutemo evitar este inconveniente en el futuro Varias ideas te vienen a la mente

Un sistema lidar para escanear en 3D el entorno en tiempo real y alarmas sonoras cuando sea necesarioUn brazo ciberneacutetico colocado en la parte posterior del 4x4 que procese video para detectar objetos agarrarlos y moverlosUna simple camara trasera

Empiezas a considerar la viabilidad de cada una

Muy bueno pero demasiado complicado y costosoAuacuten mejor y un proyecto propio de un cientiacutefico loco pero demasi-ado complicado y costosoya tengo dos iexclpero estaba demasiado preocupado en mis pensa-mientos para prestarles atencioacuten

Lo que necesitas es algo simple sin complicaciones y barato que haga sonar una alarma para alertarte incluso cuando estar absorto en tus pensamientos ldquoAhardquo Recuerdas haber visto un nuevo producto en ameriDroid que puede hacer precisamente esto Se trata de un microcontrolador conectado al USB que soporta hasta 6 sensores ultrasoacutenicos con simples comandos en serie (httpbitly2l26ptV) ldquoiexclPerfectordquo Piensas

Regresas a tu laboratorio subterraacuteneo con el pollo Kung Pao en la mano te apresurar a encender tus monitores entras en el sitio web ameriDroid y pides un kit ldquoUSB Ultrasonic Ranging Sensorrdquo con 6 sensores y carcasas

Vas sintiendo una sensacioacuten de alivio a medida que regresas a los 12 proyectos en lo que ya estabas trabajando a la espera de que pasen un par de diacuteas hasta que llegue tu nuevo pedido Mientras te comes tu Kung Pao dibujas un diagrama de coacutemo quieres colocar los sensores en la parte posterior de tu vehiacuteculo

Un par de diacuteas maacutes tarde el kit llega Inmediatamente em-piezas a montar el kit y los sensores en la parte posterior de tu 4x4 teniendo cuidado de usar sellador de silicona para pro-teger los sensores de la lluvia aguanieve y nieve que puedas encontrar durante tus aventuras para dominar el mundo

A continuacioacuten consultas las instrucciones proporcionadas por ameriDroid con el kit sobre coacutemo controlar y leer los sen-sores desde tu fiel ODROID-C2 y VU7 que montaste en el salpicadero para este propoacutesito

Conectando el cable USBEl cable USB suministrado debe conectarse al microcon-

trolador (la pequentildea placa de circuito con filas de pines que sobresalen) El microcontrolador tiene una fila de 4 o 6 pines

DETECTAR LA PRESEnCIACROnICAS DE un CIEnTIfICO LOCOpor bo lechnowsky

SENSOR ULTRASONICO

ODROID MAGAZINE 30

en un extremo Si tiene 6 pines ceacutentrate en los 4 pines centrales y sigue estas instrucciones

Negro - conectar a GNDrojo - conectar a VccVerde - conectar a rxi

blanco - conectar a txD

Conectando los sensoresultrasoacutenicos

En cada sensor ultrasoacutenico hay cuatro pines marcados Vcc Trig Echo Gnd Para el primer sensor ultrasoacutenico conecta el pin 2 del microcontrolador al pin ldquoTrigrdquo del sensor ultrasoacutenico Conecta el pin 3 del microcontrolador al pin ldquoEchordquo del sensor Conecte el pin ldquoVccrdquo del sensor a DC 5V (el pin ldquoVCCrdquo del microcontrolador suministra 5V) y el pin ldquoGndrdquo del sensor a una conexioacuten a tierra como por ejemplo los pines ldquoGNDrdquo del microcontrolador

Si conectas un segundo sensor de ultrasonidos conecta ldquoTrigrdquo al pin 4 y ldquoEchordquo al pin 5 Continuacutea conectando los siguientes pines a los sensores hasta los pines 12 y 13 si al final optas por conectar los seis sensores ultrasonidos

Conexioacuten del softwareUtilizas un programa terminal como PuTTY Screen o tu

lenguaje de script o programacioacuten favorito para conectarte al puerto serie que aparece cuando te conectas el sensor ultrasoacuteni-co Esto variaraacute en funcioacuten del sistema operativo que utilizas para conectarte al microcontrolador En Windows consultar el ldquoAdministrador de dispositivosrdquo es la forma maacutes comuacuten de averiguarlo En Linux ldquodmesgrdquo o ldquolsusbrdquo son las formas de de-tectar a queacute puerto estaacute conectado Deberiacuteas ver algo denomi-nado ldquoPL2303rdquo que es la conexioacuten del microcontrolador Si recibes informacioacuten basura en tu terminal cuando te conectes aseguacuterate de que los ajustes en serie son 9600 baudios 8 bits ninguno (paridad) y 1 bit de parada Aquiacute tienes una lista de los comandos que puede aceptar el microcontrolador

bull debug on Activa la retroalimentacioacuten detallada Estaacute deshabilitada por defecto nos proporcionaraacute aclaracio-nes sobre los errores de entrada

bull debug off desactiva la retroalimentacioacuten detalladabull init x y activa un HC-SR04 en los pines especificados

X es trigger Y es echo Estos deben ser pines digitales El dispositivo 0 estaacute preestablecido en los pines 2 y 3 de modo que no es necesario especificar estos pines La seleccioacuten de pines no vaacutelidos devolveraacute un signo de ex-clamacioacuten ()

bull ping enviacutea una sola lectura del HCSR04 previamente utilizado Si no se ha utilizado todaviacutea se usaraacute el dis-positivo 0 Si al comando le sigue un espacio y un nuacutemero entre 0-100 (exclusivo) se realizaraacute ese nuacutemero de lecturas emitiendo primero el promedio de esas lec-

SENSOR ULTRASONICO

turas despueacutes el nuacutemero de lecturas fallidas (que no cuentan para el promedio) y luego los valores miacutenimo y maacuteximo de lectura separados por espacios En cual-quier caso si una sentildeal se desconecta automaacuteticamente devolveraacute -1

bull start Hace ping constantemente a todos los dispositivos conectados en secuencia Debido a que los dispositivos se utilizan uno a uno el flujo de datos de este comando seraacute maacutes raacutepido si los dispositivos miden distancias cor-tas Si este comando le sigue un espacio y un nuacutemero mayor que 0 la placa esperaraacute estos milisegundos entre la lectura del uacuteltimo dispositivo y la lectura del primer dispositivo El resultado de este comando seraacute la lectura de cada dispositivo (con un uacutenico espacio despueacutes de cada uno) y una vuelta tras el uacuteltimo dispositivo

bull stop detiene la operacioacuten ldquostartrdquo soacutelo es efectivo tras haber iniciado ldquostartrdquo

bull mode emite el modo de medicioacuten del flujo M para meacutetrico (miliacutemetros) I para Imperial (deacutecimas de pul-gada) o R para Raw (la longitud de pulso en microse-gundos devuelta por el HC-SR04) El valor predeter-minado es M

bull timeout emite el tiempo de espera actual para lecturas de la sentildeal El tiempo de espera es la mayor cantidad de microsegundos que la placa esperaraacute antes de declarar que el HC-SR04 ha realizado una mala lectura lo cual no es necesariamente lo mismo que el pulso maacutes largo que la placa aceptaraacute del HC-SR04 Cuando la placa mide el pulso del HC-SR04 primero espera a que el HC-SR04 comience a enviar un pulso Este tiempo cuenta para el tiempo de espera Cuando este comando le sigue un espacio y un nuacutemero el tiempo de espera se ajusta a ese nuacutemero El valor predeterminado es 1 segundo (1000000 microsegundos)

bull ver emite informacioacuten de versioacuten y creacuteditos

Si cualquier comando (o ninguacuten comando) estaacute precedido por un uacutenico diacutegito de 0-5 (inclusive) seguido de un espacio el dispositivo que corresponde a ese diacutegito se seleccionaraacute para ser usado con el siguiente comando ldquopingrdquo Cada vez que la placa esteacute lista para un comando emitiraacute ldquogtrdquo para la serie La uacutenica excepcioacuten estaacute tras el comando ldquostartrdquo que no solicitaraacute entrada hasta que sea reconocido ldquostoprdquo

ODROID MAGAZINE 31

iquestCoacutemo empezaste con los ordenadoresCuando empeceacute mi negocio tuve que decidir queacute plat-

aforma de hardware iba a utilizar para la recogida de datos del traacutefico Simplemente para que no pienses mal de miacute mis caacutemaras de traacutefico no son las que se usan para multar por exceso de velocidad o algo asiacute Mi sistema estaba desti-nado suavizar el flujo de traacutefico fijando los controles oacutepti-mos de las sentildeales de traacutefico Anteriormente usaba un PC industrial para ejecutar mi software de reconocimiento de imaacutegenes Ahora uso la familia de dispositivos ODROID para esta cuestioacuten

iquestQueacute te atrajo de la plataforma ODROID En 2012 useacute Google para buscar una plataforma que

fuera muy compacta y al mismo tiempo potente para que cubriera mis necesidades que resultoacute ser la placa

Por favor haacuteblanos un poco sobre tiSoy ingeniero de electroacutenica y software en Rusia desde

hace 47 antildeos Naciacute en Siberia y tras terminar la escuela me mudeacute a Moscuacute para estudiar en la universidad Ser estudi-ante en el Instituto de Aviacioacuten de Moscuacute (MAI) fue una experiencia increiacuteble probablemente la mejor de mi vida A principios de los 90 llegoacute a Rusia la era de los microordena-dores soliacutea jugar a un juego de saltos en una CPU z80 y el i486 Tras finalizar mis estudios universitarios y de posgrado me convertiacute en ingeniero Trabajeacute en unos cuantos puestos de trabajo para diferentes empresas y finalmente decidiacute em-prender mi propio negocio En 2006 puse en marcha una iniciativa para crear sistemas de recuento del traacutefico de au-tomoacuteviles Estoy casado y tengo una hija de 21 antildeos llamada Lena que trabaja como enfermera Mi esposa Nadezhda es disentildeadora de vestuario de produccioacuten pero ahora trabaja como disentildeadora web Ella es aficionada a la fotografiacutea digi-tal y le encanta su caacutemara reacuteflex digital

COnOCIEnDO un ODROIDIAnvIACHESLAv ALEKSEEveditado por rob roy (robroy)

CONOCIENDO UN ODROIDIAN

Viacheslav disfruta tocando la guitarra y escuchando muacutesica

1995 en el campus MAi probando uno de los primeros equipos Vr comerciales del mundo que funcionaba a 640x480 a 30fps Utiliz-aba un sensor magneacutetico en la nuca para la posicioacuten de la cabeza la mejor broma que se podiacutea gastar a alguien era colocar un imaacuten cerca de la espalda y sacudirlo iexcllos gritos estaban garantizados cuando el mundo en 3D daba vueltas sin cesar

ODROID MAGAZINE 32

ODROID-X2 Con sus cuatro nuacutecleos funcionando a 17 GHz calculaba con facilidad los algoritmos de reconteo del traacutefico de automoacuteviles Maacutes tarde cambieacute al U3 y el XU4

iquestCuaacutel es tu ODROID favorito y por queacuteDe momento mi favorito es el XU4 Mi sistema estaacute

basado en el tratamiento de fotogramas de video en tiempo real por lo que el bus USB 30 del XU4 es bastante bueno para una caacutemara con una interfaz de captura de viacutedeo Para mi sistema es muy importante tener una buena conexioacuten entre la caacutemara de viacutedeo y la CPU Probablemente tendreacute que echar un vistazo a las interfaces de nivel inferior como MIPI CSI-2 que por desgracia estaacuten ausente en el XU4 Recientemente he estado aprendiendo como usar la caacute-mara oCam GS BW La caacutemara es buena en siacute misma pero para un uso industrial al aire libre tengo que implementar un software de control de exposicioacuten automaacutetica y posible-mente de control de apertura de la lente que todaviacutea estaacute en estudio

MEET AN ODROIDIAN

Una vieja joya el mini ordenador Nixdorf

An old gem the Nixdorf mini computer

CONOCIENDO UN ODROIDIAN

iquestQueacute aficiones e intereses tienes aparte de los ordenadoresDisfruto conduciendo y leyendo sobre coches y viendo

los campeonatos de carreras de F1 Tambieacuten me gusta via-jar pescar escuchar muacutesica y tocar la guitarra Tengo un gato siberiano llamado Leia y soy fan de Star Wars

iquestQueacute consejo le dariacuteas a alguien que quiere aprender maacutes sobre la programacioacuten

Hacer software es algo increiacuteble y miacutestico Es una fusioacuten de arte y tecnologiacutea Nada te inspira maacutes que tu aplicacioacuten cuando empieza a cobrar vida Sin embargo siempre estaacute ahiacute el otro lado de la Fuerza Estar listo para instruirte inc-esantemente El desarrollo de software es una de las activi-dades que cambia maacutes raacutepido Si tienes pensado dejar de hacer software en uno o dos antildeos puede dejar de aprender ahora El conocimiento se volveraacute anticuado en un par de antildeos maacutes o menos Para estar en lo maacutes alto siempre tienes que correr Es similar a la cancioacutenrdquoRun like Hellrdquo de Pink Floyd Si estaacutes listo para vivir de esta forma seguro que tendraacutes eacutexito

ODROID MAGAZINE 33

Page 10: Estación ARCADE · gias de marketing, administración de medios sociales y producción multimedia impresa, web, vídeo y cine. Ges-tionando múltiples cuentas con agencias y productores

import wiringpi2 as odroid

import time

import os

import glob

import sys

odroidwiringPiSetup()

Button = 3

odroidpinMode(Button0)

odroidpullUpDnControl(Button1)

loop

print(ldquoProgram Runningrdquo)

while Trueloops forever till

keyboard interupt (ctr + C)

if odroiddigitalRead(Button)

== False when button not

pressed

sysstderrwrite(ldquordquo)

timesleep(1)

else

print(ldquoButton Pressedrdquo)

------| photo amp Bell

|------

Get FileName

now = timestrftime(ldquoDatem-

d-yTimeH-M-Srdquo)

Make command to run

odroidC2sh

command = ldquobash odroidC2sh ldquo

+ str(now)

-- odroidC2sh is an Shell

script that

-- is responsible for tak-

ing the photo and

-- making the Doorbell

Noise

--- We insert the ldquoNowrdquo ar-

gument so the python

--- script knows what the

file name of the

--- picture will be so it

can pass it on into the

--- email script (so it

knows what file to email

figura 4 ndash el script python del timbre en ejecucioacuten

run command

ossystem(command)

diagnostics

print(ldquoFilenamerdquo now)

----| Email |----

print(ldquoEmailrdquo)email

emailcommand = lsquosudo python

IoTOdroidpy ldquoSomeone is ringing

the doorbellrdquorsquo + lsquo ldquophotosrsquo +

now + lsquojpgrdquorsquo

ossystem(emailcommand) run-

ning the Email script with

-- the subject as ldquoSomeone

is ringing the doorebellrdquo and the

filename

-- We made before at the

-Photo amp Bell- section

-- End Diagnostic Info

print(ldquoDone Processrdquo)

-space out for next ldquoPress

of Buttonrdquo

print(ldquordquo)

print(ldquordquo)

OdroidC2sh

binsh

cd photos

echo ldquoTaking the Photordquo

now=$1 Now is the filename time

stamp

take pic

fswebcam -d devvideo0 $nowjpg

echo ldquoPic Takenrdquo

echordquordquo

ring Bell

echo ldquoRinging Bellrdquo

echo ldquordquo

echo ldquordquo

cd

mpv ringtonemp3

IoTOdroidpy

from emailmimetext import MIM-

EText

from emailmimeapplication im-

port MIMEApplication

rece en pantalla el mensaje ldquoProgram is runningrdquo Al mismo tiempo aparecen puntos ldquordquo en la pantalla uno a uno indicando al usuario que el dispositivo estaacute funcionando con normalidad Cu-ando alguien pulsa el botoacuten (timbre) el script OdroidC2sh se ejecuta con una doble finalidad Primero toma una in-

stantaacutenea de la persona que hace sonar el timbre En segundo lugar enviacutea el correo electroacutenico a traveacutes de IoTOdroidpy a la cuenta de Gmail del propietario con la fecha y hora de registro de la foto que se adjunta Despueacutes vuelve al modo de espera y el timbre IoT suena

Notas finalesPor supuesto este proyecto se podriacutea

mejorar de muchas formas Por ejemplo se podriacutea antildeadir un LED en el timbre IOT que indicara su correcto funciona-miento Un dispositivo maacutes complejo similar a eacuteste podriacutea usarse como timbre comercial con la ayuda de un moacutedulo placa releacute Tampoco seriacutea complicado incluir la posibilidad de que grabase una pequentildea grabacioacuten de viacutedeo junto con las fotos haciendo que el timbre ldquointeli-genterdquo sea auacuten maacutes inteligente Ademaacutes como dice el viejo refraacuten ldquoiexclla perfeccioacuten es el eterno enemigo de lo funcionalrdquo

Coacutedigo deltimbre IoT

Aquiacute tienes una copia de todo el coacute-digo Al final de este artiacuteculo tienes un enlace a la paacutegina github que tambieacuten contiene el coacutedigo

Odroidbellpy

TIMBRE

ODROID MAGAZINE 10

from emailmimemultipart import

MIMEMultipart

from smtplib import SMTP

import smtplib

import sys

recipients = [lsquoabcgmailcomrsquo]

emaillist = [elemstrip()

split(lsquorsquo) for elem in recipi-

ents]

msg = MIMEMultipart()

msg[lsquoSubjectrsquo] = str(sysargv[1])

msg[lsquoFromrsquo] = lsquoxyzgmailcomrsquo

msg[lsquoReply-torsquo] = lsquoabcgmailcomrsquo

msgpreamble = lsquoMultipart

massagenrsquo

part = MIMEText(ldquoHello There is

someone ringing your doorbell A

picture of this person has been

atachedrdquo)

msgattach(part)

part =

MIMEApplication(open(str(sys

argv[2])rdquorbrdquo)read())

partadd_header(lsquoContent-

Dispositionrsquo lsquoattachmentrsquo

filename=str(sysargv[2]))

msgattach(part)

server = smtplibSMTP(ldquosmtp

gmailcom587rdquo)

serverehlo()

serverstarttls()

serverlogin(lsquoxyzgmail

comrsquorsquoyourpassword herersquo)

serversendmail(msg[lsquoFromrsquo]

emaillist msgas_string())

El coacutedigo del proyecto estaacute disponible en httpbitly2jMAdMY usando el siguiente comando

$ git clone

httpsgithubcommiltiadisme-

lissas

IoTOdroidC2Doorbellgit

TIMBRE

A finales de 2016 los usuarios de Cyanogenmod se horrorizaron cuando Cyanogen anuncioacute la

cancelacioacuten de sus servicios dejando a todos los usuarios que dependiacutean de Cyanogenmod sin soporte Sin em-bargo en poco tiempo llegariacutea una so-lucioacuten en forma de LineageOS Si eres un usuario del ODROID-XU3 XU4 es el momento perfecto para colaborar con la versioacuten de LineageOS en los foros ODROID

Caracteriacutesticas- Android 711 Nougat lineageoS 141- Kernel 3109- openGl eS 112030 (aceleracioacuten por GpU)- opencl 11 ep (aceleracioacuten por GpU)- funcioacuten multiusuario habilitada (hasta 8 usuarios)- ethernet integrado y soporte para ether-net Gigabit USb 30 - Soporte para rtl8188cUS rtl8191SU y USb Wireless ralinkt- Soporte bluetooth USb (ble A2dp Sink)- Soporte para dongle GpS USb- Anclaje a red USb - punto de acceso Wi-fi portaacutetil- Soporte DAc USb nativo para Android

LInEAGEOS-141 ODROID-Xu3Xu4OLvIDATE DE CyAnOGEn EL fuTuRO ESTA AquIpor voodik editado por bruno Doiche

LINEAGEOS

- Soporte para Webcam USb UVc- Soporte hDMi-cec- Selinux

Problemas conocidosEn este momento soacutelo admite moacutedu-

los Bluetooth de bajo consumo v40 (BLE) Consulta el Moacutedulo Bluetooth 2

Coacutemo instalarloEn primer lugar necesitas preparar

tu emmcsd con imaacutegenes especiales de auto-instalacioacuten

La puedes encontrar aquiacutehttpophmdrjrnetvoodik5422

ODROID-XU3AndroidCM-141-ATV

Alpha-01_110217

Graba la imagen en tu eMMCsd a traveacutes de Win32DiskImager y arranca el dispositivo Tendraacute que esperar paci-entemente durante el primer arranque ya que el proceso de actualizacioacuten puede llegar a tardar hasta 20 minutos

Coacutedigo fuente Kernel

$ git clone httpsgithubcom

voodikandroid_kernel_hardkernel

_odroidxu3 -b cm-140_5422

ODROID MAGAZINE 11

SNES 3DO y Sega Genesis El juego teniacutea diferentes escenarios para jugar la selva la nieve y el desierto

Open Fodder ofreciacutea 23 misiones que se dividiacutean en varias fases En total suponiacutea superar 72 niveles para llevar

Este mes me gustariacutea hablar de un juego llamado Open Fodder se trata de un remake del claacutesico

juego de Amiga Cannon Fodder desar-rollado por Sensible Software en 1993 Utiliza los datos del juego original Can-non Fodder para conseguir una experi-encia muy similar al juego original en tu ODROID

Muchos de los populares juegos de Linux de hoy en diacutea como Stratagus y Freeciv son en realidad remakes de claacutesicos juegos de DOS de mediados y finales de los 90 y Open Fodder no es diferente El remake de Cannon Fodder es un juego disparos accioacuten y estrategia donde controlas a un pequentildeo grupo de soldados que avanza a traveacutes de varias docenas de niveles para matar a los sol-dados enemigos destruir tanques echar abajo edificios y derrotar a tus enemigos El juego fue lanzado por primera vez para Amiga en 1993 y fue exportado por sus desarrolladores a MS-DOS Atari Jaguar

a tu escuadroacuten a la victoria Cuando se lanzoacute el juego fue muy elogiado por varias revistas de juego Amiga con pun-tuaciones que llevaban al 95 por ciento y fue considerado como uno de los mejo-res juegos lanzados en 1993 En general siguioacute siendo uno de los mejores juegos jamaacutes creado para la plataforma Amiga durante sus 11 antildeos de vida

Desde un punto de vista maacutes poliacutetico el juego lleva impliacutecito un intenso men-saje sobre la guerra en siacute misma puesto que juegas y llevar a tus soldados a una muerte inevitable Cada misioacuten se inicia

JuEGOS LInuXOPEn fODDERpor tobias Schaaf (meveric)

JUEGOS LINUX

figura 1 - el logotipo de cannon fodder en el cual estaacute basado open fodder

figuras 2 3 y 4 - los niveles de selva desierto y nieve en open fodder

figuras 5 y 6 - A medida que avanzas en el juego tu larga liacutenea de reclutas se con-vierte gradualmente en cruces alineadas como en un cementerio

ODROID MAGAZINE 12

nas segundas partes ademaacutes de algunas misiones de bonificacioacuten Cannon Fod-der 2 salioacute un antildeo maacutes tarde pero fue maacutes bien un ldquodisco de datosrdquo con ex-pansiones que una secuela ya que en su mayor parte presentaba maacutes misiones en lugar de nuevas caracteriacutesticas Tambieacuten estaba el X-Mas de Amiga que ofreciacutea algunas misiones diferentes basadas en el juego Cannon Fodder

Ejecutando Open Fodder

Open Fodder es un remake del motor del juego Cannon Fodder que lleva el juego a los sistemas operativos modernos Al igual que otras migraciones del motor del juego (como OpenTTD) puede uti-lizar los datos del juego original con esta versioacuten del motor para ejecutar el juego en tus dispositivos modernos Esta mi-gracioacuten tambieacuten cuenta con una versioacuten exportada para los dispositivos ARM lo que significa que podemos ejecutarlo igualmente en nuestros ODROIDs

Todaviacutea estaacute en desarrollo pero ya funciona bastante bien Como de cos-tumbre se puede instalar desde mi repo-sitorio y puesto que soacutelo requiere SDL2 y SDL2 Mixer como dependencias prin-cipales deberiacutea funcionar en Debian y

con un nuevo grupo de reclutas que se alinean esperando a unirse al combate Los soldados desechables (de ahiacute el nom-bre de cannon fodder Carne de Cantildeon) poco a poco se convierten en cruces alin-eadas dando forma a un cementerio mil-itar a medida que vas completando cada misioacuten formaacutendose maacutes y maacutes filas con-forme vas enterrando a tus predecesores Sin embargo los desarrolladores le di-eron un cierto toque de humor ya que los primeros soldados de tu escuadroacuten (y por tanto los casi seguro que moriraacuten) llevan de hecho los nombres de las seis personas que componiacutean el equipo de desarrollo del juego

Si nos fijamos bien el juego incor-poraba algunos detalles bastante intere-santes Por un lado tiene su propia can-cioacuten ldquo War never been so much funrdquo que suena durante la intro del juego iexclUno de los desarrolladores del juego Jon Hare compuso la muacutesica junto con el compositor Richard Joseph Si teniacuteas el Amiga CD32 tambieacuten recordaraacutes una pista adicional que incluiacutea un video en el cual los desarrolladores se disparaban entre siacute con armas de juguete (httpbitly2l67bFy) iexclSin duda se divirtieron bastante desarrollando este juego

Cannon Fodder tambieacuten tuvo algu-

JUEGOS LINUX

Ubuntu por igual las puedes encontrar en mi lista principal de paquetes para armhf y jessiemain para arm64

Se puede instalar con este comando en un dispositivo ODROID que ejecute Debian suponiendo que ya tengas con-figurados mis repositorios o esteacutes usando una de mis imaacutegenes de Debian (httpbitly13v98ly)

$ apt-get install

openfodder-odroid

He alterado ligeramente el juego para que siempre se ejecute en modo pantalla completa aunque si lo deseas puedes cambiar al modo de ventana simple-mente pulsando F11 cuando tenga el juego activado

Convirtiendo los datos del juego

Por siacute sola mi versioacuten de Open Fod-der viene con el especial Amiga X-Mas ademaacutes de varios niveles demo dis-ponibles de forma gratuita Si quieres jugar el juego real tendraacutes que importar los datos desde un CD Cannon Fodder

Si estaacute usando un ODROID para ju-gar al Open Fodder puedes localizar las carpetas de los datos del juego en la car-peta $HOMEopenfodderData Por ejemplo homeodroidopenfodderDataDos_CD es una de esas carpetas de datos del juego Existen varias carpe-tas de datos del juego que puedes usar dependiendo de la versioacuten que tengas del juego Cannon Fodder

Dos_CDAunque el juego es compatible con

muchas y diferentes fuentes del juego actualmente soacutelo Dos_CD parece ser una versioacuten de Open Fodder ldquototal-mente compatiblerdquo con muy pocos er-rores y problemas El resto de fuentes del juego pueden tener problemas

Aquiacute tienes un consejo raacutepido Aunque se llama Dos_CD cogeraacute cu-alquier versioacuten de DOS de Cannon Fodder que puedas encontrar Si tienes

figura 7 - Sensible Software - los desarrolladores de cannon fodder

ODROID MAGAZINE 13

WHDLoad en un Amiga (o WinUAE) para extraer los archivos del juego y co-piarlos en la carpeta DataAmigardquo No lo he probado pero si tienes la ldquoCannon Fodder Collectionrdquo de Amiga CD32 no oficial puedes copiar el contenido de FodderNew en esta carpeta lo que tendraacute como resultado niveles completamente diferentes Puede considerarse como una versioacuten maacutes compleja del juego aunque a la vez maacutes divertida Por lo tanto bien poner los archivos originales de Amiga aquiacute o bien los archivos FodderNew de la ldquoCannon Fodder Collectionrdquo

Dos2_CDDos2_CD es en realidad la carpeta

de la versioacuten DOS de Cannon Fodder 2 pero tambieacuten funciona con la versioacuten GoG Desafortunadamente tiene algu-nos problemas el maacutes grave es que el juego no tiene ninguacuten tipo de sonido o muacutesica Aparte de esto todo parece fun-cionar correctamente pero desconozco coacutemo reaccionaraacute en niveles posteriores La carpeta Data tambieacuten incluye las car-petas WAV Plus AmigaFormat_XMAS y Custom En WAV se almacenan los efectos de sonido por defecto para to-dos los juegos (Cannon Fodder) Plus es una demo del nuacutemero 31 la revista Amiga Power y AmigaFormat_XMAS es el Amiga Format Christmas Special Tambieacuten hay una carpeta Custom que te permite jugar otros juegos y mapas pero necesitan la versioacuten (CD) de DOS o de lo contrario no apareceraacuten

Notas finalesOpen Fodder es un buen proyecto

que te permite ejecutar este increiacuteble juego en sistemas modernos Realmente me gusta y estoy deseando ver coacutemo pro-gresa Espero que las versiones de Amiga y Cannon Fodder 2 sean pronto total-mente compatibles Tal vez incluso poda-mos ver mejoras graacuteficas con el tiempo Me gustariacutea ver graacuteficos maacutes modernos ya que el juego es bastante antiguo y los graacuteficos no son los maacutes idoneos para res-oluciones 1080p

la versioacuten de disco de Cannon Fodder simplemente copia el CF_ENGDAT en la carpeta Dos_CD La versioacuten original de CD DOS teniacutea un archivo llamado cf_cddat Cambiar el nombre a CF_ENGDAT y copiarlo a la carpeta Dos_CD Si tienes la versioacuten GoG del juego soacutelo tiene que copiar CF_ENG DAT a la carpeta Dos_CD iexclEsta es una forma raacutepida y legal de conseguir el juego si estaacutes interesado

Aseguacuterate de que el nombre del ar-chivo este en mayuacutescula ya que el juego tiene en cuenta esta cuestioacuten Intenta que coincida todo para asegurarte de que las cosas funcionen sin problemas

Amiga_CDAmiga CD32 tambieacuten contaba con

una versioacuten de este juego Esta es la ver-sioacuten que incluye el video al que hemos hecho referencia anteriormente En el CD de Amiga CD32 hay una carpeta llamada Fodder El contenido de esta carpeta debe copiarse a la carpeta Ami-ga_CD Puedes extraer la segunda pista del CD y almacenarla como Track2flv en la misma carpeta con la finalidad de tener el archivo de video

Me topeacute con algunos problemas cu-ando haciacutea esto y descubriacute nuevamente que el juego buscaba muchos archivos en mayuacutesculas asiacute que utiliceacute el siguiente comando para copiar todos los archivos y tenerlos tambieacuten en mayuacutesculas en la carpeta Amiga_CD$ for files in `ls` do cp $files

`echo $files | tr lsquo[lower]rsquo

lsquo[upper]rsquo` done

Asiacute funcionaba bien pero teniacutea algu-nos fallos Por ejemplo la animacioacuten del helicoacuteptero al inicio de cada misioacuten no apareciacutea y el cursor cuando se guarda un archivo se distorsionaba Aparte de esto no he visto problemas importantes en la versioacuten Amiga CD32

AmigaLa Informacioacuten de desarrollador de

Open Fodder dice ldquoUsar el instalador

JUEGOS LINUXJUEGOS ANDROID

CAuSALITy un JuEGO DE ROMPE-CABEzAS COn PARA-DOJAS DE vIAJES En EL TIEMPO por bruno Doiche

Configura tuacute mismo los entornos extrantildeos e insoacutelitos y

ayuda a un grupo de astronautas varados a encon-trar una ruta hacia un lugar seguro Cada nivel al que te enfrentas representa un nuevo reto donde necesitas llevar a tu astronauta a una salida que coincida con su color Los maacutergenes de tiempo son cortos aunque es muy divertido Aunque formas parte de tan soacutelo una fraccioacuten de tiempo de la vida de tu personaje iexclten cuidado pasaraacutes un montoacuten de tiempo enganchado a este juego

httpsplaygooglecomstoreappsdetailsid=comlojugamesandroidCausality

el entorno 3D isomeacutetrico es magniacute-fico a menudo no superaba el nivel porque los graacuteficos me cautivaban

ODROID MAGAZINE 14

tePi necesitan estar conectados a otros distintos en el ODROID-C2 porque parece haber un conflicto La interfaz UART ocupa estos pines y el estado por defecto del ODROID (1=high en Pin 8) no es lo que espera la RemotePi (GPIO debe entrar en el valor por defecto 0=low para cortar la energiacutea tras el apagado) Pero puesto que necesitas utilizar cables de todos modos para conectar la Remot-ePi esto no supondraacute ninguacuten problema ya que simplemente puedes reconectar los cables a otros pines GPIO

Como evitamos el circuito de ali-mentacioacuten del ODROID encendieacutendo-lo a traveacutes de GPIO tambieacuten pasamos por alto la proteccioacuten ante subidas de tensioacuten 2526A del dispositivo pero no te preocupes La RemotePi tambieacuten tiene proteccioacuten ante subidas de tensioacuten que deberiacutea coincidir con el mismo val-or que en el caso de la RemotePi board para la Raspberry Pi 3 Sin embargo la RemotePi para la Raspberry Pi 2 es de soacutelo 2A Esto estaacute bien porque el valor es menor a los 26A del ODROID de modo el polyfuse de la RemotePi se ac-tivariacutea antes si conectas demasiados dis-

La RemotePi board (httpbitly2l8JcWU) que convierte cu-alquier mando a distancia en un

interruptor de encendido para tu orde-nador de placa reducida puede ser com-patible con el ODROIDC2 si sigues esta guiacutea Si utilizas tu dispositivo como centro multimedia esta placa te propor-cionara un receptor de infrarrojos y un circuito de alimentacioacuten asiacute como un botoacuten de encendido Puedes encender y apagar tu ODROID completamente a traveacutes de una sentildeal infrarrojos (IR) y simplemente presionar el botoacuten de en-cendido para apagarlo y reiniciarlo con seguridad La placa RemotePi es respon-sable del modo espera que absorbe una miacutenima energiacutea mientras el ODROID estaacute completamente apagado Por uacutel-timo la placa alimenta tu dispositivo a traveacutes de GPIO lo cual requiere un cable microUSB para conectarlo a la Re-motePi en lugar de utilizar un adaptador de corriente normal

Configuracioacuten de hardware

Puesto que la RemotePi estaba pen-sada originalmente para la Raspberry Pi 2 necesitaraacutes utilizar cables adiciona-les en lugar de colocarla justamente en cima del C2 para evitar interferir con el disipador de calor asiacute que debes re-cablear algunos pines Es necesario utili-zar cables con el diaacutemetro adecuado para los pines de 5V y puesta a tierra ya que la corriente podriacutea estar entre los 2A y 26A dependiendo de cuaacutentos dispositi-vos USB conectes a tu dispositivo

Los pines GPIO 8 y 10 de la Remo-

positivos no alimentados de forma exter-na que no es una buena idea en un SBC al fin al cabo No obstante debido a esta diferencia de amperaje una RemotePi para la Raspberry Pi 3 seriacutea la mejor op-cioacuten para este proyecto

Como resultado del nuevo cableado el firmware de RemotePi ya no se puede configurar de forma normal aunque nunca he usado esta funcioacuten Si fuera necesario configurar o actualizar el firm-ware necesitaraacutes volver a conectar los pines 8 y 10 de la RemotePi a los pines 8 y 10 del ODROID durante la actu-alizacioacuten del firmware y luego deshacer los cambios una vez que la actualizacioacuten haya finalizado Otra posibilidad es simplemente conectar una Raspberry Pi para actualizar el firmware Esto suena a un montoacuten de problemas pero en re-alidad simplemente es extender la con-exioacuten del cabezal y cambiar una liacutenea en el script principal y dos liacuteneas en otro script opcional si haces uso de ello

Re-cableando laconexioacuten GPIO

Dado que la RemotePi estaacute disentildeada

REMOTEPI BOARD PARA EL ODROID-C2por inifity85

REMOTEPI

figura 1 - remotepi board

ODROID MAGAZINE 15

ergiacutea completamenteIrswitchsh (solo cambia el script

original de MSL Digital de GPIOpin1 = 14 a GPIOpin1 = 225)

binbash

prevent restarting XBMC at

shutdown This is only used for

OpenElec before V5

LOCKDIR=rdquovarlockrdquo

LOCKFILE=rdquoxbmcdisabledrdquo

this is the GPIO pin receiving

the shut-down signal

Raspberry Pi pin8 GPIOpin1=14

Odroid-C2 pin26 GPIOpin1=225

GPIOpin1=225

functions

add_omit_pids()

omit_pids=rdquo$omit_pids -o $1rdquo

safe_shutdown ()

for OpenElec before V5

touch ldquo$LOCKDIR$LOCKFILErdquo

for OpenElec V5 and later

systemctl stop kodi

add_omit_pids $(pidof connmand)

add_omit_pids $(pidof dbus-dae-

mon)

killall5 -15 $omit_pids

for seq in `seq 1 10` do

usleep 500000

clear gt devtty1

killall5 -18 $omit_pids || break

done

sync

umount -a gtdevnull 2gtamp1

poweroff -f

echo ldquo$GPIOpin1rdquo gt sysclass

gpioexport

echo ldquoinrdquo gt sysclassgpio

gpio$GPIOpin1direction

while true do

sleep 1

power=$(cat sysclassgpio

gpio$GPIOpin1value)

if [ $power = 0 ] then

echo ldquooutrdquo gt sysclassgpio

gpio$GPIOpin1direction

echo ldquo1rdquo gt sysclassgpio

una carcasa personalizada de modo que el receptor integrado podriacutea estar oculto y no ser uacutetil En ese caso puedes desac-tivar el IR del ODROID en favor del re-ceptor externo GPIO-IR en la RemotePi y conectar el pin 12 Tienes disponible maacutes informacioacuten sobre el cambio al receptor GPIOIR en LibreELEC en httpbitly2lpDl27

Scripts de apagado para LibreELEC

Los dos scripts tratados a continu-acioacuten pueden descargarse desde la paacutegina de soporte de MSL Digital Solutions en httpbitly2kMxyVG En esta paacutegina tambieacuten encontraras una guiacutea para utili-zar estos scripts en otros sistemas opera-tivos como Volumio y RuneAudio

El script irswitchsh se usa para el apagado seguro a traveacutes de sistema In-frarrojos Tras pulsar el correspondiente botoacuten el sistema se apagaraacute de forma se-gura luego RemotePi esperaraacute a que el GPIO225 alcance el estado 0 (low) que aparece tras el cierre exitoso del sistema Finalmente cortaraacute la energiacutea

El script shutdownsh se usa para el apagado seguro a traveacutes de la interfaz del programa o script Despueacutes de navegar hasta el botoacuten de apagado en la GUI el sistema se apagaraacute de forma segura luego RemotePi esperaraacute a que el GPIO225 alcance el estado 0 (low) que apareceraacute tras apagarse el sistema de forma adec-uada y segura Finalmente cortaraacute la en-

originalmente para una Raspberry Pi desgraciadamente no es soacutelo enchufar y usar Necesitaraacutes volver a cablear dos pines usando los cables de todos los pines tal y como se muestra en la Figura 2 Re-cablea el pin 8 de la RemotePi al pin 26 del ODROID-C2 y el pin 10 de la RemotePi al pin 7 del ODROID-C2

Si no quieres utilizar el receptor IR de la RemotePi para el mando a distan-cia de LibreELEC puedes dejar desco-nectado el pin 12 La placa continuaraacute encendieacutendose y apagaacutendose a traveacutes del comando de control remoto IR pero el control de la GUI de LibreELEC seraacute asumido por el receptor de infrarrojos integrado en el ODROID Sin embargo si has comprado una RemotePi con un receptor IR y un LED externo es posible que hayas decidido colocarla dentro de

REMOTEPI

figura 3 - la remotepi ha sido recableada y montada en una carcasa personalizada

figura 2 - re-cableado Gpio

ODROID MAGAZINE 16

Centro Multimedia por ejemplo Esos comandos de apagado se equiparaacuten a eventos internos similar a cuando nave-gas por el menuacute de apagado de Kodi Sin utilizar este segundo script el sistema se cerraraacute con seguridad pero la placa Re-motePi no recibiriacutea ninguna indicacioacuten para monitorizar el GPIO225 de modo que no cortariacutea la energiacutea tras apagarse el sistema correctamente

Usando el receptor IR de la RemotePi

Si deseas utilizar el receptor IR de la RemotePi en lugar del receptor IR ODROID integrado tendraacutes que des-activar el sistema IR integrado y activar el receptor IR GPIO Para hacer esto en Ubuntu puede consultar el artiacuteculo de la Wiki de Hardkernel en httpbitly2l8KrWg Para Libre-ELEC echa un vistazo a mi mini-guiacutea en httpbitly2lLKj2A Para preguntas comentari-os o sugerencias visita el hilo original en httpbitly2mgFGKk

gpio$GPIOpin1value

sleep 3

safe_shutdown

fi

done

Shutdownsh (solo cambia GPIOpin =15 a GPIOpin =249 y GPIOpin1 =14 a GPIOpin1 =225)

binbash

if [ ldquo$1rdquo = ldquorebootrdquo ] then

Raspberry Pi pin10 GPIOpin=15

Odroid-C2 pin7 GPIOpin=249

GPIOpin=249

Raspberry Pi pin8 GPIOpin1=14

Odroid-C2 pin26 GPIOpin1=225

GPIOpin1=225

echo ldquo$GPIOpinrdquo gt sysclass

gpioexport

execute shutdown sequence on

pin

echo ldquooutrdquo gt sysclassgpio

gpio$GPIOpindirection

echo ldquo1rdquo gt sysclassgpio

gpio$GPIOpinvalue

usleep 125000

echo ldquo0rdquo gt sysclassgpio

gpio$GPIOpinvalue

usleep 200000

echo ldquo1rdquo gt sysclassgpio

gpio$GPIOpinvalue

usleep 400000

echo ldquo0rdquo gt sysclassgpio

gpio$GPIOpinvalue

set GPIO 14 high to feedback

shutdown to RemotePi Board

because the irswitchsh has

already been terminated

echo ldquo$GPIOpin1rdquo gt sysclass

gpioexport

echo ldquooutrdquo gt sysclassgpio

gpio$GPIOpin1direction

echo ldquo1rdquo gt sysclassgpio

gpio$GPIOpin1value

usleep 4000000

fi

El script shutdownsh es uacutetil si a vec-es usas las aplicaciones remotas Android Yatse o Kore o hotkeys para apagar tu

REMOTEPI

ODROID Talk Subreddit

httpwwwredditcomrodroid

ODROID Magazine

estaacute en Reddit

ODROID MAGAZINE 17

El HiFi Shield 2 (39$ httpbitly2lHSlZJ) es un Con-vertidor Digital a Analoacutegico de Alta definicioacuten (DAC) para el ODROID-C2 y el ODROID-C1+ Se trata de

una placa de sonido especial para el ODROID-C2 y C1 + que estaacute optimizada para mejorar la calidad de reproduccioacuten del sonido Ofrece un sonido muy bien equilibrado consistente intenso amplio y muy bien dimensionado por niveles Hemos analizado la calidad de audio de la salida HiFi Shield 2 DAC con un equipo estaacutendar de la industria del sonido llamado Au-dio Precision Audio Precision es un analizador de audio de alto rendimiento optimizado para la produccioacuten de audio digital

Usando el chip DAC PCM5242 de uacuteltima generacioacuten de Texas Instrument conocido como Burr-Brown el HiFi Shield 2 soporta formatos de audio de 16 24 y 32 bits con una ra-tio THD+N miacutenima (0002) y una dinaacutemica ideal (114dB +) ademaacutes de sorprendentes tasas de muestreo de 384 kHz La interfaz dedicada SPDIF soporta una definicioacuten de hasta 192kHz24bit a traveacutes de una salida oacuteptica (Toslink)

Si hacemos uso del puerto de expansioacuten I2S en el C2C1+ no es necesario ocupar un puerto USB permitiendo al usu-ario seleccionar el sistema de reproduccioacuten de audio que desee como Volumio y Debian (DietPi) para reproducir sonido HiFi

HIFI SHIELD 2

HIfI SHIELD 2EL MEJOR SOnIDO quE PODRAS COnSEGuIR En AnDROIDeditado por rob roy (robroy)

oDroiD-c2 y hifi Shield 2 Audio pb +J

primer plano de la placa con anotaciones

Distribucioacuten de los 7 pines i2S del c2c1+

la salida de audio es estaacutendar la salida de color rojo corresponde al canal de audio iz-quierdo y la salida de color blanco correspon-de al canal de audio derecho

ODROID MAGAZINE 18

Detalles

La guiacutea de configuracioacuten de UbuntuLinux para ODROID-C2 estaacute disponible en httpbitly2brrGdG y para ODROID-C1+ en httpbitly2lI7AC7 El sistema operativo oficial Volumio 2 se puede descargar desde httpbitly2kOJNAV y la imagen DietPi basada en Debian se encuentra en httpbitly2ls45yM Puede ver los esquemas en httpbitly2mnukV4

Diagrama por bloques del hifi Shield2

Caracteriacutesticasbull El control de volumen a traveacutes de la interfaz

i2c es una gran caracteriacutestica para mantener una buena calidad del sonido con varios voluacutemenes de salida de audio

bull Los puertos de salida incluyen terminales esteacute-reo rcA chapados en oro

bull La fuente de alimentacioacuten tiene habilitado un regulador de interferencias de ruido ultra-bajo lo cual reduce el ruido de la fuente de alimentacioacuten y aumenta en gran medida el ratio sentildealruido

bull La interfaz I2S permite la descodificacioacuten di-recta de la entrada digital a la salida analoacutegica utili-zando la sincronizacioacuten del reloj maestro

bull La superficie de la PCB estaacute chapada en oro so-bre 2 onzas de cobre lo cual garantiza la continui-dad de la sentildeal y reduce la reflexioacuten y deflacioacuten de la sentildeal

bull Dispone de almohadillas soldadas a la salida de audio balanceada (sentildeal diferencial)

bull La interfaz SPDIF dedicada es nueva admite una definicioacuten de hasta 192khz24bit a traveacutes de una nueva salida oacuteptica (toslink)

bull Este HiFi shield no es compatible con Android y hardkernel no tiene planes para hacerlo compatible y asiacute poder habilitar el controlador i2S en el Kernel y el hAl de Android

El Manual de usuario del ODROID-XU4 disponible en httpbitly1U9Q8yg ha sido revisado hace poco para incluir algunos de los perifeacutericos maacutes recientes como

la Expansion Board SmartPower2 y oCam Puesto que ahora Hardkernel tambieacuten ofrece Ubuntu 1604 todos los ejemplos de coacutedigo se han actualizado para que sean compatibles con el nuevo sistema operativo Si tiene comentarios preguntas o sugerencias visita el hilo de los foros ODROID en httpbitly1RykBrT

MAnuAL Xu4ACTuALIzADOREvISADO PARA uBunTu 1604 y LOS PERIfERICOS MAS RECIEnTESeditado por rob roy (robroy)

MANUAL XU4

el manual del oDroiD-xU4 incluye informacioacuten detallada de los diferentes sistemas operativos software y perifeacutericos disponibles para el oDroiD-xU4

ODROID MAGAZINE 19

El DevOps es complicado Los grandes proyectos de soft-ware como Mesos y Kubernetes desarrollan equipos como los que se encuentran en la mayoriacutea de las empre-

sas y organizaciones tecnoloacutegicas como CoreOS con la finali-dad de ayudar a los desarrolladores a poner sus aplicaciones en funcionamiento Sin embargo iquestcuaacutel seriacutea una buena solucioacuten para un desarrollador en solitario o una pequentildea red domeacutesti-ca iquestCoacutemo podemos usar el coacutedigo a nivel de infraestructura

Uso un portaacutetil Macintosh OSX para desarrollo pero para las aplicaciones de larga duracioacuten o aplicaciones que se ejecu-tan por la noche necesito un entorno remoto siempre activo ya que mi portaacutetil estaraacute fuera de liacutenea o en el tren conmigo mientras voy y vengo del trabajo Tiene su sentido no utilizar el ordenador como un entorno para la puesta en funcionamiento de aplicaciones

El ODROID-XU4 es un ordenador ideal para un entor-no de implementacioacuten remoto ya que es econoacutemico flexible cuenta con excelentes especificaciones teacutecnicas y puede ejecutar Linux Este artiacuteculo tiene por objetivo explicar coacutemo almacenar coacutedigo de implementacioacuten en tu repositorio de proyectos asiacute como automatizar las implementaciones y ejecuciones

Arch LinuxArch Linux es una distribucioacuten de Linux gratuita de coacutedigo

abierto que fue lanzada en 2002 Estaacute centrada en la elegancia la integridad del coacutedigo el minimalismo y la simplicidad y cuenta con que el usuario haga un esfuerzo en comprender el funcionamiento del sistema Arch Linux utiliza en particular un modelo de revisioacuten continua de modo que todo lo que se necesitas para conseguir el software del sistema maacutes reciente es actualizar el sistema de forma perioacutedica

Arch Linux puede ser algo difiacutecil de asimilar ya que uti-liza herramientas diferentes a las de una distribucioacuten Debian El gestor de paquetes se activa a traveacutes de ldquopacmanrdquo en lugar de ldquoapt-getrdquo y existe un gestor complementario de paquetes muy popular llamado ldquoyaourtrdquo Muchos de los servicios o her-ramientas maacutes comunes no se instalan por defecto

Arch Linux esta hecho principalmente para procesadores x86 pero un proyecto llamado Arch Linux ARM (ALARM) tiene una distribucioacuten ARM de Arch Linux para arquitectu-ras AArch64 ARMv8 y ARMv7 Hardkernel el fabricante de ODROIDs es de hecho un patrocinador del proyecto Arch Linux ARM

HOME DATA CENTER

HOME DATA CEnTERIMPLEMEnTACIOn DEL CODIGO COn ARCHLInuXpor John Skilbeck

Configurar la redDeberaacutes asignarle a tu dispositivo una direccioacuten IP LAN

DHCP reservada y en el mejor de los casos un nombre de host que se propagaraacute a lo largo de tu red por medio del servidor DNS de tu router De esta forma en nuestro entorno de desar-rollolocal podremos utilizar un nombre de host para resolver siempre el entorno de implementacioacutenremoto

Por ejemplo en mi red reservo el 192168249 a la direc-cioacuten MAC de mi ODROID Tambieacuten configuro una entrada DNS que asigna a esa direccioacuten IP ldquoodroidrdquo Utilizar un firm-ware personalizado en el router como Tomato USB o DD-WRT lo hace extremadamente faacutecil ya que esos firmwares convierten tu router en un pequentildeo ordenador Linux con una aplicacioacuten web GUI muy pulida aunque su implementacioacuten estaacute fuera del alcance de este artiacuteculo Si operas con subredes aseguacuterate dirigir el puerto hacia el puerto externo que se asigna al puerto SSH del dispositivo odroid ya que Git se ejecuta a traveacutes de SSH

Configurar el proyectoLoacutegicamente desearaacutes estandarizar el flujo de trabajo de la

implementacioacuten Esto haraacute que el trabajo con proyectos sea

el home data center de John es una auteacutentica obra de arte

ODROID MAGAZINE 20

extremadamente faacutecil y eliminas muchos de los cambios de contexto mental que utilizas cuando trabaja en varios proyec-tos Crearemos una carpeta para alojar todos nuestros archivos relacionados con implementaciones Coloca los archivos eje-cutables en ldquodeploybinrdquo y cualquier archivo cron en ldquodeploytasksrdquo (maacutes informacioacuten sobre esta cuestioacuten maacutes adelante)

Navega hasta el directorio del proyecto en una ventana de Terminal y luego escribe los siguientes comandos

$ mkdir -p deploybin

$ mkdir -p deploytasks

$ cd deploybin ampamp touch run-job ampamp

chmod u+x run-job ampamp cd -

$ cd deploytasks ampamp touch crontab

Tambieacuten puede estandarizar doacutende colocar tu coacutedigo fuente De esta forma le seraacute maacutes faacutecil a otras personas ver coacutemo se or-ganiza tu proyecto y conocer queacute es el coacutedigo fuente y queacute no

$ mkdir src

$ cd src ampamp (place source code here ie python core

py clojure coreclj nodejs appjs)

Simplificar los puntos de entradaIniciar una aplicacioacuten puede resultar algo confuso con todos

los comandos que se pueden ejecutar en diferentes lenguajes Por ejemplo puede usar Java ldquojava -jar [my-jar] jarrdquo o python ldquopython my-apppyrdquo y tu aplicacioacuten tambieacuten puede necesitar varios argumentos Todo esto deberiacutea simplificarse y resumirse en un archivo ldquodeploybinrun-jobrdquo

binsh

set -e

CMD=rdquosrcduckrdquo

exec $CMD $

Crear el archivo cronArch Linux no viene con un cliente o demonio cron por

defecto Instaacutelalo con ldquosudo pacman -Syu cronierdquo Utilizando cron puede ejecutar comandos en intervalos de tiempo espe-cificados haciendo uso de la sintaxis especial de cron Normal-mente se almacena en el archivo crontab del usuario al que puedes acceder con ldquocrontab -erdquo Sin embargo esto es demasi-ado manual y queremos usar coacutedigo como infraestructura Cron tambieacuten tiene algunos subdirectorios muy uacutetiles en ldquoetccronrdquo como ldquoetccrondailyrdquo yrdquoetccronhourly ldquo si co-locamos los archivos aquiacute eacutestos se ejecutaraacuten en los intervalos especificados

Revisa el archivo de ldquodeploytaskscrontabrdquo que colocare-mos en ldquoetccrondrdquo que se crea automaacuteticamente con nuestro script ldquoposttreceiverdquo

variables

SHELL=binbash

PATH=binusrbinusrlocalbinusrsbinusrlo-

calsbin

MAILTO=[your-email-address]gmailcom

cmd=rdquodeploybinrun-jobrdquo

app_dir=rdquohomeskilbjodeployappduckdnsrdquo

jobs

5 skilbjo cd ldquo$app_dirrdquo $cmd gtdevnull

Aquiacute tienes el esquema general de la estructura de un simple proyecto El uacutenico ejecutable del proyecto es un uacutenico script shell ubicado en ldquosrcrdquo

$ tree

READMEmd

deploy

bin

post-receive

run-job

tasks

crontab

src

duck

4 directories 5 files

GitPrimero queremos agregar una URL remota a nuestro

proyecto en nuestro entorno local

$ git remote add odroid sshodroid~deploygit

duckdnsgit

Ten en cuenta que dependiendo de la topologiacutea de tu red es posible que tenga que modificar esta url Si no puedes asignar nombres de host la URL de git se veriacutea asiacute donde 192168249 es la direccioacuten IP LAN de tu dispositivo

$ ssh192168249~deploygitduckdnsgit

Si tienes un usuario en tu entorno ODROID distinto al que tienes en tu entorno de desarrollo la url se veriacutea asiacute donde ldquoskilbjordquo es tu nombre de usuario

$ sshskilbjoodroid~deploygitduckdnsgit

Si tu servidor remoto estaacute en una subred diferente y tienes redireccionados los puertos tu url tendriacutea este aspecto donde

HOME DATA CENTER

ODROID MAGAZINE 21

ldquo2222rdquo es tu puerto externo

$ ssh192168122222~deploygitduckdnsgit

En el directorio principal de tu entorno remoto crea una carpeta llamada ldquo~deployrdquo con dos subcarpetas ldquo~deployapprdquo y ldquo~deploygitrdquo Los subdirectorios de ldquo~deploygitrdquo seraacuten los puntos finales de nuestros desarrollos y con un hook ejecutaraacuten comandos de implementacioacuten en los subdirectorios de ldquo~ deployapprdquo

Primero navega hasta el directorio principal del entorno re-moto y a continuacioacuten escribe los siguientes comandos

$ mkdir -p ~deployapp

$ mkdir -p ~deploygit

$ mkdir -p ~deploygitduckdnsgit

$ mkdir -p ~deployappduckdns

Ahora en ldquo~ deploygitduckdnsgithooksrdquo crea un archi-vo ejecutable llamado ldquopost-receiverdquo que se activaraacute con cada accioacuten hacia el punto final

$ cd ~deployappgitduckdnsgithooks

$ touch post-receive ampamp chmod u+x post-receive

$ vim post-receive

Rellena el ejecutable con lo siguiente en el directorio ldquo~deploygitduckdnsgithooksrdquo del entorno remoto

usrbinenv bash

set -eou pipefail

user=$(whoami)

dir=rdquohome$userdeployapprdquo

app=$(basename $(pwd) | sed -e lsquosgitrsquo)

deploy_dir=rdquo$dir$apprdquo

cron_dir=rdquoetccrondrdquo

GIT_WORK_TREE=rdquo$deploy_dirrdquo git checkout -f

cd ldquo$deploy_dirrdquo

build steps here

case ldquo$userrdquo in

(skilbjo) sudo cp deploytaskscrontab ldquo$cron_

dir$apprdquo

esac

you can also do project-specific build steps in

this section like install

dependencies (ie npm install) compile source

code (ie lein uberjar)

as well as if a long-lived app run commands as

well (ie java -jar my_jarjar)

echo ldquoall donerdquo

exit 0

ImplementacioacutenAhora estamos listos para implementar ya que nuestro en-

torno local estaacute configurado para alcanzar el punto final del servidor de implementacioacuten nuestro entorno remoto estaacute con-figurado para recibir la notificacioacuten y revisar el coacutedigo fuente ejecutar cualquier paso de compilacioacuten y colocar una tarea en el directorio cron del sistema para su lanzamiento Ponto todo en praacutectica con el siguiente comando en el directorio del proyecto del entorno local

$ git push odroid

Ademaacutes para ver coacutemo se ha implementado todo esto en un proyecto de ejemplo visita httpbitly2lthYKW

Pasos finalesSe puede antildeadir al flujo anterior algunas caracteriacutesticas

como son muacuteltiples entornos ya sea con muacuteltiples ODROIDs o con un solo ODROID trataacutendolo como un servidor de ser-vicio Esto se puede hacer con subdirectorios bajo ldquo~deployrdquo como ldquo~deploystagingappmy_apprdquo o ldquo~ deployproduc-tionappmy_apprdquo

Ademaacutes podriacuteas antildeadir un servicio de integracioacuten conti-nua como CircleCI que ejecutariacutea una suite de testeo desde cada desarrollo a GitHub y si tiene eacutexito compila una imagen Docker No podriacuteas entonces tener un archivo en el entorno remoto que verificariacutea una imagen de un repositorio Docker y la ejecutariacutea en un intervalo especificado Esto es lo que hacen muchos de los softwares DevOps distribuidos como Mesos y Kubernetes pero en un entorno mucho maacutes rico que BASH y Linux

Referencias

Artiacuteculo Wikipedia de Arch linux httpbitly2l71ADKWebsite Arch linux ArM httpsarchlinuxarmorgArtiacuteculo que leiacute hace unos tres antildeos y que me inspiroacute para escribir mi propio artiacuteculo httpbitly2m5JAct

HOME DATA CENTER

ODROID MAGAZINE 22

odroid ARCADE BOXLA EXPERIEnCIA PERfECTA COn TuS JuEGOS ARCADE fAvORITOSpor brian Kim charles park y John lee

ARCADE BOX

Los ODROIDs tienen mejor rendimiento que las placas de la competencia especialmente en lo que respecta al renderizado de video lo que significa que

las placas ODROID son ideales para jugar lo cual hacen muchos usuarios de ODROID Ya hay disponibles varios sistemas operativos de plataforma de juegos como Lakka (httpbitly1NO8BBC) y ODROID GameStation Tur-bo (httpbitly1ASFO5O) Para disfrutar auacuten maacutes de nuestras sesiones de juegos creamos nuestra propia consola arcade con simples botones GPIO y joysticks y la llama-mos la ODROID Arcade Box Elegimos un ODROID-XU4 para este proyecto porque es el que tiene mejor rendimiento GPU de todos los dispositivos ODROID actuales En este artiacuteculo vamos a describir como hemos creado la ODROID Arcade Box

Requisitos( Figura 3 ndash )Decidimos hacer la ODROID Arcade Box usando

un MDF (tablero de fibra de densidad media) El Shifter Shield del XU4 tambieacuten es uacutetil para utilizar los pines de expansioacuten del ODROID-XU4 Los Joysticks los botones y los cables eran los componentes de entrada y se utilizoacute

Nuestro primer y simple prototipo

ODROID MAGAZINE 23

panel MDf 12t2eA 600x2202eA 600x752eA 220x75taladroplegadoraDesmontadorcinta meacutetricaNavaja multiusoAlicates de punta largaoDroiD-xU4xU4 Shifter shieldSMpS (fuete Alimentacioacuten)

extendedores hDMi USb ethernetenchufe de alimentacioacuten y Switchbisagras 2eAreceptor de puertacaucho 4eAtornillospulsadores 19eAJoystick 2eAcablesterminales

una SMPS (Fuente de alimentacioacuten conmutada) como fuente de alimentacioacuten Las herramientas y las piezas utilizadas las tienes en esta paacutegina

La ODROID Arcade Box necesita un total de 27 entradas (19 entradas para botones y 8 entra-das para joysticks) Las 24 entradas GPIO digi-tales del ODROID-XU4 no son suficientes para las 27 entradas de modo que creamos dos puertos ADC adicionales para los tres botones que nos fal-taban Los valores de entrada ADC se basan en el voltaje de entrada y los valores de entrada digital y analoacutegica se procesan en el demonio GPIO que se describe a continuacioacuten

Disentildeo y montajeLos paneles de la ODROID Arcade Box deben

ser disentildeados y fabricados para que los botones y joysticks esteacuten bien colocados Elegimos MDF 12T teniendo en cuenta el precio y la durabilidad El dise-ntildeo se puede hacer con cualquier herramienta CAD como Google Sketch o SolidWorks Aunque existen muchas plantillas de disentildeo para los paneles de joypad decidimos elegir un disentildeo arcade estaacutendar japoneacutes

El primer paso del montaje es unir la placa al panel MDF Este paso fue faacutecil aunque nos llevo maacutes tiempo que el resto Despueacutes insertamos los joysticks la toma de corri-ente el interruptor y los botones en el panel MDF superior Los conectores HDMI Ethernet y USB se colocaron en la parte trasera del panel MDF El siguiente paso fue montar cada panel MDF usando un taladro para hacer los agujeros luego con tornillos los sujetamos

El uacuteltimo paso del montaje de la ODROID Arcade Box es conectar por cable los pines de expansioacuten del ODROID-XU4 a los componentes de entrada En este proyecto dise-ntildeamos las entradas GPIO externas tal y como se muestra en la paacutegina 26 Los botones Select y Temp estaacuten conecta-dos a puertos de expansioacuten ADC

Configuracion del softwareDesarrollamos un nuevo demonio GPIO llamado gpio_

keyd (httpbitly2ljOZKg) Este demonio es capaz de asignar entradas GPIO y eventos claves usando uinput y wiringPi una libreriacutea de acceso GPIO basada en pines Estaacute disentildeada para que le sea familiar a quiene ya ha utilizado el sistema de cableado Arduino Aunque la blibreriacutea wiring-Pi upstream soacutelo admite Raspberry Pi Hardkernel ofrece una versioacuten de wiringPi para ODROIDs en su repositorio GitHub (httpbitly1Eq3UpF) El moacutedulo uinput es un moacutedulo del kernel de Linux que gestiona el subsistema de entrada del usuario Se puede utilizar para crear y manejar dispositivos de entrada desde una aplicacioacuten

ARCADE BOX

herramientas compentes y lo que hay justamente debajo

esquema de los puertos de expansioacuten

ODROID MAGAZINE 24

Elegimos ODROID GameStation Turbo (httpbitly1ASFO5O) como plataforma de software para nuestra ODROID Arcade Box que tiene integrado uinput Debes asegurarte de que el archivo de dispositivo uinput existe en el sistema operativo elegido porque algunos no tienen dispositivos uinput

$ ls devuinput

Si tu sistema operativo no tiene un archivo de disposi-tivo devuinput entonces seraacute necesario recompilar e in-stalar un nuevo kernel con la opcioacuten de configuracioacuten IN-PUT_UINPUT habilitada La paacutegina Wiki en httpbitly1YIToBI describe coacutemo compilar e instalar la imagen del kernel a partir del coacutedigo fuente

$ make menuconfig

Device Drivers

-gt Input device support

-gt Generic input layer

-gt Miscellaneous device

-gt User level driver support ltgt

Ten en cuenta que wiringPi debe instalarse antes de in-stalar gpio_keyd En la imagen GameStation de ODROID los comandos sudo deben ejecutarse como root porque la cuenta ldquoodroidrdquo no estaacute designada como usuario sudo

$ git clone httpsgithubcomhardkernelwiringPi

git

$ cd wiringPi

$ sudo build

Descarga el coacutedigo fuente gpio_keyd el cual estaacute dis-ponible en nuestro repositorio GitHub El procedimiento para compilar e instalar gpio_keyd es muy simple

$ git clone httpsgithubcombkrepogpio_keydgit

$ cd gpio_keyd

$ make

$ sudo make install

El script gpio_keyd hace referencia a etcgpio_keydconf como el predeterminado para la informacioacuten de los botones y GPIO El archivo de configuracioacuten fue modi-ficado para las 27 entradas de la ODROID Arcade Box Algunas botones ya se utilizaban en el emulador de juego de modo que tuvimos que cambiar la configuracioacuten del emulador para evitar conflictos entre los botones de en-trada GPIO y el emulador Ten en cuenta que el campo ltGPIO pingt en el archivo de configuracioacuten hace referen-

ARCADE BOX

plano del disentildeo de joypad

la oDroiD Arcade box montada

ODROID MAGAZINE 25

cia al nuacutemero wiringPi no al GPIO y al nuacutemero de pin (httpbitly2lbzPIB)

Ejemplo de configuracioacuten para las 27 entradas etcgpio_keydconf

Digital input ltKey codegt ltGPIO typegt ltGPIO pingt ltActive valuegt User 1KEY_LEFT digital 15 0KEY_RIGHT digital 1 0KEY_UP digital 4 0KEY_DOWN digital 16 0KEY_A digital 2 0KEY_S digital 3 0KEY_D digital 30 0KEY_F digital 21 0KEY_Z digital 8 0KEY_X digital 9 0KEY_C digital 7 0KEY_V digital 0 0 User 2KEY_BACKSLASH digital 12 0KEY_SLASH digital 13 0KEY_SEMICOLON digital 14 0KEY_LEFTBRACE digital 5 0KEY_Y digital 26 0KEY_U digital 27 0KEY_I digital 22 0KEY_O digital 23 0KEY_H digital 6 0KEY_J digital 10 0KEY_K digital 11 0KEY_L digital 31 0

Analog input ltKey codegt ltGPIO typegt ltADC portgt ltADC ac-tive valuegtKEY_B analog 0 0KEY_N analog 0 2045KEY_M analog 1 2045

To run gpio_keyd daemon at every startup is conve-nient for ODROID Arcade Box

etcinitdgpio_keyd binsh BEGIN INIT INFO

ARCADE BOX

Mapeo Gpio externo para los botones y Joysticks

cableado de la oDroiD Arcade box

ODROID MAGAZINE 26

Provides gpio_keyd Required-Start $all Required-Stop Default-Start 2 3 4 5 Default-Stop Short-Description Run usrbingpio_keyd if it ex-ist END INIT INFO

PATH=sbinusrsbinbinusrbin

libinitvarssh

liblsbinit-functions

do_start() if [ -x usrbingpio_keyd ] then usrbingpio_keyd -d ES=$ [ ldquo$VERBOSErdquo = no ] ampamp log_end_msg $ES return $ES fi

case ldquo$1rdquo in start) do_start restart|reload|force-reload) echo ldquoError argument lsquo$1rsquo not supportedrdquo gtamp2 exit 3 stop) killall gpio_keyd exit 0 ) echo ldquoUsage $0 start|stoprdquo gtamp2 exit 3 Esac

$ sudo chmod +x etcinitdgpio_keyd$ sudo update-rcd gpio_keyd defaults$ sudo reboot

En los comandos anteriores el script gpio_keyd se ejecuta como un demonio uti-lizando la opcioacuten ldquo-drdquo El uso de gpio_keyd se puede comprobar con la opcioacuten ldquo-hrdquo Comprue-ba de nuevo las teclas usadas por el juego o el emulador despueacutes fija la configuracioacuten del gpio_ keyd correctamente Es ahora cuando estaacutes listo para jugar y disfrutar de tus juegos con tu nueva ODROID Arcade Box

ARCADE BOX

the King of fighters 98 John vs brian

ODROID MAGAZINE 27

En este artiacuteculo analizaremos las diferentes formas que existen para ob-tener los datos del uso de la red

ConfiguracioacutenLa forma normal de analizar los datos

de traacutefico de la red es mediante el uso de datos a traveacutes de las aplicaciones de configuracioacuten del sistema tal y como se muestra en la figura 1

El uso de datos muestra la cantidad total de traacutefico de datos entrante y sa-liente que ha sido utilizada por una apli-cacioacuten Si seleccionas la aplicacioacuten veraacute una pantalla como la que aparece en la Figura 2 que muestra informacioacuten detal-lada sobre el uso de la aplicacioacuten tanto en primer plano como de fondo

La informacioacuten que se muestra den-tro de la aplicacioacuten de Configuracioacuten se almacena en data systemnetstats que requiere acceso root Al eliminar todo lo que hay dentro de esta carpeta se resta-

Como desarrolladores queremos que nuestras aplicaciones sean eficientes y a menudo nos gus-

tariacutea saber cuaacutento ancho de banda de red estaacute utilizando nuestra aplicacioacuten Esto es muy uacutetil por varias razones

bull Para monitorizar y asegurarnos de que la aplicacioacuten es realmente la nuestra y no una aplicacioacuten que ha sido pirateada y publi-cada con diferentes nombres en Play Store

bull Para asegurarnos de que no es-tamos cogiendo ancho de banda innecesario del plan de datos del usuario

bull Para comprobar que el disposi-tivo que estamos usando no estaacute accediendo a Internet sin nuestro consentimiento

blecen las estadiacutesticas de red mostradas en esta aplicacioacuten

Estadiacutesticas de la redLa aplicacioacuten de configuracioacuten nos

puede dar una informacioacuten general so-bre las estadiacutesticas de la red de datos que es un buen comienzo pero a veces necesitamos un anaacutelisis maacutes detallado que puede hacerse a traveacutes del coman-do dumpsys Android cuenta con una poderosa herramienta llamada dumpsys que nos permite obtener una instan-taacutenea o volcado del sistema que pu-ede incluir informacioacuten sobre la red la memoria y otros componentes Lee la documentacioacuten de Android en httpbitly2kK9dep para obtener maacutes infor-macioacuten del sistema Para conseguir maacutes informacioacuten relacionada con la red nos interesa el comando

$ dumpsys netstats detail

La Figura 3 muestra un pantallazo de lo que puedes ver desde una tablet Nexus 7 que ejecuta Lollipop 511

Hay algunas cuestiones importantes para entender las estadiacutesticas

bull Las estadiacutesticas UID muestran el desglose de las aplicaciones de primer plano y de fondo

bull Uid muestra el ID de usuario de la aplicacioacuten que se puede utili-zar para relacionar eacutesta con la in-

DESARROLLO AnDROID AnALIzAnDO EL uSO DE RED DE LAS APLICACIOnESpor Nanik tolaram

DESARROLLO ANDROID

figura 1 - Uso de datos en la configuracioacuten

figura 2 - Desglose del uso de datos de la app

ODROID MAGAZINE 28

$ dumpsys package detail

Este comando te proporcionaraacute una larga lista de informacioacuten sobre los pa-quetes que estaacuten instalados en tu dis-positivo Para las estadiacutesticas de red nos interesa la seccioacuten que se muestra en la Figura 5

La seccioacuten resaltada muestra el userId que se relaciona con el uid que se mues-tra en las estadiacutesticas de red Al relacio-nar este nuacutemero sabemos el nombre del paquete de la aplicacioacuten sobre el que es-tamos leyendo las estadiacutesticas de red

Aplicacioacuten de ejemplo

La aplicacioacuten de ejemplo de este artiacute-culo se puede descargar desde httpbitly2m8WenA que muestra coacutemo etiqu-etar la conexioacuten de red desde distintas

secciones de la aplicacioacuten lo cual puede ayudar a analizar el volumen de traacutefico de datos de la aplicacioacuten La Figura 6 muestra un ejemplo de coacutemo lo vemos si utilizamos Android Device Monitor (dentro de Studio diriacutegete a Tools -gt Android -gt Android Device Monitor)

Tal y como se puede ver en el graacutefico la simple aplicacioacuten tiene 3 conexiones dife-rentes y cada una de ellas estaacute accediendo a un sitio web diferente Al etiquetarlas con

formacioacuten del paquete (que ver-emos en la seccioacuten de detalles del paquete dumpsys) con el objeto de conocer queacute aplicacioacuten utiliza estas estadiacutesticas de red

bull Las etiquetas son uacutetiles si de-sea ver la cantidad de datos que utiliza cada conexioacuten de tu apli-cacioacuten Puedes ver un ejemplo de esto en la Figura 4 que muestra que el uid 10007 tiene las siguien-tes etiquetas 0x30000401 0x30003201 0x30002804 0x10000401 y 0x30000407 Es-tas etiquetas ayudan al desarrol-lador a saber cuaacutentos datos uti-liza cada parte de la aplicacioacuten Estas estadiacutesticas de red en par-ticular estaacuten vinculada al paquete Google Framework que forma parte de Google Play Store

En el siguiente apartado veremos coacutemo escribir una aplicacioacuten etiquetando el hilo que hace la conexioacuten de red para determi-nar la cantidad de datos que se utilizan

Estadiacutesticas de paquetes

En la seccioacuten anterior analizamos el uid que aparece al ejecutar el comando dumpsys netstats Ahora necesitamos sa-ber queacute uid corresponde a la aplicacioacuten en el dispositivo y esto se hace mediante el siguiente comando

DESARROLLO ANDROID

figura 3 ndash estadiacutesticas de red con Dumpsys

figura 4 - estadiacutesticas de etiquetas UiD

figura 5 - Detalles del paquete dumpsys

figura 6 - etiquetas de red

coacutedigos diferentes podemos ver la cantidad de traacutefico que consume cada conexioacuten y esto nos ayudaraacute a ver si nuestra aplicacioacuten utiliza el ancho de banda de un modo eficiente

El coacutedigo del siguiente fragmento muestra el uso de la API TrafficStats interna Esta etiqueta API muestra el subproceso que utiliza actualmente un socket con un identificador y todo el traacute-fico que pasa por la misma conexioacuten se grabaraacute junto Asiacute es como la aplicacioacuten es capaz de agrupar las 3 conexiones diferentes Internamente Android utili-za el moacutedulo xt_qtaguid del kernel para realizar este tipo de etiquetado Tienes disponible maacutes informacioacuten en httpbitly2kU8KXB

public void getUsingNormalURLC

onnection(String urlText int

threadTag)

throws IOException

URL url = null

TrafficStats

setThreadStatsTag(threadTag)

HttpURLConnection urlConnec-

tion = getConnection(url)

try

finally

TrafficStatsclearThread-

StatsTag()

ODROID MAGAZINE 29

Disgustado te subes a tu 4x4 de dominacioacuten del mun-do un vehiacuteculo que desde fuera parece maacutes bien un viejo camioacuten de granja pero por dentro se parece maacutes

al sistema de control de un transbordador espacial porque el conductor del restaurante oriental que realiza las entrega a do-micilio estaacute enfermo Ahora tienes que ir a recoger tu propia comida ldquoQueacute rudimentariordquo piensas cuando sales de tu garaje secreto Justamente cuando vas a parar el vehiacuteculo en un stop oyes un fuerte ruido Sales y te diriges raacutepidamente a la parte posterior del 4x4 donde observas un cubo de basura Te tiras de los pelos y piensas ldquoiexclEsos basureros Neanderthales dejaron otra vez el cubo en mediordquo Ahora te toca recoger los restos de tu cena y la basura de otros

Conforme te vas alejando para hacer tus recados empiezas a pensar en coacutemo evitar este inconveniente en el futuro Varias ideas te vienen a la mente

Un sistema lidar para escanear en 3D el entorno en tiempo real y alarmas sonoras cuando sea necesarioUn brazo ciberneacutetico colocado en la parte posterior del 4x4 que procese video para detectar objetos agarrarlos y moverlosUna simple camara trasera

Empiezas a considerar la viabilidad de cada una

Muy bueno pero demasiado complicado y costosoAuacuten mejor y un proyecto propio de un cientiacutefico loco pero demasi-ado complicado y costosoya tengo dos iexclpero estaba demasiado preocupado en mis pensa-mientos para prestarles atencioacuten

Lo que necesitas es algo simple sin complicaciones y barato que haga sonar una alarma para alertarte incluso cuando estar absorto en tus pensamientos ldquoAhardquo Recuerdas haber visto un nuevo producto en ameriDroid que puede hacer precisamente esto Se trata de un microcontrolador conectado al USB que soporta hasta 6 sensores ultrasoacutenicos con simples comandos en serie (httpbitly2l26ptV) ldquoiexclPerfectordquo Piensas

Regresas a tu laboratorio subterraacuteneo con el pollo Kung Pao en la mano te apresurar a encender tus monitores entras en el sitio web ameriDroid y pides un kit ldquoUSB Ultrasonic Ranging Sensorrdquo con 6 sensores y carcasas

Vas sintiendo una sensacioacuten de alivio a medida que regresas a los 12 proyectos en lo que ya estabas trabajando a la espera de que pasen un par de diacuteas hasta que llegue tu nuevo pedido Mientras te comes tu Kung Pao dibujas un diagrama de coacutemo quieres colocar los sensores en la parte posterior de tu vehiacuteculo

Un par de diacuteas maacutes tarde el kit llega Inmediatamente em-piezas a montar el kit y los sensores en la parte posterior de tu 4x4 teniendo cuidado de usar sellador de silicona para pro-teger los sensores de la lluvia aguanieve y nieve que puedas encontrar durante tus aventuras para dominar el mundo

A continuacioacuten consultas las instrucciones proporcionadas por ameriDroid con el kit sobre coacutemo controlar y leer los sen-sores desde tu fiel ODROID-C2 y VU7 que montaste en el salpicadero para este propoacutesito

Conectando el cable USBEl cable USB suministrado debe conectarse al microcon-

trolador (la pequentildea placa de circuito con filas de pines que sobresalen) El microcontrolador tiene una fila de 4 o 6 pines

DETECTAR LA PRESEnCIACROnICAS DE un CIEnTIfICO LOCOpor bo lechnowsky

SENSOR ULTRASONICO

ODROID MAGAZINE 30

en un extremo Si tiene 6 pines ceacutentrate en los 4 pines centrales y sigue estas instrucciones

Negro - conectar a GNDrojo - conectar a VccVerde - conectar a rxi

blanco - conectar a txD

Conectando los sensoresultrasoacutenicos

En cada sensor ultrasoacutenico hay cuatro pines marcados Vcc Trig Echo Gnd Para el primer sensor ultrasoacutenico conecta el pin 2 del microcontrolador al pin ldquoTrigrdquo del sensor ultrasoacutenico Conecta el pin 3 del microcontrolador al pin ldquoEchordquo del sensor Conecte el pin ldquoVccrdquo del sensor a DC 5V (el pin ldquoVCCrdquo del microcontrolador suministra 5V) y el pin ldquoGndrdquo del sensor a una conexioacuten a tierra como por ejemplo los pines ldquoGNDrdquo del microcontrolador

Si conectas un segundo sensor de ultrasonidos conecta ldquoTrigrdquo al pin 4 y ldquoEchordquo al pin 5 Continuacutea conectando los siguientes pines a los sensores hasta los pines 12 y 13 si al final optas por conectar los seis sensores ultrasonidos

Conexioacuten del softwareUtilizas un programa terminal como PuTTY Screen o tu

lenguaje de script o programacioacuten favorito para conectarte al puerto serie que aparece cuando te conectas el sensor ultrasoacuteni-co Esto variaraacute en funcioacuten del sistema operativo que utilizas para conectarte al microcontrolador En Windows consultar el ldquoAdministrador de dispositivosrdquo es la forma maacutes comuacuten de averiguarlo En Linux ldquodmesgrdquo o ldquolsusbrdquo son las formas de de-tectar a queacute puerto estaacute conectado Deberiacuteas ver algo denomi-nado ldquoPL2303rdquo que es la conexioacuten del microcontrolador Si recibes informacioacuten basura en tu terminal cuando te conectes aseguacuterate de que los ajustes en serie son 9600 baudios 8 bits ninguno (paridad) y 1 bit de parada Aquiacute tienes una lista de los comandos que puede aceptar el microcontrolador

bull debug on Activa la retroalimentacioacuten detallada Estaacute deshabilitada por defecto nos proporcionaraacute aclaracio-nes sobre los errores de entrada

bull debug off desactiva la retroalimentacioacuten detalladabull init x y activa un HC-SR04 en los pines especificados

X es trigger Y es echo Estos deben ser pines digitales El dispositivo 0 estaacute preestablecido en los pines 2 y 3 de modo que no es necesario especificar estos pines La seleccioacuten de pines no vaacutelidos devolveraacute un signo de ex-clamacioacuten ()

bull ping enviacutea una sola lectura del HCSR04 previamente utilizado Si no se ha utilizado todaviacutea se usaraacute el dis-positivo 0 Si al comando le sigue un espacio y un nuacutemero entre 0-100 (exclusivo) se realizaraacute ese nuacutemero de lecturas emitiendo primero el promedio de esas lec-

SENSOR ULTRASONICO

turas despueacutes el nuacutemero de lecturas fallidas (que no cuentan para el promedio) y luego los valores miacutenimo y maacuteximo de lectura separados por espacios En cual-quier caso si una sentildeal se desconecta automaacuteticamente devolveraacute -1

bull start Hace ping constantemente a todos los dispositivos conectados en secuencia Debido a que los dispositivos se utilizan uno a uno el flujo de datos de este comando seraacute maacutes raacutepido si los dispositivos miden distancias cor-tas Si este comando le sigue un espacio y un nuacutemero mayor que 0 la placa esperaraacute estos milisegundos entre la lectura del uacuteltimo dispositivo y la lectura del primer dispositivo El resultado de este comando seraacute la lectura de cada dispositivo (con un uacutenico espacio despueacutes de cada uno) y una vuelta tras el uacuteltimo dispositivo

bull stop detiene la operacioacuten ldquostartrdquo soacutelo es efectivo tras haber iniciado ldquostartrdquo

bull mode emite el modo de medicioacuten del flujo M para meacutetrico (miliacutemetros) I para Imperial (deacutecimas de pul-gada) o R para Raw (la longitud de pulso en microse-gundos devuelta por el HC-SR04) El valor predeter-minado es M

bull timeout emite el tiempo de espera actual para lecturas de la sentildeal El tiempo de espera es la mayor cantidad de microsegundos que la placa esperaraacute antes de declarar que el HC-SR04 ha realizado una mala lectura lo cual no es necesariamente lo mismo que el pulso maacutes largo que la placa aceptaraacute del HC-SR04 Cuando la placa mide el pulso del HC-SR04 primero espera a que el HC-SR04 comience a enviar un pulso Este tiempo cuenta para el tiempo de espera Cuando este comando le sigue un espacio y un nuacutemero el tiempo de espera se ajusta a ese nuacutemero El valor predeterminado es 1 segundo (1000000 microsegundos)

bull ver emite informacioacuten de versioacuten y creacuteditos

Si cualquier comando (o ninguacuten comando) estaacute precedido por un uacutenico diacutegito de 0-5 (inclusive) seguido de un espacio el dispositivo que corresponde a ese diacutegito se seleccionaraacute para ser usado con el siguiente comando ldquopingrdquo Cada vez que la placa esteacute lista para un comando emitiraacute ldquogtrdquo para la serie La uacutenica excepcioacuten estaacute tras el comando ldquostartrdquo que no solicitaraacute entrada hasta que sea reconocido ldquostoprdquo

ODROID MAGAZINE 31

iquestCoacutemo empezaste con los ordenadoresCuando empeceacute mi negocio tuve que decidir queacute plat-

aforma de hardware iba a utilizar para la recogida de datos del traacutefico Simplemente para que no pienses mal de miacute mis caacutemaras de traacutefico no son las que se usan para multar por exceso de velocidad o algo asiacute Mi sistema estaba desti-nado suavizar el flujo de traacutefico fijando los controles oacutepti-mos de las sentildeales de traacutefico Anteriormente usaba un PC industrial para ejecutar mi software de reconocimiento de imaacutegenes Ahora uso la familia de dispositivos ODROID para esta cuestioacuten

iquestQueacute te atrajo de la plataforma ODROID En 2012 useacute Google para buscar una plataforma que

fuera muy compacta y al mismo tiempo potente para que cubriera mis necesidades que resultoacute ser la placa

Por favor haacuteblanos un poco sobre tiSoy ingeniero de electroacutenica y software en Rusia desde

hace 47 antildeos Naciacute en Siberia y tras terminar la escuela me mudeacute a Moscuacute para estudiar en la universidad Ser estudi-ante en el Instituto de Aviacioacuten de Moscuacute (MAI) fue una experiencia increiacuteble probablemente la mejor de mi vida A principios de los 90 llegoacute a Rusia la era de los microordena-dores soliacutea jugar a un juego de saltos en una CPU z80 y el i486 Tras finalizar mis estudios universitarios y de posgrado me convertiacute en ingeniero Trabajeacute en unos cuantos puestos de trabajo para diferentes empresas y finalmente decidiacute em-prender mi propio negocio En 2006 puse en marcha una iniciativa para crear sistemas de recuento del traacutefico de au-tomoacuteviles Estoy casado y tengo una hija de 21 antildeos llamada Lena que trabaja como enfermera Mi esposa Nadezhda es disentildeadora de vestuario de produccioacuten pero ahora trabaja como disentildeadora web Ella es aficionada a la fotografiacutea digi-tal y le encanta su caacutemara reacuteflex digital

COnOCIEnDO un ODROIDIAnvIACHESLAv ALEKSEEveditado por rob roy (robroy)

CONOCIENDO UN ODROIDIAN

Viacheslav disfruta tocando la guitarra y escuchando muacutesica

1995 en el campus MAi probando uno de los primeros equipos Vr comerciales del mundo que funcionaba a 640x480 a 30fps Utiliz-aba un sensor magneacutetico en la nuca para la posicioacuten de la cabeza la mejor broma que se podiacutea gastar a alguien era colocar un imaacuten cerca de la espalda y sacudirlo iexcllos gritos estaban garantizados cuando el mundo en 3D daba vueltas sin cesar

ODROID MAGAZINE 32

ODROID-X2 Con sus cuatro nuacutecleos funcionando a 17 GHz calculaba con facilidad los algoritmos de reconteo del traacutefico de automoacuteviles Maacutes tarde cambieacute al U3 y el XU4

iquestCuaacutel es tu ODROID favorito y por queacuteDe momento mi favorito es el XU4 Mi sistema estaacute

basado en el tratamiento de fotogramas de video en tiempo real por lo que el bus USB 30 del XU4 es bastante bueno para una caacutemara con una interfaz de captura de viacutedeo Para mi sistema es muy importante tener una buena conexioacuten entre la caacutemara de viacutedeo y la CPU Probablemente tendreacute que echar un vistazo a las interfaces de nivel inferior como MIPI CSI-2 que por desgracia estaacuten ausente en el XU4 Recientemente he estado aprendiendo como usar la caacute-mara oCam GS BW La caacutemara es buena en siacute misma pero para un uso industrial al aire libre tengo que implementar un software de control de exposicioacuten automaacutetica y posible-mente de control de apertura de la lente que todaviacutea estaacute en estudio

MEET AN ODROIDIAN

Una vieja joya el mini ordenador Nixdorf

An old gem the Nixdorf mini computer

CONOCIENDO UN ODROIDIAN

iquestQueacute aficiones e intereses tienes aparte de los ordenadoresDisfruto conduciendo y leyendo sobre coches y viendo

los campeonatos de carreras de F1 Tambieacuten me gusta via-jar pescar escuchar muacutesica y tocar la guitarra Tengo un gato siberiano llamado Leia y soy fan de Star Wars

iquestQueacute consejo le dariacuteas a alguien que quiere aprender maacutes sobre la programacioacuten

Hacer software es algo increiacuteble y miacutestico Es una fusioacuten de arte y tecnologiacutea Nada te inspira maacutes que tu aplicacioacuten cuando empieza a cobrar vida Sin embargo siempre estaacute ahiacute el otro lado de la Fuerza Estar listo para instruirte inc-esantemente El desarrollo de software es una de las activi-dades que cambia maacutes raacutepido Si tienes pensado dejar de hacer software en uno o dos antildeos puede dejar de aprender ahora El conocimiento se volveraacute anticuado en un par de antildeos maacutes o menos Para estar en lo maacutes alto siempre tienes que correr Es similar a la cancioacutenrdquoRun like Hellrdquo de Pink Floyd Si estaacutes listo para vivir de esta forma seguro que tendraacutes eacutexito

ODROID MAGAZINE 33

Page 11: Estación ARCADE · gias de marketing, administración de medios sociales y producción multimedia impresa, web, vídeo y cine. Ges-tionando múltiples cuentas con agencias y productores

from emailmimemultipart import

MIMEMultipart

from smtplib import SMTP

import smtplib

import sys

recipients = [lsquoabcgmailcomrsquo]

emaillist = [elemstrip()

split(lsquorsquo) for elem in recipi-

ents]

msg = MIMEMultipart()

msg[lsquoSubjectrsquo] = str(sysargv[1])

msg[lsquoFromrsquo] = lsquoxyzgmailcomrsquo

msg[lsquoReply-torsquo] = lsquoabcgmailcomrsquo

msgpreamble = lsquoMultipart

massagenrsquo

part = MIMEText(ldquoHello There is

someone ringing your doorbell A

picture of this person has been

atachedrdquo)

msgattach(part)

part =

MIMEApplication(open(str(sys

argv[2])rdquorbrdquo)read())

partadd_header(lsquoContent-

Dispositionrsquo lsquoattachmentrsquo

filename=str(sysargv[2]))

msgattach(part)

server = smtplibSMTP(ldquosmtp

gmailcom587rdquo)

serverehlo()

serverstarttls()

serverlogin(lsquoxyzgmail

comrsquorsquoyourpassword herersquo)

serversendmail(msg[lsquoFromrsquo]

emaillist msgas_string())

El coacutedigo del proyecto estaacute disponible en httpbitly2jMAdMY usando el siguiente comando

$ git clone

httpsgithubcommiltiadisme-

lissas

IoTOdroidC2Doorbellgit

TIMBRE

A finales de 2016 los usuarios de Cyanogenmod se horrorizaron cuando Cyanogen anuncioacute la

cancelacioacuten de sus servicios dejando a todos los usuarios que dependiacutean de Cyanogenmod sin soporte Sin em-bargo en poco tiempo llegariacutea una so-lucioacuten en forma de LineageOS Si eres un usuario del ODROID-XU3 XU4 es el momento perfecto para colaborar con la versioacuten de LineageOS en los foros ODROID

Caracteriacutesticas- Android 711 Nougat lineageoS 141- Kernel 3109- openGl eS 112030 (aceleracioacuten por GpU)- opencl 11 ep (aceleracioacuten por GpU)- funcioacuten multiusuario habilitada (hasta 8 usuarios)- ethernet integrado y soporte para ether-net Gigabit USb 30 - Soporte para rtl8188cUS rtl8191SU y USb Wireless ralinkt- Soporte bluetooth USb (ble A2dp Sink)- Soporte para dongle GpS USb- Anclaje a red USb - punto de acceso Wi-fi portaacutetil- Soporte DAc USb nativo para Android

LInEAGEOS-141 ODROID-Xu3Xu4OLvIDATE DE CyAnOGEn EL fuTuRO ESTA AquIpor voodik editado por bruno Doiche

LINEAGEOS

- Soporte para Webcam USb UVc- Soporte hDMi-cec- Selinux

Problemas conocidosEn este momento soacutelo admite moacutedu-

los Bluetooth de bajo consumo v40 (BLE) Consulta el Moacutedulo Bluetooth 2

Coacutemo instalarloEn primer lugar necesitas preparar

tu emmcsd con imaacutegenes especiales de auto-instalacioacuten

La puedes encontrar aquiacutehttpophmdrjrnetvoodik5422

ODROID-XU3AndroidCM-141-ATV

Alpha-01_110217

Graba la imagen en tu eMMCsd a traveacutes de Win32DiskImager y arranca el dispositivo Tendraacute que esperar paci-entemente durante el primer arranque ya que el proceso de actualizacioacuten puede llegar a tardar hasta 20 minutos

Coacutedigo fuente Kernel

$ git clone httpsgithubcom

voodikandroid_kernel_hardkernel

_odroidxu3 -b cm-140_5422

ODROID MAGAZINE 11

SNES 3DO y Sega Genesis El juego teniacutea diferentes escenarios para jugar la selva la nieve y el desierto

Open Fodder ofreciacutea 23 misiones que se dividiacutean en varias fases En total suponiacutea superar 72 niveles para llevar

Este mes me gustariacutea hablar de un juego llamado Open Fodder se trata de un remake del claacutesico

juego de Amiga Cannon Fodder desar-rollado por Sensible Software en 1993 Utiliza los datos del juego original Can-non Fodder para conseguir una experi-encia muy similar al juego original en tu ODROID

Muchos de los populares juegos de Linux de hoy en diacutea como Stratagus y Freeciv son en realidad remakes de claacutesicos juegos de DOS de mediados y finales de los 90 y Open Fodder no es diferente El remake de Cannon Fodder es un juego disparos accioacuten y estrategia donde controlas a un pequentildeo grupo de soldados que avanza a traveacutes de varias docenas de niveles para matar a los sol-dados enemigos destruir tanques echar abajo edificios y derrotar a tus enemigos El juego fue lanzado por primera vez para Amiga en 1993 y fue exportado por sus desarrolladores a MS-DOS Atari Jaguar

a tu escuadroacuten a la victoria Cuando se lanzoacute el juego fue muy elogiado por varias revistas de juego Amiga con pun-tuaciones que llevaban al 95 por ciento y fue considerado como uno de los mejo-res juegos lanzados en 1993 En general siguioacute siendo uno de los mejores juegos jamaacutes creado para la plataforma Amiga durante sus 11 antildeos de vida

Desde un punto de vista maacutes poliacutetico el juego lleva impliacutecito un intenso men-saje sobre la guerra en siacute misma puesto que juegas y llevar a tus soldados a una muerte inevitable Cada misioacuten se inicia

JuEGOS LInuXOPEn fODDERpor tobias Schaaf (meveric)

JUEGOS LINUX

figura 1 - el logotipo de cannon fodder en el cual estaacute basado open fodder

figuras 2 3 y 4 - los niveles de selva desierto y nieve en open fodder

figuras 5 y 6 - A medida que avanzas en el juego tu larga liacutenea de reclutas se con-vierte gradualmente en cruces alineadas como en un cementerio

ODROID MAGAZINE 12

nas segundas partes ademaacutes de algunas misiones de bonificacioacuten Cannon Fod-der 2 salioacute un antildeo maacutes tarde pero fue maacutes bien un ldquodisco de datosrdquo con ex-pansiones que una secuela ya que en su mayor parte presentaba maacutes misiones en lugar de nuevas caracteriacutesticas Tambieacuten estaba el X-Mas de Amiga que ofreciacutea algunas misiones diferentes basadas en el juego Cannon Fodder

Ejecutando Open Fodder

Open Fodder es un remake del motor del juego Cannon Fodder que lleva el juego a los sistemas operativos modernos Al igual que otras migraciones del motor del juego (como OpenTTD) puede uti-lizar los datos del juego original con esta versioacuten del motor para ejecutar el juego en tus dispositivos modernos Esta mi-gracioacuten tambieacuten cuenta con una versioacuten exportada para los dispositivos ARM lo que significa que podemos ejecutarlo igualmente en nuestros ODROIDs

Todaviacutea estaacute en desarrollo pero ya funciona bastante bien Como de cos-tumbre se puede instalar desde mi repo-sitorio y puesto que soacutelo requiere SDL2 y SDL2 Mixer como dependencias prin-cipales deberiacutea funcionar en Debian y

con un nuevo grupo de reclutas que se alinean esperando a unirse al combate Los soldados desechables (de ahiacute el nom-bre de cannon fodder Carne de Cantildeon) poco a poco se convierten en cruces alin-eadas dando forma a un cementerio mil-itar a medida que vas completando cada misioacuten formaacutendose maacutes y maacutes filas con-forme vas enterrando a tus predecesores Sin embargo los desarrolladores le di-eron un cierto toque de humor ya que los primeros soldados de tu escuadroacuten (y por tanto los casi seguro que moriraacuten) llevan de hecho los nombres de las seis personas que componiacutean el equipo de desarrollo del juego

Si nos fijamos bien el juego incor-poraba algunos detalles bastante intere-santes Por un lado tiene su propia can-cioacuten ldquo War never been so much funrdquo que suena durante la intro del juego iexclUno de los desarrolladores del juego Jon Hare compuso la muacutesica junto con el compositor Richard Joseph Si teniacuteas el Amiga CD32 tambieacuten recordaraacutes una pista adicional que incluiacutea un video en el cual los desarrolladores se disparaban entre siacute con armas de juguete (httpbitly2l67bFy) iexclSin duda se divirtieron bastante desarrollando este juego

Cannon Fodder tambieacuten tuvo algu-

JUEGOS LINUX

Ubuntu por igual las puedes encontrar en mi lista principal de paquetes para armhf y jessiemain para arm64

Se puede instalar con este comando en un dispositivo ODROID que ejecute Debian suponiendo que ya tengas con-figurados mis repositorios o esteacutes usando una de mis imaacutegenes de Debian (httpbitly13v98ly)

$ apt-get install

openfodder-odroid

He alterado ligeramente el juego para que siempre se ejecute en modo pantalla completa aunque si lo deseas puedes cambiar al modo de ventana simple-mente pulsando F11 cuando tenga el juego activado

Convirtiendo los datos del juego

Por siacute sola mi versioacuten de Open Fod-der viene con el especial Amiga X-Mas ademaacutes de varios niveles demo dis-ponibles de forma gratuita Si quieres jugar el juego real tendraacutes que importar los datos desde un CD Cannon Fodder

Si estaacute usando un ODROID para ju-gar al Open Fodder puedes localizar las carpetas de los datos del juego en la car-peta $HOMEopenfodderData Por ejemplo homeodroidopenfodderDataDos_CD es una de esas carpetas de datos del juego Existen varias carpe-tas de datos del juego que puedes usar dependiendo de la versioacuten que tengas del juego Cannon Fodder

Dos_CDAunque el juego es compatible con

muchas y diferentes fuentes del juego actualmente soacutelo Dos_CD parece ser una versioacuten de Open Fodder ldquototal-mente compatiblerdquo con muy pocos er-rores y problemas El resto de fuentes del juego pueden tener problemas

Aquiacute tienes un consejo raacutepido Aunque se llama Dos_CD cogeraacute cu-alquier versioacuten de DOS de Cannon Fodder que puedas encontrar Si tienes

figura 7 - Sensible Software - los desarrolladores de cannon fodder

ODROID MAGAZINE 13

WHDLoad en un Amiga (o WinUAE) para extraer los archivos del juego y co-piarlos en la carpeta DataAmigardquo No lo he probado pero si tienes la ldquoCannon Fodder Collectionrdquo de Amiga CD32 no oficial puedes copiar el contenido de FodderNew en esta carpeta lo que tendraacute como resultado niveles completamente diferentes Puede considerarse como una versioacuten maacutes compleja del juego aunque a la vez maacutes divertida Por lo tanto bien poner los archivos originales de Amiga aquiacute o bien los archivos FodderNew de la ldquoCannon Fodder Collectionrdquo

Dos2_CDDos2_CD es en realidad la carpeta

de la versioacuten DOS de Cannon Fodder 2 pero tambieacuten funciona con la versioacuten GoG Desafortunadamente tiene algu-nos problemas el maacutes grave es que el juego no tiene ninguacuten tipo de sonido o muacutesica Aparte de esto todo parece fun-cionar correctamente pero desconozco coacutemo reaccionaraacute en niveles posteriores La carpeta Data tambieacuten incluye las car-petas WAV Plus AmigaFormat_XMAS y Custom En WAV se almacenan los efectos de sonido por defecto para to-dos los juegos (Cannon Fodder) Plus es una demo del nuacutemero 31 la revista Amiga Power y AmigaFormat_XMAS es el Amiga Format Christmas Special Tambieacuten hay una carpeta Custom que te permite jugar otros juegos y mapas pero necesitan la versioacuten (CD) de DOS o de lo contrario no apareceraacuten

Notas finalesOpen Fodder es un buen proyecto

que te permite ejecutar este increiacuteble juego en sistemas modernos Realmente me gusta y estoy deseando ver coacutemo pro-gresa Espero que las versiones de Amiga y Cannon Fodder 2 sean pronto total-mente compatibles Tal vez incluso poda-mos ver mejoras graacuteficas con el tiempo Me gustariacutea ver graacuteficos maacutes modernos ya que el juego es bastante antiguo y los graacuteficos no son los maacutes idoneos para res-oluciones 1080p

la versioacuten de disco de Cannon Fodder simplemente copia el CF_ENGDAT en la carpeta Dos_CD La versioacuten original de CD DOS teniacutea un archivo llamado cf_cddat Cambiar el nombre a CF_ENGDAT y copiarlo a la carpeta Dos_CD Si tienes la versioacuten GoG del juego soacutelo tiene que copiar CF_ENG DAT a la carpeta Dos_CD iexclEsta es una forma raacutepida y legal de conseguir el juego si estaacutes interesado

Aseguacuterate de que el nombre del ar-chivo este en mayuacutescula ya que el juego tiene en cuenta esta cuestioacuten Intenta que coincida todo para asegurarte de que las cosas funcionen sin problemas

Amiga_CDAmiga CD32 tambieacuten contaba con

una versioacuten de este juego Esta es la ver-sioacuten que incluye el video al que hemos hecho referencia anteriormente En el CD de Amiga CD32 hay una carpeta llamada Fodder El contenido de esta carpeta debe copiarse a la carpeta Ami-ga_CD Puedes extraer la segunda pista del CD y almacenarla como Track2flv en la misma carpeta con la finalidad de tener el archivo de video

Me topeacute con algunos problemas cu-ando haciacutea esto y descubriacute nuevamente que el juego buscaba muchos archivos en mayuacutesculas asiacute que utiliceacute el siguiente comando para copiar todos los archivos y tenerlos tambieacuten en mayuacutesculas en la carpeta Amiga_CD$ for files in `ls` do cp $files

`echo $files | tr lsquo[lower]rsquo

lsquo[upper]rsquo` done

Asiacute funcionaba bien pero teniacutea algu-nos fallos Por ejemplo la animacioacuten del helicoacuteptero al inicio de cada misioacuten no apareciacutea y el cursor cuando se guarda un archivo se distorsionaba Aparte de esto no he visto problemas importantes en la versioacuten Amiga CD32

AmigaLa Informacioacuten de desarrollador de

Open Fodder dice ldquoUsar el instalador

JUEGOS LINUXJUEGOS ANDROID

CAuSALITy un JuEGO DE ROMPE-CABEzAS COn PARA-DOJAS DE vIAJES En EL TIEMPO por bruno Doiche

Configura tuacute mismo los entornos extrantildeos e insoacutelitos y

ayuda a un grupo de astronautas varados a encon-trar una ruta hacia un lugar seguro Cada nivel al que te enfrentas representa un nuevo reto donde necesitas llevar a tu astronauta a una salida que coincida con su color Los maacutergenes de tiempo son cortos aunque es muy divertido Aunque formas parte de tan soacutelo una fraccioacuten de tiempo de la vida de tu personaje iexclten cuidado pasaraacutes un montoacuten de tiempo enganchado a este juego

httpsplaygooglecomstoreappsdetailsid=comlojugamesandroidCausality

el entorno 3D isomeacutetrico es magniacute-fico a menudo no superaba el nivel porque los graacuteficos me cautivaban

ODROID MAGAZINE 14

tePi necesitan estar conectados a otros distintos en el ODROID-C2 porque parece haber un conflicto La interfaz UART ocupa estos pines y el estado por defecto del ODROID (1=high en Pin 8) no es lo que espera la RemotePi (GPIO debe entrar en el valor por defecto 0=low para cortar la energiacutea tras el apagado) Pero puesto que necesitas utilizar cables de todos modos para conectar la Remot-ePi esto no supondraacute ninguacuten problema ya que simplemente puedes reconectar los cables a otros pines GPIO

Como evitamos el circuito de ali-mentacioacuten del ODROID encendieacutendo-lo a traveacutes de GPIO tambieacuten pasamos por alto la proteccioacuten ante subidas de tensioacuten 2526A del dispositivo pero no te preocupes La RemotePi tambieacuten tiene proteccioacuten ante subidas de tensioacuten que deberiacutea coincidir con el mismo val-or que en el caso de la RemotePi board para la Raspberry Pi 3 Sin embargo la RemotePi para la Raspberry Pi 2 es de soacutelo 2A Esto estaacute bien porque el valor es menor a los 26A del ODROID de modo el polyfuse de la RemotePi se ac-tivariacutea antes si conectas demasiados dis-

La RemotePi board (httpbitly2l8JcWU) que convierte cu-alquier mando a distancia en un

interruptor de encendido para tu orde-nador de placa reducida puede ser com-patible con el ODROIDC2 si sigues esta guiacutea Si utilizas tu dispositivo como centro multimedia esta placa te propor-cionara un receptor de infrarrojos y un circuito de alimentacioacuten asiacute como un botoacuten de encendido Puedes encender y apagar tu ODROID completamente a traveacutes de una sentildeal infrarrojos (IR) y simplemente presionar el botoacuten de en-cendido para apagarlo y reiniciarlo con seguridad La placa RemotePi es respon-sable del modo espera que absorbe una miacutenima energiacutea mientras el ODROID estaacute completamente apagado Por uacutel-timo la placa alimenta tu dispositivo a traveacutes de GPIO lo cual requiere un cable microUSB para conectarlo a la Re-motePi en lugar de utilizar un adaptador de corriente normal

Configuracioacuten de hardware

Puesto que la RemotePi estaba pen-sada originalmente para la Raspberry Pi 2 necesitaraacutes utilizar cables adiciona-les en lugar de colocarla justamente en cima del C2 para evitar interferir con el disipador de calor asiacute que debes re-cablear algunos pines Es necesario utili-zar cables con el diaacutemetro adecuado para los pines de 5V y puesta a tierra ya que la corriente podriacutea estar entre los 2A y 26A dependiendo de cuaacutentos dispositi-vos USB conectes a tu dispositivo

Los pines GPIO 8 y 10 de la Remo-

positivos no alimentados de forma exter-na que no es una buena idea en un SBC al fin al cabo No obstante debido a esta diferencia de amperaje una RemotePi para la Raspberry Pi 3 seriacutea la mejor op-cioacuten para este proyecto

Como resultado del nuevo cableado el firmware de RemotePi ya no se puede configurar de forma normal aunque nunca he usado esta funcioacuten Si fuera necesario configurar o actualizar el firm-ware necesitaraacutes volver a conectar los pines 8 y 10 de la RemotePi a los pines 8 y 10 del ODROID durante la actu-alizacioacuten del firmware y luego deshacer los cambios una vez que la actualizacioacuten haya finalizado Otra posibilidad es simplemente conectar una Raspberry Pi para actualizar el firmware Esto suena a un montoacuten de problemas pero en re-alidad simplemente es extender la con-exioacuten del cabezal y cambiar una liacutenea en el script principal y dos liacuteneas en otro script opcional si haces uso de ello

Re-cableando laconexioacuten GPIO

Dado que la RemotePi estaacute disentildeada

REMOTEPI BOARD PARA EL ODROID-C2por inifity85

REMOTEPI

figura 1 - remotepi board

ODROID MAGAZINE 15

ergiacutea completamenteIrswitchsh (solo cambia el script

original de MSL Digital de GPIOpin1 = 14 a GPIOpin1 = 225)

binbash

prevent restarting XBMC at

shutdown This is only used for

OpenElec before V5

LOCKDIR=rdquovarlockrdquo

LOCKFILE=rdquoxbmcdisabledrdquo

this is the GPIO pin receiving

the shut-down signal

Raspberry Pi pin8 GPIOpin1=14

Odroid-C2 pin26 GPIOpin1=225

GPIOpin1=225

functions

add_omit_pids()

omit_pids=rdquo$omit_pids -o $1rdquo

safe_shutdown ()

for OpenElec before V5

touch ldquo$LOCKDIR$LOCKFILErdquo

for OpenElec V5 and later

systemctl stop kodi

add_omit_pids $(pidof connmand)

add_omit_pids $(pidof dbus-dae-

mon)

killall5 -15 $omit_pids

for seq in `seq 1 10` do

usleep 500000

clear gt devtty1

killall5 -18 $omit_pids || break

done

sync

umount -a gtdevnull 2gtamp1

poweroff -f

echo ldquo$GPIOpin1rdquo gt sysclass

gpioexport

echo ldquoinrdquo gt sysclassgpio

gpio$GPIOpin1direction

while true do

sleep 1

power=$(cat sysclassgpio

gpio$GPIOpin1value)

if [ $power = 0 ] then

echo ldquooutrdquo gt sysclassgpio

gpio$GPIOpin1direction

echo ldquo1rdquo gt sysclassgpio

una carcasa personalizada de modo que el receptor integrado podriacutea estar oculto y no ser uacutetil En ese caso puedes desac-tivar el IR del ODROID en favor del re-ceptor externo GPIO-IR en la RemotePi y conectar el pin 12 Tienes disponible maacutes informacioacuten sobre el cambio al receptor GPIOIR en LibreELEC en httpbitly2lpDl27

Scripts de apagado para LibreELEC

Los dos scripts tratados a continu-acioacuten pueden descargarse desde la paacutegina de soporte de MSL Digital Solutions en httpbitly2kMxyVG En esta paacutegina tambieacuten encontraras una guiacutea para utili-zar estos scripts en otros sistemas opera-tivos como Volumio y RuneAudio

El script irswitchsh se usa para el apagado seguro a traveacutes de sistema In-frarrojos Tras pulsar el correspondiente botoacuten el sistema se apagaraacute de forma se-gura luego RemotePi esperaraacute a que el GPIO225 alcance el estado 0 (low) que aparece tras el cierre exitoso del sistema Finalmente cortaraacute la energiacutea

El script shutdownsh se usa para el apagado seguro a traveacutes de la interfaz del programa o script Despueacutes de navegar hasta el botoacuten de apagado en la GUI el sistema se apagaraacute de forma segura luego RemotePi esperaraacute a que el GPIO225 alcance el estado 0 (low) que apareceraacute tras apagarse el sistema de forma adec-uada y segura Finalmente cortaraacute la en-

originalmente para una Raspberry Pi desgraciadamente no es soacutelo enchufar y usar Necesitaraacutes volver a cablear dos pines usando los cables de todos los pines tal y como se muestra en la Figura 2 Re-cablea el pin 8 de la RemotePi al pin 26 del ODROID-C2 y el pin 10 de la RemotePi al pin 7 del ODROID-C2

Si no quieres utilizar el receptor IR de la RemotePi para el mando a distan-cia de LibreELEC puedes dejar desco-nectado el pin 12 La placa continuaraacute encendieacutendose y apagaacutendose a traveacutes del comando de control remoto IR pero el control de la GUI de LibreELEC seraacute asumido por el receptor de infrarrojos integrado en el ODROID Sin embargo si has comprado una RemotePi con un receptor IR y un LED externo es posible que hayas decidido colocarla dentro de

REMOTEPI

figura 3 - la remotepi ha sido recableada y montada en una carcasa personalizada

figura 2 - re-cableado Gpio

ODROID MAGAZINE 16

Centro Multimedia por ejemplo Esos comandos de apagado se equiparaacuten a eventos internos similar a cuando nave-gas por el menuacute de apagado de Kodi Sin utilizar este segundo script el sistema se cerraraacute con seguridad pero la placa Re-motePi no recibiriacutea ninguna indicacioacuten para monitorizar el GPIO225 de modo que no cortariacutea la energiacutea tras apagarse el sistema correctamente

Usando el receptor IR de la RemotePi

Si deseas utilizar el receptor IR de la RemotePi en lugar del receptor IR ODROID integrado tendraacutes que des-activar el sistema IR integrado y activar el receptor IR GPIO Para hacer esto en Ubuntu puede consultar el artiacuteculo de la Wiki de Hardkernel en httpbitly2l8KrWg Para Libre-ELEC echa un vistazo a mi mini-guiacutea en httpbitly2lLKj2A Para preguntas comentari-os o sugerencias visita el hilo original en httpbitly2mgFGKk

gpio$GPIOpin1value

sleep 3

safe_shutdown

fi

done

Shutdownsh (solo cambia GPIOpin =15 a GPIOpin =249 y GPIOpin1 =14 a GPIOpin1 =225)

binbash

if [ ldquo$1rdquo = ldquorebootrdquo ] then

Raspberry Pi pin10 GPIOpin=15

Odroid-C2 pin7 GPIOpin=249

GPIOpin=249

Raspberry Pi pin8 GPIOpin1=14

Odroid-C2 pin26 GPIOpin1=225

GPIOpin1=225

echo ldquo$GPIOpinrdquo gt sysclass

gpioexport

execute shutdown sequence on

pin

echo ldquooutrdquo gt sysclassgpio

gpio$GPIOpindirection

echo ldquo1rdquo gt sysclassgpio

gpio$GPIOpinvalue

usleep 125000

echo ldquo0rdquo gt sysclassgpio

gpio$GPIOpinvalue

usleep 200000

echo ldquo1rdquo gt sysclassgpio

gpio$GPIOpinvalue

usleep 400000

echo ldquo0rdquo gt sysclassgpio

gpio$GPIOpinvalue

set GPIO 14 high to feedback

shutdown to RemotePi Board

because the irswitchsh has

already been terminated

echo ldquo$GPIOpin1rdquo gt sysclass

gpioexport

echo ldquooutrdquo gt sysclassgpio

gpio$GPIOpin1direction

echo ldquo1rdquo gt sysclassgpio

gpio$GPIOpin1value

usleep 4000000

fi

El script shutdownsh es uacutetil si a vec-es usas las aplicaciones remotas Android Yatse o Kore o hotkeys para apagar tu

REMOTEPI

ODROID Talk Subreddit

httpwwwredditcomrodroid

ODROID Magazine

estaacute en Reddit

ODROID MAGAZINE 17

El HiFi Shield 2 (39$ httpbitly2lHSlZJ) es un Con-vertidor Digital a Analoacutegico de Alta definicioacuten (DAC) para el ODROID-C2 y el ODROID-C1+ Se trata de

una placa de sonido especial para el ODROID-C2 y C1 + que estaacute optimizada para mejorar la calidad de reproduccioacuten del sonido Ofrece un sonido muy bien equilibrado consistente intenso amplio y muy bien dimensionado por niveles Hemos analizado la calidad de audio de la salida HiFi Shield 2 DAC con un equipo estaacutendar de la industria del sonido llamado Au-dio Precision Audio Precision es un analizador de audio de alto rendimiento optimizado para la produccioacuten de audio digital

Usando el chip DAC PCM5242 de uacuteltima generacioacuten de Texas Instrument conocido como Burr-Brown el HiFi Shield 2 soporta formatos de audio de 16 24 y 32 bits con una ra-tio THD+N miacutenima (0002) y una dinaacutemica ideal (114dB +) ademaacutes de sorprendentes tasas de muestreo de 384 kHz La interfaz dedicada SPDIF soporta una definicioacuten de hasta 192kHz24bit a traveacutes de una salida oacuteptica (Toslink)

Si hacemos uso del puerto de expansioacuten I2S en el C2C1+ no es necesario ocupar un puerto USB permitiendo al usu-ario seleccionar el sistema de reproduccioacuten de audio que desee como Volumio y Debian (DietPi) para reproducir sonido HiFi

HIFI SHIELD 2

HIfI SHIELD 2EL MEJOR SOnIDO quE PODRAS COnSEGuIR En AnDROIDeditado por rob roy (robroy)

oDroiD-c2 y hifi Shield 2 Audio pb +J

primer plano de la placa con anotaciones

Distribucioacuten de los 7 pines i2S del c2c1+

la salida de audio es estaacutendar la salida de color rojo corresponde al canal de audio iz-quierdo y la salida de color blanco correspon-de al canal de audio derecho

ODROID MAGAZINE 18

Detalles

La guiacutea de configuracioacuten de UbuntuLinux para ODROID-C2 estaacute disponible en httpbitly2brrGdG y para ODROID-C1+ en httpbitly2lI7AC7 El sistema operativo oficial Volumio 2 se puede descargar desde httpbitly2kOJNAV y la imagen DietPi basada en Debian se encuentra en httpbitly2ls45yM Puede ver los esquemas en httpbitly2mnukV4

Diagrama por bloques del hifi Shield2

Caracteriacutesticasbull El control de volumen a traveacutes de la interfaz

i2c es una gran caracteriacutestica para mantener una buena calidad del sonido con varios voluacutemenes de salida de audio

bull Los puertos de salida incluyen terminales esteacute-reo rcA chapados en oro

bull La fuente de alimentacioacuten tiene habilitado un regulador de interferencias de ruido ultra-bajo lo cual reduce el ruido de la fuente de alimentacioacuten y aumenta en gran medida el ratio sentildealruido

bull La interfaz I2S permite la descodificacioacuten di-recta de la entrada digital a la salida analoacutegica utili-zando la sincronizacioacuten del reloj maestro

bull La superficie de la PCB estaacute chapada en oro so-bre 2 onzas de cobre lo cual garantiza la continui-dad de la sentildeal y reduce la reflexioacuten y deflacioacuten de la sentildeal

bull Dispone de almohadillas soldadas a la salida de audio balanceada (sentildeal diferencial)

bull La interfaz SPDIF dedicada es nueva admite una definicioacuten de hasta 192khz24bit a traveacutes de una nueva salida oacuteptica (toslink)

bull Este HiFi shield no es compatible con Android y hardkernel no tiene planes para hacerlo compatible y asiacute poder habilitar el controlador i2S en el Kernel y el hAl de Android

El Manual de usuario del ODROID-XU4 disponible en httpbitly1U9Q8yg ha sido revisado hace poco para incluir algunos de los perifeacutericos maacutes recientes como

la Expansion Board SmartPower2 y oCam Puesto que ahora Hardkernel tambieacuten ofrece Ubuntu 1604 todos los ejemplos de coacutedigo se han actualizado para que sean compatibles con el nuevo sistema operativo Si tiene comentarios preguntas o sugerencias visita el hilo de los foros ODROID en httpbitly1RykBrT

MAnuAL Xu4ACTuALIzADOREvISADO PARA uBunTu 1604 y LOS PERIfERICOS MAS RECIEnTESeditado por rob roy (robroy)

MANUAL XU4

el manual del oDroiD-xU4 incluye informacioacuten detallada de los diferentes sistemas operativos software y perifeacutericos disponibles para el oDroiD-xU4

ODROID MAGAZINE 19

El DevOps es complicado Los grandes proyectos de soft-ware como Mesos y Kubernetes desarrollan equipos como los que se encuentran en la mayoriacutea de las empre-

sas y organizaciones tecnoloacutegicas como CoreOS con la finali-dad de ayudar a los desarrolladores a poner sus aplicaciones en funcionamiento Sin embargo iquestcuaacutel seriacutea una buena solucioacuten para un desarrollador en solitario o una pequentildea red domeacutesti-ca iquestCoacutemo podemos usar el coacutedigo a nivel de infraestructura

Uso un portaacutetil Macintosh OSX para desarrollo pero para las aplicaciones de larga duracioacuten o aplicaciones que se ejecu-tan por la noche necesito un entorno remoto siempre activo ya que mi portaacutetil estaraacute fuera de liacutenea o en el tren conmigo mientras voy y vengo del trabajo Tiene su sentido no utilizar el ordenador como un entorno para la puesta en funcionamiento de aplicaciones

El ODROID-XU4 es un ordenador ideal para un entor-no de implementacioacuten remoto ya que es econoacutemico flexible cuenta con excelentes especificaciones teacutecnicas y puede ejecutar Linux Este artiacuteculo tiene por objetivo explicar coacutemo almacenar coacutedigo de implementacioacuten en tu repositorio de proyectos asiacute como automatizar las implementaciones y ejecuciones

Arch LinuxArch Linux es una distribucioacuten de Linux gratuita de coacutedigo

abierto que fue lanzada en 2002 Estaacute centrada en la elegancia la integridad del coacutedigo el minimalismo y la simplicidad y cuenta con que el usuario haga un esfuerzo en comprender el funcionamiento del sistema Arch Linux utiliza en particular un modelo de revisioacuten continua de modo que todo lo que se necesitas para conseguir el software del sistema maacutes reciente es actualizar el sistema de forma perioacutedica

Arch Linux puede ser algo difiacutecil de asimilar ya que uti-liza herramientas diferentes a las de una distribucioacuten Debian El gestor de paquetes se activa a traveacutes de ldquopacmanrdquo en lugar de ldquoapt-getrdquo y existe un gestor complementario de paquetes muy popular llamado ldquoyaourtrdquo Muchos de los servicios o her-ramientas maacutes comunes no se instalan por defecto

Arch Linux esta hecho principalmente para procesadores x86 pero un proyecto llamado Arch Linux ARM (ALARM) tiene una distribucioacuten ARM de Arch Linux para arquitectu-ras AArch64 ARMv8 y ARMv7 Hardkernel el fabricante de ODROIDs es de hecho un patrocinador del proyecto Arch Linux ARM

HOME DATA CENTER

HOME DATA CEnTERIMPLEMEnTACIOn DEL CODIGO COn ARCHLInuXpor John Skilbeck

Configurar la redDeberaacutes asignarle a tu dispositivo una direccioacuten IP LAN

DHCP reservada y en el mejor de los casos un nombre de host que se propagaraacute a lo largo de tu red por medio del servidor DNS de tu router De esta forma en nuestro entorno de desar-rollolocal podremos utilizar un nombre de host para resolver siempre el entorno de implementacioacutenremoto

Por ejemplo en mi red reservo el 192168249 a la direc-cioacuten MAC de mi ODROID Tambieacuten configuro una entrada DNS que asigna a esa direccioacuten IP ldquoodroidrdquo Utilizar un firm-ware personalizado en el router como Tomato USB o DD-WRT lo hace extremadamente faacutecil ya que esos firmwares convierten tu router en un pequentildeo ordenador Linux con una aplicacioacuten web GUI muy pulida aunque su implementacioacuten estaacute fuera del alcance de este artiacuteculo Si operas con subredes aseguacuterate dirigir el puerto hacia el puerto externo que se asigna al puerto SSH del dispositivo odroid ya que Git se ejecuta a traveacutes de SSH

Configurar el proyectoLoacutegicamente desearaacutes estandarizar el flujo de trabajo de la

implementacioacuten Esto haraacute que el trabajo con proyectos sea

el home data center de John es una auteacutentica obra de arte

ODROID MAGAZINE 20

extremadamente faacutecil y eliminas muchos de los cambios de contexto mental que utilizas cuando trabaja en varios proyec-tos Crearemos una carpeta para alojar todos nuestros archivos relacionados con implementaciones Coloca los archivos eje-cutables en ldquodeploybinrdquo y cualquier archivo cron en ldquodeploytasksrdquo (maacutes informacioacuten sobre esta cuestioacuten maacutes adelante)

Navega hasta el directorio del proyecto en una ventana de Terminal y luego escribe los siguientes comandos

$ mkdir -p deploybin

$ mkdir -p deploytasks

$ cd deploybin ampamp touch run-job ampamp

chmod u+x run-job ampamp cd -

$ cd deploytasks ampamp touch crontab

Tambieacuten puede estandarizar doacutende colocar tu coacutedigo fuente De esta forma le seraacute maacutes faacutecil a otras personas ver coacutemo se or-ganiza tu proyecto y conocer queacute es el coacutedigo fuente y queacute no

$ mkdir src

$ cd src ampamp (place source code here ie python core

py clojure coreclj nodejs appjs)

Simplificar los puntos de entradaIniciar una aplicacioacuten puede resultar algo confuso con todos

los comandos que se pueden ejecutar en diferentes lenguajes Por ejemplo puede usar Java ldquojava -jar [my-jar] jarrdquo o python ldquopython my-apppyrdquo y tu aplicacioacuten tambieacuten puede necesitar varios argumentos Todo esto deberiacutea simplificarse y resumirse en un archivo ldquodeploybinrun-jobrdquo

binsh

set -e

CMD=rdquosrcduckrdquo

exec $CMD $

Crear el archivo cronArch Linux no viene con un cliente o demonio cron por

defecto Instaacutelalo con ldquosudo pacman -Syu cronierdquo Utilizando cron puede ejecutar comandos en intervalos de tiempo espe-cificados haciendo uso de la sintaxis especial de cron Normal-mente se almacena en el archivo crontab del usuario al que puedes acceder con ldquocrontab -erdquo Sin embargo esto es demasi-ado manual y queremos usar coacutedigo como infraestructura Cron tambieacuten tiene algunos subdirectorios muy uacutetiles en ldquoetccronrdquo como ldquoetccrondailyrdquo yrdquoetccronhourly ldquo si co-locamos los archivos aquiacute eacutestos se ejecutaraacuten en los intervalos especificados

Revisa el archivo de ldquodeploytaskscrontabrdquo que colocare-mos en ldquoetccrondrdquo que se crea automaacuteticamente con nuestro script ldquoposttreceiverdquo

variables

SHELL=binbash

PATH=binusrbinusrlocalbinusrsbinusrlo-

calsbin

MAILTO=[your-email-address]gmailcom

cmd=rdquodeploybinrun-jobrdquo

app_dir=rdquohomeskilbjodeployappduckdnsrdquo

jobs

5 skilbjo cd ldquo$app_dirrdquo $cmd gtdevnull

Aquiacute tienes el esquema general de la estructura de un simple proyecto El uacutenico ejecutable del proyecto es un uacutenico script shell ubicado en ldquosrcrdquo

$ tree

READMEmd

deploy

bin

post-receive

run-job

tasks

crontab

src

duck

4 directories 5 files

GitPrimero queremos agregar una URL remota a nuestro

proyecto en nuestro entorno local

$ git remote add odroid sshodroid~deploygit

duckdnsgit

Ten en cuenta que dependiendo de la topologiacutea de tu red es posible que tenga que modificar esta url Si no puedes asignar nombres de host la URL de git se veriacutea asiacute donde 192168249 es la direccioacuten IP LAN de tu dispositivo

$ ssh192168249~deploygitduckdnsgit

Si tienes un usuario en tu entorno ODROID distinto al que tienes en tu entorno de desarrollo la url se veriacutea asiacute donde ldquoskilbjordquo es tu nombre de usuario

$ sshskilbjoodroid~deploygitduckdnsgit

Si tu servidor remoto estaacute en una subred diferente y tienes redireccionados los puertos tu url tendriacutea este aspecto donde

HOME DATA CENTER

ODROID MAGAZINE 21

ldquo2222rdquo es tu puerto externo

$ ssh192168122222~deploygitduckdnsgit

En el directorio principal de tu entorno remoto crea una carpeta llamada ldquo~deployrdquo con dos subcarpetas ldquo~deployapprdquo y ldquo~deploygitrdquo Los subdirectorios de ldquo~deploygitrdquo seraacuten los puntos finales de nuestros desarrollos y con un hook ejecutaraacuten comandos de implementacioacuten en los subdirectorios de ldquo~ deployapprdquo

Primero navega hasta el directorio principal del entorno re-moto y a continuacioacuten escribe los siguientes comandos

$ mkdir -p ~deployapp

$ mkdir -p ~deploygit

$ mkdir -p ~deploygitduckdnsgit

$ mkdir -p ~deployappduckdns

Ahora en ldquo~ deploygitduckdnsgithooksrdquo crea un archi-vo ejecutable llamado ldquopost-receiverdquo que se activaraacute con cada accioacuten hacia el punto final

$ cd ~deployappgitduckdnsgithooks

$ touch post-receive ampamp chmod u+x post-receive

$ vim post-receive

Rellena el ejecutable con lo siguiente en el directorio ldquo~deploygitduckdnsgithooksrdquo del entorno remoto

usrbinenv bash

set -eou pipefail

user=$(whoami)

dir=rdquohome$userdeployapprdquo

app=$(basename $(pwd) | sed -e lsquosgitrsquo)

deploy_dir=rdquo$dir$apprdquo

cron_dir=rdquoetccrondrdquo

GIT_WORK_TREE=rdquo$deploy_dirrdquo git checkout -f

cd ldquo$deploy_dirrdquo

build steps here

case ldquo$userrdquo in

(skilbjo) sudo cp deploytaskscrontab ldquo$cron_

dir$apprdquo

esac

you can also do project-specific build steps in

this section like install

dependencies (ie npm install) compile source

code (ie lein uberjar)

as well as if a long-lived app run commands as

well (ie java -jar my_jarjar)

echo ldquoall donerdquo

exit 0

ImplementacioacutenAhora estamos listos para implementar ya que nuestro en-

torno local estaacute configurado para alcanzar el punto final del servidor de implementacioacuten nuestro entorno remoto estaacute con-figurado para recibir la notificacioacuten y revisar el coacutedigo fuente ejecutar cualquier paso de compilacioacuten y colocar una tarea en el directorio cron del sistema para su lanzamiento Ponto todo en praacutectica con el siguiente comando en el directorio del proyecto del entorno local

$ git push odroid

Ademaacutes para ver coacutemo se ha implementado todo esto en un proyecto de ejemplo visita httpbitly2lthYKW

Pasos finalesSe puede antildeadir al flujo anterior algunas caracteriacutesticas

como son muacuteltiples entornos ya sea con muacuteltiples ODROIDs o con un solo ODROID trataacutendolo como un servidor de ser-vicio Esto se puede hacer con subdirectorios bajo ldquo~deployrdquo como ldquo~deploystagingappmy_apprdquo o ldquo~ deployproduc-tionappmy_apprdquo

Ademaacutes podriacuteas antildeadir un servicio de integracioacuten conti-nua como CircleCI que ejecutariacutea una suite de testeo desde cada desarrollo a GitHub y si tiene eacutexito compila una imagen Docker No podriacuteas entonces tener un archivo en el entorno remoto que verificariacutea una imagen de un repositorio Docker y la ejecutariacutea en un intervalo especificado Esto es lo que hacen muchos de los softwares DevOps distribuidos como Mesos y Kubernetes pero en un entorno mucho maacutes rico que BASH y Linux

Referencias

Artiacuteculo Wikipedia de Arch linux httpbitly2l71ADKWebsite Arch linux ArM httpsarchlinuxarmorgArtiacuteculo que leiacute hace unos tres antildeos y que me inspiroacute para escribir mi propio artiacuteculo httpbitly2m5JAct

HOME DATA CENTER

ODROID MAGAZINE 22

odroid ARCADE BOXLA EXPERIEnCIA PERfECTA COn TuS JuEGOS ARCADE fAvORITOSpor brian Kim charles park y John lee

ARCADE BOX

Los ODROIDs tienen mejor rendimiento que las placas de la competencia especialmente en lo que respecta al renderizado de video lo que significa que

las placas ODROID son ideales para jugar lo cual hacen muchos usuarios de ODROID Ya hay disponibles varios sistemas operativos de plataforma de juegos como Lakka (httpbitly1NO8BBC) y ODROID GameStation Tur-bo (httpbitly1ASFO5O) Para disfrutar auacuten maacutes de nuestras sesiones de juegos creamos nuestra propia consola arcade con simples botones GPIO y joysticks y la llama-mos la ODROID Arcade Box Elegimos un ODROID-XU4 para este proyecto porque es el que tiene mejor rendimiento GPU de todos los dispositivos ODROID actuales En este artiacuteculo vamos a describir como hemos creado la ODROID Arcade Box

Requisitos( Figura 3 ndash )Decidimos hacer la ODROID Arcade Box usando

un MDF (tablero de fibra de densidad media) El Shifter Shield del XU4 tambieacuten es uacutetil para utilizar los pines de expansioacuten del ODROID-XU4 Los Joysticks los botones y los cables eran los componentes de entrada y se utilizoacute

Nuestro primer y simple prototipo

ODROID MAGAZINE 23

panel MDf 12t2eA 600x2202eA 600x752eA 220x75taladroplegadoraDesmontadorcinta meacutetricaNavaja multiusoAlicates de punta largaoDroiD-xU4xU4 Shifter shieldSMpS (fuete Alimentacioacuten)

extendedores hDMi USb ethernetenchufe de alimentacioacuten y Switchbisagras 2eAreceptor de puertacaucho 4eAtornillospulsadores 19eAJoystick 2eAcablesterminales

una SMPS (Fuente de alimentacioacuten conmutada) como fuente de alimentacioacuten Las herramientas y las piezas utilizadas las tienes en esta paacutegina

La ODROID Arcade Box necesita un total de 27 entradas (19 entradas para botones y 8 entra-das para joysticks) Las 24 entradas GPIO digi-tales del ODROID-XU4 no son suficientes para las 27 entradas de modo que creamos dos puertos ADC adicionales para los tres botones que nos fal-taban Los valores de entrada ADC se basan en el voltaje de entrada y los valores de entrada digital y analoacutegica se procesan en el demonio GPIO que se describe a continuacioacuten

Disentildeo y montajeLos paneles de la ODROID Arcade Box deben

ser disentildeados y fabricados para que los botones y joysticks esteacuten bien colocados Elegimos MDF 12T teniendo en cuenta el precio y la durabilidad El dise-ntildeo se puede hacer con cualquier herramienta CAD como Google Sketch o SolidWorks Aunque existen muchas plantillas de disentildeo para los paneles de joypad decidimos elegir un disentildeo arcade estaacutendar japoneacutes

El primer paso del montaje es unir la placa al panel MDF Este paso fue faacutecil aunque nos llevo maacutes tiempo que el resto Despueacutes insertamos los joysticks la toma de corri-ente el interruptor y los botones en el panel MDF superior Los conectores HDMI Ethernet y USB se colocaron en la parte trasera del panel MDF El siguiente paso fue montar cada panel MDF usando un taladro para hacer los agujeros luego con tornillos los sujetamos

El uacuteltimo paso del montaje de la ODROID Arcade Box es conectar por cable los pines de expansioacuten del ODROID-XU4 a los componentes de entrada En este proyecto dise-ntildeamos las entradas GPIO externas tal y como se muestra en la paacutegina 26 Los botones Select y Temp estaacuten conecta-dos a puertos de expansioacuten ADC

Configuracion del softwareDesarrollamos un nuevo demonio GPIO llamado gpio_

keyd (httpbitly2ljOZKg) Este demonio es capaz de asignar entradas GPIO y eventos claves usando uinput y wiringPi una libreriacutea de acceso GPIO basada en pines Estaacute disentildeada para que le sea familiar a quiene ya ha utilizado el sistema de cableado Arduino Aunque la blibreriacutea wiring-Pi upstream soacutelo admite Raspberry Pi Hardkernel ofrece una versioacuten de wiringPi para ODROIDs en su repositorio GitHub (httpbitly1Eq3UpF) El moacutedulo uinput es un moacutedulo del kernel de Linux que gestiona el subsistema de entrada del usuario Se puede utilizar para crear y manejar dispositivos de entrada desde una aplicacioacuten

ARCADE BOX

herramientas compentes y lo que hay justamente debajo

esquema de los puertos de expansioacuten

ODROID MAGAZINE 24

Elegimos ODROID GameStation Turbo (httpbitly1ASFO5O) como plataforma de software para nuestra ODROID Arcade Box que tiene integrado uinput Debes asegurarte de que el archivo de dispositivo uinput existe en el sistema operativo elegido porque algunos no tienen dispositivos uinput

$ ls devuinput

Si tu sistema operativo no tiene un archivo de disposi-tivo devuinput entonces seraacute necesario recompilar e in-stalar un nuevo kernel con la opcioacuten de configuracioacuten IN-PUT_UINPUT habilitada La paacutegina Wiki en httpbitly1YIToBI describe coacutemo compilar e instalar la imagen del kernel a partir del coacutedigo fuente

$ make menuconfig

Device Drivers

-gt Input device support

-gt Generic input layer

-gt Miscellaneous device

-gt User level driver support ltgt

Ten en cuenta que wiringPi debe instalarse antes de in-stalar gpio_keyd En la imagen GameStation de ODROID los comandos sudo deben ejecutarse como root porque la cuenta ldquoodroidrdquo no estaacute designada como usuario sudo

$ git clone httpsgithubcomhardkernelwiringPi

git

$ cd wiringPi

$ sudo build

Descarga el coacutedigo fuente gpio_keyd el cual estaacute dis-ponible en nuestro repositorio GitHub El procedimiento para compilar e instalar gpio_keyd es muy simple

$ git clone httpsgithubcombkrepogpio_keydgit

$ cd gpio_keyd

$ make

$ sudo make install

El script gpio_keyd hace referencia a etcgpio_keydconf como el predeterminado para la informacioacuten de los botones y GPIO El archivo de configuracioacuten fue modi-ficado para las 27 entradas de la ODROID Arcade Box Algunas botones ya se utilizaban en el emulador de juego de modo que tuvimos que cambiar la configuracioacuten del emulador para evitar conflictos entre los botones de en-trada GPIO y el emulador Ten en cuenta que el campo ltGPIO pingt en el archivo de configuracioacuten hace referen-

ARCADE BOX

plano del disentildeo de joypad

la oDroiD Arcade box montada

ODROID MAGAZINE 25

cia al nuacutemero wiringPi no al GPIO y al nuacutemero de pin (httpbitly2lbzPIB)

Ejemplo de configuracioacuten para las 27 entradas etcgpio_keydconf

Digital input ltKey codegt ltGPIO typegt ltGPIO pingt ltActive valuegt User 1KEY_LEFT digital 15 0KEY_RIGHT digital 1 0KEY_UP digital 4 0KEY_DOWN digital 16 0KEY_A digital 2 0KEY_S digital 3 0KEY_D digital 30 0KEY_F digital 21 0KEY_Z digital 8 0KEY_X digital 9 0KEY_C digital 7 0KEY_V digital 0 0 User 2KEY_BACKSLASH digital 12 0KEY_SLASH digital 13 0KEY_SEMICOLON digital 14 0KEY_LEFTBRACE digital 5 0KEY_Y digital 26 0KEY_U digital 27 0KEY_I digital 22 0KEY_O digital 23 0KEY_H digital 6 0KEY_J digital 10 0KEY_K digital 11 0KEY_L digital 31 0

Analog input ltKey codegt ltGPIO typegt ltADC portgt ltADC ac-tive valuegtKEY_B analog 0 0KEY_N analog 0 2045KEY_M analog 1 2045

To run gpio_keyd daemon at every startup is conve-nient for ODROID Arcade Box

etcinitdgpio_keyd binsh BEGIN INIT INFO

ARCADE BOX

Mapeo Gpio externo para los botones y Joysticks

cableado de la oDroiD Arcade box

ODROID MAGAZINE 26

Provides gpio_keyd Required-Start $all Required-Stop Default-Start 2 3 4 5 Default-Stop Short-Description Run usrbingpio_keyd if it ex-ist END INIT INFO

PATH=sbinusrsbinbinusrbin

libinitvarssh

liblsbinit-functions

do_start() if [ -x usrbingpio_keyd ] then usrbingpio_keyd -d ES=$ [ ldquo$VERBOSErdquo = no ] ampamp log_end_msg $ES return $ES fi

case ldquo$1rdquo in start) do_start restart|reload|force-reload) echo ldquoError argument lsquo$1rsquo not supportedrdquo gtamp2 exit 3 stop) killall gpio_keyd exit 0 ) echo ldquoUsage $0 start|stoprdquo gtamp2 exit 3 Esac

$ sudo chmod +x etcinitdgpio_keyd$ sudo update-rcd gpio_keyd defaults$ sudo reboot

En los comandos anteriores el script gpio_keyd se ejecuta como un demonio uti-lizando la opcioacuten ldquo-drdquo El uso de gpio_keyd se puede comprobar con la opcioacuten ldquo-hrdquo Comprue-ba de nuevo las teclas usadas por el juego o el emulador despueacutes fija la configuracioacuten del gpio_ keyd correctamente Es ahora cuando estaacutes listo para jugar y disfrutar de tus juegos con tu nueva ODROID Arcade Box

ARCADE BOX

the King of fighters 98 John vs brian

ODROID MAGAZINE 27

En este artiacuteculo analizaremos las diferentes formas que existen para ob-tener los datos del uso de la red

ConfiguracioacutenLa forma normal de analizar los datos

de traacutefico de la red es mediante el uso de datos a traveacutes de las aplicaciones de configuracioacuten del sistema tal y como se muestra en la figura 1

El uso de datos muestra la cantidad total de traacutefico de datos entrante y sa-liente que ha sido utilizada por una apli-cacioacuten Si seleccionas la aplicacioacuten veraacute una pantalla como la que aparece en la Figura 2 que muestra informacioacuten detal-lada sobre el uso de la aplicacioacuten tanto en primer plano como de fondo

La informacioacuten que se muestra den-tro de la aplicacioacuten de Configuracioacuten se almacena en data systemnetstats que requiere acceso root Al eliminar todo lo que hay dentro de esta carpeta se resta-

Como desarrolladores queremos que nuestras aplicaciones sean eficientes y a menudo nos gus-

tariacutea saber cuaacutento ancho de banda de red estaacute utilizando nuestra aplicacioacuten Esto es muy uacutetil por varias razones

bull Para monitorizar y asegurarnos de que la aplicacioacuten es realmente la nuestra y no una aplicacioacuten que ha sido pirateada y publi-cada con diferentes nombres en Play Store

bull Para asegurarnos de que no es-tamos cogiendo ancho de banda innecesario del plan de datos del usuario

bull Para comprobar que el disposi-tivo que estamos usando no estaacute accediendo a Internet sin nuestro consentimiento

blecen las estadiacutesticas de red mostradas en esta aplicacioacuten

Estadiacutesticas de la redLa aplicacioacuten de configuracioacuten nos

puede dar una informacioacuten general so-bre las estadiacutesticas de la red de datos que es un buen comienzo pero a veces necesitamos un anaacutelisis maacutes detallado que puede hacerse a traveacutes del coman-do dumpsys Android cuenta con una poderosa herramienta llamada dumpsys que nos permite obtener una instan-taacutenea o volcado del sistema que pu-ede incluir informacioacuten sobre la red la memoria y otros componentes Lee la documentacioacuten de Android en httpbitly2kK9dep para obtener maacutes infor-macioacuten del sistema Para conseguir maacutes informacioacuten relacionada con la red nos interesa el comando

$ dumpsys netstats detail

La Figura 3 muestra un pantallazo de lo que puedes ver desde una tablet Nexus 7 que ejecuta Lollipop 511

Hay algunas cuestiones importantes para entender las estadiacutesticas

bull Las estadiacutesticas UID muestran el desglose de las aplicaciones de primer plano y de fondo

bull Uid muestra el ID de usuario de la aplicacioacuten que se puede utili-zar para relacionar eacutesta con la in-

DESARROLLO AnDROID AnALIzAnDO EL uSO DE RED DE LAS APLICACIOnESpor Nanik tolaram

DESARROLLO ANDROID

figura 1 - Uso de datos en la configuracioacuten

figura 2 - Desglose del uso de datos de la app

ODROID MAGAZINE 28

$ dumpsys package detail

Este comando te proporcionaraacute una larga lista de informacioacuten sobre los pa-quetes que estaacuten instalados en tu dis-positivo Para las estadiacutesticas de red nos interesa la seccioacuten que se muestra en la Figura 5

La seccioacuten resaltada muestra el userId que se relaciona con el uid que se mues-tra en las estadiacutesticas de red Al relacio-nar este nuacutemero sabemos el nombre del paquete de la aplicacioacuten sobre el que es-tamos leyendo las estadiacutesticas de red

Aplicacioacuten de ejemplo

La aplicacioacuten de ejemplo de este artiacute-culo se puede descargar desde httpbitly2m8WenA que muestra coacutemo etiqu-etar la conexioacuten de red desde distintas

secciones de la aplicacioacuten lo cual puede ayudar a analizar el volumen de traacutefico de datos de la aplicacioacuten La Figura 6 muestra un ejemplo de coacutemo lo vemos si utilizamos Android Device Monitor (dentro de Studio diriacutegete a Tools -gt Android -gt Android Device Monitor)

Tal y como se puede ver en el graacutefico la simple aplicacioacuten tiene 3 conexiones dife-rentes y cada una de ellas estaacute accediendo a un sitio web diferente Al etiquetarlas con

formacioacuten del paquete (que ver-emos en la seccioacuten de detalles del paquete dumpsys) con el objeto de conocer queacute aplicacioacuten utiliza estas estadiacutesticas de red

bull Las etiquetas son uacutetiles si de-sea ver la cantidad de datos que utiliza cada conexioacuten de tu apli-cacioacuten Puedes ver un ejemplo de esto en la Figura 4 que muestra que el uid 10007 tiene las siguien-tes etiquetas 0x30000401 0x30003201 0x30002804 0x10000401 y 0x30000407 Es-tas etiquetas ayudan al desarrol-lador a saber cuaacutentos datos uti-liza cada parte de la aplicacioacuten Estas estadiacutesticas de red en par-ticular estaacuten vinculada al paquete Google Framework que forma parte de Google Play Store

En el siguiente apartado veremos coacutemo escribir una aplicacioacuten etiquetando el hilo que hace la conexioacuten de red para determi-nar la cantidad de datos que se utilizan

Estadiacutesticas de paquetes

En la seccioacuten anterior analizamos el uid que aparece al ejecutar el comando dumpsys netstats Ahora necesitamos sa-ber queacute uid corresponde a la aplicacioacuten en el dispositivo y esto se hace mediante el siguiente comando

DESARROLLO ANDROID

figura 3 ndash estadiacutesticas de red con Dumpsys

figura 4 - estadiacutesticas de etiquetas UiD

figura 5 - Detalles del paquete dumpsys

figura 6 - etiquetas de red

coacutedigos diferentes podemos ver la cantidad de traacutefico que consume cada conexioacuten y esto nos ayudaraacute a ver si nuestra aplicacioacuten utiliza el ancho de banda de un modo eficiente

El coacutedigo del siguiente fragmento muestra el uso de la API TrafficStats interna Esta etiqueta API muestra el subproceso que utiliza actualmente un socket con un identificador y todo el traacute-fico que pasa por la misma conexioacuten se grabaraacute junto Asiacute es como la aplicacioacuten es capaz de agrupar las 3 conexiones diferentes Internamente Android utili-za el moacutedulo xt_qtaguid del kernel para realizar este tipo de etiquetado Tienes disponible maacutes informacioacuten en httpbitly2kU8KXB

public void getUsingNormalURLC

onnection(String urlText int

threadTag)

throws IOException

URL url = null

TrafficStats

setThreadStatsTag(threadTag)

HttpURLConnection urlConnec-

tion = getConnection(url)

try

finally

TrafficStatsclearThread-

StatsTag()

ODROID MAGAZINE 29

Disgustado te subes a tu 4x4 de dominacioacuten del mun-do un vehiacuteculo que desde fuera parece maacutes bien un viejo camioacuten de granja pero por dentro se parece maacutes

al sistema de control de un transbordador espacial porque el conductor del restaurante oriental que realiza las entrega a do-micilio estaacute enfermo Ahora tienes que ir a recoger tu propia comida ldquoQueacute rudimentariordquo piensas cuando sales de tu garaje secreto Justamente cuando vas a parar el vehiacuteculo en un stop oyes un fuerte ruido Sales y te diriges raacutepidamente a la parte posterior del 4x4 donde observas un cubo de basura Te tiras de los pelos y piensas ldquoiexclEsos basureros Neanderthales dejaron otra vez el cubo en mediordquo Ahora te toca recoger los restos de tu cena y la basura de otros

Conforme te vas alejando para hacer tus recados empiezas a pensar en coacutemo evitar este inconveniente en el futuro Varias ideas te vienen a la mente

Un sistema lidar para escanear en 3D el entorno en tiempo real y alarmas sonoras cuando sea necesarioUn brazo ciberneacutetico colocado en la parte posterior del 4x4 que procese video para detectar objetos agarrarlos y moverlosUna simple camara trasera

Empiezas a considerar la viabilidad de cada una

Muy bueno pero demasiado complicado y costosoAuacuten mejor y un proyecto propio de un cientiacutefico loco pero demasi-ado complicado y costosoya tengo dos iexclpero estaba demasiado preocupado en mis pensa-mientos para prestarles atencioacuten

Lo que necesitas es algo simple sin complicaciones y barato que haga sonar una alarma para alertarte incluso cuando estar absorto en tus pensamientos ldquoAhardquo Recuerdas haber visto un nuevo producto en ameriDroid que puede hacer precisamente esto Se trata de un microcontrolador conectado al USB que soporta hasta 6 sensores ultrasoacutenicos con simples comandos en serie (httpbitly2l26ptV) ldquoiexclPerfectordquo Piensas

Regresas a tu laboratorio subterraacuteneo con el pollo Kung Pao en la mano te apresurar a encender tus monitores entras en el sitio web ameriDroid y pides un kit ldquoUSB Ultrasonic Ranging Sensorrdquo con 6 sensores y carcasas

Vas sintiendo una sensacioacuten de alivio a medida que regresas a los 12 proyectos en lo que ya estabas trabajando a la espera de que pasen un par de diacuteas hasta que llegue tu nuevo pedido Mientras te comes tu Kung Pao dibujas un diagrama de coacutemo quieres colocar los sensores en la parte posterior de tu vehiacuteculo

Un par de diacuteas maacutes tarde el kit llega Inmediatamente em-piezas a montar el kit y los sensores en la parte posterior de tu 4x4 teniendo cuidado de usar sellador de silicona para pro-teger los sensores de la lluvia aguanieve y nieve que puedas encontrar durante tus aventuras para dominar el mundo

A continuacioacuten consultas las instrucciones proporcionadas por ameriDroid con el kit sobre coacutemo controlar y leer los sen-sores desde tu fiel ODROID-C2 y VU7 que montaste en el salpicadero para este propoacutesito

Conectando el cable USBEl cable USB suministrado debe conectarse al microcon-

trolador (la pequentildea placa de circuito con filas de pines que sobresalen) El microcontrolador tiene una fila de 4 o 6 pines

DETECTAR LA PRESEnCIACROnICAS DE un CIEnTIfICO LOCOpor bo lechnowsky

SENSOR ULTRASONICO

ODROID MAGAZINE 30

en un extremo Si tiene 6 pines ceacutentrate en los 4 pines centrales y sigue estas instrucciones

Negro - conectar a GNDrojo - conectar a VccVerde - conectar a rxi

blanco - conectar a txD

Conectando los sensoresultrasoacutenicos

En cada sensor ultrasoacutenico hay cuatro pines marcados Vcc Trig Echo Gnd Para el primer sensor ultrasoacutenico conecta el pin 2 del microcontrolador al pin ldquoTrigrdquo del sensor ultrasoacutenico Conecta el pin 3 del microcontrolador al pin ldquoEchordquo del sensor Conecte el pin ldquoVccrdquo del sensor a DC 5V (el pin ldquoVCCrdquo del microcontrolador suministra 5V) y el pin ldquoGndrdquo del sensor a una conexioacuten a tierra como por ejemplo los pines ldquoGNDrdquo del microcontrolador

Si conectas un segundo sensor de ultrasonidos conecta ldquoTrigrdquo al pin 4 y ldquoEchordquo al pin 5 Continuacutea conectando los siguientes pines a los sensores hasta los pines 12 y 13 si al final optas por conectar los seis sensores ultrasonidos

Conexioacuten del softwareUtilizas un programa terminal como PuTTY Screen o tu

lenguaje de script o programacioacuten favorito para conectarte al puerto serie que aparece cuando te conectas el sensor ultrasoacuteni-co Esto variaraacute en funcioacuten del sistema operativo que utilizas para conectarte al microcontrolador En Windows consultar el ldquoAdministrador de dispositivosrdquo es la forma maacutes comuacuten de averiguarlo En Linux ldquodmesgrdquo o ldquolsusbrdquo son las formas de de-tectar a queacute puerto estaacute conectado Deberiacuteas ver algo denomi-nado ldquoPL2303rdquo que es la conexioacuten del microcontrolador Si recibes informacioacuten basura en tu terminal cuando te conectes aseguacuterate de que los ajustes en serie son 9600 baudios 8 bits ninguno (paridad) y 1 bit de parada Aquiacute tienes una lista de los comandos que puede aceptar el microcontrolador

bull debug on Activa la retroalimentacioacuten detallada Estaacute deshabilitada por defecto nos proporcionaraacute aclaracio-nes sobre los errores de entrada

bull debug off desactiva la retroalimentacioacuten detalladabull init x y activa un HC-SR04 en los pines especificados

X es trigger Y es echo Estos deben ser pines digitales El dispositivo 0 estaacute preestablecido en los pines 2 y 3 de modo que no es necesario especificar estos pines La seleccioacuten de pines no vaacutelidos devolveraacute un signo de ex-clamacioacuten ()

bull ping enviacutea una sola lectura del HCSR04 previamente utilizado Si no se ha utilizado todaviacutea se usaraacute el dis-positivo 0 Si al comando le sigue un espacio y un nuacutemero entre 0-100 (exclusivo) se realizaraacute ese nuacutemero de lecturas emitiendo primero el promedio de esas lec-

SENSOR ULTRASONICO

turas despueacutes el nuacutemero de lecturas fallidas (que no cuentan para el promedio) y luego los valores miacutenimo y maacuteximo de lectura separados por espacios En cual-quier caso si una sentildeal se desconecta automaacuteticamente devolveraacute -1

bull start Hace ping constantemente a todos los dispositivos conectados en secuencia Debido a que los dispositivos se utilizan uno a uno el flujo de datos de este comando seraacute maacutes raacutepido si los dispositivos miden distancias cor-tas Si este comando le sigue un espacio y un nuacutemero mayor que 0 la placa esperaraacute estos milisegundos entre la lectura del uacuteltimo dispositivo y la lectura del primer dispositivo El resultado de este comando seraacute la lectura de cada dispositivo (con un uacutenico espacio despueacutes de cada uno) y una vuelta tras el uacuteltimo dispositivo

bull stop detiene la operacioacuten ldquostartrdquo soacutelo es efectivo tras haber iniciado ldquostartrdquo

bull mode emite el modo de medicioacuten del flujo M para meacutetrico (miliacutemetros) I para Imperial (deacutecimas de pul-gada) o R para Raw (la longitud de pulso en microse-gundos devuelta por el HC-SR04) El valor predeter-minado es M

bull timeout emite el tiempo de espera actual para lecturas de la sentildeal El tiempo de espera es la mayor cantidad de microsegundos que la placa esperaraacute antes de declarar que el HC-SR04 ha realizado una mala lectura lo cual no es necesariamente lo mismo que el pulso maacutes largo que la placa aceptaraacute del HC-SR04 Cuando la placa mide el pulso del HC-SR04 primero espera a que el HC-SR04 comience a enviar un pulso Este tiempo cuenta para el tiempo de espera Cuando este comando le sigue un espacio y un nuacutemero el tiempo de espera se ajusta a ese nuacutemero El valor predeterminado es 1 segundo (1000000 microsegundos)

bull ver emite informacioacuten de versioacuten y creacuteditos

Si cualquier comando (o ninguacuten comando) estaacute precedido por un uacutenico diacutegito de 0-5 (inclusive) seguido de un espacio el dispositivo que corresponde a ese diacutegito se seleccionaraacute para ser usado con el siguiente comando ldquopingrdquo Cada vez que la placa esteacute lista para un comando emitiraacute ldquogtrdquo para la serie La uacutenica excepcioacuten estaacute tras el comando ldquostartrdquo que no solicitaraacute entrada hasta que sea reconocido ldquostoprdquo

ODROID MAGAZINE 31

iquestCoacutemo empezaste con los ordenadoresCuando empeceacute mi negocio tuve que decidir queacute plat-

aforma de hardware iba a utilizar para la recogida de datos del traacutefico Simplemente para que no pienses mal de miacute mis caacutemaras de traacutefico no son las que se usan para multar por exceso de velocidad o algo asiacute Mi sistema estaba desti-nado suavizar el flujo de traacutefico fijando los controles oacutepti-mos de las sentildeales de traacutefico Anteriormente usaba un PC industrial para ejecutar mi software de reconocimiento de imaacutegenes Ahora uso la familia de dispositivos ODROID para esta cuestioacuten

iquestQueacute te atrajo de la plataforma ODROID En 2012 useacute Google para buscar una plataforma que

fuera muy compacta y al mismo tiempo potente para que cubriera mis necesidades que resultoacute ser la placa

Por favor haacuteblanos un poco sobre tiSoy ingeniero de electroacutenica y software en Rusia desde

hace 47 antildeos Naciacute en Siberia y tras terminar la escuela me mudeacute a Moscuacute para estudiar en la universidad Ser estudi-ante en el Instituto de Aviacioacuten de Moscuacute (MAI) fue una experiencia increiacuteble probablemente la mejor de mi vida A principios de los 90 llegoacute a Rusia la era de los microordena-dores soliacutea jugar a un juego de saltos en una CPU z80 y el i486 Tras finalizar mis estudios universitarios y de posgrado me convertiacute en ingeniero Trabajeacute en unos cuantos puestos de trabajo para diferentes empresas y finalmente decidiacute em-prender mi propio negocio En 2006 puse en marcha una iniciativa para crear sistemas de recuento del traacutefico de au-tomoacuteviles Estoy casado y tengo una hija de 21 antildeos llamada Lena que trabaja como enfermera Mi esposa Nadezhda es disentildeadora de vestuario de produccioacuten pero ahora trabaja como disentildeadora web Ella es aficionada a la fotografiacutea digi-tal y le encanta su caacutemara reacuteflex digital

COnOCIEnDO un ODROIDIAnvIACHESLAv ALEKSEEveditado por rob roy (robroy)

CONOCIENDO UN ODROIDIAN

Viacheslav disfruta tocando la guitarra y escuchando muacutesica

1995 en el campus MAi probando uno de los primeros equipos Vr comerciales del mundo que funcionaba a 640x480 a 30fps Utiliz-aba un sensor magneacutetico en la nuca para la posicioacuten de la cabeza la mejor broma que se podiacutea gastar a alguien era colocar un imaacuten cerca de la espalda y sacudirlo iexcllos gritos estaban garantizados cuando el mundo en 3D daba vueltas sin cesar

ODROID MAGAZINE 32

ODROID-X2 Con sus cuatro nuacutecleos funcionando a 17 GHz calculaba con facilidad los algoritmos de reconteo del traacutefico de automoacuteviles Maacutes tarde cambieacute al U3 y el XU4

iquestCuaacutel es tu ODROID favorito y por queacuteDe momento mi favorito es el XU4 Mi sistema estaacute

basado en el tratamiento de fotogramas de video en tiempo real por lo que el bus USB 30 del XU4 es bastante bueno para una caacutemara con una interfaz de captura de viacutedeo Para mi sistema es muy importante tener una buena conexioacuten entre la caacutemara de viacutedeo y la CPU Probablemente tendreacute que echar un vistazo a las interfaces de nivel inferior como MIPI CSI-2 que por desgracia estaacuten ausente en el XU4 Recientemente he estado aprendiendo como usar la caacute-mara oCam GS BW La caacutemara es buena en siacute misma pero para un uso industrial al aire libre tengo que implementar un software de control de exposicioacuten automaacutetica y posible-mente de control de apertura de la lente que todaviacutea estaacute en estudio

MEET AN ODROIDIAN

Una vieja joya el mini ordenador Nixdorf

An old gem the Nixdorf mini computer

CONOCIENDO UN ODROIDIAN

iquestQueacute aficiones e intereses tienes aparte de los ordenadoresDisfruto conduciendo y leyendo sobre coches y viendo

los campeonatos de carreras de F1 Tambieacuten me gusta via-jar pescar escuchar muacutesica y tocar la guitarra Tengo un gato siberiano llamado Leia y soy fan de Star Wars

iquestQueacute consejo le dariacuteas a alguien que quiere aprender maacutes sobre la programacioacuten

Hacer software es algo increiacuteble y miacutestico Es una fusioacuten de arte y tecnologiacutea Nada te inspira maacutes que tu aplicacioacuten cuando empieza a cobrar vida Sin embargo siempre estaacute ahiacute el otro lado de la Fuerza Estar listo para instruirte inc-esantemente El desarrollo de software es una de las activi-dades que cambia maacutes raacutepido Si tienes pensado dejar de hacer software en uno o dos antildeos puede dejar de aprender ahora El conocimiento se volveraacute anticuado en un par de antildeos maacutes o menos Para estar en lo maacutes alto siempre tienes que correr Es similar a la cancioacutenrdquoRun like Hellrdquo de Pink Floyd Si estaacutes listo para vivir de esta forma seguro que tendraacutes eacutexito

ODROID MAGAZINE 33

Page 12: Estación ARCADE · gias de marketing, administración de medios sociales y producción multimedia impresa, web, vídeo y cine. Ges-tionando múltiples cuentas con agencias y productores

SNES 3DO y Sega Genesis El juego teniacutea diferentes escenarios para jugar la selva la nieve y el desierto

Open Fodder ofreciacutea 23 misiones que se dividiacutean en varias fases En total suponiacutea superar 72 niveles para llevar

Este mes me gustariacutea hablar de un juego llamado Open Fodder se trata de un remake del claacutesico

juego de Amiga Cannon Fodder desar-rollado por Sensible Software en 1993 Utiliza los datos del juego original Can-non Fodder para conseguir una experi-encia muy similar al juego original en tu ODROID

Muchos de los populares juegos de Linux de hoy en diacutea como Stratagus y Freeciv son en realidad remakes de claacutesicos juegos de DOS de mediados y finales de los 90 y Open Fodder no es diferente El remake de Cannon Fodder es un juego disparos accioacuten y estrategia donde controlas a un pequentildeo grupo de soldados que avanza a traveacutes de varias docenas de niveles para matar a los sol-dados enemigos destruir tanques echar abajo edificios y derrotar a tus enemigos El juego fue lanzado por primera vez para Amiga en 1993 y fue exportado por sus desarrolladores a MS-DOS Atari Jaguar

a tu escuadroacuten a la victoria Cuando se lanzoacute el juego fue muy elogiado por varias revistas de juego Amiga con pun-tuaciones que llevaban al 95 por ciento y fue considerado como uno de los mejo-res juegos lanzados en 1993 En general siguioacute siendo uno de los mejores juegos jamaacutes creado para la plataforma Amiga durante sus 11 antildeos de vida

Desde un punto de vista maacutes poliacutetico el juego lleva impliacutecito un intenso men-saje sobre la guerra en siacute misma puesto que juegas y llevar a tus soldados a una muerte inevitable Cada misioacuten se inicia

JuEGOS LInuXOPEn fODDERpor tobias Schaaf (meveric)

JUEGOS LINUX

figura 1 - el logotipo de cannon fodder en el cual estaacute basado open fodder

figuras 2 3 y 4 - los niveles de selva desierto y nieve en open fodder

figuras 5 y 6 - A medida que avanzas en el juego tu larga liacutenea de reclutas se con-vierte gradualmente en cruces alineadas como en un cementerio

ODROID MAGAZINE 12

nas segundas partes ademaacutes de algunas misiones de bonificacioacuten Cannon Fod-der 2 salioacute un antildeo maacutes tarde pero fue maacutes bien un ldquodisco de datosrdquo con ex-pansiones que una secuela ya que en su mayor parte presentaba maacutes misiones en lugar de nuevas caracteriacutesticas Tambieacuten estaba el X-Mas de Amiga que ofreciacutea algunas misiones diferentes basadas en el juego Cannon Fodder

Ejecutando Open Fodder

Open Fodder es un remake del motor del juego Cannon Fodder que lleva el juego a los sistemas operativos modernos Al igual que otras migraciones del motor del juego (como OpenTTD) puede uti-lizar los datos del juego original con esta versioacuten del motor para ejecutar el juego en tus dispositivos modernos Esta mi-gracioacuten tambieacuten cuenta con una versioacuten exportada para los dispositivos ARM lo que significa que podemos ejecutarlo igualmente en nuestros ODROIDs

Todaviacutea estaacute en desarrollo pero ya funciona bastante bien Como de cos-tumbre se puede instalar desde mi repo-sitorio y puesto que soacutelo requiere SDL2 y SDL2 Mixer como dependencias prin-cipales deberiacutea funcionar en Debian y

con un nuevo grupo de reclutas que se alinean esperando a unirse al combate Los soldados desechables (de ahiacute el nom-bre de cannon fodder Carne de Cantildeon) poco a poco se convierten en cruces alin-eadas dando forma a un cementerio mil-itar a medida que vas completando cada misioacuten formaacutendose maacutes y maacutes filas con-forme vas enterrando a tus predecesores Sin embargo los desarrolladores le di-eron un cierto toque de humor ya que los primeros soldados de tu escuadroacuten (y por tanto los casi seguro que moriraacuten) llevan de hecho los nombres de las seis personas que componiacutean el equipo de desarrollo del juego

Si nos fijamos bien el juego incor-poraba algunos detalles bastante intere-santes Por un lado tiene su propia can-cioacuten ldquo War never been so much funrdquo que suena durante la intro del juego iexclUno de los desarrolladores del juego Jon Hare compuso la muacutesica junto con el compositor Richard Joseph Si teniacuteas el Amiga CD32 tambieacuten recordaraacutes una pista adicional que incluiacutea un video en el cual los desarrolladores se disparaban entre siacute con armas de juguete (httpbitly2l67bFy) iexclSin duda se divirtieron bastante desarrollando este juego

Cannon Fodder tambieacuten tuvo algu-

JUEGOS LINUX

Ubuntu por igual las puedes encontrar en mi lista principal de paquetes para armhf y jessiemain para arm64

Se puede instalar con este comando en un dispositivo ODROID que ejecute Debian suponiendo que ya tengas con-figurados mis repositorios o esteacutes usando una de mis imaacutegenes de Debian (httpbitly13v98ly)

$ apt-get install

openfodder-odroid

He alterado ligeramente el juego para que siempre se ejecute en modo pantalla completa aunque si lo deseas puedes cambiar al modo de ventana simple-mente pulsando F11 cuando tenga el juego activado

Convirtiendo los datos del juego

Por siacute sola mi versioacuten de Open Fod-der viene con el especial Amiga X-Mas ademaacutes de varios niveles demo dis-ponibles de forma gratuita Si quieres jugar el juego real tendraacutes que importar los datos desde un CD Cannon Fodder

Si estaacute usando un ODROID para ju-gar al Open Fodder puedes localizar las carpetas de los datos del juego en la car-peta $HOMEopenfodderData Por ejemplo homeodroidopenfodderDataDos_CD es una de esas carpetas de datos del juego Existen varias carpe-tas de datos del juego que puedes usar dependiendo de la versioacuten que tengas del juego Cannon Fodder

Dos_CDAunque el juego es compatible con

muchas y diferentes fuentes del juego actualmente soacutelo Dos_CD parece ser una versioacuten de Open Fodder ldquototal-mente compatiblerdquo con muy pocos er-rores y problemas El resto de fuentes del juego pueden tener problemas

Aquiacute tienes un consejo raacutepido Aunque se llama Dos_CD cogeraacute cu-alquier versioacuten de DOS de Cannon Fodder que puedas encontrar Si tienes

figura 7 - Sensible Software - los desarrolladores de cannon fodder

ODROID MAGAZINE 13

WHDLoad en un Amiga (o WinUAE) para extraer los archivos del juego y co-piarlos en la carpeta DataAmigardquo No lo he probado pero si tienes la ldquoCannon Fodder Collectionrdquo de Amiga CD32 no oficial puedes copiar el contenido de FodderNew en esta carpeta lo que tendraacute como resultado niveles completamente diferentes Puede considerarse como una versioacuten maacutes compleja del juego aunque a la vez maacutes divertida Por lo tanto bien poner los archivos originales de Amiga aquiacute o bien los archivos FodderNew de la ldquoCannon Fodder Collectionrdquo

Dos2_CDDos2_CD es en realidad la carpeta

de la versioacuten DOS de Cannon Fodder 2 pero tambieacuten funciona con la versioacuten GoG Desafortunadamente tiene algu-nos problemas el maacutes grave es que el juego no tiene ninguacuten tipo de sonido o muacutesica Aparte de esto todo parece fun-cionar correctamente pero desconozco coacutemo reaccionaraacute en niveles posteriores La carpeta Data tambieacuten incluye las car-petas WAV Plus AmigaFormat_XMAS y Custom En WAV se almacenan los efectos de sonido por defecto para to-dos los juegos (Cannon Fodder) Plus es una demo del nuacutemero 31 la revista Amiga Power y AmigaFormat_XMAS es el Amiga Format Christmas Special Tambieacuten hay una carpeta Custom que te permite jugar otros juegos y mapas pero necesitan la versioacuten (CD) de DOS o de lo contrario no apareceraacuten

Notas finalesOpen Fodder es un buen proyecto

que te permite ejecutar este increiacuteble juego en sistemas modernos Realmente me gusta y estoy deseando ver coacutemo pro-gresa Espero que las versiones de Amiga y Cannon Fodder 2 sean pronto total-mente compatibles Tal vez incluso poda-mos ver mejoras graacuteficas con el tiempo Me gustariacutea ver graacuteficos maacutes modernos ya que el juego es bastante antiguo y los graacuteficos no son los maacutes idoneos para res-oluciones 1080p

la versioacuten de disco de Cannon Fodder simplemente copia el CF_ENGDAT en la carpeta Dos_CD La versioacuten original de CD DOS teniacutea un archivo llamado cf_cddat Cambiar el nombre a CF_ENGDAT y copiarlo a la carpeta Dos_CD Si tienes la versioacuten GoG del juego soacutelo tiene que copiar CF_ENG DAT a la carpeta Dos_CD iexclEsta es una forma raacutepida y legal de conseguir el juego si estaacutes interesado

Aseguacuterate de que el nombre del ar-chivo este en mayuacutescula ya que el juego tiene en cuenta esta cuestioacuten Intenta que coincida todo para asegurarte de que las cosas funcionen sin problemas

Amiga_CDAmiga CD32 tambieacuten contaba con

una versioacuten de este juego Esta es la ver-sioacuten que incluye el video al que hemos hecho referencia anteriormente En el CD de Amiga CD32 hay una carpeta llamada Fodder El contenido de esta carpeta debe copiarse a la carpeta Ami-ga_CD Puedes extraer la segunda pista del CD y almacenarla como Track2flv en la misma carpeta con la finalidad de tener el archivo de video

Me topeacute con algunos problemas cu-ando haciacutea esto y descubriacute nuevamente que el juego buscaba muchos archivos en mayuacutesculas asiacute que utiliceacute el siguiente comando para copiar todos los archivos y tenerlos tambieacuten en mayuacutesculas en la carpeta Amiga_CD$ for files in `ls` do cp $files

`echo $files | tr lsquo[lower]rsquo

lsquo[upper]rsquo` done

Asiacute funcionaba bien pero teniacutea algu-nos fallos Por ejemplo la animacioacuten del helicoacuteptero al inicio de cada misioacuten no apareciacutea y el cursor cuando se guarda un archivo se distorsionaba Aparte de esto no he visto problemas importantes en la versioacuten Amiga CD32

AmigaLa Informacioacuten de desarrollador de

Open Fodder dice ldquoUsar el instalador

JUEGOS LINUXJUEGOS ANDROID

CAuSALITy un JuEGO DE ROMPE-CABEzAS COn PARA-DOJAS DE vIAJES En EL TIEMPO por bruno Doiche

Configura tuacute mismo los entornos extrantildeos e insoacutelitos y

ayuda a un grupo de astronautas varados a encon-trar una ruta hacia un lugar seguro Cada nivel al que te enfrentas representa un nuevo reto donde necesitas llevar a tu astronauta a una salida que coincida con su color Los maacutergenes de tiempo son cortos aunque es muy divertido Aunque formas parte de tan soacutelo una fraccioacuten de tiempo de la vida de tu personaje iexclten cuidado pasaraacutes un montoacuten de tiempo enganchado a este juego

httpsplaygooglecomstoreappsdetailsid=comlojugamesandroidCausality

el entorno 3D isomeacutetrico es magniacute-fico a menudo no superaba el nivel porque los graacuteficos me cautivaban

ODROID MAGAZINE 14

tePi necesitan estar conectados a otros distintos en el ODROID-C2 porque parece haber un conflicto La interfaz UART ocupa estos pines y el estado por defecto del ODROID (1=high en Pin 8) no es lo que espera la RemotePi (GPIO debe entrar en el valor por defecto 0=low para cortar la energiacutea tras el apagado) Pero puesto que necesitas utilizar cables de todos modos para conectar la Remot-ePi esto no supondraacute ninguacuten problema ya que simplemente puedes reconectar los cables a otros pines GPIO

Como evitamos el circuito de ali-mentacioacuten del ODROID encendieacutendo-lo a traveacutes de GPIO tambieacuten pasamos por alto la proteccioacuten ante subidas de tensioacuten 2526A del dispositivo pero no te preocupes La RemotePi tambieacuten tiene proteccioacuten ante subidas de tensioacuten que deberiacutea coincidir con el mismo val-or que en el caso de la RemotePi board para la Raspberry Pi 3 Sin embargo la RemotePi para la Raspberry Pi 2 es de soacutelo 2A Esto estaacute bien porque el valor es menor a los 26A del ODROID de modo el polyfuse de la RemotePi se ac-tivariacutea antes si conectas demasiados dis-

La RemotePi board (httpbitly2l8JcWU) que convierte cu-alquier mando a distancia en un

interruptor de encendido para tu orde-nador de placa reducida puede ser com-patible con el ODROIDC2 si sigues esta guiacutea Si utilizas tu dispositivo como centro multimedia esta placa te propor-cionara un receptor de infrarrojos y un circuito de alimentacioacuten asiacute como un botoacuten de encendido Puedes encender y apagar tu ODROID completamente a traveacutes de una sentildeal infrarrojos (IR) y simplemente presionar el botoacuten de en-cendido para apagarlo y reiniciarlo con seguridad La placa RemotePi es respon-sable del modo espera que absorbe una miacutenima energiacutea mientras el ODROID estaacute completamente apagado Por uacutel-timo la placa alimenta tu dispositivo a traveacutes de GPIO lo cual requiere un cable microUSB para conectarlo a la Re-motePi en lugar de utilizar un adaptador de corriente normal

Configuracioacuten de hardware

Puesto que la RemotePi estaba pen-sada originalmente para la Raspberry Pi 2 necesitaraacutes utilizar cables adiciona-les en lugar de colocarla justamente en cima del C2 para evitar interferir con el disipador de calor asiacute que debes re-cablear algunos pines Es necesario utili-zar cables con el diaacutemetro adecuado para los pines de 5V y puesta a tierra ya que la corriente podriacutea estar entre los 2A y 26A dependiendo de cuaacutentos dispositi-vos USB conectes a tu dispositivo

Los pines GPIO 8 y 10 de la Remo-

positivos no alimentados de forma exter-na que no es una buena idea en un SBC al fin al cabo No obstante debido a esta diferencia de amperaje una RemotePi para la Raspberry Pi 3 seriacutea la mejor op-cioacuten para este proyecto

Como resultado del nuevo cableado el firmware de RemotePi ya no se puede configurar de forma normal aunque nunca he usado esta funcioacuten Si fuera necesario configurar o actualizar el firm-ware necesitaraacutes volver a conectar los pines 8 y 10 de la RemotePi a los pines 8 y 10 del ODROID durante la actu-alizacioacuten del firmware y luego deshacer los cambios una vez que la actualizacioacuten haya finalizado Otra posibilidad es simplemente conectar una Raspberry Pi para actualizar el firmware Esto suena a un montoacuten de problemas pero en re-alidad simplemente es extender la con-exioacuten del cabezal y cambiar una liacutenea en el script principal y dos liacuteneas en otro script opcional si haces uso de ello

Re-cableando laconexioacuten GPIO

Dado que la RemotePi estaacute disentildeada

REMOTEPI BOARD PARA EL ODROID-C2por inifity85

REMOTEPI

figura 1 - remotepi board

ODROID MAGAZINE 15

ergiacutea completamenteIrswitchsh (solo cambia el script

original de MSL Digital de GPIOpin1 = 14 a GPIOpin1 = 225)

binbash

prevent restarting XBMC at

shutdown This is only used for

OpenElec before V5

LOCKDIR=rdquovarlockrdquo

LOCKFILE=rdquoxbmcdisabledrdquo

this is the GPIO pin receiving

the shut-down signal

Raspberry Pi pin8 GPIOpin1=14

Odroid-C2 pin26 GPIOpin1=225

GPIOpin1=225

functions

add_omit_pids()

omit_pids=rdquo$omit_pids -o $1rdquo

safe_shutdown ()

for OpenElec before V5

touch ldquo$LOCKDIR$LOCKFILErdquo

for OpenElec V5 and later

systemctl stop kodi

add_omit_pids $(pidof connmand)

add_omit_pids $(pidof dbus-dae-

mon)

killall5 -15 $omit_pids

for seq in `seq 1 10` do

usleep 500000

clear gt devtty1

killall5 -18 $omit_pids || break

done

sync

umount -a gtdevnull 2gtamp1

poweroff -f

echo ldquo$GPIOpin1rdquo gt sysclass

gpioexport

echo ldquoinrdquo gt sysclassgpio

gpio$GPIOpin1direction

while true do

sleep 1

power=$(cat sysclassgpio

gpio$GPIOpin1value)

if [ $power = 0 ] then

echo ldquooutrdquo gt sysclassgpio

gpio$GPIOpin1direction

echo ldquo1rdquo gt sysclassgpio

una carcasa personalizada de modo que el receptor integrado podriacutea estar oculto y no ser uacutetil En ese caso puedes desac-tivar el IR del ODROID en favor del re-ceptor externo GPIO-IR en la RemotePi y conectar el pin 12 Tienes disponible maacutes informacioacuten sobre el cambio al receptor GPIOIR en LibreELEC en httpbitly2lpDl27

Scripts de apagado para LibreELEC

Los dos scripts tratados a continu-acioacuten pueden descargarse desde la paacutegina de soporte de MSL Digital Solutions en httpbitly2kMxyVG En esta paacutegina tambieacuten encontraras una guiacutea para utili-zar estos scripts en otros sistemas opera-tivos como Volumio y RuneAudio

El script irswitchsh se usa para el apagado seguro a traveacutes de sistema In-frarrojos Tras pulsar el correspondiente botoacuten el sistema se apagaraacute de forma se-gura luego RemotePi esperaraacute a que el GPIO225 alcance el estado 0 (low) que aparece tras el cierre exitoso del sistema Finalmente cortaraacute la energiacutea

El script shutdownsh se usa para el apagado seguro a traveacutes de la interfaz del programa o script Despueacutes de navegar hasta el botoacuten de apagado en la GUI el sistema se apagaraacute de forma segura luego RemotePi esperaraacute a que el GPIO225 alcance el estado 0 (low) que apareceraacute tras apagarse el sistema de forma adec-uada y segura Finalmente cortaraacute la en-

originalmente para una Raspberry Pi desgraciadamente no es soacutelo enchufar y usar Necesitaraacutes volver a cablear dos pines usando los cables de todos los pines tal y como se muestra en la Figura 2 Re-cablea el pin 8 de la RemotePi al pin 26 del ODROID-C2 y el pin 10 de la RemotePi al pin 7 del ODROID-C2

Si no quieres utilizar el receptor IR de la RemotePi para el mando a distan-cia de LibreELEC puedes dejar desco-nectado el pin 12 La placa continuaraacute encendieacutendose y apagaacutendose a traveacutes del comando de control remoto IR pero el control de la GUI de LibreELEC seraacute asumido por el receptor de infrarrojos integrado en el ODROID Sin embargo si has comprado una RemotePi con un receptor IR y un LED externo es posible que hayas decidido colocarla dentro de

REMOTEPI

figura 3 - la remotepi ha sido recableada y montada en una carcasa personalizada

figura 2 - re-cableado Gpio

ODROID MAGAZINE 16

Centro Multimedia por ejemplo Esos comandos de apagado se equiparaacuten a eventos internos similar a cuando nave-gas por el menuacute de apagado de Kodi Sin utilizar este segundo script el sistema se cerraraacute con seguridad pero la placa Re-motePi no recibiriacutea ninguna indicacioacuten para monitorizar el GPIO225 de modo que no cortariacutea la energiacutea tras apagarse el sistema correctamente

Usando el receptor IR de la RemotePi

Si deseas utilizar el receptor IR de la RemotePi en lugar del receptor IR ODROID integrado tendraacutes que des-activar el sistema IR integrado y activar el receptor IR GPIO Para hacer esto en Ubuntu puede consultar el artiacuteculo de la Wiki de Hardkernel en httpbitly2l8KrWg Para Libre-ELEC echa un vistazo a mi mini-guiacutea en httpbitly2lLKj2A Para preguntas comentari-os o sugerencias visita el hilo original en httpbitly2mgFGKk

gpio$GPIOpin1value

sleep 3

safe_shutdown

fi

done

Shutdownsh (solo cambia GPIOpin =15 a GPIOpin =249 y GPIOpin1 =14 a GPIOpin1 =225)

binbash

if [ ldquo$1rdquo = ldquorebootrdquo ] then

Raspberry Pi pin10 GPIOpin=15

Odroid-C2 pin7 GPIOpin=249

GPIOpin=249

Raspberry Pi pin8 GPIOpin1=14

Odroid-C2 pin26 GPIOpin1=225

GPIOpin1=225

echo ldquo$GPIOpinrdquo gt sysclass

gpioexport

execute shutdown sequence on

pin

echo ldquooutrdquo gt sysclassgpio

gpio$GPIOpindirection

echo ldquo1rdquo gt sysclassgpio

gpio$GPIOpinvalue

usleep 125000

echo ldquo0rdquo gt sysclassgpio

gpio$GPIOpinvalue

usleep 200000

echo ldquo1rdquo gt sysclassgpio

gpio$GPIOpinvalue

usleep 400000

echo ldquo0rdquo gt sysclassgpio

gpio$GPIOpinvalue

set GPIO 14 high to feedback

shutdown to RemotePi Board

because the irswitchsh has

already been terminated

echo ldquo$GPIOpin1rdquo gt sysclass

gpioexport

echo ldquooutrdquo gt sysclassgpio

gpio$GPIOpin1direction

echo ldquo1rdquo gt sysclassgpio

gpio$GPIOpin1value

usleep 4000000

fi

El script shutdownsh es uacutetil si a vec-es usas las aplicaciones remotas Android Yatse o Kore o hotkeys para apagar tu

REMOTEPI

ODROID Talk Subreddit

httpwwwredditcomrodroid

ODROID Magazine

estaacute en Reddit

ODROID MAGAZINE 17

El HiFi Shield 2 (39$ httpbitly2lHSlZJ) es un Con-vertidor Digital a Analoacutegico de Alta definicioacuten (DAC) para el ODROID-C2 y el ODROID-C1+ Se trata de

una placa de sonido especial para el ODROID-C2 y C1 + que estaacute optimizada para mejorar la calidad de reproduccioacuten del sonido Ofrece un sonido muy bien equilibrado consistente intenso amplio y muy bien dimensionado por niveles Hemos analizado la calidad de audio de la salida HiFi Shield 2 DAC con un equipo estaacutendar de la industria del sonido llamado Au-dio Precision Audio Precision es un analizador de audio de alto rendimiento optimizado para la produccioacuten de audio digital

Usando el chip DAC PCM5242 de uacuteltima generacioacuten de Texas Instrument conocido como Burr-Brown el HiFi Shield 2 soporta formatos de audio de 16 24 y 32 bits con una ra-tio THD+N miacutenima (0002) y una dinaacutemica ideal (114dB +) ademaacutes de sorprendentes tasas de muestreo de 384 kHz La interfaz dedicada SPDIF soporta una definicioacuten de hasta 192kHz24bit a traveacutes de una salida oacuteptica (Toslink)

Si hacemos uso del puerto de expansioacuten I2S en el C2C1+ no es necesario ocupar un puerto USB permitiendo al usu-ario seleccionar el sistema de reproduccioacuten de audio que desee como Volumio y Debian (DietPi) para reproducir sonido HiFi

HIFI SHIELD 2

HIfI SHIELD 2EL MEJOR SOnIDO quE PODRAS COnSEGuIR En AnDROIDeditado por rob roy (robroy)

oDroiD-c2 y hifi Shield 2 Audio pb +J

primer plano de la placa con anotaciones

Distribucioacuten de los 7 pines i2S del c2c1+

la salida de audio es estaacutendar la salida de color rojo corresponde al canal de audio iz-quierdo y la salida de color blanco correspon-de al canal de audio derecho

ODROID MAGAZINE 18

Detalles

La guiacutea de configuracioacuten de UbuntuLinux para ODROID-C2 estaacute disponible en httpbitly2brrGdG y para ODROID-C1+ en httpbitly2lI7AC7 El sistema operativo oficial Volumio 2 se puede descargar desde httpbitly2kOJNAV y la imagen DietPi basada en Debian se encuentra en httpbitly2ls45yM Puede ver los esquemas en httpbitly2mnukV4

Diagrama por bloques del hifi Shield2

Caracteriacutesticasbull El control de volumen a traveacutes de la interfaz

i2c es una gran caracteriacutestica para mantener una buena calidad del sonido con varios voluacutemenes de salida de audio

bull Los puertos de salida incluyen terminales esteacute-reo rcA chapados en oro

bull La fuente de alimentacioacuten tiene habilitado un regulador de interferencias de ruido ultra-bajo lo cual reduce el ruido de la fuente de alimentacioacuten y aumenta en gran medida el ratio sentildealruido

bull La interfaz I2S permite la descodificacioacuten di-recta de la entrada digital a la salida analoacutegica utili-zando la sincronizacioacuten del reloj maestro

bull La superficie de la PCB estaacute chapada en oro so-bre 2 onzas de cobre lo cual garantiza la continui-dad de la sentildeal y reduce la reflexioacuten y deflacioacuten de la sentildeal

bull Dispone de almohadillas soldadas a la salida de audio balanceada (sentildeal diferencial)

bull La interfaz SPDIF dedicada es nueva admite una definicioacuten de hasta 192khz24bit a traveacutes de una nueva salida oacuteptica (toslink)

bull Este HiFi shield no es compatible con Android y hardkernel no tiene planes para hacerlo compatible y asiacute poder habilitar el controlador i2S en el Kernel y el hAl de Android

El Manual de usuario del ODROID-XU4 disponible en httpbitly1U9Q8yg ha sido revisado hace poco para incluir algunos de los perifeacutericos maacutes recientes como

la Expansion Board SmartPower2 y oCam Puesto que ahora Hardkernel tambieacuten ofrece Ubuntu 1604 todos los ejemplos de coacutedigo se han actualizado para que sean compatibles con el nuevo sistema operativo Si tiene comentarios preguntas o sugerencias visita el hilo de los foros ODROID en httpbitly1RykBrT

MAnuAL Xu4ACTuALIzADOREvISADO PARA uBunTu 1604 y LOS PERIfERICOS MAS RECIEnTESeditado por rob roy (robroy)

MANUAL XU4

el manual del oDroiD-xU4 incluye informacioacuten detallada de los diferentes sistemas operativos software y perifeacutericos disponibles para el oDroiD-xU4

ODROID MAGAZINE 19

El DevOps es complicado Los grandes proyectos de soft-ware como Mesos y Kubernetes desarrollan equipos como los que se encuentran en la mayoriacutea de las empre-

sas y organizaciones tecnoloacutegicas como CoreOS con la finali-dad de ayudar a los desarrolladores a poner sus aplicaciones en funcionamiento Sin embargo iquestcuaacutel seriacutea una buena solucioacuten para un desarrollador en solitario o una pequentildea red domeacutesti-ca iquestCoacutemo podemos usar el coacutedigo a nivel de infraestructura

Uso un portaacutetil Macintosh OSX para desarrollo pero para las aplicaciones de larga duracioacuten o aplicaciones que se ejecu-tan por la noche necesito un entorno remoto siempre activo ya que mi portaacutetil estaraacute fuera de liacutenea o en el tren conmigo mientras voy y vengo del trabajo Tiene su sentido no utilizar el ordenador como un entorno para la puesta en funcionamiento de aplicaciones

El ODROID-XU4 es un ordenador ideal para un entor-no de implementacioacuten remoto ya que es econoacutemico flexible cuenta con excelentes especificaciones teacutecnicas y puede ejecutar Linux Este artiacuteculo tiene por objetivo explicar coacutemo almacenar coacutedigo de implementacioacuten en tu repositorio de proyectos asiacute como automatizar las implementaciones y ejecuciones

Arch LinuxArch Linux es una distribucioacuten de Linux gratuita de coacutedigo

abierto que fue lanzada en 2002 Estaacute centrada en la elegancia la integridad del coacutedigo el minimalismo y la simplicidad y cuenta con que el usuario haga un esfuerzo en comprender el funcionamiento del sistema Arch Linux utiliza en particular un modelo de revisioacuten continua de modo que todo lo que se necesitas para conseguir el software del sistema maacutes reciente es actualizar el sistema de forma perioacutedica

Arch Linux puede ser algo difiacutecil de asimilar ya que uti-liza herramientas diferentes a las de una distribucioacuten Debian El gestor de paquetes se activa a traveacutes de ldquopacmanrdquo en lugar de ldquoapt-getrdquo y existe un gestor complementario de paquetes muy popular llamado ldquoyaourtrdquo Muchos de los servicios o her-ramientas maacutes comunes no se instalan por defecto

Arch Linux esta hecho principalmente para procesadores x86 pero un proyecto llamado Arch Linux ARM (ALARM) tiene una distribucioacuten ARM de Arch Linux para arquitectu-ras AArch64 ARMv8 y ARMv7 Hardkernel el fabricante de ODROIDs es de hecho un patrocinador del proyecto Arch Linux ARM

HOME DATA CENTER

HOME DATA CEnTERIMPLEMEnTACIOn DEL CODIGO COn ARCHLInuXpor John Skilbeck

Configurar la redDeberaacutes asignarle a tu dispositivo una direccioacuten IP LAN

DHCP reservada y en el mejor de los casos un nombre de host que se propagaraacute a lo largo de tu red por medio del servidor DNS de tu router De esta forma en nuestro entorno de desar-rollolocal podremos utilizar un nombre de host para resolver siempre el entorno de implementacioacutenremoto

Por ejemplo en mi red reservo el 192168249 a la direc-cioacuten MAC de mi ODROID Tambieacuten configuro una entrada DNS que asigna a esa direccioacuten IP ldquoodroidrdquo Utilizar un firm-ware personalizado en el router como Tomato USB o DD-WRT lo hace extremadamente faacutecil ya que esos firmwares convierten tu router en un pequentildeo ordenador Linux con una aplicacioacuten web GUI muy pulida aunque su implementacioacuten estaacute fuera del alcance de este artiacuteculo Si operas con subredes aseguacuterate dirigir el puerto hacia el puerto externo que se asigna al puerto SSH del dispositivo odroid ya que Git se ejecuta a traveacutes de SSH

Configurar el proyectoLoacutegicamente desearaacutes estandarizar el flujo de trabajo de la

implementacioacuten Esto haraacute que el trabajo con proyectos sea

el home data center de John es una auteacutentica obra de arte

ODROID MAGAZINE 20

extremadamente faacutecil y eliminas muchos de los cambios de contexto mental que utilizas cuando trabaja en varios proyec-tos Crearemos una carpeta para alojar todos nuestros archivos relacionados con implementaciones Coloca los archivos eje-cutables en ldquodeploybinrdquo y cualquier archivo cron en ldquodeploytasksrdquo (maacutes informacioacuten sobre esta cuestioacuten maacutes adelante)

Navega hasta el directorio del proyecto en una ventana de Terminal y luego escribe los siguientes comandos

$ mkdir -p deploybin

$ mkdir -p deploytasks

$ cd deploybin ampamp touch run-job ampamp

chmod u+x run-job ampamp cd -

$ cd deploytasks ampamp touch crontab

Tambieacuten puede estandarizar doacutende colocar tu coacutedigo fuente De esta forma le seraacute maacutes faacutecil a otras personas ver coacutemo se or-ganiza tu proyecto y conocer queacute es el coacutedigo fuente y queacute no

$ mkdir src

$ cd src ampamp (place source code here ie python core

py clojure coreclj nodejs appjs)

Simplificar los puntos de entradaIniciar una aplicacioacuten puede resultar algo confuso con todos

los comandos que se pueden ejecutar en diferentes lenguajes Por ejemplo puede usar Java ldquojava -jar [my-jar] jarrdquo o python ldquopython my-apppyrdquo y tu aplicacioacuten tambieacuten puede necesitar varios argumentos Todo esto deberiacutea simplificarse y resumirse en un archivo ldquodeploybinrun-jobrdquo

binsh

set -e

CMD=rdquosrcduckrdquo

exec $CMD $

Crear el archivo cronArch Linux no viene con un cliente o demonio cron por

defecto Instaacutelalo con ldquosudo pacman -Syu cronierdquo Utilizando cron puede ejecutar comandos en intervalos de tiempo espe-cificados haciendo uso de la sintaxis especial de cron Normal-mente se almacena en el archivo crontab del usuario al que puedes acceder con ldquocrontab -erdquo Sin embargo esto es demasi-ado manual y queremos usar coacutedigo como infraestructura Cron tambieacuten tiene algunos subdirectorios muy uacutetiles en ldquoetccronrdquo como ldquoetccrondailyrdquo yrdquoetccronhourly ldquo si co-locamos los archivos aquiacute eacutestos se ejecutaraacuten en los intervalos especificados

Revisa el archivo de ldquodeploytaskscrontabrdquo que colocare-mos en ldquoetccrondrdquo que se crea automaacuteticamente con nuestro script ldquoposttreceiverdquo

variables

SHELL=binbash

PATH=binusrbinusrlocalbinusrsbinusrlo-

calsbin

MAILTO=[your-email-address]gmailcom

cmd=rdquodeploybinrun-jobrdquo

app_dir=rdquohomeskilbjodeployappduckdnsrdquo

jobs

5 skilbjo cd ldquo$app_dirrdquo $cmd gtdevnull

Aquiacute tienes el esquema general de la estructura de un simple proyecto El uacutenico ejecutable del proyecto es un uacutenico script shell ubicado en ldquosrcrdquo

$ tree

READMEmd

deploy

bin

post-receive

run-job

tasks

crontab

src

duck

4 directories 5 files

GitPrimero queremos agregar una URL remota a nuestro

proyecto en nuestro entorno local

$ git remote add odroid sshodroid~deploygit

duckdnsgit

Ten en cuenta que dependiendo de la topologiacutea de tu red es posible que tenga que modificar esta url Si no puedes asignar nombres de host la URL de git se veriacutea asiacute donde 192168249 es la direccioacuten IP LAN de tu dispositivo

$ ssh192168249~deploygitduckdnsgit

Si tienes un usuario en tu entorno ODROID distinto al que tienes en tu entorno de desarrollo la url se veriacutea asiacute donde ldquoskilbjordquo es tu nombre de usuario

$ sshskilbjoodroid~deploygitduckdnsgit

Si tu servidor remoto estaacute en una subred diferente y tienes redireccionados los puertos tu url tendriacutea este aspecto donde

HOME DATA CENTER

ODROID MAGAZINE 21

ldquo2222rdquo es tu puerto externo

$ ssh192168122222~deploygitduckdnsgit

En el directorio principal de tu entorno remoto crea una carpeta llamada ldquo~deployrdquo con dos subcarpetas ldquo~deployapprdquo y ldquo~deploygitrdquo Los subdirectorios de ldquo~deploygitrdquo seraacuten los puntos finales de nuestros desarrollos y con un hook ejecutaraacuten comandos de implementacioacuten en los subdirectorios de ldquo~ deployapprdquo

Primero navega hasta el directorio principal del entorno re-moto y a continuacioacuten escribe los siguientes comandos

$ mkdir -p ~deployapp

$ mkdir -p ~deploygit

$ mkdir -p ~deploygitduckdnsgit

$ mkdir -p ~deployappduckdns

Ahora en ldquo~ deploygitduckdnsgithooksrdquo crea un archi-vo ejecutable llamado ldquopost-receiverdquo que se activaraacute con cada accioacuten hacia el punto final

$ cd ~deployappgitduckdnsgithooks

$ touch post-receive ampamp chmod u+x post-receive

$ vim post-receive

Rellena el ejecutable con lo siguiente en el directorio ldquo~deploygitduckdnsgithooksrdquo del entorno remoto

usrbinenv bash

set -eou pipefail

user=$(whoami)

dir=rdquohome$userdeployapprdquo

app=$(basename $(pwd) | sed -e lsquosgitrsquo)

deploy_dir=rdquo$dir$apprdquo

cron_dir=rdquoetccrondrdquo

GIT_WORK_TREE=rdquo$deploy_dirrdquo git checkout -f

cd ldquo$deploy_dirrdquo

build steps here

case ldquo$userrdquo in

(skilbjo) sudo cp deploytaskscrontab ldquo$cron_

dir$apprdquo

esac

you can also do project-specific build steps in

this section like install

dependencies (ie npm install) compile source

code (ie lein uberjar)

as well as if a long-lived app run commands as

well (ie java -jar my_jarjar)

echo ldquoall donerdquo

exit 0

ImplementacioacutenAhora estamos listos para implementar ya que nuestro en-

torno local estaacute configurado para alcanzar el punto final del servidor de implementacioacuten nuestro entorno remoto estaacute con-figurado para recibir la notificacioacuten y revisar el coacutedigo fuente ejecutar cualquier paso de compilacioacuten y colocar una tarea en el directorio cron del sistema para su lanzamiento Ponto todo en praacutectica con el siguiente comando en el directorio del proyecto del entorno local

$ git push odroid

Ademaacutes para ver coacutemo se ha implementado todo esto en un proyecto de ejemplo visita httpbitly2lthYKW

Pasos finalesSe puede antildeadir al flujo anterior algunas caracteriacutesticas

como son muacuteltiples entornos ya sea con muacuteltiples ODROIDs o con un solo ODROID trataacutendolo como un servidor de ser-vicio Esto se puede hacer con subdirectorios bajo ldquo~deployrdquo como ldquo~deploystagingappmy_apprdquo o ldquo~ deployproduc-tionappmy_apprdquo

Ademaacutes podriacuteas antildeadir un servicio de integracioacuten conti-nua como CircleCI que ejecutariacutea una suite de testeo desde cada desarrollo a GitHub y si tiene eacutexito compila una imagen Docker No podriacuteas entonces tener un archivo en el entorno remoto que verificariacutea una imagen de un repositorio Docker y la ejecutariacutea en un intervalo especificado Esto es lo que hacen muchos de los softwares DevOps distribuidos como Mesos y Kubernetes pero en un entorno mucho maacutes rico que BASH y Linux

Referencias

Artiacuteculo Wikipedia de Arch linux httpbitly2l71ADKWebsite Arch linux ArM httpsarchlinuxarmorgArtiacuteculo que leiacute hace unos tres antildeos y que me inspiroacute para escribir mi propio artiacuteculo httpbitly2m5JAct

HOME DATA CENTER

ODROID MAGAZINE 22

odroid ARCADE BOXLA EXPERIEnCIA PERfECTA COn TuS JuEGOS ARCADE fAvORITOSpor brian Kim charles park y John lee

ARCADE BOX

Los ODROIDs tienen mejor rendimiento que las placas de la competencia especialmente en lo que respecta al renderizado de video lo que significa que

las placas ODROID son ideales para jugar lo cual hacen muchos usuarios de ODROID Ya hay disponibles varios sistemas operativos de plataforma de juegos como Lakka (httpbitly1NO8BBC) y ODROID GameStation Tur-bo (httpbitly1ASFO5O) Para disfrutar auacuten maacutes de nuestras sesiones de juegos creamos nuestra propia consola arcade con simples botones GPIO y joysticks y la llama-mos la ODROID Arcade Box Elegimos un ODROID-XU4 para este proyecto porque es el que tiene mejor rendimiento GPU de todos los dispositivos ODROID actuales En este artiacuteculo vamos a describir como hemos creado la ODROID Arcade Box

Requisitos( Figura 3 ndash )Decidimos hacer la ODROID Arcade Box usando

un MDF (tablero de fibra de densidad media) El Shifter Shield del XU4 tambieacuten es uacutetil para utilizar los pines de expansioacuten del ODROID-XU4 Los Joysticks los botones y los cables eran los componentes de entrada y se utilizoacute

Nuestro primer y simple prototipo

ODROID MAGAZINE 23

panel MDf 12t2eA 600x2202eA 600x752eA 220x75taladroplegadoraDesmontadorcinta meacutetricaNavaja multiusoAlicates de punta largaoDroiD-xU4xU4 Shifter shieldSMpS (fuete Alimentacioacuten)

extendedores hDMi USb ethernetenchufe de alimentacioacuten y Switchbisagras 2eAreceptor de puertacaucho 4eAtornillospulsadores 19eAJoystick 2eAcablesterminales

una SMPS (Fuente de alimentacioacuten conmutada) como fuente de alimentacioacuten Las herramientas y las piezas utilizadas las tienes en esta paacutegina

La ODROID Arcade Box necesita un total de 27 entradas (19 entradas para botones y 8 entra-das para joysticks) Las 24 entradas GPIO digi-tales del ODROID-XU4 no son suficientes para las 27 entradas de modo que creamos dos puertos ADC adicionales para los tres botones que nos fal-taban Los valores de entrada ADC se basan en el voltaje de entrada y los valores de entrada digital y analoacutegica se procesan en el demonio GPIO que se describe a continuacioacuten

Disentildeo y montajeLos paneles de la ODROID Arcade Box deben

ser disentildeados y fabricados para que los botones y joysticks esteacuten bien colocados Elegimos MDF 12T teniendo en cuenta el precio y la durabilidad El dise-ntildeo se puede hacer con cualquier herramienta CAD como Google Sketch o SolidWorks Aunque existen muchas plantillas de disentildeo para los paneles de joypad decidimos elegir un disentildeo arcade estaacutendar japoneacutes

El primer paso del montaje es unir la placa al panel MDF Este paso fue faacutecil aunque nos llevo maacutes tiempo que el resto Despueacutes insertamos los joysticks la toma de corri-ente el interruptor y los botones en el panel MDF superior Los conectores HDMI Ethernet y USB se colocaron en la parte trasera del panel MDF El siguiente paso fue montar cada panel MDF usando un taladro para hacer los agujeros luego con tornillos los sujetamos

El uacuteltimo paso del montaje de la ODROID Arcade Box es conectar por cable los pines de expansioacuten del ODROID-XU4 a los componentes de entrada En este proyecto dise-ntildeamos las entradas GPIO externas tal y como se muestra en la paacutegina 26 Los botones Select y Temp estaacuten conecta-dos a puertos de expansioacuten ADC

Configuracion del softwareDesarrollamos un nuevo demonio GPIO llamado gpio_

keyd (httpbitly2ljOZKg) Este demonio es capaz de asignar entradas GPIO y eventos claves usando uinput y wiringPi una libreriacutea de acceso GPIO basada en pines Estaacute disentildeada para que le sea familiar a quiene ya ha utilizado el sistema de cableado Arduino Aunque la blibreriacutea wiring-Pi upstream soacutelo admite Raspberry Pi Hardkernel ofrece una versioacuten de wiringPi para ODROIDs en su repositorio GitHub (httpbitly1Eq3UpF) El moacutedulo uinput es un moacutedulo del kernel de Linux que gestiona el subsistema de entrada del usuario Se puede utilizar para crear y manejar dispositivos de entrada desde una aplicacioacuten

ARCADE BOX

herramientas compentes y lo que hay justamente debajo

esquema de los puertos de expansioacuten

ODROID MAGAZINE 24

Elegimos ODROID GameStation Turbo (httpbitly1ASFO5O) como plataforma de software para nuestra ODROID Arcade Box que tiene integrado uinput Debes asegurarte de que el archivo de dispositivo uinput existe en el sistema operativo elegido porque algunos no tienen dispositivos uinput

$ ls devuinput

Si tu sistema operativo no tiene un archivo de disposi-tivo devuinput entonces seraacute necesario recompilar e in-stalar un nuevo kernel con la opcioacuten de configuracioacuten IN-PUT_UINPUT habilitada La paacutegina Wiki en httpbitly1YIToBI describe coacutemo compilar e instalar la imagen del kernel a partir del coacutedigo fuente

$ make menuconfig

Device Drivers

-gt Input device support

-gt Generic input layer

-gt Miscellaneous device

-gt User level driver support ltgt

Ten en cuenta que wiringPi debe instalarse antes de in-stalar gpio_keyd En la imagen GameStation de ODROID los comandos sudo deben ejecutarse como root porque la cuenta ldquoodroidrdquo no estaacute designada como usuario sudo

$ git clone httpsgithubcomhardkernelwiringPi

git

$ cd wiringPi

$ sudo build

Descarga el coacutedigo fuente gpio_keyd el cual estaacute dis-ponible en nuestro repositorio GitHub El procedimiento para compilar e instalar gpio_keyd es muy simple

$ git clone httpsgithubcombkrepogpio_keydgit

$ cd gpio_keyd

$ make

$ sudo make install

El script gpio_keyd hace referencia a etcgpio_keydconf como el predeterminado para la informacioacuten de los botones y GPIO El archivo de configuracioacuten fue modi-ficado para las 27 entradas de la ODROID Arcade Box Algunas botones ya se utilizaban en el emulador de juego de modo que tuvimos que cambiar la configuracioacuten del emulador para evitar conflictos entre los botones de en-trada GPIO y el emulador Ten en cuenta que el campo ltGPIO pingt en el archivo de configuracioacuten hace referen-

ARCADE BOX

plano del disentildeo de joypad

la oDroiD Arcade box montada

ODROID MAGAZINE 25

cia al nuacutemero wiringPi no al GPIO y al nuacutemero de pin (httpbitly2lbzPIB)

Ejemplo de configuracioacuten para las 27 entradas etcgpio_keydconf

Digital input ltKey codegt ltGPIO typegt ltGPIO pingt ltActive valuegt User 1KEY_LEFT digital 15 0KEY_RIGHT digital 1 0KEY_UP digital 4 0KEY_DOWN digital 16 0KEY_A digital 2 0KEY_S digital 3 0KEY_D digital 30 0KEY_F digital 21 0KEY_Z digital 8 0KEY_X digital 9 0KEY_C digital 7 0KEY_V digital 0 0 User 2KEY_BACKSLASH digital 12 0KEY_SLASH digital 13 0KEY_SEMICOLON digital 14 0KEY_LEFTBRACE digital 5 0KEY_Y digital 26 0KEY_U digital 27 0KEY_I digital 22 0KEY_O digital 23 0KEY_H digital 6 0KEY_J digital 10 0KEY_K digital 11 0KEY_L digital 31 0

Analog input ltKey codegt ltGPIO typegt ltADC portgt ltADC ac-tive valuegtKEY_B analog 0 0KEY_N analog 0 2045KEY_M analog 1 2045

To run gpio_keyd daemon at every startup is conve-nient for ODROID Arcade Box

etcinitdgpio_keyd binsh BEGIN INIT INFO

ARCADE BOX

Mapeo Gpio externo para los botones y Joysticks

cableado de la oDroiD Arcade box

ODROID MAGAZINE 26

Provides gpio_keyd Required-Start $all Required-Stop Default-Start 2 3 4 5 Default-Stop Short-Description Run usrbingpio_keyd if it ex-ist END INIT INFO

PATH=sbinusrsbinbinusrbin

libinitvarssh

liblsbinit-functions

do_start() if [ -x usrbingpio_keyd ] then usrbingpio_keyd -d ES=$ [ ldquo$VERBOSErdquo = no ] ampamp log_end_msg $ES return $ES fi

case ldquo$1rdquo in start) do_start restart|reload|force-reload) echo ldquoError argument lsquo$1rsquo not supportedrdquo gtamp2 exit 3 stop) killall gpio_keyd exit 0 ) echo ldquoUsage $0 start|stoprdquo gtamp2 exit 3 Esac

$ sudo chmod +x etcinitdgpio_keyd$ sudo update-rcd gpio_keyd defaults$ sudo reboot

En los comandos anteriores el script gpio_keyd se ejecuta como un demonio uti-lizando la opcioacuten ldquo-drdquo El uso de gpio_keyd se puede comprobar con la opcioacuten ldquo-hrdquo Comprue-ba de nuevo las teclas usadas por el juego o el emulador despueacutes fija la configuracioacuten del gpio_ keyd correctamente Es ahora cuando estaacutes listo para jugar y disfrutar de tus juegos con tu nueva ODROID Arcade Box

ARCADE BOX

the King of fighters 98 John vs brian

ODROID MAGAZINE 27

En este artiacuteculo analizaremos las diferentes formas que existen para ob-tener los datos del uso de la red

ConfiguracioacutenLa forma normal de analizar los datos

de traacutefico de la red es mediante el uso de datos a traveacutes de las aplicaciones de configuracioacuten del sistema tal y como se muestra en la figura 1

El uso de datos muestra la cantidad total de traacutefico de datos entrante y sa-liente que ha sido utilizada por una apli-cacioacuten Si seleccionas la aplicacioacuten veraacute una pantalla como la que aparece en la Figura 2 que muestra informacioacuten detal-lada sobre el uso de la aplicacioacuten tanto en primer plano como de fondo

La informacioacuten que se muestra den-tro de la aplicacioacuten de Configuracioacuten se almacena en data systemnetstats que requiere acceso root Al eliminar todo lo que hay dentro de esta carpeta se resta-

Como desarrolladores queremos que nuestras aplicaciones sean eficientes y a menudo nos gus-

tariacutea saber cuaacutento ancho de banda de red estaacute utilizando nuestra aplicacioacuten Esto es muy uacutetil por varias razones

bull Para monitorizar y asegurarnos de que la aplicacioacuten es realmente la nuestra y no una aplicacioacuten que ha sido pirateada y publi-cada con diferentes nombres en Play Store

bull Para asegurarnos de que no es-tamos cogiendo ancho de banda innecesario del plan de datos del usuario

bull Para comprobar que el disposi-tivo que estamos usando no estaacute accediendo a Internet sin nuestro consentimiento

blecen las estadiacutesticas de red mostradas en esta aplicacioacuten

Estadiacutesticas de la redLa aplicacioacuten de configuracioacuten nos

puede dar una informacioacuten general so-bre las estadiacutesticas de la red de datos que es un buen comienzo pero a veces necesitamos un anaacutelisis maacutes detallado que puede hacerse a traveacutes del coman-do dumpsys Android cuenta con una poderosa herramienta llamada dumpsys que nos permite obtener una instan-taacutenea o volcado del sistema que pu-ede incluir informacioacuten sobre la red la memoria y otros componentes Lee la documentacioacuten de Android en httpbitly2kK9dep para obtener maacutes infor-macioacuten del sistema Para conseguir maacutes informacioacuten relacionada con la red nos interesa el comando

$ dumpsys netstats detail

La Figura 3 muestra un pantallazo de lo que puedes ver desde una tablet Nexus 7 que ejecuta Lollipop 511

Hay algunas cuestiones importantes para entender las estadiacutesticas

bull Las estadiacutesticas UID muestran el desglose de las aplicaciones de primer plano y de fondo

bull Uid muestra el ID de usuario de la aplicacioacuten que se puede utili-zar para relacionar eacutesta con la in-

DESARROLLO AnDROID AnALIzAnDO EL uSO DE RED DE LAS APLICACIOnESpor Nanik tolaram

DESARROLLO ANDROID

figura 1 - Uso de datos en la configuracioacuten

figura 2 - Desglose del uso de datos de la app

ODROID MAGAZINE 28

$ dumpsys package detail

Este comando te proporcionaraacute una larga lista de informacioacuten sobre los pa-quetes que estaacuten instalados en tu dis-positivo Para las estadiacutesticas de red nos interesa la seccioacuten que se muestra en la Figura 5

La seccioacuten resaltada muestra el userId que se relaciona con el uid que se mues-tra en las estadiacutesticas de red Al relacio-nar este nuacutemero sabemos el nombre del paquete de la aplicacioacuten sobre el que es-tamos leyendo las estadiacutesticas de red

Aplicacioacuten de ejemplo

La aplicacioacuten de ejemplo de este artiacute-culo se puede descargar desde httpbitly2m8WenA que muestra coacutemo etiqu-etar la conexioacuten de red desde distintas

secciones de la aplicacioacuten lo cual puede ayudar a analizar el volumen de traacutefico de datos de la aplicacioacuten La Figura 6 muestra un ejemplo de coacutemo lo vemos si utilizamos Android Device Monitor (dentro de Studio diriacutegete a Tools -gt Android -gt Android Device Monitor)

Tal y como se puede ver en el graacutefico la simple aplicacioacuten tiene 3 conexiones dife-rentes y cada una de ellas estaacute accediendo a un sitio web diferente Al etiquetarlas con

formacioacuten del paquete (que ver-emos en la seccioacuten de detalles del paquete dumpsys) con el objeto de conocer queacute aplicacioacuten utiliza estas estadiacutesticas de red

bull Las etiquetas son uacutetiles si de-sea ver la cantidad de datos que utiliza cada conexioacuten de tu apli-cacioacuten Puedes ver un ejemplo de esto en la Figura 4 que muestra que el uid 10007 tiene las siguien-tes etiquetas 0x30000401 0x30003201 0x30002804 0x10000401 y 0x30000407 Es-tas etiquetas ayudan al desarrol-lador a saber cuaacutentos datos uti-liza cada parte de la aplicacioacuten Estas estadiacutesticas de red en par-ticular estaacuten vinculada al paquete Google Framework que forma parte de Google Play Store

En el siguiente apartado veremos coacutemo escribir una aplicacioacuten etiquetando el hilo que hace la conexioacuten de red para determi-nar la cantidad de datos que se utilizan

Estadiacutesticas de paquetes

En la seccioacuten anterior analizamos el uid que aparece al ejecutar el comando dumpsys netstats Ahora necesitamos sa-ber queacute uid corresponde a la aplicacioacuten en el dispositivo y esto se hace mediante el siguiente comando

DESARROLLO ANDROID

figura 3 ndash estadiacutesticas de red con Dumpsys

figura 4 - estadiacutesticas de etiquetas UiD

figura 5 - Detalles del paquete dumpsys

figura 6 - etiquetas de red

coacutedigos diferentes podemos ver la cantidad de traacutefico que consume cada conexioacuten y esto nos ayudaraacute a ver si nuestra aplicacioacuten utiliza el ancho de banda de un modo eficiente

El coacutedigo del siguiente fragmento muestra el uso de la API TrafficStats interna Esta etiqueta API muestra el subproceso que utiliza actualmente un socket con un identificador y todo el traacute-fico que pasa por la misma conexioacuten se grabaraacute junto Asiacute es como la aplicacioacuten es capaz de agrupar las 3 conexiones diferentes Internamente Android utili-za el moacutedulo xt_qtaguid del kernel para realizar este tipo de etiquetado Tienes disponible maacutes informacioacuten en httpbitly2kU8KXB

public void getUsingNormalURLC

onnection(String urlText int

threadTag)

throws IOException

URL url = null

TrafficStats

setThreadStatsTag(threadTag)

HttpURLConnection urlConnec-

tion = getConnection(url)

try

finally

TrafficStatsclearThread-

StatsTag()

ODROID MAGAZINE 29

Disgustado te subes a tu 4x4 de dominacioacuten del mun-do un vehiacuteculo que desde fuera parece maacutes bien un viejo camioacuten de granja pero por dentro se parece maacutes

al sistema de control de un transbordador espacial porque el conductor del restaurante oriental que realiza las entrega a do-micilio estaacute enfermo Ahora tienes que ir a recoger tu propia comida ldquoQueacute rudimentariordquo piensas cuando sales de tu garaje secreto Justamente cuando vas a parar el vehiacuteculo en un stop oyes un fuerte ruido Sales y te diriges raacutepidamente a la parte posterior del 4x4 donde observas un cubo de basura Te tiras de los pelos y piensas ldquoiexclEsos basureros Neanderthales dejaron otra vez el cubo en mediordquo Ahora te toca recoger los restos de tu cena y la basura de otros

Conforme te vas alejando para hacer tus recados empiezas a pensar en coacutemo evitar este inconveniente en el futuro Varias ideas te vienen a la mente

Un sistema lidar para escanear en 3D el entorno en tiempo real y alarmas sonoras cuando sea necesarioUn brazo ciberneacutetico colocado en la parte posterior del 4x4 que procese video para detectar objetos agarrarlos y moverlosUna simple camara trasera

Empiezas a considerar la viabilidad de cada una

Muy bueno pero demasiado complicado y costosoAuacuten mejor y un proyecto propio de un cientiacutefico loco pero demasi-ado complicado y costosoya tengo dos iexclpero estaba demasiado preocupado en mis pensa-mientos para prestarles atencioacuten

Lo que necesitas es algo simple sin complicaciones y barato que haga sonar una alarma para alertarte incluso cuando estar absorto en tus pensamientos ldquoAhardquo Recuerdas haber visto un nuevo producto en ameriDroid que puede hacer precisamente esto Se trata de un microcontrolador conectado al USB que soporta hasta 6 sensores ultrasoacutenicos con simples comandos en serie (httpbitly2l26ptV) ldquoiexclPerfectordquo Piensas

Regresas a tu laboratorio subterraacuteneo con el pollo Kung Pao en la mano te apresurar a encender tus monitores entras en el sitio web ameriDroid y pides un kit ldquoUSB Ultrasonic Ranging Sensorrdquo con 6 sensores y carcasas

Vas sintiendo una sensacioacuten de alivio a medida que regresas a los 12 proyectos en lo que ya estabas trabajando a la espera de que pasen un par de diacuteas hasta que llegue tu nuevo pedido Mientras te comes tu Kung Pao dibujas un diagrama de coacutemo quieres colocar los sensores en la parte posterior de tu vehiacuteculo

Un par de diacuteas maacutes tarde el kit llega Inmediatamente em-piezas a montar el kit y los sensores en la parte posterior de tu 4x4 teniendo cuidado de usar sellador de silicona para pro-teger los sensores de la lluvia aguanieve y nieve que puedas encontrar durante tus aventuras para dominar el mundo

A continuacioacuten consultas las instrucciones proporcionadas por ameriDroid con el kit sobre coacutemo controlar y leer los sen-sores desde tu fiel ODROID-C2 y VU7 que montaste en el salpicadero para este propoacutesito

Conectando el cable USBEl cable USB suministrado debe conectarse al microcon-

trolador (la pequentildea placa de circuito con filas de pines que sobresalen) El microcontrolador tiene una fila de 4 o 6 pines

DETECTAR LA PRESEnCIACROnICAS DE un CIEnTIfICO LOCOpor bo lechnowsky

SENSOR ULTRASONICO

ODROID MAGAZINE 30

en un extremo Si tiene 6 pines ceacutentrate en los 4 pines centrales y sigue estas instrucciones

Negro - conectar a GNDrojo - conectar a VccVerde - conectar a rxi

blanco - conectar a txD

Conectando los sensoresultrasoacutenicos

En cada sensor ultrasoacutenico hay cuatro pines marcados Vcc Trig Echo Gnd Para el primer sensor ultrasoacutenico conecta el pin 2 del microcontrolador al pin ldquoTrigrdquo del sensor ultrasoacutenico Conecta el pin 3 del microcontrolador al pin ldquoEchordquo del sensor Conecte el pin ldquoVccrdquo del sensor a DC 5V (el pin ldquoVCCrdquo del microcontrolador suministra 5V) y el pin ldquoGndrdquo del sensor a una conexioacuten a tierra como por ejemplo los pines ldquoGNDrdquo del microcontrolador

Si conectas un segundo sensor de ultrasonidos conecta ldquoTrigrdquo al pin 4 y ldquoEchordquo al pin 5 Continuacutea conectando los siguientes pines a los sensores hasta los pines 12 y 13 si al final optas por conectar los seis sensores ultrasonidos

Conexioacuten del softwareUtilizas un programa terminal como PuTTY Screen o tu

lenguaje de script o programacioacuten favorito para conectarte al puerto serie que aparece cuando te conectas el sensor ultrasoacuteni-co Esto variaraacute en funcioacuten del sistema operativo que utilizas para conectarte al microcontrolador En Windows consultar el ldquoAdministrador de dispositivosrdquo es la forma maacutes comuacuten de averiguarlo En Linux ldquodmesgrdquo o ldquolsusbrdquo son las formas de de-tectar a queacute puerto estaacute conectado Deberiacuteas ver algo denomi-nado ldquoPL2303rdquo que es la conexioacuten del microcontrolador Si recibes informacioacuten basura en tu terminal cuando te conectes aseguacuterate de que los ajustes en serie son 9600 baudios 8 bits ninguno (paridad) y 1 bit de parada Aquiacute tienes una lista de los comandos que puede aceptar el microcontrolador

bull debug on Activa la retroalimentacioacuten detallada Estaacute deshabilitada por defecto nos proporcionaraacute aclaracio-nes sobre los errores de entrada

bull debug off desactiva la retroalimentacioacuten detalladabull init x y activa un HC-SR04 en los pines especificados

X es trigger Y es echo Estos deben ser pines digitales El dispositivo 0 estaacute preestablecido en los pines 2 y 3 de modo que no es necesario especificar estos pines La seleccioacuten de pines no vaacutelidos devolveraacute un signo de ex-clamacioacuten ()

bull ping enviacutea una sola lectura del HCSR04 previamente utilizado Si no se ha utilizado todaviacutea se usaraacute el dis-positivo 0 Si al comando le sigue un espacio y un nuacutemero entre 0-100 (exclusivo) se realizaraacute ese nuacutemero de lecturas emitiendo primero el promedio de esas lec-

SENSOR ULTRASONICO

turas despueacutes el nuacutemero de lecturas fallidas (que no cuentan para el promedio) y luego los valores miacutenimo y maacuteximo de lectura separados por espacios En cual-quier caso si una sentildeal se desconecta automaacuteticamente devolveraacute -1

bull start Hace ping constantemente a todos los dispositivos conectados en secuencia Debido a que los dispositivos se utilizan uno a uno el flujo de datos de este comando seraacute maacutes raacutepido si los dispositivos miden distancias cor-tas Si este comando le sigue un espacio y un nuacutemero mayor que 0 la placa esperaraacute estos milisegundos entre la lectura del uacuteltimo dispositivo y la lectura del primer dispositivo El resultado de este comando seraacute la lectura de cada dispositivo (con un uacutenico espacio despueacutes de cada uno) y una vuelta tras el uacuteltimo dispositivo

bull stop detiene la operacioacuten ldquostartrdquo soacutelo es efectivo tras haber iniciado ldquostartrdquo

bull mode emite el modo de medicioacuten del flujo M para meacutetrico (miliacutemetros) I para Imperial (deacutecimas de pul-gada) o R para Raw (la longitud de pulso en microse-gundos devuelta por el HC-SR04) El valor predeter-minado es M

bull timeout emite el tiempo de espera actual para lecturas de la sentildeal El tiempo de espera es la mayor cantidad de microsegundos que la placa esperaraacute antes de declarar que el HC-SR04 ha realizado una mala lectura lo cual no es necesariamente lo mismo que el pulso maacutes largo que la placa aceptaraacute del HC-SR04 Cuando la placa mide el pulso del HC-SR04 primero espera a que el HC-SR04 comience a enviar un pulso Este tiempo cuenta para el tiempo de espera Cuando este comando le sigue un espacio y un nuacutemero el tiempo de espera se ajusta a ese nuacutemero El valor predeterminado es 1 segundo (1000000 microsegundos)

bull ver emite informacioacuten de versioacuten y creacuteditos

Si cualquier comando (o ninguacuten comando) estaacute precedido por un uacutenico diacutegito de 0-5 (inclusive) seguido de un espacio el dispositivo que corresponde a ese diacutegito se seleccionaraacute para ser usado con el siguiente comando ldquopingrdquo Cada vez que la placa esteacute lista para un comando emitiraacute ldquogtrdquo para la serie La uacutenica excepcioacuten estaacute tras el comando ldquostartrdquo que no solicitaraacute entrada hasta que sea reconocido ldquostoprdquo

ODROID MAGAZINE 31

iquestCoacutemo empezaste con los ordenadoresCuando empeceacute mi negocio tuve que decidir queacute plat-

aforma de hardware iba a utilizar para la recogida de datos del traacutefico Simplemente para que no pienses mal de miacute mis caacutemaras de traacutefico no son las que se usan para multar por exceso de velocidad o algo asiacute Mi sistema estaba desti-nado suavizar el flujo de traacutefico fijando los controles oacutepti-mos de las sentildeales de traacutefico Anteriormente usaba un PC industrial para ejecutar mi software de reconocimiento de imaacutegenes Ahora uso la familia de dispositivos ODROID para esta cuestioacuten

iquestQueacute te atrajo de la plataforma ODROID En 2012 useacute Google para buscar una plataforma que

fuera muy compacta y al mismo tiempo potente para que cubriera mis necesidades que resultoacute ser la placa

Por favor haacuteblanos un poco sobre tiSoy ingeniero de electroacutenica y software en Rusia desde

hace 47 antildeos Naciacute en Siberia y tras terminar la escuela me mudeacute a Moscuacute para estudiar en la universidad Ser estudi-ante en el Instituto de Aviacioacuten de Moscuacute (MAI) fue una experiencia increiacuteble probablemente la mejor de mi vida A principios de los 90 llegoacute a Rusia la era de los microordena-dores soliacutea jugar a un juego de saltos en una CPU z80 y el i486 Tras finalizar mis estudios universitarios y de posgrado me convertiacute en ingeniero Trabajeacute en unos cuantos puestos de trabajo para diferentes empresas y finalmente decidiacute em-prender mi propio negocio En 2006 puse en marcha una iniciativa para crear sistemas de recuento del traacutefico de au-tomoacuteviles Estoy casado y tengo una hija de 21 antildeos llamada Lena que trabaja como enfermera Mi esposa Nadezhda es disentildeadora de vestuario de produccioacuten pero ahora trabaja como disentildeadora web Ella es aficionada a la fotografiacutea digi-tal y le encanta su caacutemara reacuteflex digital

COnOCIEnDO un ODROIDIAnvIACHESLAv ALEKSEEveditado por rob roy (robroy)

CONOCIENDO UN ODROIDIAN

Viacheslav disfruta tocando la guitarra y escuchando muacutesica

1995 en el campus MAi probando uno de los primeros equipos Vr comerciales del mundo que funcionaba a 640x480 a 30fps Utiliz-aba un sensor magneacutetico en la nuca para la posicioacuten de la cabeza la mejor broma que se podiacutea gastar a alguien era colocar un imaacuten cerca de la espalda y sacudirlo iexcllos gritos estaban garantizados cuando el mundo en 3D daba vueltas sin cesar

ODROID MAGAZINE 32

ODROID-X2 Con sus cuatro nuacutecleos funcionando a 17 GHz calculaba con facilidad los algoritmos de reconteo del traacutefico de automoacuteviles Maacutes tarde cambieacute al U3 y el XU4

iquestCuaacutel es tu ODROID favorito y por queacuteDe momento mi favorito es el XU4 Mi sistema estaacute

basado en el tratamiento de fotogramas de video en tiempo real por lo que el bus USB 30 del XU4 es bastante bueno para una caacutemara con una interfaz de captura de viacutedeo Para mi sistema es muy importante tener una buena conexioacuten entre la caacutemara de viacutedeo y la CPU Probablemente tendreacute que echar un vistazo a las interfaces de nivel inferior como MIPI CSI-2 que por desgracia estaacuten ausente en el XU4 Recientemente he estado aprendiendo como usar la caacute-mara oCam GS BW La caacutemara es buena en siacute misma pero para un uso industrial al aire libre tengo que implementar un software de control de exposicioacuten automaacutetica y posible-mente de control de apertura de la lente que todaviacutea estaacute en estudio

MEET AN ODROIDIAN

Una vieja joya el mini ordenador Nixdorf

An old gem the Nixdorf mini computer

CONOCIENDO UN ODROIDIAN

iquestQueacute aficiones e intereses tienes aparte de los ordenadoresDisfruto conduciendo y leyendo sobre coches y viendo

los campeonatos de carreras de F1 Tambieacuten me gusta via-jar pescar escuchar muacutesica y tocar la guitarra Tengo un gato siberiano llamado Leia y soy fan de Star Wars

iquestQueacute consejo le dariacuteas a alguien que quiere aprender maacutes sobre la programacioacuten

Hacer software es algo increiacuteble y miacutestico Es una fusioacuten de arte y tecnologiacutea Nada te inspira maacutes que tu aplicacioacuten cuando empieza a cobrar vida Sin embargo siempre estaacute ahiacute el otro lado de la Fuerza Estar listo para instruirte inc-esantemente El desarrollo de software es una de las activi-dades que cambia maacutes raacutepido Si tienes pensado dejar de hacer software en uno o dos antildeos puede dejar de aprender ahora El conocimiento se volveraacute anticuado en un par de antildeos maacutes o menos Para estar en lo maacutes alto siempre tienes que correr Es similar a la cancioacutenrdquoRun like Hellrdquo de Pink Floyd Si estaacutes listo para vivir de esta forma seguro que tendraacutes eacutexito

ODROID MAGAZINE 33

Page 13: Estación ARCADE · gias de marketing, administración de medios sociales y producción multimedia impresa, web, vídeo y cine. Ges-tionando múltiples cuentas con agencias y productores

nas segundas partes ademaacutes de algunas misiones de bonificacioacuten Cannon Fod-der 2 salioacute un antildeo maacutes tarde pero fue maacutes bien un ldquodisco de datosrdquo con ex-pansiones que una secuela ya que en su mayor parte presentaba maacutes misiones en lugar de nuevas caracteriacutesticas Tambieacuten estaba el X-Mas de Amiga que ofreciacutea algunas misiones diferentes basadas en el juego Cannon Fodder

Ejecutando Open Fodder

Open Fodder es un remake del motor del juego Cannon Fodder que lleva el juego a los sistemas operativos modernos Al igual que otras migraciones del motor del juego (como OpenTTD) puede uti-lizar los datos del juego original con esta versioacuten del motor para ejecutar el juego en tus dispositivos modernos Esta mi-gracioacuten tambieacuten cuenta con una versioacuten exportada para los dispositivos ARM lo que significa que podemos ejecutarlo igualmente en nuestros ODROIDs

Todaviacutea estaacute en desarrollo pero ya funciona bastante bien Como de cos-tumbre se puede instalar desde mi repo-sitorio y puesto que soacutelo requiere SDL2 y SDL2 Mixer como dependencias prin-cipales deberiacutea funcionar en Debian y

con un nuevo grupo de reclutas que se alinean esperando a unirse al combate Los soldados desechables (de ahiacute el nom-bre de cannon fodder Carne de Cantildeon) poco a poco se convierten en cruces alin-eadas dando forma a un cementerio mil-itar a medida que vas completando cada misioacuten formaacutendose maacutes y maacutes filas con-forme vas enterrando a tus predecesores Sin embargo los desarrolladores le di-eron un cierto toque de humor ya que los primeros soldados de tu escuadroacuten (y por tanto los casi seguro que moriraacuten) llevan de hecho los nombres de las seis personas que componiacutean el equipo de desarrollo del juego

Si nos fijamos bien el juego incor-poraba algunos detalles bastante intere-santes Por un lado tiene su propia can-cioacuten ldquo War never been so much funrdquo que suena durante la intro del juego iexclUno de los desarrolladores del juego Jon Hare compuso la muacutesica junto con el compositor Richard Joseph Si teniacuteas el Amiga CD32 tambieacuten recordaraacutes una pista adicional que incluiacutea un video en el cual los desarrolladores se disparaban entre siacute con armas de juguete (httpbitly2l67bFy) iexclSin duda se divirtieron bastante desarrollando este juego

Cannon Fodder tambieacuten tuvo algu-

JUEGOS LINUX

Ubuntu por igual las puedes encontrar en mi lista principal de paquetes para armhf y jessiemain para arm64

Se puede instalar con este comando en un dispositivo ODROID que ejecute Debian suponiendo que ya tengas con-figurados mis repositorios o esteacutes usando una de mis imaacutegenes de Debian (httpbitly13v98ly)

$ apt-get install

openfodder-odroid

He alterado ligeramente el juego para que siempre se ejecute en modo pantalla completa aunque si lo deseas puedes cambiar al modo de ventana simple-mente pulsando F11 cuando tenga el juego activado

Convirtiendo los datos del juego

Por siacute sola mi versioacuten de Open Fod-der viene con el especial Amiga X-Mas ademaacutes de varios niveles demo dis-ponibles de forma gratuita Si quieres jugar el juego real tendraacutes que importar los datos desde un CD Cannon Fodder

Si estaacute usando un ODROID para ju-gar al Open Fodder puedes localizar las carpetas de los datos del juego en la car-peta $HOMEopenfodderData Por ejemplo homeodroidopenfodderDataDos_CD es una de esas carpetas de datos del juego Existen varias carpe-tas de datos del juego que puedes usar dependiendo de la versioacuten que tengas del juego Cannon Fodder

Dos_CDAunque el juego es compatible con

muchas y diferentes fuentes del juego actualmente soacutelo Dos_CD parece ser una versioacuten de Open Fodder ldquototal-mente compatiblerdquo con muy pocos er-rores y problemas El resto de fuentes del juego pueden tener problemas

Aquiacute tienes un consejo raacutepido Aunque se llama Dos_CD cogeraacute cu-alquier versioacuten de DOS de Cannon Fodder que puedas encontrar Si tienes

figura 7 - Sensible Software - los desarrolladores de cannon fodder

ODROID MAGAZINE 13

WHDLoad en un Amiga (o WinUAE) para extraer los archivos del juego y co-piarlos en la carpeta DataAmigardquo No lo he probado pero si tienes la ldquoCannon Fodder Collectionrdquo de Amiga CD32 no oficial puedes copiar el contenido de FodderNew en esta carpeta lo que tendraacute como resultado niveles completamente diferentes Puede considerarse como una versioacuten maacutes compleja del juego aunque a la vez maacutes divertida Por lo tanto bien poner los archivos originales de Amiga aquiacute o bien los archivos FodderNew de la ldquoCannon Fodder Collectionrdquo

Dos2_CDDos2_CD es en realidad la carpeta

de la versioacuten DOS de Cannon Fodder 2 pero tambieacuten funciona con la versioacuten GoG Desafortunadamente tiene algu-nos problemas el maacutes grave es que el juego no tiene ninguacuten tipo de sonido o muacutesica Aparte de esto todo parece fun-cionar correctamente pero desconozco coacutemo reaccionaraacute en niveles posteriores La carpeta Data tambieacuten incluye las car-petas WAV Plus AmigaFormat_XMAS y Custom En WAV se almacenan los efectos de sonido por defecto para to-dos los juegos (Cannon Fodder) Plus es una demo del nuacutemero 31 la revista Amiga Power y AmigaFormat_XMAS es el Amiga Format Christmas Special Tambieacuten hay una carpeta Custom que te permite jugar otros juegos y mapas pero necesitan la versioacuten (CD) de DOS o de lo contrario no apareceraacuten

Notas finalesOpen Fodder es un buen proyecto

que te permite ejecutar este increiacuteble juego en sistemas modernos Realmente me gusta y estoy deseando ver coacutemo pro-gresa Espero que las versiones de Amiga y Cannon Fodder 2 sean pronto total-mente compatibles Tal vez incluso poda-mos ver mejoras graacuteficas con el tiempo Me gustariacutea ver graacuteficos maacutes modernos ya que el juego es bastante antiguo y los graacuteficos no son los maacutes idoneos para res-oluciones 1080p

la versioacuten de disco de Cannon Fodder simplemente copia el CF_ENGDAT en la carpeta Dos_CD La versioacuten original de CD DOS teniacutea un archivo llamado cf_cddat Cambiar el nombre a CF_ENGDAT y copiarlo a la carpeta Dos_CD Si tienes la versioacuten GoG del juego soacutelo tiene que copiar CF_ENG DAT a la carpeta Dos_CD iexclEsta es una forma raacutepida y legal de conseguir el juego si estaacutes interesado

Aseguacuterate de que el nombre del ar-chivo este en mayuacutescula ya que el juego tiene en cuenta esta cuestioacuten Intenta que coincida todo para asegurarte de que las cosas funcionen sin problemas

Amiga_CDAmiga CD32 tambieacuten contaba con

una versioacuten de este juego Esta es la ver-sioacuten que incluye el video al que hemos hecho referencia anteriormente En el CD de Amiga CD32 hay una carpeta llamada Fodder El contenido de esta carpeta debe copiarse a la carpeta Ami-ga_CD Puedes extraer la segunda pista del CD y almacenarla como Track2flv en la misma carpeta con la finalidad de tener el archivo de video

Me topeacute con algunos problemas cu-ando haciacutea esto y descubriacute nuevamente que el juego buscaba muchos archivos en mayuacutesculas asiacute que utiliceacute el siguiente comando para copiar todos los archivos y tenerlos tambieacuten en mayuacutesculas en la carpeta Amiga_CD$ for files in `ls` do cp $files

`echo $files | tr lsquo[lower]rsquo

lsquo[upper]rsquo` done

Asiacute funcionaba bien pero teniacutea algu-nos fallos Por ejemplo la animacioacuten del helicoacuteptero al inicio de cada misioacuten no apareciacutea y el cursor cuando se guarda un archivo se distorsionaba Aparte de esto no he visto problemas importantes en la versioacuten Amiga CD32

AmigaLa Informacioacuten de desarrollador de

Open Fodder dice ldquoUsar el instalador

JUEGOS LINUXJUEGOS ANDROID

CAuSALITy un JuEGO DE ROMPE-CABEzAS COn PARA-DOJAS DE vIAJES En EL TIEMPO por bruno Doiche

Configura tuacute mismo los entornos extrantildeos e insoacutelitos y

ayuda a un grupo de astronautas varados a encon-trar una ruta hacia un lugar seguro Cada nivel al que te enfrentas representa un nuevo reto donde necesitas llevar a tu astronauta a una salida que coincida con su color Los maacutergenes de tiempo son cortos aunque es muy divertido Aunque formas parte de tan soacutelo una fraccioacuten de tiempo de la vida de tu personaje iexclten cuidado pasaraacutes un montoacuten de tiempo enganchado a este juego

httpsplaygooglecomstoreappsdetailsid=comlojugamesandroidCausality

el entorno 3D isomeacutetrico es magniacute-fico a menudo no superaba el nivel porque los graacuteficos me cautivaban

ODROID MAGAZINE 14

tePi necesitan estar conectados a otros distintos en el ODROID-C2 porque parece haber un conflicto La interfaz UART ocupa estos pines y el estado por defecto del ODROID (1=high en Pin 8) no es lo que espera la RemotePi (GPIO debe entrar en el valor por defecto 0=low para cortar la energiacutea tras el apagado) Pero puesto que necesitas utilizar cables de todos modos para conectar la Remot-ePi esto no supondraacute ninguacuten problema ya que simplemente puedes reconectar los cables a otros pines GPIO

Como evitamos el circuito de ali-mentacioacuten del ODROID encendieacutendo-lo a traveacutes de GPIO tambieacuten pasamos por alto la proteccioacuten ante subidas de tensioacuten 2526A del dispositivo pero no te preocupes La RemotePi tambieacuten tiene proteccioacuten ante subidas de tensioacuten que deberiacutea coincidir con el mismo val-or que en el caso de la RemotePi board para la Raspberry Pi 3 Sin embargo la RemotePi para la Raspberry Pi 2 es de soacutelo 2A Esto estaacute bien porque el valor es menor a los 26A del ODROID de modo el polyfuse de la RemotePi se ac-tivariacutea antes si conectas demasiados dis-

La RemotePi board (httpbitly2l8JcWU) que convierte cu-alquier mando a distancia en un

interruptor de encendido para tu orde-nador de placa reducida puede ser com-patible con el ODROIDC2 si sigues esta guiacutea Si utilizas tu dispositivo como centro multimedia esta placa te propor-cionara un receptor de infrarrojos y un circuito de alimentacioacuten asiacute como un botoacuten de encendido Puedes encender y apagar tu ODROID completamente a traveacutes de una sentildeal infrarrojos (IR) y simplemente presionar el botoacuten de en-cendido para apagarlo y reiniciarlo con seguridad La placa RemotePi es respon-sable del modo espera que absorbe una miacutenima energiacutea mientras el ODROID estaacute completamente apagado Por uacutel-timo la placa alimenta tu dispositivo a traveacutes de GPIO lo cual requiere un cable microUSB para conectarlo a la Re-motePi en lugar de utilizar un adaptador de corriente normal

Configuracioacuten de hardware

Puesto que la RemotePi estaba pen-sada originalmente para la Raspberry Pi 2 necesitaraacutes utilizar cables adiciona-les en lugar de colocarla justamente en cima del C2 para evitar interferir con el disipador de calor asiacute que debes re-cablear algunos pines Es necesario utili-zar cables con el diaacutemetro adecuado para los pines de 5V y puesta a tierra ya que la corriente podriacutea estar entre los 2A y 26A dependiendo de cuaacutentos dispositi-vos USB conectes a tu dispositivo

Los pines GPIO 8 y 10 de la Remo-

positivos no alimentados de forma exter-na que no es una buena idea en un SBC al fin al cabo No obstante debido a esta diferencia de amperaje una RemotePi para la Raspberry Pi 3 seriacutea la mejor op-cioacuten para este proyecto

Como resultado del nuevo cableado el firmware de RemotePi ya no se puede configurar de forma normal aunque nunca he usado esta funcioacuten Si fuera necesario configurar o actualizar el firm-ware necesitaraacutes volver a conectar los pines 8 y 10 de la RemotePi a los pines 8 y 10 del ODROID durante la actu-alizacioacuten del firmware y luego deshacer los cambios una vez que la actualizacioacuten haya finalizado Otra posibilidad es simplemente conectar una Raspberry Pi para actualizar el firmware Esto suena a un montoacuten de problemas pero en re-alidad simplemente es extender la con-exioacuten del cabezal y cambiar una liacutenea en el script principal y dos liacuteneas en otro script opcional si haces uso de ello

Re-cableando laconexioacuten GPIO

Dado que la RemotePi estaacute disentildeada

REMOTEPI BOARD PARA EL ODROID-C2por inifity85

REMOTEPI

figura 1 - remotepi board

ODROID MAGAZINE 15

ergiacutea completamenteIrswitchsh (solo cambia el script

original de MSL Digital de GPIOpin1 = 14 a GPIOpin1 = 225)

binbash

prevent restarting XBMC at

shutdown This is only used for

OpenElec before V5

LOCKDIR=rdquovarlockrdquo

LOCKFILE=rdquoxbmcdisabledrdquo

this is the GPIO pin receiving

the shut-down signal

Raspberry Pi pin8 GPIOpin1=14

Odroid-C2 pin26 GPIOpin1=225

GPIOpin1=225

functions

add_omit_pids()

omit_pids=rdquo$omit_pids -o $1rdquo

safe_shutdown ()

for OpenElec before V5

touch ldquo$LOCKDIR$LOCKFILErdquo

for OpenElec V5 and later

systemctl stop kodi

add_omit_pids $(pidof connmand)

add_omit_pids $(pidof dbus-dae-

mon)

killall5 -15 $omit_pids

for seq in `seq 1 10` do

usleep 500000

clear gt devtty1

killall5 -18 $omit_pids || break

done

sync

umount -a gtdevnull 2gtamp1

poweroff -f

echo ldquo$GPIOpin1rdquo gt sysclass

gpioexport

echo ldquoinrdquo gt sysclassgpio

gpio$GPIOpin1direction

while true do

sleep 1

power=$(cat sysclassgpio

gpio$GPIOpin1value)

if [ $power = 0 ] then

echo ldquooutrdquo gt sysclassgpio

gpio$GPIOpin1direction

echo ldquo1rdquo gt sysclassgpio

una carcasa personalizada de modo que el receptor integrado podriacutea estar oculto y no ser uacutetil En ese caso puedes desac-tivar el IR del ODROID en favor del re-ceptor externo GPIO-IR en la RemotePi y conectar el pin 12 Tienes disponible maacutes informacioacuten sobre el cambio al receptor GPIOIR en LibreELEC en httpbitly2lpDl27

Scripts de apagado para LibreELEC

Los dos scripts tratados a continu-acioacuten pueden descargarse desde la paacutegina de soporte de MSL Digital Solutions en httpbitly2kMxyVG En esta paacutegina tambieacuten encontraras una guiacutea para utili-zar estos scripts en otros sistemas opera-tivos como Volumio y RuneAudio

El script irswitchsh se usa para el apagado seguro a traveacutes de sistema In-frarrojos Tras pulsar el correspondiente botoacuten el sistema se apagaraacute de forma se-gura luego RemotePi esperaraacute a que el GPIO225 alcance el estado 0 (low) que aparece tras el cierre exitoso del sistema Finalmente cortaraacute la energiacutea

El script shutdownsh se usa para el apagado seguro a traveacutes de la interfaz del programa o script Despueacutes de navegar hasta el botoacuten de apagado en la GUI el sistema se apagaraacute de forma segura luego RemotePi esperaraacute a que el GPIO225 alcance el estado 0 (low) que apareceraacute tras apagarse el sistema de forma adec-uada y segura Finalmente cortaraacute la en-

originalmente para una Raspberry Pi desgraciadamente no es soacutelo enchufar y usar Necesitaraacutes volver a cablear dos pines usando los cables de todos los pines tal y como se muestra en la Figura 2 Re-cablea el pin 8 de la RemotePi al pin 26 del ODROID-C2 y el pin 10 de la RemotePi al pin 7 del ODROID-C2

Si no quieres utilizar el receptor IR de la RemotePi para el mando a distan-cia de LibreELEC puedes dejar desco-nectado el pin 12 La placa continuaraacute encendieacutendose y apagaacutendose a traveacutes del comando de control remoto IR pero el control de la GUI de LibreELEC seraacute asumido por el receptor de infrarrojos integrado en el ODROID Sin embargo si has comprado una RemotePi con un receptor IR y un LED externo es posible que hayas decidido colocarla dentro de

REMOTEPI

figura 3 - la remotepi ha sido recableada y montada en una carcasa personalizada

figura 2 - re-cableado Gpio

ODROID MAGAZINE 16

Centro Multimedia por ejemplo Esos comandos de apagado se equiparaacuten a eventos internos similar a cuando nave-gas por el menuacute de apagado de Kodi Sin utilizar este segundo script el sistema se cerraraacute con seguridad pero la placa Re-motePi no recibiriacutea ninguna indicacioacuten para monitorizar el GPIO225 de modo que no cortariacutea la energiacutea tras apagarse el sistema correctamente

Usando el receptor IR de la RemotePi

Si deseas utilizar el receptor IR de la RemotePi en lugar del receptor IR ODROID integrado tendraacutes que des-activar el sistema IR integrado y activar el receptor IR GPIO Para hacer esto en Ubuntu puede consultar el artiacuteculo de la Wiki de Hardkernel en httpbitly2l8KrWg Para Libre-ELEC echa un vistazo a mi mini-guiacutea en httpbitly2lLKj2A Para preguntas comentari-os o sugerencias visita el hilo original en httpbitly2mgFGKk

gpio$GPIOpin1value

sleep 3

safe_shutdown

fi

done

Shutdownsh (solo cambia GPIOpin =15 a GPIOpin =249 y GPIOpin1 =14 a GPIOpin1 =225)

binbash

if [ ldquo$1rdquo = ldquorebootrdquo ] then

Raspberry Pi pin10 GPIOpin=15

Odroid-C2 pin7 GPIOpin=249

GPIOpin=249

Raspberry Pi pin8 GPIOpin1=14

Odroid-C2 pin26 GPIOpin1=225

GPIOpin1=225

echo ldquo$GPIOpinrdquo gt sysclass

gpioexport

execute shutdown sequence on

pin

echo ldquooutrdquo gt sysclassgpio

gpio$GPIOpindirection

echo ldquo1rdquo gt sysclassgpio

gpio$GPIOpinvalue

usleep 125000

echo ldquo0rdquo gt sysclassgpio

gpio$GPIOpinvalue

usleep 200000

echo ldquo1rdquo gt sysclassgpio

gpio$GPIOpinvalue

usleep 400000

echo ldquo0rdquo gt sysclassgpio

gpio$GPIOpinvalue

set GPIO 14 high to feedback

shutdown to RemotePi Board

because the irswitchsh has

already been terminated

echo ldquo$GPIOpin1rdquo gt sysclass

gpioexport

echo ldquooutrdquo gt sysclassgpio

gpio$GPIOpin1direction

echo ldquo1rdquo gt sysclassgpio

gpio$GPIOpin1value

usleep 4000000

fi

El script shutdownsh es uacutetil si a vec-es usas las aplicaciones remotas Android Yatse o Kore o hotkeys para apagar tu

REMOTEPI

ODROID Talk Subreddit

httpwwwredditcomrodroid

ODROID Magazine

estaacute en Reddit

ODROID MAGAZINE 17

El HiFi Shield 2 (39$ httpbitly2lHSlZJ) es un Con-vertidor Digital a Analoacutegico de Alta definicioacuten (DAC) para el ODROID-C2 y el ODROID-C1+ Se trata de

una placa de sonido especial para el ODROID-C2 y C1 + que estaacute optimizada para mejorar la calidad de reproduccioacuten del sonido Ofrece un sonido muy bien equilibrado consistente intenso amplio y muy bien dimensionado por niveles Hemos analizado la calidad de audio de la salida HiFi Shield 2 DAC con un equipo estaacutendar de la industria del sonido llamado Au-dio Precision Audio Precision es un analizador de audio de alto rendimiento optimizado para la produccioacuten de audio digital

Usando el chip DAC PCM5242 de uacuteltima generacioacuten de Texas Instrument conocido como Burr-Brown el HiFi Shield 2 soporta formatos de audio de 16 24 y 32 bits con una ra-tio THD+N miacutenima (0002) y una dinaacutemica ideal (114dB +) ademaacutes de sorprendentes tasas de muestreo de 384 kHz La interfaz dedicada SPDIF soporta una definicioacuten de hasta 192kHz24bit a traveacutes de una salida oacuteptica (Toslink)

Si hacemos uso del puerto de expansioacuten I2S en el C2C1+ no es necesario ocupar un puerto USB permitiendo al usu-ario seleccionar el sistema de reproduccioacuten de audio que desee como Volumio y Debian (DietPi) para reproducir sonido HiFi

HIFI SHIELD 2

HIfI SHIELD 2EL MEJOR SOnIDO quE PODRAS COnSEGuIR En AnDROIDeditado por rob roy (robroy)

oDroiD-c2 y hifi Shield 2 Audio pb +J

primer plano de la placa con anotaciones

Distribucioacuten de los 7 pines i2S del c2c1+

la salida de audio es estaacutendar la salida de color rojo corresponde al canal de audio iz-quierdo y la salida de color blanco correspon-de al canal de audio derecho

ODROID MAGAZINE 18

Detalles

La guiacutea de configuracioacuten de UbuntuLinux para ODROID-C2 estaacute disponible en httpbitly2brrGdG y para ODROID-C1+ en httpbitly2lI7AC7 El sistema operativo oficial Volumio 2 se puede descargar desde httpbitly2kOJNAV y la imagen DietPi basada en Debian se encuentra en httpbitly2ls45yM Puede ver los esquemas en httpbitly2mnukV4

Diagrama por bloques del hifi Shield2

Caracteriacutesticasbull El control de volumen a traveacutes de la interfaz

i2c es una gran caracteriacutestica para mantener una buena calidad del sonido con varios voluacutemenes de salida de audio

bull Los puertos de salida incluyen terminales esteacute-reo rcA chapados en oro

bull La fuente de alimentacioacuten tiene habilitado un regulador de interferencias de ruido ultra-bajo lo cual reduce el ruido de la fuente de alimentacioacuten y aumenta en gran medida el ratio sentildealruido

bull La interfaz I2S permite la descodificacioacuten di-recta de la entrada digital a la salida analoacutegica utili-zando la sincronizacioacuten del reloj maestro

bull La superficie de la PCB estaacute chapada en oro so-bre 2 onzas de cobre lo cual garantiza la continui-dad de la sentildeal y reduce la reflexioacuten y deflacioacuten de la sentildeal

bull Dispone de almohadillas soldadas a la salida de audio balanceada (sentildeal diferencial)

bull La interfaz SPDIF dedicada es nueva admite una definicioacuten de hasta 192khz24bit a traveacutes de una nueva salida oacuteptica (toslink)

bull Este HiFi shield no es compatible con Android y hardkernel no tiene planes para hacerlo compatible y asiacute poder habilitar el controlador i2S en el Kernel y el hAl de Android

El Manual de usuario del ODROID-XU4 disponible en httpbitly1U9Q8yg ha sido revisado hace poco para incluir algunos de los perifeacutericos maacutes recientes como

la Expansion Board SmartPower2 y oCam Puesto que ahora Hardkernel tambieacuten ofrece Ubuntu 1604 todos los ejemplos de coacutedigo se han actualizado para que sean compatibles con el nuevo sistema operativo Si tiene comentarios preguntas o sugerencias visita el hilo de los foros ODROID en httpbitly1RykBrT

MAnuAL Xu4ACTuALIzADOREvISADO PARA uBunTu 1604 y LOS PERIfERICOS MAS RECIEnTESeditado por rob roy (robroy)

MANUAL XU4

el manual del oDroiD-xU4 incluye informacioacuten detallada de los diferentes sistemas operativos software y perifeacutericos disponibles para el oDroiD-xU4

ODROID MAGAZINE 19

El DevOps es complicado Los grandes proyectos de soft-ware como Mesos y Kubernetes desarrollan equipos como los que se encuentran en la mayoriacutea de las empre-

sas y organizaciones tecnoloacutegicas como CoreOS con la finali-dad de ayudar a los desarrolladores a poner sus aplicaciones en funcionamiento Sin embargo iquestcuaacutel seriacutea una buena solucioacuten para un desarrollador en solitario o una pequentildea red domeacutesti-ca iquestCoacutemo podemos usar el coacutedigo a nivel de infraestructura

Uso un portaacutetil Macintosh OSX para desarrollo pero para las aplicaciones de larga duracioacuten o aplicaciones que se ejecu-tan por la noche necesito un entorno remoto siempre activo ya que mi portaacutetil estaraacute fuera de liacutenea o en el tren conmigo mientras voy y vengo del trabajo Tiene su sentido no utilizar el ordenador como un entorno para la puesta en funcionamiento de aplicaciones

El ODROID-XU4 es un ordenador ideal para un entor-no de implementacioacuten remoto ya que es econoacutemico flexible cuenta con excelentes especificaciones teacutecnicas y puede ejecutar Linux Este artiacuteculo tiene por objetivo explicar coacutemo almacenar coacutedigo de implementacioacuten en tu repositorio de proyectos asiacute como automatizar las implementaciones y ejecuciones

Arch LinuxArch Linux es una distribucioacuten de Linux gratuita de coacutedigo

abierto que fue lanzada en 2002 Estaacute centrada en la elegancia la integridad del coacutedigo el minimalismo y la simplicidad y cuenta con que el usuario haga un esfuerzo en comprender el funcionamiento del sistema Arch Linux utiliza en particular un modelo de revisioacuten continua de modo que todo lo que se necesitas para conseguir el software del sistema maacutes reciente es actualizar el sistema de forma perioacutedica

Arch Linux puede ser algo difiacutecil de asimilar ya que uti-liza herramientas diferentes a las de una distribucioacuten Debian El gestor de paquetes se activa a traveacutes de ldquopacmanrdquo en lugar de ldquoapt-getrdquo y existe un gestor complementario de paquetes muy popular llamado ldquoyaourtrdquo Muchos de los servicios o her-ramientas maacutes comunes no se instalan por defecto

Arch Linux esta hecho principalmente para procesadores x86 pero un proyecto llamado Arch Linux ARM (ALARM) tiene una distribucioacuten ARM de Arch Linux para arquitectu-ras AArch64 ARMv8 y ARMv7 Hardkernel el fabricante de ODROIDs es de hecho un patrocinador del proyecto Arch Linux ARM

HOME DATA CENTER

HOME DATA CEnTERIMPLEMEnTACIOn DEL CODIGO COn ARCHLInuXpor John Skilbeck

Configurar la redDeberaacutes asignarle a tu dispositivo una direccioacuten IP LAN

DHCP reservada y en el mejor de los casos un nombre de host que se propagaraacute a lo largo de tu red por medio del servidor DNS de tu router De esta forma en nuestro entorno de desar-rollolocal podremos utilizar un nombre de host para resolver siempre el entorno de implementacioacutenremoto

Por ejemplo en mi red reservo el 192168249 a la direc-cioacuten MAC de mi ODROID Tambieacuten configuro una entrada DNS que asigna a esa direccioacuten IP ldquoodroidrdquo Utilizar un firm-ware personalizado en el router como Tomato USB o DD-WRT lo hace extremadamente faacutecil ya que esos firmwares convierten tu router en un pequentildeo ordenador Linux con una aplicacioacuten web GUI muy pulida aunque su implementacioacuten estaacute fuera del alcance de este artiacuteculo Si operas con subredes aseguacuterate dirigir el puerto hacia el puerto externo que se asigna al puerto SSH del dispositivo odroid ya que Git se ejecuta a traveacutes de SSH

Configurar el proyectoLoacutegicamente desearaacutes estandarizar el flujo de trabajo de la

implementacioacuten Esto haraacute que el trabajo con proyectos sea

el home data center de John es una auteacutentica obra de arte

ODROID MAGAZINE 20

extremadamente faacutecil y eliminas muchos de los cambios de contexto mental que utilizas cuando trabaja en varios proyec-tos Crearemos una carpeta para alojar todos nuestros archivos relacionados con implementaciones Coloca los archivos eje-cutables en ldquodeploybinrdquo y cualquier archivo cron en ldquodeploytasksrdquo (maacutes informacioacuten sobre esta cuestioacuten maacutes adelante)

Navega hasta el directorio del proyecto en una ventana de Terminal y luego escribe los siguientes comandos

$ mkdir -p deploybin

$ mkdir -p deploytasks

$ cd deploybin ampamp touch run-job ampamp

chmod u+x run-job ampamp cd -

$ cd deploytasks ampamp touch crontab

Tambieacuten puede estandarizar doacutende colocar tu coacutedigo fuente De esta forma le seraacute maacutes faacutecil a otras personas ver coacutemo se or-ganiza tu proyecto y conocer queacute es el coacutedigo fuente y queacute no

$ mkdir src

$ cd src ampamp (place source code here ie python core

py clojure coreclj nodejs appjs)

Simplificar los puntos de entradaIniciar una aplicacioacuten puede resultar algo confuso con todos

los comandos que se pueden ejecutar en diferentes lenguajes Por ejemplo puede usar Java ldquojava -jar [my-jar] jarrdquo o python ldquopython my-apppyrdquo y tu aplicacioacuten tambieacuten puede necesitar varios argumentos Todo esto deberiacutea simplificarse y resumirse en un archivo ldquodeploybinrun-jobrdquo

binsh

set -e

CMD=rdquosrcduckrdquo

exec $CMD $

Crear el archivo cronArch Linux no viene con un cliente o demonio cron por

defecto Instaacutelalo con ldquosudo pacman -Syu cronierdquo Utilizando cron puede ejecutar comandos en intervalos de tiempo espe-cificados haciendo uso de la sintaxis especial de cron Normal-mente se almacena en el archivo crontab del usuario al que puedes acceder con ldquocrontab -erdquo Sin embargo esto es demasi-ado manual y queremos usar coacutedigo como infraestructura Cron tambieacuten tiene algunos subdirectorios muy uacutetiles en ldquoetccronrdquo como ldquoetccrondailyrdquo yrdquoetccronhourly ldquo si co-locamos los archivos aquiacute eacutestos se ejecutaraacuten en los intervalos especificados

Revisa el archivo de ldquodeploytaskscrontabrdquo que colocare-mos en ldquoetccrondrdquo que se crea automaacuteticamente con nuestro script ldquoposttreceiverdquo

variables

SHELL=binbash

PATH=binusrbinusrlocalbinusrsbinusrlo-

calsbin

MAILTO=[your-email-address]gmailcom

cmd=rdquodeploybinrun-jobrdquo

app_dir=rdquohomeskilbjodeployappduckdnsrdquo

jobs

5 skilbjo cd ldquo$app_dirrdquo $cmd gtdevnull

Aquiacute tienes el esquema general de la estructura de un simple proyecto El uacutenico ejecutable del proyecto es un uacutenico script shell ubicado en ldquosrcrdquo

$ tree

READMEmd

deploy

bin

post-receive

run-job

tasks

crontab

src

duck

4 directories 5 files

GitPrimero queremos agregar una URL remota a nuestro

proyecto en nuestro entorno local

$ git remote add odroid sshodroid~deploygit

duckdnsgit

Ten en cuenta que dependiendo de la topologiacutea de tu red es posible que tenga que modificar esta url Si no puedes asignar nombres de host la URL de git se veriacutea asiacute donde 192168249 es la direccioacuten IP LAN de tu dispositivo

$ ssh192168249~deploygitduckdnsgit

Si tienes un usuario en tu entorno ODROID distinto al que tienes en tu entorno de desarrollo la url se veriacutea asiacute donde ldquoskilbjordquo es tu nombre de usuario

$ sshskilbjoodroid~deploygitduckdnsgit

Si tu servidor remoto estaacute en una subred diferente y tienes redireccionados los puertos tu url tendriacutea este aspecto donde

HOME DATA CENTER

ODROID MAGAZINE 21

ldquo2222rdquo es tu puerto externo

$ ssh192168122222~deploygitduckdnsgit

En el directorio principal de tu entorno remoto crea una carpeta llamada ldquo~deployrdquo con dos subcarpetas ldquo~deployapprdquo y ldquo~deploygitrdquo Los subdirectorios de ldquo~deploygitrdquo seraacuten los puntos finales de nuestros desarrollos y con un hook ejecutaraacuten comandos de implementacioacuten en los subdirectorios de ldquo~ deployapprdquo

Primero navega hasta el directorio principal del entorno re-moto y a continuacioacuten escribe los siguientes comandos

$ mkdir -p ~deployapp

$ mkdir -p ~deploygit

$ mkdir -p ~deploygitduckdnsgit

$ mkdir -p ~deployappduckdns

Ahora en ldquo~ deploygitduckdnsgithooksrdquo crea un archi-vo ejecutable llamado ldquopost-receiverdquo que se activaraacute con cada accioacuten hacia el punto final

$ cd ~deployappgitduckdnsgithooks

$ touch post-receive ampamp chmod u+x post-receive

$ vim post-receive

Rellena el ejecutable con lo siguiente en el directorio ldquo~deploygitduckdnsgithooksrdquo del entorno remoto

usrbinenv bash

set -eou pipefail

user=$(whoami)

dir=rdquohome$userdeployapprdquo

app=$(basename $(pwd) | sed -e lsquosgitrsquo)

deploy_dir=rdquo$dir$apprdquo

cron_dir=rdquoetccrondrdquo

GIT_WORK_TREE=rdquo$deploy_dirrdquo git checkout -f

cd ldquo$deploy_dirrdquo

build steps here

case ldquo$userrdquo in

(skilbjo) sudo cp deploytaskscrontab ldquo$cron_

dir$apprdquo

esac

you can also do project-specific build steps in

this section like install

dependencies (ie npm install) compile source

code (ie lein uberjar)

as well as if a long-lived app run commands as

well (ie java -jar my_jarjar)

echo ldquoall donerdquo

exit 0

ImplementacioacutenAhora estamos listos para implementar ya que nuestro en-

torno local estaacute configurado para alcanzar el punto final del servidor de implementacioacuten nuestro entorno remoto estaacute con-figurado para recibir la notificacioacuten y revisar el coacutedigo fuente ejecutar cualquier paso de compilacioacuten y colocar una tarea en el directorio cron del sistema para su lanzamiento Ponto todo en praacutectica con el siguiente comando en el directorio del proyecto del entorno local

$ git push odroid

Ademaacutes para ver coacutemo se ha implementado todo esto en un proyecto de ejemplo visita httpbitly2lthYKW

Pasos finalesSe puede antildeadir al flujo anterior algunas caracteriacutesticas

como son muacuteltiples entornos ya sea con muacuteltiples ODROIDs o con un solo ODROID trataacutendolo como un servidor de ser-vicio Esto se puede hacer con subdirectorios bajo ldquo~deployrdquo como ldquo~deploystagingappmy_apprdquo o ldquo~ deployproduc-tionappmy_apprdquo

Ademaacutes podriacuteas antildeadir un servicio de integracioacuten conti-nua como CircleCI que ejecutariacutea una suite de testeo desde cada desarrollo a GitHub y si tiene eacutexito compila una imagen Docker No podriacuteas entonces tener un archivo en el entorno remoto que verificariacutea una imagen de un repositorio Docker y la ejecutariacutea en un intervalo especificado Esto es lo que hacen muchos de los softwares DevOps distribuidos como Mesos y Kubernetes pero en un entorno mucho maacutes rico que BASH y Linux

Referencias

Artiacuteculo Wikipedia de Arch linux httpbitly2l71ADKWebsite Arch linux ArM httpsarchlinuxarmorgArtiacuteculo que leiacute hace unos tres antildeos y que me inspiroacute para escribir mi propio artiacuteculo httpbitly2m5JAct

HOME DATA CENTER

ODROID MAGAZINE 22

odroid ARCADE BOXLA EXPERIEnCIA PERfECTA COn TuS JuEGOS ARCADE fAvORITOSpor brian Kim charles park y John lee

ARCADE BOX

Los ODROIDs tienen mejor rendimiento que las placas de la competencia especialmente en lo que respecta al renderizado de video lo que significa que

las placas ODROID son ideales para jugar lo cual hacen muchos usuarios de ODROID Ya hay disponibles varios sistemas operativos de plataforma de juegos como Lakka (httpbitly1NO8BBC) y ODROID GameStation Tur-bo (httpbitly1ASFO5O) Para disfrutar auacuten maacutes de nuestras sesiones de juegos creamos nuestra propia consola arcade con simples botones GPIO y joysticks y la llama-mos la ODROID Arcade Box Elegimos un ODROID-XU4 para este proyecto porque es el que tiene mejor rendimiento GPU de todos los dispositivos ODROID actuales En este artiacuteculo vamos a describir como hemos creado la ODROID Arcade Box

Requisitos( Figura 3 ndash )Decidimos hacer la ODROID Arcade Box usando

un MDF (tablero de fibra de densidad media) El Shifter Shield del XU4 tambieacuten es uacutetil para utilizar los pines de expansioacuten del ODROID-XU4 Los Joysticks los botones y los cables eran los componentes de entrada y se utilizoacute

Nuestro primer y simple prototipo

ODROID MAGAZINE 23

panel MDf 12t2eA 600x2202eA 600x752eA 220x75taladroplegadoraDesmontadorcinta meacutetricaNavaja multiusoAlicates de punta largaoDroiD-xU4xU4 Shifter shieldSMpS (fuete Alimentacioacuten)

extendedores hDMi USb ethernetenchufe de alimentacioacuten y Switchbisagras 2eAreceptor de puertacaucho 4eAtornillospulsadores 19eAJoystick 2eAcablesterminales

una SMPS (Fuente de alimentacioacuten conmutada) como fuente de alimentacioacuten Las herramientas y las piezas utilizadas las tienes en esta paacutegina

La ODROID Arcade Box necesita un total de 27 entradas (19 entradas para botones y 8 entra-das para joysticks) Las 24 entradas GPIO digi-tales del ODROID-XU4 no son suficientes para las 27 entradas de modo que creamos dos puertos ADC adicionales para los tres botones que nos fal-taban Los valores de entrada ADC se basan en el voltaje de entrada y los valores de entrada digital y analoacutegica se procesan en el demonio GPIO que se describe a continuacioacuten

Disentildeo y montajeLos paneles de la ODROID Arcade Box deben

ser disentildeados y fabricados para que los botones y joysticks esteacuten bien colocados Elegimos MDF 12T teniendo en cuenta el precio y la durabilidad El dise-ntildeo se puede hacer con cualquier herramienta CAD como Google Sketch o SolidWorks Aunque existen muchas plantillas de disentildeo para los paneles de joypad decidimos elegir un disentildeo arcade estaacutendar japoneacutes

El primer paso del montaje es unir la placa al panel MDF Este paso fue faacutecil aunque nos llevo maacutes tiempo que el resto Despueacutes insertamos los joysticks la toma de corri-ente el interruptor y los botones en el panel MDF superior Los conectores HDMI Ethernet y USB se colocaron en la parte trasera del panel MDF El siguiente paso fue montar cada panel MDF usando un taladro para hacer los agujeros luego con tornillos los sujetamos

El uacuteltimo paso del montaje de la ODROID Arcade Box es conectar por cable los pines de expansioacuten del ODROID-XU4 a los componentes de entrada En este proyecto dise-ntildeamos las entradas GPIO externas tal y como se muestra en la paacutegina 26 Los botones Select y Temp estaacuten conecta-dos a puertos de expansioacuten ADC

Configuracion del softwareDesarrollamos un nuevo demonio GPIO llamado gpio_

keyd (httpbitly2ljOZKg) Este demonio es capaz de asignar entradas GPIO y eventos claves usando uinput y wiringPi una libreriacutea de acceso GPIO basada en pines Estaacute disentildeada para que le sea familiar a quiene ya ha utilizado el sistema de cableado Arduino Aunque la blibreriacutea wiring-Pi upstream soacutelo admite Raspberry Pi Hardkernel ofrece una versioacuten de wiringPi para ODROIDs en su repositorio GitHub (httpbitly1Eq3UpF) El moacutedulo uinput es un moacutedulo del kernel de Linux que gestiona el subsistema de entrada del usuario Se puede utilizar para crear y manejar dispositivos de entrada desde una aplicacioacuten

ARCADE BOX

herramientas compentes y lo que hay justamente debajo

esquema de los puertos de expansioacuten

ODROID MAGAZINE 24

Elegimos ODROID GameStation Turbo (httpbitly1ASFO5O) como plataforma de software para nuestra ODROID Arcade Box que tiene integrado uinput Debes asegurarte de que el archivo de dispositivo uinput existe en el sistema operativo elegido porque algunos no tienen dispositivos uinput

$ ls devuinput

Si tu sistema operativo no tiene un archivo de disposi-tivo devuinput entonces seraacute necesario recompilar e in-stalar un nuevo kernel con la opcioacuten de configuracioacuten IN-PUT_UINPUT habilitada La paacutegina Wiki en httpbitly1YIToBI describe coacutemo compilar e instalar la imagen del kernel a partir del coacutedigo fuente

$ make menuconfig

Device Drivers

-gt Input device support

-gt Generic input layer

-gt Miscellaneous device

-gt User level driver support ltgt

Ten en cuenta que wiringPi debe instalarse antes de in-stalar gpio_keyd En la imagen GameStation de ODROID los comandos sudo deben ejecutarse como root porque la cuenta ldquoodroidrdquo no estaacute designada como usuario sudo

$ git clone httpsgithubcomhardkernelwiringPi

git

$ cd wiringPi

$ sudo build

Descarga el coacutedigo fuente gpio_keyd el cual estaacute dis-ponible en nuestro repositorio GitHub El procedimiento para compilar e instalar gpio_keyd es muy simple

$ git clone httpsgithubcombkrepogpio_keydgit

$ cd gpio_keyd

$ make

$ sudo make install

El script gpio_keyd hace referencia a etcgpio_keydconf como el predeterminado para la informacioacuten de los botones y GPIO El archivo de configuracioacuten fue modi-ficado para las 27 entradas de la ODROID Arcade Box Algunas botones ya se utilizaban en el emulador de juego de modo que tuvimos que cambiar la configuracioacuten del emulador para evitar conflictos entre los botones de en-trada GPIO y el emulador Ten en cuenta que el campo ltGPIO pingt en el archivo de configuracioacuten hace referen-

ARCADE BOX

plano del disentildeo de joypad

la oDroiD Arcade box montada

ODROID MAGAZINE 25

cia al nuacutemero wiringPi no al GPIO y al nuacutemero de pin (httpbitly2lbzPIB)

Ejemplo de configuracioacuten para las 27 entradas etcgpio_keydconf

Digital input ltKey codegt ltGPIO typegt ltGPIO pingt ltActive valuegt User 1KEY_LEFT digital 15 0KEY_RIGHT digital 1 0KEY_UP digital 4 0KEY_DOWN digital 16 0KEY_A digital 2 0KEY_S digital 3 0KEY_D digital 30 0KEY_F digital 21 0KEY_Z digital 8 0KEY_X digital 9 0KEY_C digital 7 0KEY_V digital 0 0 User 2KEY_BACKSLASH digital 12 0KEY_SLASH digital 13 0KEY_SEMICOLON digital 14 0KEY_LEFTBRACE digital 5 0KEY_Y digital 26 0KEY_U digital 27 0KEY_I digital 22 0KEY_O digital 23 0KEY_H digital 6 0KEY_J digital 10 0KEY_K digital 11 0KEY_L digital 31 0

Analog input ltKey codegt ltGPIO typegt ltADC portgt ltADC ac-tive valuegtKEY_B analog 0 0KEY_N analog 0 2045KEY_M analog 1 2045

To run gpio_keyd daemon at every startup is conve-nient for ODROID Arcade Box

etcinitdgpio_keyd binsh BEGIN INIT INFO

ARCADE BOX

Mapeo Gpio externo para los botones y Joysticks

cableado de la oDroiD Arcade box

ODROID MAGAZINE 26

Provides gpio_keyd Required-Start $all Required-Stop Default-Start 2 3 4 5 Default-Stop Short-Description Run usrbingpio_keyd if it ex-ist END INIT INFO

PATH=sbinusrsbinbinusrbin

libinitvarssh

liblsbinit-functions

do_start() if [ -x usrbingpio_keyd ] then usrbingpio_keyd -d ES=$ [ ldquo$VERBOSErdquo = no ] ampamp log_end_msg $ES return $ES fi

case ldquo$1rdquo in start) do_start restart|reload|force-reload) echo ldquoError argument lsquo$1rsquo not supportedrdquo gtamp2 exit 3 stop) killall gpio_keyd exit 0 ) echo ldquoUsage $0 start|stoprdquo gtamp2 exit 3 Esac

$ sudo chmod +x etcinitdgpio_keyd$ sudo update-rcd gpio_keyd defaults$ sudo reboot

En los comandos anteriores el script gpio_keyd se ejecuta como un demonio uti-lizando la opcioacuten ldquo-drdquo El uso de gpio_keyd se puede comprobar con la opcioacuten ldquo-hrdquo Comprue-ba de nuevo las teclas usadas por el juego o el emulador despueacutes fija la configuracioacuten del gpio_ keyd correctamente Es ahora cuando estaacutes listo para jugar y disfrutar de tus juegos con tu nueva ODROID Arcade Box

ARCADE BOX

the King of fighters 98 John vs brian

ODROID MAGAZINE 27

En este artiacuteculo analizaremos las diferentes formas que existen para ob-tener los datos del uso de la red

ConfiguracioacutenLa forma normal de analizar los datos

de traacutefico de la red es mediante el uso de datos a traveacutes de las aplicaciones de configuracioacuten del sistema tal y como se muestra en la figura 1

El uso de datos muestra la cantidad total de traacutefico de datos entrante y sa-liente que ha sido utilizada por una apli-cacioacuten Si seleccionas la aplicacioacuten veraacute una pantalla como la que aparece en la Figura 2 que muestra informacioacuten detal-lada sobre el uso de la aplicacioacuten tanto en primer plano como de fondo

La informacioacuten que se muestra den-tro de la aplicacioacuten de Configuracioacuten se almacena en data systemnetstats que requiere acceso root Al eliminar todo lo que hay dentro de esta carpeta se resta-

Como desarrolladores queremos que nuestras aplicaciones sean eficientes y a menudo nos gus-

tariacutea saber cuaacutento ancho de banda de red estaacute utilizando nuestra aplicacioacuten Esto es muy uacutetil por varias razones

bull Para monitorizar y asegurarnos de que la aplicacioacuten es realmente la nuestra y no una aplicacioacuten que ha sido pirateada y publi-cada con diferentes nombres en Play Store

bull Para asegurarnos de que no es-tamos cogiendo ancho de banda innecesario del plan de datos del usuario

bull Para comprobar que el disposi-tivo que estamos usando no estaacute accediendo a Internet sin nuestro consentimiento

blecen las estadiacutesticas de red mostradas en esta aplicacioacuten

Estadiacutesticas de la redLa aplicacioacuten de configuracioacuten nos

puede dar una informacioacuten general so-bre las estadiacutesticas de la red de datos que es un buen comienzo pero a veces necesitamos un anaacutelisis maacutes detallado que puede hacerse a traveacutes del coman-do dumpsys Android cuenta con una poderosa herramienta llamada dumpsys que nos permite obtener una instan-taacutenea o volcado del sistema que pu-ede incluir informacioacuten sobre la red la memoria y otros componentes Lee la documentacioacuten de Android en httpbitly2kK9dep para obtener maacutes infor-macioacuten del sistema Para conseguir maacutes informacioacuten relacionada con la red nos interesa el comando

$ dumpsys netstats detail

La Figura 3 muestra un pantallazo de lo que puedes ver desde una tablet Nexus 7 que ejecuta Lollipop 511

Hay algunas cuestiones importantes para entender las estadiacutesticas

bull Las estadiacutesticas UID muestran el desglose de las aplicaciones de primer plano y de fondo

bull Uid muestra el ID de usuario de la aplicacioacuten que se puede utili-zar para relacionar eacutesta con la in-

DESARROLLO AnDROID AnALIzAnDO EL uSO DE RED DE LAS APLICACIOnESpor Nanik tolaram

DESARROLLO ANDROID

figura 1 - Uso de datos en la configuracioacuten

figura 2 - Desglose del uso de datos de la app

ODROID MAGAZINE 28

$ dumpsys package detail

Este comando te proporcionaraacute una larga lista de informacioacuten sobre los pa-quetes que estaacuten instalados en tu dis-positivo Para las estadiacutesticas de red nos interesa la seccioacuten que se muestra en la Figura 5

La seccioacuten resaltada muestra el userId que se relaciona con el uid que se mues-tra en las estadiacutesticas de red Al relacio-nar este nuacutemero sabemos el nombre del paquete de la aplicacioacuten sobre el que es-tamos leyendo las estadiacutesticas de red

Aplicacioacuten de ejemplo

La aplicacioacuten de ejemplo de este artiacute-culo se puede descargar desde httpbitly2m8WenA que muestra coacutemo etiqu-etar la conexioacuten de red desde distintas

secciones de la aplicacioacuten lo cual puede ayudar a analizar el volumen de traacutefico de datos de la aplicacioacuten La Figura 6 muestra un ejemplo de coacutemo lo vemos si utilizamos Android Device Monitor (dentro de Studio diriacutegete a Tools -gt Android -gt Android Device Monitor)

Tal y como se puede ver en el graacutefico la simple aplicacioacuten tiene 3 conexiones dife-rentes y cada una de ellas estaacute accediendo a un sitio web diferente Al etiquetarlas con

formacioacuten del paquete (que ver-emos en la seccioacuten de detalles del paquete dumpsys) con el objeto de conocer queacute aplicacioacuten utiliza estas estadiacutesticas de red

bull Las etiquetas son uacutetiles si de-sea ver la cantidad de datos que utiliza cada conexioacuten de tu apli-cacioacuten Puedes ver un ejemplo de esto en la Figura 4 que muestra que el uid 10007 tiene las siguien-tes etiquetas 0x30000401 0x30003201 0x30002804 0x10000401 y 0x30000407 Es-tas etiquetas ayudan al desarrol-lador a saber cuaacutentos datos uti-liza cada parte de la aplicacioacuten Estas estadiacutesticas de red en par-ticular estaacuten vinculada al paquete Google Framework que forma parte de Google Play Store

En el siguiente apartado veremos coacutemo escribir una aplicacioacuten etiquetando el hilo que hace la conexioacuten de red para determi-nar la cantidad de datos que se utilizan

Estadiacutesticas de paquetes

En la seccioacuten anterior analizamos el uid que aparece al ejecutar el comando dumpsys netstats Ahora necesitamos sa-ber queacute uid corresponde a la aplicacioacuten en el dispositivo y esto se hace mediante el siguiente comando

DESARROLLO ANDROID

figura 3 ndash estadiacutesticas de red con Dumpsys

figura 4 - estadiacutesticas de etiquetas UiD

figura 5 - Detalles del paquete dumpsys

figura 6 - etiquetas de red

coacutedigos diferentes podemos ver la cantidad de traacutefico que consume cada conexioacuten y esto nos ayudaraacute a ver si nuestra aplicacioacuten utiliza el ancho de banda de un modo eficiente

El coacutedigo del siguiente fragmento muestra el uso de la API TrafficStats interna Esta etiqueta API muestra el subproceso que utiliza actualmente un socket con un identificador y todo el traacute-fico que pasa por la misma conexioacuten se grabaraacute junto Asiacute es como la aplicacioacuten es capaz de agrupar las 3 conexiones diferentes Internamente Android utili-za el moacutedulo xt_qtaguid del kernel para realizar este tipo de etiquetado Tienes disponible maacutes informacioacuten en httpbitly2kU8KXB

public void getUsingNormalURLC

onnection(String urlText int

threadTag)

throws IOException

URL url = null

TrafficStats

setThreadStatsTag(threadTag)

HttpURLConnection urlConnec-

tion = getConnection(url)

try

finally

TrafficStatsclearThread-

StatsTag()

ODROID MAGAZINE 29

Disgustado te subes a tu 4x4 de dominacioacuten del mun-do un vehiacuteculo que desde fuera parece maacutes bien un viejo camioacuten de granja pero por dentro se parece maacutes

al sistema de control de un transbordador espacial porque el conductor del restaurante oriental que realiza las entrega a do-micilio estaacute enfermo Ahora tienes que ir a recoger tu propia comida ldquoQueacute rudimentariordquo piensas cuando sales de tu garaje secreto Justamente cuando vas a parar el vehiacuteculo en un stop oyes un fuerte ruido Sales y te diriges raacutepidamente a la parte posterior del 4x4 donde observas un cubo de basura Te tiras de los pelos y piensas ldquoiexclEsos basureros Neanderthales dejaron otra vez el cubo en mediordquo Ahora te toca recoger los restos de tu cena y la basura de otros

Conforme te vas alejando para hacer tus recados empiezas a pensar en coacutemo evitar este inconveniente en el futuro Varias ideas te vienen a la mente

Un sistema lidar para escanear en 3D el entorno en tiempo real y alarmas sonoras cuando sea necesarioUn brazo ciberneacutetico colocado en la parte posterior del 4x4 que procese video para detectar objetos agarrarlos y moverlosUna simple camara trasera

Empiezas a considerar la viabilidad de cada una

Muy bueno pero demasiado complicado y costosoAuacuten mejor y un proyecto propio de un cientiacutefico loco pero demasi-ado complicado y costosoya tengo dos iexclpero estaba demasiado preocupado en mis pensa-mientos para prestarles atencioacuten

Lo que necesitas es algo simple sin complicaciones y barato que haga sonar una alarma para alertarte incluso cuando estar absorto en tus pensamientos ldquoAhardquo Recuerdas haber visto un nuevo producto en ameriDroid que puede hacer precisamente esto Se trata de un microcontrolador conectado al USB que soporta hasta 6 sensores ultrasoacutenicos con simples comandos en serie (httpbitly2l26ptV) ldquoiexclPerfectordquo Piensas

Regresas a tu laboratorio subterraacuteneo con el pollo Kung Pao en la mano te apresurar a encender tus monitores entras en el sitio web ameriDroid y pides un kit ldquoUSB Ultrasonic Ranging Sensorrdquo con 6 sensores y carcasas

Vas sintiendo una sensacioacuten de alivio a medida que regresas a los 12 proyectos en lo que ya estabas trabajando a la espera de que pasen un par de diacuteas hasta que llegue tu nuevo pedido Mientras te comes tu Kung Pao dibujas un diagrama de coacutemo quieres colocar los sensores en la parte posterior de tu vehiacuteculo

Un par de diacuteas maacutes tarde el kit llega Inmediatamente em-piezas a montar el kit y los sensores en la parte posterior de tu 4x4 teniendo cuidado de usar sellador de silicona para pro-teger los sensores de la lluvia aguanieve y nieve que puedas encontrar durante tus aventuras para dominar el mundo

A continuacioacuten consultas las instrucciones proporcionadas por ameriDroid con el kit sobre coacutemo controlar y leer los sen-sores desde tu fiel ODROID-C2 y VU7 que montaste en el salpicadero para este propoacutesito

Conectando el cable USBEl cable USB suministrado debe conectarse al microcon-

trolador (la pequentildea placa de circuito con filas de pines que sobresalen) El microcontrolador tiene una fila de 4 o 6 pines

DETECTAR LA PRESEnCIACROnICAS DE un CIEnTIfICO LOCOpor bo lechnowsky

SENSOR ULTRASONICO

ODROID MAGAZINE 30

en un extremo Si tiene 6 pines ceacutentrate en los 4 pines centrales y sigue estas instrucciones

Negro - conectar a GNDrojo - conectar a VccVerde - conectar a rxi

blanco - conectar a txD

Conectando los sensoresultrasoacutenicos

En cada sensor ultrasoacutenico hay cuatro pines marcados Vcc Trig Echo Gnd Para el primer sensor ultrasoacutenico conecta el pin 2 del microcontrolador al pin ldquoTrigrdquo del sensor ultrasoacutenico Conecta el pin 3 del microcontrolador al pin ldquoEchordquo del sensor Conecte el pin ldquoVccrdquo del sensor a DC 5V (el pin ldquoVCCrdquo del microcontrolador suministra 5V) y el pin ldquoGndrdquo del sensor a una conexioacuten a tierra como por ejemplo los pines ldquoGNDrdquo del microcontrolador

Si conectas un segundo sensor de ultrasonidos conecta ldquoTrigrdquo al pin 4 y ldquoEchordquo al pin 5 Continuacutea conectando los siguientes pines a los sensores hasta los pines 12 y 13 si al final optas por conectar los seis sensores ultrasonidos

Conexioacuten del softwareUtilizas un programa terminal como PuTTY Screen o tu

lenguaje de script o programacioacuten favorito para conectarte al puerto serie que aparece cuando te conectas el sensor ultrasoacuteni-co Esto variaraacute en funcioacuten del sistema operativo que utilizas para conectarte al microcontrolador En Windows consultar el ldquoAdministrador de dispositivosrdquo es la forma maacutes comuacuten de averiguarlo En Linux ldquodmesgrdquo o ldquolsusbrdquo son las formas de de-tectar a queacute puerto estaacute conectado Deberiacuteas ver algo denomi-nado ldquoPL2303rdquo que es la conexioacuten del microcontrolador Si recibes informacioacuten basura en tu terminal cuando te conectes aseguacuterate de que los ajustes en serie son 9600 baudios 8 bits ninguno (paridad) y 1 bit de parada Aquiacute tienes una lista de los comandos que puede aceptar el microcontrolador

bull debug on Activa la retroalimentacioacuten detallada Estaacute deshabilitada por defecto nos proporcionaraacute aclaracio-nes sobre los errores de entrada

bull debug off desactiva la retroalimentacioacuten detalladabull init x y activa un HC-SR04 en los pines especificados

X es trigger Y es echo Estos deben ser pines digitales El dispositivo 0 estaacute preestablecido en los pines 2 y 3 de modo que no es necesario especificar estos pines La seleccioacuten de pines no vaacutelidos devolveraacute un signo de ex-clamacioacuten ()

bull ping enviacutea una sola lectura del HCSR04 previamente utilizado Si no se ha utilizado todaviacutea se usaraacute el dis-positivo 0 Si al comando le sigue un espacio y un nuacutemero entre 0-100 (exclusivo) se realizaraacute ese nuacutemero de lecturas emitiendo primero el promedio de esas lec-

SENSOR ULTRASONICO

turas despueacutes el nuacutemero de lecturas fallidas (que no cuentan para el promedio) y luego los valores miacutenimo y maacuteximo de lectura separados por espacios En cual-quier caso si una sentildeal se desconecta automaacuteticamente devolveraacute -1

bull start Hace ping constantemente a todos los dispositivos conectados en secuencia Debido a que los dispositivos se utilizan uno a uno el flujo de datos de este comando seraacute maacutes raacutepido si los dispositivos miden distancias cor-tas Si este comando le sigue un espacio y un nuacutemero mayor que 0 la placa esperaraacute estos milisegundos entre la lectura del uacuteltimo dispositivo y la lectura del primer dispositivo El resultado de este comando seraacute la lectura de cada dispositivo (con un uacutenico espacio despueacutes de cada uno) y una vuelta tras el uacuteltimo dispositivo

bull stop detiene la operacioacuten ldquostartrdquo soacutelo es efectivo tras haber iniciado ldquostartrdquo

bull mode emite el modo de medicioacuten del flujo M para meacutetrico (miliacutemetros) I para Imperial (deacutecimas de pul-gada) o R para Raw (la longitud de pulso en microse-gundos devuelta por el HC-SR04) El valor predeter-minado es M

bull timeout emite el tiempo de espera actual para lecturas de la sentildeal El tiempo de espera es la mayor cantidad de microsegundos que la placa esperaraacute antes de declarar que el HC-SR04 ha realizado una mala lectura lo cual no es necesariamente lo mismo que el pulso maacutes largo que la placa aceptaraacute del HC-SR04 Cuando la placa mide el pulso del HC-SR04 primero espera a que el HC-SR04 comience a enviar un pulso Este tiempo cuenta para el tiempo de espera Cuando este comando le sigue un espacio y un nuacutemero el tiempo de espera se ajusta a ese nuacutemero El valor predeterminado es 1 segundo (1000000 microsegundos)

bull ver emite informacioacuten de versioacuten y creacuteditos

Si cualquier comando (o ninguacuten comando) estaacute precedido por un uacutenico diacutegito de 0-5 (inclusive) seguido de un espacio el dispositivo que corresponde a ese diacutegito se seleccionaraacute para ser usado con el siguiente comando ldquopingrdquo Cada vez que la placa esteacute lista para un comando emitiraacute ldquogtrdquo para la serie La uacutenica excepcioacuten estaacute tras el comando ldquostartrdquo que no solicitaraacute entrada hasta que sea reconocido ldquostoprdquo

ODROID MAGAZINE 31

iquestCoacutemo empezaste con los ordenadoresCuando empeceacute mi negocio tuve que decidir queacute plat-

aforma de hardware iba a utilizar para la recogida de datos del traacutefico Simplemente para que no pienses mal de miacute mis caacutemaras de traacutefico no son las que se usan para multar por exceso de velocidad o algo asiacute Mi sistema estaba desti-nado suavizar el flujo de traacutefico fijando los controles oacutepti-mos de las sentildeales de traacutefico Anteriormente usaba un PC industrial para ejecutar mi software de reconocimiento de imaacutegenes Ahora uso la familia de dispositivos ODROID para esta cuestioacuten

iquestQueacute te atrajo de la plataforma ODROID En 2012 useacute Google para buscar una plataforma que

fuera muy compacta y al mismo tiempo potente para que cubriera mis necesidades que resultoacute ser la placa

Por favor haacuteblanos un poco sobre tiSoy ingeniero de electroacutenica y software en Rusia desde

hace 47 antildeos Naciacute en Siberia y tras terminar la escuela me mudeacute a Moscuacute para estudiar en la universidad Ser estudi-ante en el Instituto de Aviacioacuten de Moscuacute (MAI) fue una experiencia increiacuteble probablemente la mejor de mi vida A principios de los 90 llegoacute a Rusia la era de los microordena-dores soliacutea jugar a un juego de saltos en una CPU z80 y el i486 Tras finalizar mis estudios universitarios y de posgrado me convertiacute en ingeniero Trabajeacute en unos cuantos puestos de trabajo para diferentes empresas y finalmente decidiacute em-prender mi propio negocio En 2006 puse en marcha una iniciativa para crear sistemas de recuento del traacutefico de au-tomoacuteviles Estoy casado y tengo una hija de 21 antildeos llamada Lena que trabaja como enfermera Mi esposa Nadezhda es disentildeadora de vestuario de produccioacuten pero ahora trabaja como disentildeadora web Ella es aficionada a la fotografiacutea digi-tal y le encanta su caacutemara reacuteflex digital

COnOCIEnDO un ODROIDIAnvIACHESLAv ALEKSEEveditado por rob roy (robroy)

CONOCIENDO UN ODROIDIAN

Viacheslav disfruta tocando la guitarra y escuchando muacutesica

1995 en el campus MAi probando uno de los primeros equipos Vr comerciales del mundo que funcionaba a 640x480 a 30fps Utiliz-aba un sensor magneacutetico en la nuca para la posicioacuten de la cabeza la mejor broma que se podiacutea gastar a alguien era colocar un imaacuten cerca de la espalda y sacudirlo iexcllos gritos estaban garantizados cuando el mundo en 3D daba vueltas sin cesar

ODROID MAGAZINE 32

ODROID-X2 Con sus cuatro nuacutecleos funcionando a 17 GHz calculaba con facilidad los algoritmos de reconteo del traacutefico de automoacuteviles Maacutes tarde cambieacute al U3 y el XU4

iquestCuaacutel es tu ODROID favorito y por queacuteDe momento mi favorito es el XU4 Mi sistema estaacute

basado en el tratamiento de fotogramas de video en tiempo real por lo que el bus USB 30 del XU4 es bastante bueno para una caacutemara con una interfaz de captura de viacutedeo Para mi sistema es muy importante tener una buena conexioacuten entre la caacutemara de viacutedeo y la CPU Probablemente tendreacute que echar un vistazo a las interfaces de nivel inferior como MIPI CSI-2 que por desgracia estaacuten ausente en el XU4 Recientemente he estado aprendiendo como usar la caacute-mara oCam GS BW La caacutemara es buena en siacute misma pero para un uso industrial al aire libre tengo que implementar un software de control de exposicioacuten automaacutetica y posible-mente de control de apertura de la lente que todaviacutea estaacute en estudio

MEET AN ODROIDIAN

Una vieja joya el mini ordenador Nixdorf

An old gem the Nixdorf mini computer

CONOCIENDO UN ODROIDIAN

iquestQueacute aficiones e intereses tienes aparte de los ordenadoresDisfruto conduciendo y leyendo sobre coches y viendo

los campeonatos de carreras de F1 Tambieacuten me gusta via-jar pescar escuchar muacutesica y tocar la guitarra Tengo un gato siberiano llamado Leia y soy fan de Star Wars

iquestQueacute consejo le dariacuteas a alguien que quiere aprender maacutes sobre la programacioacuten

Hacer software es algo increiacuteble y miacutestico Es una fusioacuten de arte y tecnologiacutea Nada te inspira maacutes que tu aplicacioacuten cuando empieza a cobrar vida Sin embargo siempre estaacute ahiacute el otro lado de la Fuerza Estar listo para instruirte inc-esantemente El desarrollo de software es una de las activi-dades que cambia maacutes raacutepido Si tienes pensado dejar de hacer software en uno o dos antildeos puede dejar de aprender ahora El conocimiento se volveraacute anticuado en un par de antildeos maacutes o menos Para estar en lo maacutes alto siempre tienes que correr Es similar a la cancioacutenrdquoRun like Hellrdquo de Pink Floyd Si estaacutes listo para vivir de esta forma seguro que tendraacutes eacutexito

ODROID MAGAZINE 33

Page 14: Estación ARCADE · gias de marketing, administración de medios sociales y producción multimedia impresa, web, vídeo y cine. Ges-tionando múltiples cuentas con agencias y productores

WHDLoad en un Amiga (o WinUAE) para extraer los archivos del juego y co-piarlos en la carpeta DataAmigardquo No lo he probado pero si tienes la ldquoCannon Fodder Collectionrdquo de Amiga CD32 no oficial puedes copiar el contenido de FodderNew en esta carpeta lo que tendraacute como resultado niveles completamente diferentes Puede considerarse como una versioacuten maacutes compleja del juego aunque a la vez maacutes divertida Por lo tanto bien poner los archivos originales de Amiga aquiacute o bien los archivos FodderNew de la ldquoCannon Fodder Collectionrdquo

Dos2_CDDos2_CD es en realidad la carpeta

de la versioacuten DOS de Cannon Fodder 2 pero tambieacuten funciona con la versioacuten GoG Desafortunadamente tiene algu-nos problemas el maacutes grave es que el juego no tiene ninguacuten tipo de sonido o muacutesica Aparte de esto todo parece fun-cionar correctamente pero desconozco coacutemo reaccionaraacute en niveles posteriores La carpeta Data tambieacuten incluye las car-petas WAV Plus AmigaFormat_XMAS y Custom En WAV se almacenan los efectos de sonido por defecto para to-dos los juegos (Cannon Fodder) Plus es una demo del nuacutemero 31 la revista Amiga Power y AmigaFormat_XMAS es el Amiga Format Christmas Special Tambieacuten hay una carpeta Custom que te permite jugar otros juegos y mapas pero necesitan la versioacuten (CD) de DOS o de lo contrario no apareceraacuten

Notas finalesOpen Fodder es un buen proyecto

que te permite ejecutar este increiacuteble juego en sistemas modernos Realmente me gusta y estoy deseando ver coacutemo pro-gresa Espero que las versiones de Amiga y Cannon Fodder 2 sean pronto total-mente compatibles Tal vez incluso poda-mos ver mejoras graacuteficas con el tiempo Me gustariacutea ver graacuteficos maacutes modernos ya que el juego es bastante antiguo y los graacuteficos no son los maacutes idoneos para res-oluciones 1080p

la versioacuten de disco de Cannon Fodder simplemente copia el CF_ENGDAT en la carpeta Dos_CD La versioacuten original de CD DOS teniacutea un archivo llamado cf_cddat Cambiar el nombre a CF_ENGDAT y copiarlo a la carpeta Dos_CD Si tienes la versioacuten GoG del juego soacutelo tiene que copiar CF_ENG DAT a la carpeta Dos_CD iexclEsta es una forma raacutepida y legal de conseguir el juego si estaacutes interesado

Aseguacuterate de que el nombre del ar-chivo este en mayuacutescula ya que el juego tiene en cuenta esta cuestioacuten Intenta que coincida todo para asegurarte de que las cosas funcionen sin problemas

Amiga_CDAmiga CD32 tambieacuten contaba con

una versioacuten de este juego Esta es la ver-sioacuten que incluye el video al que hemos hecho referencia anteriormente En el CD de Amiga CD32 hay una carpeta llamada Fodder El contenido de esta carpeta debe copiarse a la carpeta Ami-ga_CD Puedes extraer la segunda pista del CD y almacenarla como Track2flv en la misma carpeta con la finalidad de tener el archivo de video

Me topeacute con algunos problemas cu-ando haciacutea esto y descubriacute nuevamente que el juego buscaba muchos archivos en mayuacutesculas asiacute que utiliceacute el siguiente comando para copiar todos los archivos y tenerlos tambieacuten en mayuacutesculas en la carpeta Amiga_CD$ for files in `ls` do cp $files

`echo $files | tr lsquo[lower]rsquo

lsquo[upper]rsquo` done

Asiacute funcionaba bien pero teniacutea algu-nos fallos Por ejemplo la animacioacuten del helicoacuteptero al inicio de cada misioacuten no apareciacutea y el cursor cuando se guarda un archivo se distorsionaba Aparte de esto no he visto problemas importantes en la versioacuten Amiga CD32

AmigaLa Informacioacuten de desarrollador de

Open Fodder dice ldquoUsar el instalador

JUEGOS LINUXJUEGOS ANDROID

CAuSALITy un JuEGO DE ROMPE-CABEzAS COn PARA-DOJAS DE vIAJES En EL TIEMPO por bruno Doiche

Configura tuacute mismo los entornos extrantildeos e insoacutelitos y

ayuda a un grupo de astronautas varados a encon-trar una ruta hacia un lugar seguro Cada nivel al que te enfrentas representa un nuevo reto donde necesitas llevar a tu astronauta a una salida que coincida con su color Los maacutergenes de tiempo son cortos aunque es muy divertido Aunque formas parte de tan soacutelo una fraccioacuten de tiempo de la vida de tu personaje iexclten cuidado pasaraacutes un montoacuten de tiempo enganchado a este juego

httpsplaygooglecomstoreappsdetailsid=comlojugamesandroidCausality

el entorno 3D isomeacutetrico es magniacute-fico a menudo no superaba el nivel porque los graacuteficos me cautivaban

ODROID MAGAZINE 14

tePi necesitan estar conectados a otros distintos en el ODROID-C2 porque parece haber un conflicto La interfaz UART ocupa estos pines y el estado por defecto del ODROID (1=high en Pin 8) no es lo que espera la RemotePi (GPIO debe entrar en el valor por defecto 0=low para cortar la energiacutea tras el apagado) Pero puesto que necesitas utilizar cables de todos modos para conectar la Remot-ePi esto no supondraacute ninguacuten problema ya que simplemente puedes reconectar los cables a otros pines GPIO

Como evitamos el circuito de ali-mentacioacuten del ODROID encendieacutendo-lo a traveacutes de GPIO tambieacuten pasamos por alto la proteccioacuten ante subidas de tensioacuten 2526A del dispositivo pero no te preocupes La RemotePi tambieacuten tiene proteccioacuten ante subidas de tensioacuten que deberiacutea coincidir con el mismo val-or que en el caso de la RemotePi board para la Raspberry Pi 3 Sin embargo la RemotePi para la Raspberry Pi 2 es de soacutelo 2A Esto estaacute bien porque el valor es menor a los 26A del ODROID de modo el polyfuse de la RemotePi se ac-tivariacutea antes si conectas demasiados dis-

La RemotePi board (httpbitly2l8JcWU) que convierte cu-alquier mando a distancia en un

interruptor de encendido para tu orde-nador de placa reducida puede ser com-patible con el ODROIDC2 si sigues esta guiacutea Si utilizas tu dispositivo como centro multimedia esta placa te propor-cionara un receptor de infrarrojos y un circuito de alimentacioacuten asiacute como un botoacuten de encendido Puedes encender y apagar tu ODROID completamente a traveacutes de una sentildeal infrarrojos (IR) y simplemente presionar el botoacuten de en-cendido para apagarlo y reiniciarlo con seguridad La placa RemotePi es respon-sable del modo espera que absorbe una miacutenima energiacutea mientras el ODROID estaacute completamente apagado Por uacutel-timo la placa alimenta tu dispositivo a traveacutes de GPIO lo cual requiere un cable microUSB para conectarlo a la Re-motePi en lugar de utilizar un adaptador de corriente normal

Configuracioacuten de hardware

Puesto que la RemotePi estaba pen-sada originalmente para la Raspberry Pi 2 necesitaraacutes utilizar cables adiciona-les en lugar de colocarla justamente en cima del C2 para evitar interferir con el disipador de calor asiacute que debes re-cablear algunos pines Es necesario utili-zar cables con el diaacutemetro adecuado para los pines de 5V y puesta a tierra ya que la corriente podriacutea estar entre los 2A y 26A dependiendo de cuaacutentos dispositi-vos USB conectes a tu dispositivo

Los pines GPIO 8 y 10 de la Remo-

positivos no alimentados de forma exter-na que no es una buena idea en un SBC al fin al cabo No obstante debido a esta diferencia de amperaje una RemotePi para la Raspberry Pi 3 seriacutea la mejor op-cioacuten para este proyecto

Como resultado del nuevo cableado el firmware de RemotePi ya no se puede configurar de forma normal aunque nunca he usado esta funcioacuten Si fuera necesario configurar o actualizar el firm-ware necesitaraacutes volver a conectar los pines 8 y 10 de la RemotePi a los pines 8 y 10 del ODROID durante la actu-alizacioacuten del firmware y luego deshacer los cambios una vez que la actualizacioacuten haya finalizado Otra posibilidad es simplemente conectar una Raspberry Pi para actualizar el firmware Esto suena a un montoacuten de problemas pero en re-alidad simplemente es extender la con-exioacuten del cabezal y cambiar una liacutenea en el script principal y dos liacuteneas en otro script opcional si haces uso de ello

Re-cableando laconexioacuten GPIO

Dado que la RemotePi estaacute disentildeada

REMOTEPI BOARD PARA EL ODROID-C2por inifity85

REMOTEPI

figura 1 - remotepi board

ODROID MAGAZINE 15

ergiacutea completamenteIrswitchsh (solo cambia el script

original de MSL Digital de GPIOpin1 = 14 a GPIOpin1 = 225)

binbash

prevent restarting XBMC at

shutdown This is only used for

OpenElec before V5

LOCKDIR=rdquovarlockrdquo

LOCKFILE=rdquoxbmcdisabledrdquo

this is the GPIO pin receiving

the shut-down signal

Raspberry Pi pin8 GPIOpin1=14

Odroid-C2 pin26 GPIOpin1=225

GPIOpin1=225

functions

add_omit_pids()

omit_pids=rdquo$omit_pids -o $1rdquo

safe_shutdown ()

for OpenElec before V5

touch ldquo$LOCKDIR$LOCKFILErdquo

for OpenElec V5 and later

systemctl stop kodi

add_omit_pids $(pidof connmand)

add_omit_pids $(pidof dbus-dae-

mon)

killall5 -15 $omit_pids

for seq in `seq 1 10` do

usleep 500000

clear gt devtty1

killall5 -18 $omit_pids || break

done

sync

umount -a gtdevnull 2gtamp1

poweroff -f

echo ldquo$GPIOpin1rdquo gt sysclass

gpioexport

echo ldquoinrdquo gt sysclassgpio

gpio$GPIOpin1direction

while true do

sleep 1

power=$(cat sysclassgpio

gpio$GPIOpin1value)

if [ $power = 0 ] then

echo ldquooutrdquo gt sysclassgpio

gpio$GPIOpin1direction

echo ldquo1rdquo gt sysclassgpio

una carcasa personalizada de modo que el receptor integrado podriacutea estar oculto y no ser uacutetil En ese caso puedes desac-tivar el IR del ODROID en favor del re-ceptor externo GPIO-IR en la RemotePi y conectar el pin 12 Tienes disponible maacutes informacioacuten sobre el cambio al receptor GPIOIR en LibreELEC en httpbitly2lpDl27

Scripts de apagado para LibreELEC

Los dos scripts tratados a continu-acioacuten pueden descargarse desde la paacutegina de soporte de MSL Digital Solutions en httpbitly2kMxyVG En esta paacutegina tambieacuten encontraras una guiacutea para utili-zar estos scripts en otros sistemas opera-tivos como Volumio y RuneAudio

El script irswitchsh se usa para el apagado seguro a traveacutes de sistema In-frarrojos Tras pulsar el correspondiente botoacuten el sistema se apagaraacute de forma se-gura luego RemotePi esperaraacute a que el GPIO225 alcance el estado 0 (low) que aparece tras el cierre exitoso del sistema Finalmente cortaraacute la energiacutea

El script shutdownsh se usa para el apagado seguro a traveacutes de la interfaz del programa o script Despueacutes de navegar hasta el botoacuten de apagado en la GUI el sistema se apagaraacute de forma segura luego RemotePi esperaraacute a que el GPIO225 alcance el estado 0 (low) que apareceraacute tras apagarse el sistema de forma adec-uada y segura Finalmente cortaraacute la en-

originalmente para una Raspberry Pi desgraciadamente no es soacutelo enchufar y usar Necesitaraacutes volver a cablear dos pines usando los cables de todos los pines tal y como se muestra en la Figura 2 Re-cablea el pin 8 de la RemotePi al pin 26 del ODROID-C2 y el pin 10 de la RemotePi al pin 7 del ODROID-C2

Si no quieres utilizar el receptor IR de la RemotePi para el mando a distan-cia de LibreELEC puedes dejar desco-nectado el pin 12 La placa continuaraacute encendieacutendose y apagaacutendose a traveacutes del comando de control remoto IR pero el control de la GUI de LibreELEC seraacute asumido por el receptor de infrarrojos integrado en el ODROID Sin embargo si has comprado una RemotePi con un receptor IR y un LED externo es posible que hayas decidido colocarla dentro de

REMOTEPI

figura 3 - la remotepi ha sido recableada y montada en una carcasa personalizada

figura 2 - re-cableado Gpio

ODROID MAGAZINE 16

Centro Multimedia por ejemplo Esos comandos de apagado se equiparaacuten a eventos internos similar a cuando nave-gas por el menuacute de apagado de Kodi Sin utilizar este segundo script el sistema se cerraraacute con seguridad pero la placa Re-motePi no recibiriacutea ninguna indicacioacuten para monitorizar el GPIO225 de modo que no cortariacutea la energiacutea tras apagarse el sistema correctamente

Usando el receptor IR de la RemotePi

Si deseas utilizar el receptor IR de la RemotePi en lugar del receptor IR ODROID integrado tendraacutes que des-activar el sistema IR integrado y activar el receptor IR GPIO Para hacer esto en Ubuntu puede consultar el artiacuteculo de la Wiki de Hardkernel en httpbitly2l8KrWg Para Libre-ELEC echa un vistazo a mi mini-guiacutea en httpbitly2lLKj2A Para preguntas comentari-os o sugerencias visita el hilo original en httpbitly2mgFGKk

gpio$GPIOpin1value

sleep 3

safe_shutdown

fi

done

Shutdownsh (solo cambia GPIOpin =15 a GPIOpin =249 y GPIOpin1 =14 a GPIOpin1 =225)

binbash

if [ ldquo$1rdquo = ldquorebootrdquo ] then

Raspberry Pi pin10 GPIOpin=15

Odroid-C2 pin7 GPIOpin=249

GPIOpin=249

Raspberry Pi pin8 GPIOpin1=14

Odroid-C2 pin26 GPIOpin1=225

GPIOpin1=225

echo ldquo$GPIOpinrdquo gt sysclass

gpioexport

execute shutdown sequence on

pin

echo ldquooutrdquo gt sysclassgpio

gpio$GPIOpindirection

echo ldquo1rdquo gt sysclassgpio

gpio$GPIOpinvalue

usleep 125000

echo ldquo0rdquo gt sysclassgpio

gpio$GPIOpinvalue

usleep 200000

echo ldquo1rdquo gt sysclassgpio

gpio$GPIOpinvalue

usleep 400000

echo ldquo0rdquo gt sysclassgpio

gpio$GPIOpinvalue

set GPIO 14 high to feedback

shutdown to RemotePi Board

because the irswitchsh has

already been terminated

echo ldquo$GPIOpin1rdquo gt sysclass

gpioexport

echo ldquooutrdquo gt sysclassgpio

gpio$GPIOpin1direction

echo ldquo1rdquo gt sysclassgpio

gpio$GPIOpin1value

usleep 4000000

fi

El script shutdownsh es uacutetil si a vec-es usas las aplicaciones remotas Android Yatse o Kore o hotkeys para apagar tu

REMOTEPI

ODROID Talk Subreddit

httpwwwredditcomrodroid

ODROID Magazine

estaacute en Reddit

ODROID MAGAZINE 17

El HiFi Shield 2 (39$ httpbitly2lHSlZJ) es un Con-vertidor Digital a Analoacutegico de Alta definicioacuten (DAC) para el ODROID-C2 y el ODROID-C1+ Se trata de

una placa de sonido especial para el ODROID-C2 y C1 + que estaacute optimizada para mejorar la calidad de reproduccioacuten del sonido Ofrece un sonido muy bien equilibrado consistente intenso amplio y muy bien dimensionado por niveles Hemos analizado la calidad de audio de la salida HiFi Shield 2 DAC con un equipo estaacutendar de la industria del sonido llamado Au-dio Precision Audio Precision es un analizador de audio de alto rendimiento optimizado para la produccioacuten de audio digital

Usando el chip DAC PCM5242 de uacuteltima generacioacuten de Texas Instrument conocido como Burr-Brown el HiFi Shield 2 soporta formatos de audio de 16 24 y 32 bits con una ra-tio THD+N miacutenima (0002) y una dinaacutemica ideal (114dB +) ademaacutes de sorprendentes tasas de muestreo de 384 kHz La interfaz dedicada SPDIF soporta una definicioacuten de hasta 192kHz24bit a traveacutes de una salida oacuteptica (Toslink)

Si hacemos uso del puerto de expansioacuten I2S en el C2C1+ no es necesario ocupar un puerto USB permitiendo al usu-ario seleccionar el sistema de reproduccioacuten de audio que desee como Volumio y Debian (DietPi) para reproducir sonido HiFi

HIFI SHIELD 2

HIfI SHIELD 2EL MEJOR SOnIDO quE PODRAS COnSEGuIR En AnDROIDeditado por rob roy (robroy)

oDroiD-c2 y hifi Shield 2 Audio pb +J

primer plano de la placa con anotaciones

Distribucioacuten de los 7 pines i2S del c2c1+

la salida de audio es estaacutendar la salida de color rojo corresponde al canal de audio iz-quierdo y la salida de color blanco correspon-de al canal de audio derecho

ODROID MAGAZINE 18

Detalles

La guiacutea de configuracioacuten de UbuntuLinux para ODROID-C2 estaacute disponible en httpbitly2brrGdG y para ODROID-C1+ en httpbitly2lI7AC7 El sistema operativo oficial Volumio 2 se puede descargar desde httpbitly2kOJNAV y la imagen DietPi basada en Debian se encuentra en httpbitly2ls45yM Puede ver los esquemas en httpbitly2mnukV4

Diagrama por bloques del hifi Shield2

Caracteriacutesticasbull El control de volumen a traveacutes de la interfaz

i2c es una gran caracteriacutestica para mantener una buena calidad del sonido con varios voluacutemenes de salida de audio

bull Los puertos de salida incluyen terminales esteacute-reo rcA chapados en oro

bull La fuente de alimentacioacuten tiene habilitado un regulador de interferencias de ruido ultra-bajo lo cual reduce el ruido de la fuente de alimentacioacuten y aumenta en gran medida el ratio sentildealruido

bull La interfaz I2S permite la descodificacioacuten di-recta de la entrada digital a la salida analoacutegica utili-zando la sincronizacioacuten del reloj maestro

bull La superficie de la PCB estaacute chapada en oro so-bre 2 onzas de cobre lo cual garantiza la continui-dad de la sentildeal y reduce la reflexioacuten y deflacioacuten de la sentildeal

bull Dispone de almohadillas soldadas a la salida de audio balanceada (sentildeal diferencial)

bull La interfaz SPDIF dedicada es nueva admite una definicioacuten de hasta 192khz24bit a traveacutes de una nueva salida oacuteptica (toslink)

bull Este HiFi shield no es compatible con Android y hardkernel no tiene planes para hacerlo compatible y asiacute poder habilitar el controlador i2S en el Kernel y el hAl de Android

El Manual de usuario del ODROID-XU4 disponible en httpbitly1U9Q8yg ha sido revisado hace poco para incluir algunos de los perifeacutericos maacutes recientes como

la Expansion Board SmartPower2 y oCam Puesto que ahora Hardkernel tambieacuten ofrece Ubuntu 1604 todos los ejemplos de coacutedigo se han actualizado para que sean compatibles con el nuevo sistema operativo Si tiene comentarios preguntas o sugerencias visita el hilo de los foros ODROID en httpbitly1RykBrT

MAnuAL Xu4ACTuALIzADOREvISADO PARA uBunTu 1604 y LOS PERIfERICOS MAS RECIEnTESeditado por rob roy (robroy)

MANUAL XU4

el manual del oDroiD-xU4 incluye informacioacuten detallada de los diferentes sistemas operativos software y perifeacutericos disponibles para el oDroiD-xU4

ODROID MAGAZINE 19

El DevOps es complicado Los grandes proyectos de soft-ware como Mesos y Kubernetes desarrollan equipos como los que se encuentran en la mayoriacutea de las empre-

sas y organizaciones tecnoloacutegicas como CoreOS con la finali-dad de ayudar a los desarrolladores a poner sus aplicaciones en funcionamiento Sin embargo iquestcuaacutel seriacutea una buena solucioacuten para un desarrollador en solitario o una pequentildea red domeacutesti-ca iquestCoacutemo podemos usar el coacutedigo a nivel de infraestructura

Uso un portaacutetil Macintosh OSX para desarrollo pero para las aplicaciones de larga duracioacuten o aplicaciones que se ejecu-tan por la noche necesito un entorno remoto siempre activo ya que mi portaacutetil estaraacute fuera de liacutenea o en el tren conmigo mientras voy y vengo del trabajo Tiene su sentido no utilizar el ordenador como un entorno para la puesta en funcionamiento de aplicaciones

El ODROID-XU4 es un ordenador ideal para un entor-no de implementacioacuten remoto ya que es econoacutemico flexible cuenta con excelentes especificaciones teacutecnicas y puede ejecutar Linux Este artiacuteculo tiene por objetivo explicar coacutemo almacenar coacutedigo de implementacioacuten en tu repositorio de proyectos asiacute como automatizar las implementaciones y ejecuciones

Arch LinuxArch Linux es una distribucioacuten de Linux gratuita de coacutedigo

abierto que fue lanzada en 2002 Estaacute centrada en la elegancia la integridad del coacutedigo el minimalismo y la simplicidad y cuenta con que el usuario haga un esfuerzo en comprender el funcionamiento del sistema Arch Linux utiliza en particular un modelo de revisioacuten continua de modo que todo lo que se necesitas para conseguir el software del sistema maacutes reciente es actualizar el sistema de forma perioacutedica

Arch Linux puede ser algo difiacutecil de asimilar ya que uti-liza herramientas diferentes a las de una distribucioacuten Debian El gestor de paquetes se activa a traveacutes de ldquopacmanrdquo en lugar de ldquoapt-getrdquo y existe un gestor complementario de paquetes muy popular llamado ldquoyaourtrdquo Muchos de los servicios o her-ramientas maacutes comunes no se instalan por defecto

Arch Linux esta hecho principalmente para procesadores x86 pero un proyecto llamado Arch Linux ARM (ALARM) tiene una distribucioacuten ARM de Arch Linux para arquitectu-ras AArch64 ARMv8 y ARMv7 Hardkernel el fabricante de ODROIDs es de hecho un patrocinador del proyecto Arch Linux ARM

HOME DATA CENTER

HOME DATA CEnTERIMPLEMEnTACIOn DEL CODIGO COn ARCHLInuXpor John Skilbeck

Configurar la redDeberaacutes asignarle a tu dispositivo una direccioacuten IP LAN

DHCP reservada y en el mejor de los casos un nombre de host que se propagaraacute a lo largo de tu red por medio del servidor DNS de tu router De esta forma en nuestro entorno de desar-rollolocal podremos utilizar un nombre de host para resolver siempre el entorno de implementacioacutenremoto

Por ejemplo en mi red reservo el 192168249 a la direc-cioacuten MAC de mi ODROID Tambieacuten configuro una entrada DNS que asigna a esa direccioacuten IP ldquoodroidrdquo Utilizar un firm-ware personalizado en el router como Tomato USB o DD-WRT lo hace extremadamente faacutecil ya que esos firmwares convierten tu router en un pequentildeo ordenador Linux con una aplicacioacuten web GUI muy pulida aunque su implementacioacuten estaacute fuera del alcance de este artiacuteculo Si operas con subredes aseguacuterate dirigir el puerto hacia el puerto externo que se asigna al puerto SSH del dispositivo odroid ya que Git se ejecuta a traveacutes de SSH

Configurar el proyectoLoacutegicamente desearaacutes estandarizar el flujo de trabajo de la

implementacioacuten Esto haraacute que el trabajo con proyectos sea

el home data center de John es una auteacutentica obra de arte

ODROID MAGAZINE 20

extremadamente faacutecil y eliminas muchos de los cambios de contexto mental que utilizas cuando trabaja en varios proyec-tos Crearemos una carpeta para alojar todos nuestros archivos relacionados con implementaciones Coloca los archivos eje-cutables en ldquodeploybinrdquo y cualquier archivo cron en ldquodeploytasksrdquo (maacutes informacioacuten sobre esta cuestioacuten maacutes adelante)

Navega hasta el directorio del proyecto en una ventana de Terminal y luego escribe los siguientes comandos

$ mkdir -p deploybin

$ mkdir -p deploytasks

$ cd deploybin ampamp touch run-job ampamp

chmod u+x run-job ampamp cd -

$ cd deploytasks ampamp touch crontab

Tambieacuten puede estandarizar doacutende colocar tu coacutedigo fuente De esta forma le seraacute maacutes faacutecil a otras personas ver coacutemo se or-ganiza tu proyecto y conocer queacute es el coacutedigo fuente y queacute no

$ mkdir src

$ cd src ampamp (place source code here ie python core

py clojure coreclj nodejs appjs)

Simplificar los puntos de entradaIniciar una aplicacioacuten puede resultar algo confuso con todos

los comandos que se pueden ejecutar en diferentes lenguajes Por ejemplo puede usar Java ldquojava -jar [my-jar] jarrdquo o python ldquopython my-apppyrdquo y tu aplicacioacuten tambieacuten puede necesitar varios argumentos Todo esto deberiacutea simplificarse y resumirse en un archivo ldquodeploybinrun-jobrdquo

binsh

set -e

CMD=rdquosrcduckrdquo

exec $CMD $

Crear el archivo cronArch Linux no viene con un cliente o demonio cron por

defecto Instaacutelalo con ldquosudo pacman -Syu cronierdquo Utilizando cron puede ejecutar comandos en intervalos de tiempo espe-cificados haciendo uso de la sintaxis especial de cron Normal-mente se almacena en el archivo crontab del usuario al que puedes acceder con ldquocrontab -erdquo Sin embargo esto es demasi-ado manual y queremos usar coacutedigo como infraestructura Cron tambieacuten tiene algunos subdirectorios muy uacutetiles en ldquoetccronrdquo como ldquoetccrondailyrdquo yrdquoetccronhourly ldquo si co-locamos los archivos aquiacute eacutestos se ejecutaraacuten en los intervalos especificados

Revisa el archivo de ldquodeploytaskscrontabrdquo que colocare-mos en ldquoetccrondrdquo que se crea automaacuteticamente con nuestro script ldquoposttreceiverdquo

variables

SHELL=binbash

PATH=binusrbinusrlocalbinusrsbinusrlo-

calsbin

MAILTO=[your-email-address]gmailcom

cmd=rdquodeploybinrun-jobrdquo

app_dir=rdquohomeskilbjodeployappduckdnsrdquo

jobs

5 skilbjo cd ldquo$app_dirrdquo $cmd gtdevnull

Aquiacute tienes el esquema general de la estructura de un simple proyecto El uacutenico ejecutable del proyecto es un uacutenico script shell ubicado en ldquosrcrdquo

$ tree

READMEmd

deploy

bin

post-receive

run-job

tasks

crontab

src

duck

4 directories 5 files

GitPrimero queremos agregar una URL remota a nuestro

proyecto en nuestro entorno local

$ git remote add odroid sshodroid~deploygit

duckdnsgit

Ten en cuenta que dependiendo de la topologiacutea de tu red es posible que tenga que modificar esta url Si no puedes asignar nombres de host la URL de git se veriacutea asiacute donde 192168249 es la direccioacuten IP LAN de tu dispositivo

$ ssh192168249~deploygitduckdnsgit

Si tienes un usuario en tu entorno ODROID distinto al que tienes en tu entorno de desarrollo la url se veriacutea asiacute donde ldquoskilbjordquo es tu nombre de usuario

$ sshskilbjoodroid~deploygitduckdnsgit

Si tu servidor remoto estaacute en una subred diferente y tienes redireccionados los puertos tu url tendriacutea este aspecto donde

HOME DATA CENTER

ODROID MAGAZINE 21

ldquo2222rdquo es tu puerto externo

$ ssh192168122222~deploygitduckdnsgit

En el directorio principal de tu entorno remoto crea una carpeta llamada ldquo~deployrdquo con dos subcarpetas ldquo~deployapprdquo y ldquo~deploygitrdquo Los subdirectorios de ldquo~deploygitrdquo seraacuten los puntos finales de nuestros desarrollos y con un hook ejecutaraacuten comandos de implementacioacuten en los subdirectorios de ldquo~ deployapprdquo

Primero navega hasta el directorio principal del entorno re-moto y a continuacioacuten escribe los siguientes comandos

$ mkdir -p ~deployapp

$ mkdir -p ~deploygit

$ mkdir -p ~deploygitduckdnsgit

$ mkdir -p ~deployappduckdns

Ahora en ldquo~ deploygitduckdnsgithooksrdquo crea un archi-vo ejecutable llamado ldquopost-receiverdquo que se activaraacute con cada accioacuten hacia el punto final

$ cd ~deployappgitduckdnsgithooks

$ touch post-receive ampamp chmod u+x post-receive

$ vim post-receive

Rellena el ejecutable con lo siguiente en el directorio ldquo~deploygitduckdnsgithooksrdquo del entorno remoto

usrbinenv bash

set -eou pipefail

user=$(whoami)

dir=rdquohome$userdeployapprdquo

app=$(basename $(pwd) | sed -e lsquosgitrsquo)

deploy_dir=rdquo$dir$apprdquo

cron_dir=rdquoetccrondrdquo

GIT_WORK_TREE=rdquo$deploy_dirrdquo git checkout -f

cd ldquo$deploy_dirrdquo

build steps here

case ldquo$userrdquo in

(skilbjo) sudo cp deploytaskscrontab ldquo$cron_

dir$apprdquo

esac

you can also do project-specific build steps in

this section like install

dependencies (ie npm install) compile source

code (ie lein uberjar)

as well as if a long-lived app run commands as

well (ie java -jar my_jarjar)

echo ldquoall donerdquo

exit 0

ImplementacioacutenAhora estamos listos para implementar ya que nuestro en-

torno local estaacute configurado para alcanzar el punto final del servidor de implementacioacuten nuestro entorno remoto estaacute con-figurado para recibir la notificacioacuten y revisar el coacutedigo fuente ejecutar cualquier paso de compilacioacuten y colocar una tarea en el directorio cron del sistema para su lanzamiento Ponto todo en praacutectica con el siguiente comando en el directorio del proyecto del entorno local

$ git push odroid

Ademaacutes para ver coacutemo se ha implementado todo esto en un proyecto de ejemplo visita httpbitly2lthYKW

Pasos finalesSe puede antildeadir al flujo anterior algunas caracteriacutesticas

como son muacuteltiples entornos ya sea con muacuteltiples ODROIDs o con un solo ODROID trataacutendolo como un servidor de ser-vicio Esto se puede hacer con subdirectorios bajo ldquo~deployrdquo como ldquo~deploystagingappmy_apprdquo o ldquo~ deployproduc-tionappmy_apprdquo

Ademaacutes podriacuteas antildeadir un servicio de integracioacuten conti-nua como CircleCI que ejecutariacutea una suite de testeo desde cada desarrollo a GitHub y si tiene eacutexito compila una imagen Docker No podriacuteas entonces tener un archivo en el entorno remoto que verificariacutea una imagen de un repositorio Docker y la ejecutariacutea en un intervalo especificado Esto es lo que hacen muchos de los softwares DevOps distribuidos como Mesos y Kubernetes pero en un entorno mucho maacutes rico que BASH y Linux

Referencias

Artiacuteculo Wikipedia de Arch linux httpbitly2l71ADKWebsite Arch linux ArM httpsarchlinuxarmorgArtiacuteculo que leiacute hace unos tres antildeos y que me inspiroacute para escribir mi propio artiacuteculo httpbitly2m5JAct

HOME DATA CENTER

ODROID MAGAZINE 22

odroid ARCADE BOXLA EXPERIEnCIA PERfECTA COn TuS JuEGOS ARCADE fAvORITOSpor brian Kim charles park y John lee

ARCADE BOX

Los ODROIDs tienen mejor rendimiento que las placas de la competencia especialmente en lo que respecta al renderizado de video lo que significa que

las placas ODROID son ideales para jugar lo cual hacen muchos usuarios de ODROID Ya hay disponibles varios sistemas operativos de plataforma de juegos como Lakka (httpbitly1NO8BBC) y ODROID GameStation Tur-bo (httpbitly1ASFO5O) Para disfrutar auacuten maacutes de nuestras sesiones de juegos creamos nuestra propia consola arcade con simples botones GPIO y joysticks y la llama-mos la ODROID Arcade Box Elegimos un ODROID-XU4 para este proyecto porque es el que tiene mejor rendimiento GPU de todos los dispositivos ODROID actuales En este artiacuteculo vamos a describir como hemos creado la ODROID Arcade Box

Requisitos( Figura 3 ndash )Decidimos hacer la ODROID Arcade Box usando

un MDF (tablero de fibra de densidad media) El Shifter Shield del XU4 tambieacuten es uacutetil para utilizar los pines de expansioacuten del ODROID-XU4 Los Joysticks los botones y los cables eran los componentes de entrada y se utilizoacute

Nuestro primer y simple prototipo

ODROID MAGAZINE 23

panel MDf 12t2eA 600x2202eA 600x752eA 220x75taladroplegadoraDesmontadorcinta meacutetricaNavaja multiusoAlicates de punta largaoDroiD-xU4xU4 Shifter shieldSMpS (fuete Alimentacioacuten)

extendedores hDMi USb ethernetenchufe de alimentacioacuten y Switchbisagras 2eAreceptor de puertacaucho 4eAtornillospulsadores 19eAJoystick 2eAcablesterminales

una SMPS (Fuente de alimentacioacuten conmutada) como fuente de alimentacioacuten Las herramientas y las piezas utilizadas las tienes en esta paacutegina

La ODROID Arcade Box necesita un total de 27 entradas (19 entradas para botones y 8 entra-das para joysticks) Las 24 entradas GPIO digi-tales del ODROID-XU4 no son suficientes para las 27 entradas de modo que creamos dos puertos ADC adicionales para los tres botones que nos fal-taban Los valores de entrada ADC se basan en el voltaje de entrada y los valores de entrada digital y analoacutegica se procesan en el demonio GPIO que se describe a continuacioacuten

Disentildeo y montajeLos paneles de la ODROID Arcade Box deben

ser disentildeados y fabricados para que los botones y joysticks esteacuten bien colocados Elegimos MDF 12T teniendo en cuenta el precio y la durabilidad El dise-ntildeo se puede hacer con cualquier herramienta CAD como Google Sketch o SolidWorks Aunque existen muchas plantillas de disentildeo para los paneles de joypad decidimos elegir un disentildeo arcade estaacutendar japoneacutes

El primer paso del montaje es unir la placa al panel MDF Este paso fue faacutecil aunque nos llevo maacutes tiempo que el resto Despueacutes insertamos los joysticks la toma de corri-ente el interruptor y los botones en el panel MDF superior Los conectores HDMI Ethernet y USB se colocaron en la parte trasera del panel MDF El siguiente paso fue montar cada panel MDF usando un taladro para hacer los agujeros luego con tornillos los sujetamos

El uacuteltimo paso del montaje de la ODROID Arcade Box es conectar por cable los pines de expansioacuten del ODROID-XU4 a los componentes de entrada En este proyecto dise-ntildeamos las entradas GPIO externas tal y como se muestra en la paacutegina 26 Los botones Select y Temp estaacuten conecta-dos a puertos de expansioacuten ADC

Configuracion del softwareDesarrollamos un nuevo demonio GPIO llamado gpio_

keyd (httpbitly2ljOZKg) Este demonio es capaz de asignar entradas GPIO y eventos claves usando uinput y wiringPi una libreriacutea de acceso GPIO basada en pines Estaacute disentildeada para que le sea familiar a quiene ya ha utilizado el sistema de cableado Arduino Aunque la blibreriacutea wiring-Pi upstream soacutelo admite Raspberry Pi Hardkernel ofrece una versioacuten de wiringPi para ODROIDs en su repositorio GitHub (httpbitly1Eq3UpF) El moacutedulo uinput es un moacutedulo del kernel de Linux que gestiona el subsistema de entrada del usuario Se puede utilizar para crear y manejar dispositivos de entrada desde una aplicacioacuten

ARCADE BOX

herramientas compentes y lo que hay justamente debajo

esquema de los puertos de expansioacuten

ODROID MAGAZINE 24

Elegimos ODROID GameStation Turbo (httpbitly1ASFO5O) como plataforma de software para nuestra ODROID Arcade Box que tiene integrado uinput Debes asegurarte de que el archivo de dispositivo uinput existe en el sistema operativo elegido porque algunos no tienen dispositivos uinput

$ ls devuinput

Si tu sistema operativo no tiene un archivo de disposi-tivo devuinput entonces seraacute necesario recompilar e in-stalar un nuevo kernel con la opcioacuten de configuracioacuten IN-PUT_UINPUT habilitada La paacutegina Wiki en httpbitly1YIToBI describe coacutemo compilar e instalar la imagen del kernel a partir del coacutedigo fuente

$ make menuconfig

Device Drivers

-gt Input device support

-gt Generic input layer

-gt Miscellaneous device

-gt User level driver support ltgt

Ten en cuenta que wiringPi debe instalarse antes de in-stalar gpio_keyd En la imagen GameStation de ODROID los comandos sudo deben ejecutarse como root porque la cuenta ldquoodroidrdquo no estaacute designada como usuario sudo

$ git clone httpsgithubcomhardkernelwiringPi

git

$ cd wiringPi

$ sudo build

Descarga el coacutedigo fuente gpio_keyd el cual estaacute dis-ponible en nuestro repositorio GitHub El procedimiento para compilar e instalar gpio_keyd es muy simple

$ git clone httpsgithubcombkrepogpio_keydgit

$ cd gpio_keyd

$ make

$ sudo make install

El script gpio_keyd hace referencia a etcgpio_keydconf como el predeterminado para la informacioacuten de los botones y GPIO El archivo de configuracioacuten fue modi-ficado para las 27 entradas de la ODROID Arcade Box Algunas botones ya se utilizaban en el emulador de juego de modo que tuvimos que cambiar la configuracioacuten del emulador para evitar conflictos entre los botones de en-trada GPIO y el emulador Ten en cuenta que el campo ltGPIO pingt en el archivo de configuracioacuten hace referen-

ARCADE BOX

plano del disentildeo de joypad

la oDroiD Arcade box montada

ODROID MAGAZINE 25

cia al nuacutemero wiringPi no al GPIO y al nuacutemero de pin (httpbitly2lbzPIB)

Ejemplo de configuracioacuten para las 27 entradas etcgpio_keydconf

Digital input ltKey codegt ltGPIO typegt ltGPIO pingt ltActive valuegt User 1KEY_LEFT digital 15 0KEY_RIGHT digital 1 0KEY_UP digital 4 0KEY_DOWN digital 16 0KEY_A digital 2 0KEY_S digital 3 0KEY_D digital 30 0KEY_F digital 21 0KEY_Z digital 8 0KEY_X digital 9 0KEY_C digital 7 0KEY_V digital 0 0 User 2KEY_BACKSLASH digital 12 0KEY_SLASH digital 13 0KEY_SEMICOLON digital 14 0KEY_LEFTBRACE digital 5 0KEY_Y digital 26 0KEY_U digital 27 0KEY_I digital 22 0KEY_O digital 23 0KEY_H digital 6 0KEY_J digital 10 0KEY_K digital 11 0KEY_L digital 31 0

Analog input ltKey codegt ltGPIO typegt ltADC portgt ltADC ac-tive valuegtKEY_B analog 0 0KEY_N analog 0 2045KEY_M analog 1 2045

To run gpio_keyd daemon at every startup is conve-nient for ODROID Arcade Box

etcinitdgpio_keyd binsh BEGIN INIT INFO

ARCADE BOX

Mapeo Gpio externo para los botones y Joysticks

cableado de la oDroiD Arcade box

ODROID MAGAZINE 26

Provides gpio_keyd Required-Start $all Required-Stop Default-Start 2 3 4 5 Default-Stop Short-Description Run usrbingpio_keyd if it ex-ist END INIT INFO

PATH=sbinusrsbinbinusrbin

libinitvarssh

liblsbinit-functions

do_start() if [ -x usrbingpio_keyd ] then usrbingpio_keyd -d ES=$ [ ldquo$VERBOSErdquo = no ] ampamp log_end_msg $ES return $ES fi

case ldquo$1rdquo in start) do_start restart|reload|force-reload) echo ldquoError argument lsquo$1rsquo not supportedrdquo gtamp2 exit 3 stop) killall gpio_keyd exit 0 ) echo ldquoUsage $0 start|stoprdquo gtamp2 exit 3 Esac

$ sudo chmod +x etcinitdgpio_keyd$ sudo update-rcd gpio_keyd defaults$ sudo reboot

En los comandos anteriores el script gpio_keyd se ejecuta como un demonio uti-lizando la opcioacuten ldquo-drdquo El uso de gpio_keyd se puede comprobar con la opcioacuten ldquo-hrdquo Comprue-ba de nuevo las teclas usadas por el juego o el emulador despueacutes fija la configuracioacuten del gpio_ keyd correctamente Es ahora cuando estaacutes listo para jugar y disfrutar de tus juegos con tu nueva ODROID Arcade Box

ARCADE BOX

the King of fighters 98 John vs brian

ODROID MAGAZINE 27

En este artiacuteculo analizaremos las diferentes formas que existen para ob-tener los datos del uso de la red

ConfiguracioacutenLa forma normal de analizar los datos

de traacutefico de la red es mediante el uso de datos a traveacutes de las aplicaciones de configuracioacuten del sistema tal y como se muestra en la figura 1

El uso de datos muestra la cantidad total de traacutefico de datos entrante y sa-liente que ha sido utilizada por una apli-cacioacuten Si seleccionas la aplicacioacuten veraacute una pantalla como la que aparece en la Figura 2 que muestra informacioacuten detal-lada sobre el uso de la aplicacioacuten tanto en primer plano como de fondo

La informacioacuten que se muestra den-tro de la aplicacioacuten de Configuracioacuten se almacena en data systemnetstats que requiere acceso root Al eliminar todo lo que hay dentro de esta carpeta se resta-

Como desarrolladores queremos que nuestras aplicaciones sean eficientes y a menudo nos gus-

tariacutea saber cuaacutento ancho de banda de red estaacute utilizando nuestra aplicacioacuten Esto es muy uacutetil por varias razones

bull Para monitorizar y asegurarnos de que la aplicacioacuten es realmente la nuestra y no una aplicacioacuten que ha sido pirateada y publi-cada con diferentes nombres en Play Store

bull Para asegurarnos de que no es-tamos cogiendo ancho de banda innecesario del plan de datos del usuario

bull Para comprobar que el disposi-tivo que estamos usando no estaacute accediendo a Internet sin nuestro consentimiento

blecen las estadiacutesticas de red mostradas en esta aplicacioacuten

Estadiacutesticas de la redLa aplicacioacuten de configuracioacuten nos

puede dar una informacioacuten general so-bre las estadiacutesticas de la red de datos que es un buen comienzo pero a veces necesitamos un anaacutelisis maacutes detallado que puede hacerse a traveacutes del coman-do dumpsys Android cuenta con una poderosa herramienta llamada dumpsys que nos permite obtener una instan-taacutenea o volcado del sistema que pu-ede incluir informacioacuten sobre la red la memoria y otros componentes Lee la documentacioacuten de Android en httpbitly2kK9dep para obtener maacutes infor-macioacuten del sistema Para conseguir maacutes informacioacuten relacionada con la red nos interesa el comando

$ dumpsys netstats detail

La Figura 3 muestra un pantallazo de lo que puedes ver desde una tablet Nexus 7 que ejecuta Lollipop 511

Hay algunas cuestiones importantes para entender las estadiacutesticas

bull Las estadiacutesticas UID muestran el desglose de las aplicaciones de primer plano y de fondo

bull Uid muestra el ID de usuario de la aplicacioacuten que se puede utili-zar para relacionar eacutesta con la in-

DESARROLLO AnDROID AnALIzAnDO EL uSO DE RED DE LAS APLICACIOnESpor Nanik tolaram

DESARROLLO ANDROID

figura 1 - Uso de datos en la configuracioacuten

figura 2 - Desglose del uso de datos de la app

ODROID MAGAZINE 28

$ dumpsys package detail

Este comando te proporcionaraacute una larga lista de informacioacuten sobre los pa-quetes que estaacuten instalados en tu dis-positivo Para las estadiacutesticas de red nos interesa la seccioacuten que se muestra en la Figura 5

La seccioacuten resaltada muestra el userId que se relaciona con el uid que se mues-tra en las estadiacutesticas de red Al relacio-nar este nuacutemero sabemos el nombre del paquete de la aplicacioacuten sobre el que es-tamos leyendo las estadiacutesticas de red

Aplicacioacuten de ejemplo

La aplicacioacuten de ejemplo de este artiacute-culo se puede descargar desde httpbitly2m8WenA que muestra coacutemo etiqu-etar la conexioacuten de red desde distintas

secciones de la aplicacioacuten lo cual puede ayudar a analizar el volumen de traacutefico de datos de la aplicacioacuten La Figura 6 muestra un ejemplo de coacutemo lo vemos si utilizamos Android Device Monitor (dentro de Studio diriacutegete a Tools -gt Android -gt Android Device Monitor)

Tal y como se puede ver en el graacutefico la simple aplicacioacuten tiene 3 conexiones dife-rentes y cada una de ellas estaacute accediendo a un sitio web diferente Al etiquetarlas con

formacioacuten del paquete (que ver-emos en la seccioacuten de detalles del paquete dumpsys) con el objeto de conocer queacute aplicacioacuten utiliza estas estadiacutesticas de red

bull Las etiquetas son uacutetiles si de-sea ver la cantidad de datos que utiliza cada conexioacuten de tu apli-cacioacuten Puedes ver un ejemplo de esto en la Figura 4 que muestra que el uid 10007 tiene las siguien-tes etiquetas 0x30000401 0x30003201 0x30002804 0x10000401 y 0x30000407 Es-tas etiquetas ayudan al desarrol-lador a saber cuaacutentos datos uti-liza cada parte de la aplicacioacuten Estas estadiacutesticas de red en par-ticular estaacuten vinculada al paquete Google Framework que forma parte de Google Play Store

En el siguiente apartado veremos coacutemo escribir una aplicacioacuten etiquetando el hilo que hace la conexioacuten de red para determi-nar la cantidad de datos que se utilizan

Estadiacutesticas de paquetes

En la seccioacuten anterior analizamos el uid que aparece al ejecutar el comando dumpsys netstats Ahora necesitamos sa-ber queacute uid corresponde a la aplicacioacuten en el dispositivo y esto se hace mediante el siguiente comando

DESARROLLO ANDROID

figura 3 ndash estadiacutesticas de red con Dumpsys

figura 4 - estadiacutesticas de etiquetas UiD

figura 5 - Detalles del paquete dumpsys

figura 6 - etiquetas de red

coacutedigos diferentes podemos ver la cantidad de traacutefico que consume cada conexioacuten y esto nos ayudaraacute a ver si nuestra aplicacioacuten utiliza el ancho de banda de un modo eficiente

El coacutedigo del siguiente fragmento muestra el uso de la API TrafficStats interna Esta etiqueta API muestra el subproceso que utiliza actualmente un socket con un identificador y todo el traacute-fico que pasa por la misma conexioacuten se grabaraacute junto Asiacute es como la aplicacioacuten es capaz de agrupar las 3 conexiones diferentes Internamente Android utili-za el moacutedulo xt_qtaguid del kernel para realizar este tipo de etiquetado Tienes disponible maacutes informacioacuten en httpbitly2kU8KXB

public void getUsingNormalURLC

onnection(String urlText int

threadTag)

throws IOException

URL url = null

TrafficStats

setThreadStatsTag(threadTag)

HttpURLConnection urlConnec-

tion = getConnection(url)

try

finally

TrafficStatsclearThread-

StatsTag()

ODROID MAGAZINE 29

Disgustado te subes a tu 4x4 de dominacioacuten del mun-do un vehiacuteculo que desde fuera parece maacutes bien un viejo camioacuten de granja pero por dentro se parece maacutes

al sistema de control de un transbordador espacial porque el conductor del restaurante oriental que realiza las entrega a do-micilio estaacute enfermo Ahora tienes que ir a recoger tu propia comida ldquoQueacute rudimentariordquo piensas cuando sales de tu garaje secreto Justamente cuando vas a parar el vehiacuteculo en un stop oyes un fuerte ruido Sales y te diriges raacutepidamente a la parte posterior del 4x4 donde observas un cubo de basura Te tiras de los pelos y piensas ldquoiexclEsos basureros Neanderthales dejaron otra vez el cubo en mediordquo Ahora te toca recoger los restos de tu cena y la basura de otros

Conforme te vas alejando para hacer tus recados empiezas a pensar en coacutemo evitar este inconveniente en el futuro Varias ideas te vienen a la mente

Un sistema lidar para escanear en 3D el entorno en tiempo real y alarmas sonoras cuando sea necesarioUn brazo ciberneacutetico colocado en la parte posterior del 4x4 que procese video para detectar objetos agarrarlos y moverlosUna simple camara trasera

Empiezas a considerar la viabilidad de cada una

Muy bueno pero demasiado complicado y costosoAuacuten mejor y un proyecto propio de un cientiacutefico loco pero demasi-ado complicado y costosoya tengo dos iexclpero estaba demasiado preocupado en mis pensa-mientos para prestarles atencioacuten

Lo que necesitas es algo simple sin complicaciones y barato que haga sonar una alarma para alertarte incluso cuando estar absorto en tus pensamientos ldquoAhardquo Recuerdas haber visto un nuevo producto en ameriDroid que puede hacer precisamente esto Se trata de un microcontrolador conectado al USB que soporta hasta 6 sensores ultrasoacutenicos con simples comandos en serie (httpbitly2l26ptV) ldquoiexclPerfectordquo Piensas

Regresas a tu laboratorio subterraacuteneo con el pollo Kung Pao en la mano te apresurar a encender tus monitores entras en el sitio web ameriDroid y pides un kit ldquoUSB Ultrasonic Ranging Sensorrdquo con 6 sensores y carcasas

Vas sintiendo una sensacioacuten de alivio a medida que regresas a los 12 proyectos en lo que ya estabas trabajando a la espera de que pasen un par de diacuteas hasta que llegue tu nuevo pedido Mientras te comes tu Kung Pao dibujas un diagrama de coacutemo quieres colocar los sensores en la parte posterior de tu vehiacuteculo

Un par de diacuteas maacutes tarde el kit llega Inmediatamente em-piezas a montar el kit y los sensores en la parte posterior de tu 4x4 teniendo cuidado de usar sellador de silicona para pro-teger los sensores de la lluvia aguanieve y nieve que puedas encontrar durante tus aventuras para dominar el mundo

A continuacioacuten consultas las instrucciones proporcionadas por ameriDroid con el kit sobre coacutemo controlar y leer los sen-sores desde tu fiel ODROID-C2 y VU7 que montaste en el salpicadero para este propoacutesito

Conectando el cable USBEl cable USB suministrado debe conectarse al microcon-

trolador (la pequentildea placa de circuito con filas de pines que sobresalen) El microcontrolador tiene una fila de 4 o 6 pines

DETECTAR LA PRESEnCIACROnICAS DE un CIEnTIfICO LOCOpor bo lechnowsky

SENSOR ULTRASONICO

ODROID MAGAZINE 30

en un extremo Si tiene 6 pines ceacutentrate en los 4 pines centrales y sigue estas instrucciones

Negro - conectar a GNDrojo - conectar a VccVerde - conectar a rxi

blanco - conectar a txD

Conectando los sensoresultrasoacutenicos

En cada sensor ultrasoacutenico hay cuatro pines marcados Vcc Trig Echo Gnd Para el primer sensor ultrasoacutenico conecta el pin 2 del microcontrolador al pin ldquoTrigrdquo del sensor ultrasoacutenico Conecta el pin 3 del microcontrolador al pin ldquoEchordquo del sensor Conecte el pin ldquoVccrdquo del sensor a DC 5V (el pin ldquoVCCrdquo del microcontrolador suministra 5V) y el pin ldquoGndrdquo del sensor a una conexioacuten a tierra como por ejemplo los pines ldquoGNDrdquo del microcontrolador

Si conectas un segundo sensor de ultrasonidos conecta ldquoTrigrdquo al pin 4 y ldquoEchordquo al pin 5 Continuacutea conectando los siguientes pines a los sensores hasta los pines 12 y 13 si al final optas por conectar los seis sensores ultrasonidos

Conexioacuten del softwareUtilizas un programa terminal como PuTTY Screen o tu

lenguaje de script o programacioacuten favorito para conectarte al puerto serie que aparece cuando te conectas el sensor ultrasoacuteni-co Esto variaraacute en funcioacuten del sistema operativo que utilizas para conectarte al microcontrolador En Windows consultar el ldquoAdministrador de dispositivosrdquo es la forma maacutes comuacuten de averiguarlo En Linux ldquodmesgrdquo o ldquolsusbrdquo son las formas de de-tectar a queacute puerto estaacute conectado Deberiacuteas ver algo denomi-nado ldquoPL2303rdquo que es la conexioacuten del microcontrolador Si recibes informacioacuten basura en tu terminal cuando te conectes aseguacuterate de que los ajustes en serie son 9600 baudios 8 bits ninguno (paridad) y 1 bit de parada Aquiacute tienes una lista de los comandos que puede aceptar el microcontrolador

bull debug on Activa la retroalimentacioacuten detallada Estaacute deshabilitada por defecto nos proporcionaraacute aclaracio-nes sobre los errores de entrada

bull debug off desactiva la retroalimentacioacuten detalladabull init x y activa un HC-SR04 en los pines especificados

X es trigger Y es echo Estos deben ser pines digitales El dispositivo 0 estaacute preestablecido en los pines 2 y 3 de modo que no es necesario especificar estos pines La seleccioacuten de pines no vaacutelidos devolveraacute un signo de ex-clamacioacuten ()

bull ping enviacutea una sola lectura del HCSR04 previamente utilizado Si no se ha utilizado todaviacutea se usaraacute el dis-positivo 0 Si al comando le sigue un espacio y un nuacutemero entre 0-100 (exclusivo) se realizaraacute ese nuacutemero de lecturas emitiendo primero el promedio de esas lec-

SENSOR ULTRASONICO

turas despueacutes el nuacutemero de lecturas fallidas (que no cuentan para el promedio) y luego los valores miacutenimo y maacuteximo de lectura separados por espacios En cual-quier caso si una sentildeal se desconecta automaacuteticamente devolveraacute -1

bull start Hace ping constantemente a todos los dispositivos conectados en secuencia Debido a que los dispositivos se utilizan uno a uno el flujo de datos de este comando seraacute maacutes raacutepido si los dispositivos miden distancias cor-tas Si este comando le sigue un espacio y un nuacutemero mayor que 0 la placa esperaraacute estos milisegundos entre la lectura del uacuteltimo dispositivo y la lectura del primer dispositivo El resultado de este comando seraacute la lectura de cada dispositivo (con un uacutenico espacio despueacutes de cada uno) y una vuelta tras el uacuteltimo dispositivo

bull stop detiene la operacioacuten ldquostartrdquo soacutelo es efectivo tras haber iniciado ldquostartrdquo

bull mode emite el modo de medicioacuten del flujo M para meacutetrico (miliacutemetros) I para Imperial (deacutecimas de pul-gada) o R para Raw (la longitud de pulso en microse-gundos devuelta por el HC-SR04) El valor predeter-minado es M

bull timeout emite el tiempo de espera actual para lecturas de la sentildeal El tiempo de espera es la mayor cantidad de microsegundos que la placa esperaraacute antes de declarar que el HC-SR04 ha realizado una mala lectura lo cual no es necesariamente lo mismo que el pulso maacutes largo que la placa aceptaraacute del HC-SR04 Cuando la placa mide el pulso del HC-SR04 primero espera a que el HC-SR04 comience a enviar un pulso Este tiempo cuenta para el tiempo de espera Cuando este comando le sigue un espacio y un nuacutemero el tiempo de espera se ajusta a ese nuacutemero El valor predeterminado es 1 segundo (1000000 microsegundos)

bull ver emite informacioacuten de versioacuten y creacuteditos

Si cualquier comando (o ninguacuten comando) estaacute precedido por un uacutenico diacutegito de 0-5 (inclusive) seguido de un espacio el dispositivo que corresponde a ese diacutegito se seleccionaraacute para ser usado con el siguiente comando ldquopingrdquo Cada vez que la placa esteacute lista para un comando emitiraacute ldquogtrdquo para la serie La uacutenica excepcioacuten estaacute tras el comando ldquostartrdquo que no solicitaraacute entrada hasta que sea reconocido ldquostoprdquo

ODROID MAGAZINE 31

iquestCoacutemo empezaste con los ordenadoresCuando empeceacute mi negocio tuve que decidir queacute plat-

aforma de hardware iba a utilizar para la recogida de datos del traacutefico Simplemente para que no pienses mal de miacute mis caacutemaras de traacutefico no son las que se usan para multar por exceso de velocidad o algo asiacute Mi sistema estaba desti-nado suavizar el flujo de traacutefico fijando los controles oacutepti-mos de las sentildeales de traacutefico Anteriormente usaba un PC industrial para ejecutar mi software de reconocimiento de imaacutegenes Ahora uso la familia de dispositivos ODROID para esta cuestioacuten

iquestQueacute te atrajo de la plataforma ODROID En 2012 useacute Google para buscar una plataforma que

fuera muy compacta y al mismo tiempo potente para que cubriera mis necesidades que resultoacute ser la placa

Por favor haacuteblanos un poco sobre tiSoy ingeniero de electroacutenica y software en Rusia desde

hace 47 antildeos Naciacute en Siberia y tras terminar la escuela me mudeacute a Moscuacute para estudiar en la universidad Ser estudi-ante en el Instituto de Aviacioacuten de Moscuacute (MAI) fue una experiencia increiacuteble probablemente la mejor de mi vida A principios de los 90 llegoacute a Rusia la era de los microordena-dores soliacutea jugar a un juego de saltos en una CPU z80 y el i486 Tras finalizar mis estudios universitarios y de posgrado me convertiacute en ingeniero Trabajeacute en unos cuantos puestos de trabajo para diferentes empresas y finalmente decidiacute em-prender mi propio negocio En 2006 puse en marcha una iniciativa para crear sistemas de recuento del traacutefico de au-tomoacuteviles Estoy casado y tengo una hija de 21 antildeos llamada Lena que trabaja como enfermera Mi esposa Nadezhda es disentildeadora de vestuario de produccioacuten pero ahora trabaja como disentildeadora web Ella es aficionada a la fotografiacutea digi-tal y le encanta su caacutemara reacuteflex digital

COnOCIEnDO un ODROIDIAnvIACHESLAv ALEKSEEveditado por rob roy (robroy)

CONOCIENDO UN ODROIDIAN

Viacheslav disfruta tocando la guitarra y escuchando muacutesica

1995 en el campus MAi probando uno de los primeros equipos Vr comerciales del mundo que funcionaba a 640x480 a 30fps Utiliz-aba un sensor magneacutetico en la nuca para la posicioacuten de la cabeza la mejor broma que se podiacutea gastar a alguien era colocar un imaacuten cerca de la espalda y sacudirlo iexcllos gritos estaban garantizados cuando el mundo en 3D daba vueltas sin cesar

ODROID MAGAZINE 32

ODROID-X2 Con sus cuatro nuacutecleos funcionando a 17 GHz calculaba con facilidad los algoritmos de reconteo del traacutefico de automoacuteviles Maacutes tarde cambieacute al U3 y el XU4

iquestCuaacutel es tu ODROID favorito y por queacuteDe momento mi favorito es el XU4 Mi sistema estaacute

basado en el tratamiento de fotogramas de video en tiempo real por lo que el bus USB 30 del XU4 es bastante bueno para una caacutemara con una interfaz de captura de viacutedeo Para mi sistema es muy importante tener una buena conexioacuten entre la caacutemara de viacutedeo y la CPU Probablemente tendreacute que echar un vistazo a las interfaces de nivel inferior como MIPI CSI-2 que por desgracia estaacuten ausente en el XU4 Recientemente he estado aprendiendo como usar la caacute-mara oCam GS BW La caacutemara es buena en siacute misma pero para un uso industrial al aire libre tengo que implementar un software de control de exposicioacuten automaacutetica y posible-mente de control de apertura de la lente que todaviacutea estaacute en estudio

MEET AN ODROIDIAN

Una vieja joya el mini ordenador Nixdorf

An old gem the Nixdorf mini computer

CONOCIENDO UN ODROIDIAN

iquestQueacute aficiones e intereses tienes aparte de los ordenadoresDisfruto conduciendo y leyendo sobre coches y viendo

los campeonatos de carreras de F1 Tambieacuten me gusta via-jar pescar escuchar muacutesica y tocar la guitarra Tengo un gato siberiano llamado Leia y soy fan de Star Wars

iquestQueacute consejo le dariacuteas a alguien que quiere aprender maacutes sobre la programacioacuten

Hacer software es algo increiacuteble y miacutestico Es una fusioacuten de arte y tecnologiacutea Nada te inspira maacutes que tu aplicacioacuten cuando empieza a cobrar vida Sin embargo siempre estaacute ahiacute el otro lado de la Fuerza Estar listo para instruirte inc-esantemente El desarrollo de software es una de las activi-dades que cambia maacutes raacutepido Si tienes pensado dejar de hacer software en uno o dos antildeos puede dejar de aprender ahora El conocimiento se volveraacute anticuado en un par de antildeos maacutes o menos Para estar en lo maacutes alto siempre tienes que correr Es similar a la cancioacutenrdquoRun like Hellrdquo de Pink Floyd Si estaacutes listo para vivir de esta forma seguro que tendraacutes eacutexito

ODROID MAGAZINE 33

Page 15: Estación ARCADE · gias de marketing, administración de medios sociales y producción multimedia impresa, web, vídeo y cine. Ges-tionando múltiples cuentas con agencias y productores

tePi necesitan estar conectados a otros distintos en el ODROID-C2 porque parece haber un conflicto La interfaz UART ocupa estos pines y el estado por defecto del ODROID (1=high en Pin 8) no es lo que espera la RemotePi (GPIO debe entrar en el valor por defecto 0=low para cortar la energiacutea tras el apagado) Pero puesto que necesitas utilizar cables de todos modos para conectar la Remot-ePi esto no supondraacute ninguacuten problema ya que simplemente puedes reconectar los cables a otros pines GPIO

Como evitamos el circuito de ali-mentacioacuten del ODROID encendieacutendo-lo a traveacutes de GPIO tambieacuten pasamos por alto la proteccioacuten ante subidas de tensioacuten 2526A del dispositivo pero no te preocupes La RemotePi tambieacuten tiene proteccioacuten ante subidas de tensioacuten que deberiacutea coincidir con el mismo val-or que en el caso de la RemotePi board para la Raspberry Pi 3 Sin embargo la RemotePi para la Raspberry Pi 2 es de soacutelo 2A Esto estaacute bien porque el valor es menor a los 26A del ODROID de modo el polyfuse de la RemotePi se ac-tivariacutea antes si conectas demasiados dis-

La RemotePi board (httpbitly2l8JcWU) que convierte cu-alquier mando a distancia en un

interruptor de encendido para tu orde-nador de placa reducida puede ser com-patible con el ODROIDC2 si sigues esta guiacutea Si utilizas tu dispositivo como centro multimedia esta placa te propor-cionara un receptor de infrarrojos y un circuito de alimentacioacuten asiacute como un botoacuten de encendido Puedes encender y apagar tu ODROID completamente a traveacutes de una sentildeal infrarrojos (IR) y simplemente presionar el botoacuten de en-cendido para apagarlo y reiniciarlo con seguridad La placa RemotePi es respon-sable del modo espera que absorbe una miacutenima energiacutea mientras el ODROID estaacute completamente apagado Por uacutel-timo la placa alimenta tu dispositivo a traveacutes de GPIO lo cual requiere un cable microUSB para conectarlo a la Re-motePi en lugar de utilizar un adaptador de corriente normal

Configuracioacuten de hardware

Puesto que la RemotePi estaba pen-sada originalmente para la Raspberry Pi 2 necesitaraacutes utilizar cables adiciona-les en lugar de colocarla justamente en cima del C2 para evitar interferir con el disipador de calor asiacute que debes re-cablear algunos pines Es necesario utili-zar cables con el diaacutemetro adecuado para los pines de 5V y puesta a tierra ya que la corriente podriacutea estar entre los 2A y 26A dependiendo de cuaacutentos dispositi-vos USB conectes a tu dispositivo

Los pines GPIO 8 y 10 de la Remo-

positivos no alimentados de forma exter-na que no es una buena idea en un SBC al fin al cabo No obstante debido a esta diferencia de amperaje una RemotePi para la Raspberry Pi 3 seriacutea la mejor op-cioacuten para este proyecto

Como resultado del nuevo cableado el firmware de RemotePi ya no se puede configurar de forma normal aunque nunca he usado esta funcioacuten Si fuera necesario configurar o actualizar el firm-ware necesitaraacutes volver a conectar los pines 8 y 10 de la RemotePi a los pines 8 y 10 del ODROID durante la actu-alizacioacuten del firmware y luego deshacer los cambios una vez que la actualizacioacuten haya finalizado Otra posibilidad es simplemente conectar una Raspberry Pi para actualizar el firmware Esto suena a un montoacuten de problemas pero en re-alidad simplemente es extender la con-exioacuten del cabezal y cambiar una liacutenea en el script principal y dos liacuteneas en otro script opcional si haces uso de ello

Re-cableando laconexioacuten GPIO

Dado que la RemotePi estaacute disentildeada

REMOTEPI BOARD PARA EL ODROID-C2por inifity85

REMOTEPI

figura 1 - remotepi board

ODROID MAGAZINE 15

ergiacutea completamenteIrswitchsh (solo cambia el script

original de MSL Digital de GPIOpin1 = 14 a GPIOpin1 = 225)

binbash

prevent restarting XBMC at

shutdown This is only used for

OpenElec before V5

LOCKDIR=rdquovarlockrdquo

LOCKFILE=rdquoxbmcdisabledrdquo

this is the GPIO pin receiving

the shut-down signal

Raspberry Pi pin8 GPIOpin1=14

Odroid-C2 pin26 GPIOpin1=225

GPIOpin1=225

functions

add_omit_pids()

omit_pids=rdquo$omit_pids -o $1rdquo

safe_shutdown ()

for OpenElec before V5

touch ldquo$LOCKDIR$LOCKFILErdquo

for OpenElec V5 and later

systemctl stop kodi

add_omit_pids $(pidof connmand)

add_omit_pids $(pidof dbus-dae-

mon)

killall5 -15 $omit_pids

for seq in `seq 1 10` do

usleep 500000

clear gt devtty1

killall5 -18 $omit_pids || break

done

sync

umount -a gtdevnull 2gtamp1

poweroff -f

echo ldquo$GPIOpin1rdquo gt sysclass

gpioexport

echo ldquoinrdquo gt sysclassgpio

gpio$GPIOpin1direction

while true do

sleep 1

power=$(cat sysclassgpio

gpio$GPIOpin1value)

if [ $power = 0 ] then

echo ldquooutrdquo gt sysclassgpio

gpio$GPIOpin1direction

echo ldquo1rdquo gt sysclassgpio

una carcasa personalizada de modo que el receptor integrado podriacutea estar oculto y no ser uacutetil En ese caso puedes desac-tivar el IR del ODROID en favor del re-ceptor externo GPIO-IR en la RemotePi y conectar el pin 12 Tienes disponible maacutes informacioacuten sobre el cambio al receptor GPIOIR en LibreELEC en httpbitly2lpDl27

Scripts de apagado para LibreELEC

Los dos scripts tratados a continu-acioacuten pueden descargarse desde la paacutegina de soporte de MSL Digital Solutions en httpbitly2kMxyVG En esta paacutegina tambieacuten encontraras una guiacutea para utili-zar estos scripts en otros sistemas opera-tivos como Volumio y RuneAudio

El script irswitchsh se usa para el apagado seguro a traveacutes de sistema In-frarrojos Tras pulsar el correspondiente botoacuten el sistema se apagaraacute de forma se-gura luego RemotePi esperaraacute a que el GPIO225 alcance el estado 0 (low) que aparece tras el cierre exitoso del sistema Finalmente cortaraacute la energiacutea

El script shutdownsh se usa para el apagado seguro a traveacutes de la interfaz del programa o script Despueacutes de navegar hasta el botoacuten de apagado en la GUI el sistema se apagaraacute de forma segura luego RemotePi esperaraacute a que el GPIO225 alcance el estado 0 (low) que apareceraacute tras apagarse el sistema de forma adec-uada y segura Finalmente cortaraacute la en-

originalmente para una Raspberry Pi desgraciadamente no es soacutelo enchufar y usar Necesitaraacutes volver a cablear dos pines usando los cables de todos los pines tal y como se muestra en la Figura 2 Re-cablea el pin 8 de la RemotePi al pin 26 del ODROID-C2 y el pin 10 de la RemotePi al pin 7 del ODROID-C2

Si no quieres utilizar el receptor IR de la RemotePi para el mando a distan-cia de LibreELEC puedes dejar desco-nectado el pin 12 La placa continuaraacute encendieacutendose y apagaacutendose a traveacutes del comando de control remoto IR pero el control de la GUI de LibreELEC seraacute asumido por el receptor de infrarrojos integrado en el ODROID Sin embargo si has comprado una RemotePi con un receptor IR y un LED externo es posible que hayas decidido colocarla dentro de

REMOTEPI

figura 3 - la remotepi ha sido recableada y montada en una carcasa personalizada

figura 2 - re-cableado Gpio

ODROID MAGAZINE 16

Centro Multimedia por ejemplo Esos comandos de apagado se equiparaacuten a eventos internos similar a cuando nave-gas por el menuacute de apagado de Kodi Sin utilizar este segundo script el sistema se cerraraacute con seguridad pero la placa Re-motePi no recibiriacutea ninguna indicacioacuten para monitorizar el GPIO225 de modo que no cortariacutea la energiacutea tras apagarse el sistema correctamente

Usando el receptor IR de la RemotePi

Si deseas utilizar el receptor IR de la RemotePi en lugar del receptor IR ODROID integrado tendraacutes que des-activar el sistema IR integrado y activar el receptor IR GPIO Para hacer esto en Ubuntu puede consultar el artiacuteculo de la Wiki de Hardkernel en httpbitly2l8KrWg Para Libre-ELEC echa un vistazo a mi mini-guiacutea en httpbitly2lLKj2A Para preguntas comentari-os o sugerencias visita el hilo original en httpbitly2mgFGKk

gpio$GPIOpin1value

sleep 3

safe_shutdown

fi

done

Shutdownsh (solo cambia GPIOpin =15 a GPIOpin =249 y GPIOpin1 =14 a GPIOpin1 =225)

binbash

if [ ldquo$1rdquo = ldquorebootrdquo ] then

Raspberry Pi pin10 GPIOpin=15

Odroid-C2 pin7 GPIOpin=249

GPIOpin=249

Raspberry Pi pin8 GPIOpin1=14

Odroid-C2 pin26 GPIOpin1=225

GPIOpin1=225

echo ldquo$GPIOpinrdquo gt sysclass

gpioexport

execute shutdown sequence on

pin

echo ldquooutrdquo gt sysclassgpio

gpio$GPIOpindirection

echo ldquo1rdquo gt sysclassgpio

gpio$GPIOpinvalue

usleep 125000

echo ldquo0rdquo gt sysclassgpio

gpio$GPIOpinvalue

usleep 200000

echo ldquo1rdquo gt sysclassgpio

gpio$GPIOpinvalue

usleep 400000

echo ldquo0rdquo gt sysclassgpio

gpio$GPIOpinvalue

set GPIO 14 high to feedback

shutdown to RemotePi Board

because the irswitchsh has

already been terminated

echo ldquo$GPIOpin1rdquo gt sysclass

gpioexport

echo ldquooutrdquo gt sysclassgpio

gpio$GPIOpin1direction

echo ldquo1rdquo gt sysclassgpio

gpio$GPIOpin1value

usleep 4000000

fi

El script shutdownsh es uacutetil si a vec-es usas las aplicaciones remotas Android Yatse o Kore o hotkeys para apagar tu

REMOTEPI

ODROID Talk Subreddit

httpwwwredditcomrodroid

ODROID Magazine

estaacute en Reddit

ODROID MAGAZINE 17

El HiFi Shield 2 (39$ httpbitly2lHSlZJ) es un Con-vertidor Digital a Analoacutegico de Alta definicioacuten (DAC) para el ODROID-C2 y el ODROID-C1+ Se trata de

una placa de sonido especial para el ODROID-C2 y C1 + que estaacute optimizada para mejorar la calidad de reproduccioacuten del sonido Ofrece un sonido muy bien equilibrado consistente intenso amplio y muy bien dimensionado por niveles Hemos analizado la calidad de audio de la salida HiFi Shield 2 DAC con un equipo estaacutendar de la industria del sonido llamado Au-dio Precision Audio Precision es un analizador de audio de alto rendimiento optimizado para la produccioacuten de audio digital

Usando el chip DAC PCM5242 de uacuteltima generacioacuten de Texas Instrument conocido como Burr-Brown el HiFi Shield 2 soporta formatos de audio de 16 24 y 32 bits con una ra-tio THD+N miacutenima (0002) y una dinaacutemica ideal (114dB +) ademaacutes de sorprendentes tasas de muestreo de 384 kHz La interfaz dedicada SPDIF soporta una definicioacuten de hasta 192kHz24bit a traveacutes de una salida oacuteptica (Toslink)

Si hacemos uso del puerto de expansioacuten I2S en el C2C1+ no es necesario ocupar un puerto USB permitiendo al usu-ario seleccionar el sistema de reproduccioacuten de audio que desee como Volumio y Debian (DietPi) para reproducir sonido HiFi

HIFI SHIELD 2

HIfI SHIELD 2EL MEJOR SOnIDO quE PODRAS COnSEGuIR En AnDROIDeditado por rob roy (robroy)

oDroiD-c2 y hifi Shield 2 Audio pb +J

primer plano de la placa con anotaciones

Distribucioacuten de los 7 pines i2S del c2c1+

la salida de audio es estaacutendar la salida de color rojo corresponde al canal de audio iz-quierdo y la salida de color blanco correspon-de al canal de audio derecho

ODROID MAGAZINE 18

Detalles

La guiacutea de configuracioacuten de UbuntuLinux para ODROID-C2 estaacute disponible en httpbitly2brrGdG y para ODROID-C1+ en httpbitly2lI7AC7 El sistema operativo oficial Volumio 2 se puede descargar desde httpbitly2kOJNAV y la imagen DietPi basada en Debian se encuentra en httpbitly2ls45yM Puede ver los esquemas en httpbitly2mnukV4

Diagrama por bloques del hifi Shield2

Caracteriacutesticasbull El control de volumen a traveacutes de la interfaz

i2c es una gran caracteriacutestica para mantener una buena calidad del sonido con varios voluacutemenes de salida de audio

bull Los puertos de salida incluyen terminales esteacute-reo rcA chapados en oro

bull La fuente de alimentacioacuten tiene habilitado un regulador de interferencias de ruido ultra-bajo lo cual reduce el ruido de la fuente de alimentacioacuten y aumenta en gran medida el ratio sentildealruido

bull La interfaz I2S permite la descodificacioacuten di-recta de la entrada digital a la salida analoacutegica utili-zando la sincronizacioacuten del reloj maestro

bull La superficie de la PCB estaacute chapada en oro so-bre 2 onzas de cobre lo cual garantiza la continui-dad de la sentildeal y reduce la reflexioacuten y deflacioacuten de la sentildeal

bull Dispone de almohadillas soldadas a la salida de audio balanceada (sentildeal diferencial)

bull La interfaz SPDIF dedicada es nueva admite una definicioacuten de hasta 192khz24bit a traveacutes de una nueva salida oacuteptica (toslink)

bull Este HiFi shield no es compatible con Android y hardkernel no tiene planes para hacerlo compatible y asiacute poder habilitar el controlador i2S en el Kernel y el hAl de Android

El Manual de usuario del ODROID-XU4 disponible en httpbitly1U9Q8yg ha sido revisado hace poco para incluir algunos de los perifeacutericos maacutes recientes como

la Expansion Board SmartPower2 y oCam Puesto que ahora Hardkernel tambieacuten ofrece Ubuntu 1604 todos los ejemplos de coacutedigo se han actualizado para que sean compatibles con el nuevo sistema operativo Si tiene comentarios preguntas o sugerencias visita el hilo de los foros ODROID en httpbitly1RykBrT

MAnuAL Xu4ACTuALIzADOREvISADO PARA uBunTu 1604 y LOS PERIfERICOS MAS RECIEnTESeditado por rob roy (robroy)

MANUAL XU4

el manual del oDroiD-xU4 incluye informacioacuten detallada de los diferentes sistemas operativos software y perifeacutericos disponibles para el oDroiD-xU4

ODROID MAGAZINE 19

El DevOps es complicado Los grandes proyectos de soft-ware como Mesos y Kubernetes desarrollan equipos como los que se encuentran en la mayoriacutea de las empre-

sas y organizaciones tecnoloacutegicas como CoreOS con la finali-dad de ayudar a los desarrolladores a poner sus aplicaciones en funcionamiento Sin embargo iquestcuaacutel seriacutea una buena solucioacuten para un desarrollador en solitario o una pequentildea red domeacutesti-ca iquestCoacutemo podemos usar el coacutedigo a nivel de infraestructura

Uso un portaacutetil Macintosh OSX para desarrollo pero para las aplicaciones de larga duracioacuten o aplicaciones que se ejecu-tan por la noche necesito un entorno remoto siempre activo ya que mi portaacutetil estaraacute fuera de liacutenea o en el tren conmigo mientras voy y vengo del trabajo Tiene su sentido no utilizar el ordenador como un entorno para la puesta en funcionamiento de aplicaciones

El ODROID-XU4 es un ordenador ideal para un entor-no de implementacioacuten remoto ya que es econoacutemico flexible cuenta con excelentes especificaciones teacutecnicas y puede ejecutar Linux Este artiacuteculo tiene por objetivo explicar coacutemo almacenar coacutedigo de implementacioacuten en tu repositorio de proyectos asiacute como automatizar las implementaciones y ejecuciones

Arch LinuxArch Linux es una distribucioacuten de Linux gratuita de coacutedigo

abierto que fue lanzada en 2002 Estaacute centrada en la elegancia la integridad del coacutedigo el minimalismo y la simplicidad y cuenta con que el usuario haga un esfuerzo en comprender el funcionamiento del sistema Arch Linux utiliza en particular un modelo de revisioacuten continua de modo que todo lo que se necesitas para conseguir el software del sistema maacutes reciente es actualizar el sistema de forma perioacutedica

Arch Linux puede ser algo difiacutecil de asimilar ya que uti-liza herramientas diferentes a las de una distribucioacuten Debian El gestor de paquetes se activa a traveacutes de ldquopacmanrdquo en lugar de ldquoapt-getrdquo y existe un gestor complementario de paquetes muy popular llamado ldquoyaourtrdquo Muchos de los servicios o her-ramientas maacutes comunes no se instalan por defecto

Arch Linux esta hecho principalmente para procesadores x86 pero un proyecto llamado Arch Linux ARM (ALARM) tiene una distribucioacuten ARM de Arch Linux para arquitectu-ras AArch64 ARMv8 y ARMv7 Hardkernel el fabricante de ODROIDs es de hecho un patrocinador del proyecto Arch Linux ARM

HOME DATA CENTER

HOME DATA CEnTERIMPLEMEnTACIOn DEL CODIGO COn ARCHLInuXpor John Skilbeck

Configurar la redDeberaacutes asignarle a tu dispositivo una direccioacuten IP LAN

DHCP reservada y en el mejor de los casos un nombre de host que se propagaraacute a lo largo de tu red por medio del servidor DNS de tu router De esta forma en nuestro entorno de desar-rollolocal podremos utilizar un nombre de host para resolver siempre el entorno de implementacioacutenremoto

Por ejemplo en mi red reservo el 192168249 a la direc-cioacuten MAC de mi ODROID Tambieacuten configuro una entrada DNS que asigna a esa direccioacuten IP ldquoodroidrdquo Utilizar un firm-ware personalizado en el router como Tomato USB o DD-WRT lo hace extremadamente faacutecil ya que esos firmwares convierten tu router en un pequentildeo ordenador Linux con una aplicacioacuten web GUI muy pulida aunque su implementacioacuten estaacute fuera del alcance de este artiacuteculo Si operas con subredes aseguacuterate dirigir el puerto hacia el puerto externo que se asigna al puerto SSH del dispositivo odroid ya que Git se ejecuta a traveacutes de SSH

Configurar el proyectoLoacutegicamente desearaacutes estandarizar el flujo de trabajo de la

implementacioacuten Esto haraacute que el trabajo con proyectos sea

el home data center de John es una auteacutentica obra de arte

ODROID MAGAZINE 20

extremadamente faacutecil y eliminas muchos de los cambios de contexto mental que utilizas cuando trabaja en varios proyec-tos Crearemos una carpeta para alojar todos nuestros archivos relacionados con implementaciones Coloca los archivos eje-cutables en ldquodeploybinrdquo y cualquier archivo cron en ldquodeploytasksrdquo (maacutes informacioacuten sobre esta cuestioacuten maacutes adelante)

Navega hasta el directorio del proyecto en una ventana de Terminal y luego escribe los siguientes comandos

$ mkdir -p deploybin

$ mkdir -p deploytasks

$ cd deploybin ampamp touch run-job ampamp

chmod u+x run-job ampamp cd -

$ cd deploytasks ampamp touch crontab

Tambieacuten puede estandarizar doacutende colocar tu coacutedigo fuente De esta forma le seraacute maacutes faacutecil a otras personas ver coacutemo se or-ganiza tu proyecto y conocer queacute es el coacutedigo fuente y queacute no

$ mkdir src

$ cd src ampamp (place source code here ie python core

py clojure coreclj nodejs appjs)

Simplificar los puntos de entradaIniciar una aplicacioacuten puede resultar algo confuso con todos

los comandos que se pueden ejecutar en diferentes lenguajes Por ejemplo puede usar Java ldquojava -jar [my-jar] jarrdquo o python ldquopython my-apppyrdquo y tu aplicacioacuten tambieacuten puede necesitar varios argumentos Todo esto deberiacutea simplificarse y resumirse en un archivo ldquodeploybinrun-jobrdquo

binsh

set -e

CMD=rdquosrcduckrdquo

exec $CMD $

Crear el archivo cronArch Linux no viene con un cliente o demonio cron por

defecto Instaacutelalo con ldquosudo pacman -Syu cronierdquo Utilizando cron puede ejecutar comandos en intervalos de tiempo espe-cificados haciendo uso de la sintaxis especial de cron Normal-mente se almacena en el archivo crontab del usuario al que puedes acceder con ldquocrontab -erdquo Sin embargo esto es demasi-ado manual y queremos usar coacutedigo como infraestructura Cron tambieacuten tiene algunos subdirectorios muy uacutetiles en ldquoetccronrdquo como ldquoetccrondailyrdquo yrdquoetccronhourly ldquo si co-locamos los archivos aquiacute eacutestos se ejecutaraacuten en los intervalos especificados

Revisa el archivo de ldquodeploytaskscrontabrdquo que colocare-mos en ldquoetccrondrdquo que se crea automaacuteticamente con nuestro script ldquoposttreceiverdquo

variables

SHELL=binbash

PATH=binusrbinusrlocalbinusrsbinusrlo-

calsbin

MAILTO=[your-email-address]gmailcom

cmd=rdquodeploybinrun-jobrdquo

app_dir=rdquohomeskilbjodeployappduckdnsrdquo

jobs

5 skilbjo cd ldquo$app_dirrdquo $cmd gtdevnull

Aquiacute tienes el esquema general de la estructura de un simple proyecto El uacutenico ejecutable del proyecto es un uacutenico script shell ubicado en ldquosrcrdquo

$ tree

READMEmd

deploy

bin

post-receive

run-job

tasks

crontab

src

duck

4 directories 5 files

GitPrimero queremos agregar una URL remota a nuestro

proyecto en nuestro entorno local

$ git remote add odroid sshodroid~deploygit

duckdnsgit

Ten en cuenta que dependiendo de la topologiacutea de tu red es posible que tenga que modificar esta url Si no puedes asignar nombres de host la URL de git se veriacutea asiacute donde 192168249 es la direccioacuten IP LAN de tu dispositivo

$ ssh192168249~deploygitduckdnsgit

Si tienes un usuario en tu entorno ODROID distinto al que tienes en tu entorno de desarrollo la url se veriacutea asiacute donde ldquoskilbjordquo es tu nombre de usuario

$ sshskilbjoodroid~deploygitduckdnsgit

Si tu servidor remoto estaacute en una subred diferente y tienes redireccionados los puertos tu url tendriacutea este aspecto donde

HOME DATA CENTER

ODROID MAGAZINE 21

ldquo2222rdquo es tu puerto externo

$ ssh192168122222~deploygitduckdnsgit

En el directorio principal de tu entorno remoto crea una carpeta llamada ldquo~deployrdquo con dos subcarpetas ldquo~deployapprdquo y ldquo~deploygitrdquo Los subdirectorios de ldquo~deploygitrdquo seraacuten los puntos finales de nuestros desarrollos y con un hook ejecutaraacuten comandos de implementacioacuten en los subdirectorios de ldquo~ deployapprdquo

Primero navega hasta el directorio principal del entorno re-moto y a continuacioacuten escribe los siguientes comandos

$ mkdir -p ~deployapp

$ mkdir -p ~deploygit

$ mkdir -p ~deploygitduckdnsgit

$ mkdir -p ~deployappduckdns

Ahora en ldquo~ deploygitduckdnsgithooksrdquo crea un archi-vo ejecutable llamado ldquopost-receiverdquo que se activaraacute con cada accioacuten hacia el punto final

$ cd ~deployappgitduckdnsgithooks

$ touch post-receive ampamp chmod u+x post-receive

$ vim post-receive

Rellena el ejecutable con lo siguiente en el directorio ldquo~deploygitduckdnsgithooksrdquo del entorno remoto

usrbinenv bash

set -eou pipefail

user=$(whoami)

dir=rdquohome$userdeployapprdquo

app=$(basename $(pwd) | sed -e lsquosgitrsquo)

deploy_dir=rdquo$dir$apprdquo

cron_dir=rdquoetccrondrdquo

GIT_WORK_TREE=rdquo$deploy_dirrdquo git checkout -f

cd ldquo$deploy_dirrdquo

build steps here

case ldquo$userrdquo in

(skilbjo) sudo cp deploytaskscrontab ldquo$cron_

dir$apprdquo

esac

you can also do project-specific build steps in

this section like install

dependencies (ie npm install) compile source

code (ie lein uberjar)

as well as if a long-lived app run commands as

well (ie java -jar my_jarjar)

echo ldquoall donerdquo

exit 0

ImplementacioacutenAhora estamos listos para implementar ya que nuestro en-

torno local estaacute configurado para alcanzar el punto final del servidor de implementacioacuten nuestro entorno remoto estaacute con-figurado para recibir la notificacioacuten y revisar el coacutedigo fuente ejecutar cualquier paso de compilacioacuten y colocar una tarea en el directorio cron del sistema para su lanzamiento Ponto todo en praacutectica con el siguiente comando en el directorio del proyecto del entorno local

$ git push odroid

Ademaacutes para ver coacutemo se ha implementado todo esto en un proyecto de ejemplo visita httpbitly2lthYKW

Pasos finalesSe puede antildeadir al flujo anterior algunas caracteriacutesticas

como son muacuteltiples entornos ya sea con muacuteltiples ODROIDs o con un solo ODROID trataacutendolo como un servidor de ser-vicio Esto se puede hacer con subdirectorios bajo ldquo~deployrdquo como ldquo~deploystagingappmy_apprdquo o ldquo~ deployproduc-tionappmy_apprdquo

Ademaacutes podriacuteas antildeadir un servicio de integracioacuten conti-nua como CircleCI que ejecutariacutea una suite de testeo desde cada desarrollo a GitHub y si tiene eacutexito compila una imagen Docker No podriacuteas entonces tener un archivo en el entorno remoto que verificariacutea una imagen de un repositorio Docker y la ejecutariacutea en un intervalo especificado Esto es lo que hacen muchos de los softwares DevOps distribuidos como Mesos y Kubernetes pero en un entorno mucho maacutes rico que BASH y Linux

Referencias

Artiacuteculo Wikipedia de Arch linux httpbitly2l71ADKWebsite Arch linux ArM httpsarchlinuxarmorgArtiacuteculo que leiacute hace unos tres antildeos y que me inspiroacute para escribir mi propio artiacuteculo httpbitly2m5JAct

HOME DATA CENTER

ODROID MAGAZINE 22

odroid ARCADE BOXLA EXPERIEnCIA PERfECTA COn TuS JuEGOS ARCADE fAvORITOSpor brian Kim charles park y John lee

ARCADE BOX

Los ODROIDs tienen mejor rendimiento que las placas de la competencia especialmente en lo que respecta al renderizado de video lo que significa que

las placas ODROID son ideales para jugar lo cual hacen muchos usuarios de ODROID Ya hay disponibles varios sistemas operativos de plataforma de juegos como Lakka (httpbitly1NO8BBC) y ODROID GameStation Tur-bo (httpbitly1ASFO5O) Para disfrutar auacuten maacutes de nuestras sesiones de juegos creamos nuestra propia consola arcade con simples botones GPIO y joysticks y la llama-mos la ODROID Arcade Box Elegimos un ODROID-XU4 para este proyecto porque es el que tiene mejor rendimiento GPU de todos los dispositivos ODROID actuales En este artiacuteculo vamos a describir como hemos creado la ODROID Arcade Box

Requisitos( Figura 3 ndash )Decidimos hacer la ODROID Arcade Box usando

un MDF (tablero de fibra de densidad media) El Shifter Shield del XU4 tambieacuten es uacutetil para utilizar los pines de expansioacuten del ODROID-XU4 Los Joysticks los botones y los cables eran los componentes de entrada y se utilizoacute

Nuestro primer y simple prototipo

ODROID MAGAZINE 23

panel MDf 12t2eA 600x2202eA 600x752eA 220x75taladroplegadoraDesmontadorcinta meacutetricaNavaja multiusoAlicates de punta largaoDroiD-xU4xU4 Shifter shieldSMpS (fuete Alimentacioacuten)

extendedores hDMi USb ethernetenchufe de alimentacioacuten y Switchbisagras 2eAreceptor de puertacaucho 4eAtornillospulsadores 19eAJoystick 2eAcablesterminales

una SMPS (Fuente de alimentacioacuten conmutada) como fuente de alimentacioacuten Las herramientas y las piezas utilizadas las tienes en esta paacutegina

La ODROID Arcade Box necesita un total de 27 entradas (19 entradas para botones y 8 entra-das para joysticks) Las 24 entradas GPIO digi-tales del ODROID-XU4 no son suficientes para las 27 entradas de modo que creamos dos puertos ADC adicionales para los tres botones que nos fal-taban Los valores de entrada ADC se basan en el voltaje de entrada y los valores de entrada digital y analoacutegica se procesan en el demonio GPIO que se describe a continuacioacuten

Disentildeo y montajeLos paneles de la ODROID Arcade Box deben

ser disentildeados y fabricados para que los botones y joysticks esteacuten bien colocados Elegimos MDF 12T teniendo en cuenta el precio y la durabilidad El dise-ntildeo se puede hacer con cualquier herramienta CAD como Google Sketch o SolidWorks Aunque existen muchas plantillas de disentildeo para los paneles de joypad decidimos elegir un disentildeo arcade estaacutendar japoneacutes

El primer paso del montaje es unir la placa al panel MDF Este paso fue faacutecil aunque nos llevo maacutes tiempo que el resto Despueacutes insertamos los joysticks la toma de corri-ente el interruptor y los botones en el panel MDF superior Los conectores HDMI Ethernet y USB se colocaron en la parte trasera del panel MDF El siguiente paso fue montar cada panel MDF usando un taladro para hacer los agujeros luego con tornillos los sujetamos

El uacuteltimo paso del montaje de la ODROID Arcade Box es conectar por cable los pines de expansioacuten del ODROID-XU4 a los componentes de entrada En este proyecto dise-ntildeamos las entradas GPIO externas tal y como se muestra en la paacutegina 26 Los botones Select y Temp estaacuten conecta-dos a puertos de expansioacuten ADC

Configuracion del softwareDesarrollamos un nuevo demonio GPIO llamado gpio_

keyd (httpbitly2ljOZKg) Este demonio es capaz de asignar entradas GPIO y eventos claves usando uinput y wiringPi una libreriacutea de acceso GPIO basada en pines Estaacute disentildeada para que le sea familiar a quiene ya ha utilizado el sistema de cableado Arduino Aunque la blibreriacutea wiring-Pi upstream soacutelo admite Raspberry Pi Hardkernel ofrece una versioacuten de wiringPi para ODROIDs en su repositorio GitHub (httpbitly1Eq3UpF) El moacutedulo uinput es un moacutedulo del kernel de Linux que gestiona el subsistema de entrada del usuario Se puede utilizar para crear y manejar dispositivos de entrada desde una aplicacioacuten

ARCADE BOX

herramientas compentes y lo que hay justamente debajo

esquema de los puertos de expansioacuten

ODROID MAGAZINE 24

Elegimos ODROID GameStation Turbo (httpbitly1ASFO5O) como plataforma de software para nuestra ODROID Arcade Box que tiene integrado uinput Debes asegurarte de que el archivo de dispositivo uinput existe en el sistema operativo elegido porque algunos no tienen dispositivos uinput

$ ls devuinput

Si tu sistema operativo no tiene un archivo de disposi-tivo devuinput entonces seraacute necesario recompilar e in-stalar un nuevo kernel con la opcioacuten de configuracioacuten IN-PUT_UINPUT habilitada La paacutegina Wiki en httpbitly1YIToBI describe coacutemo compilar e instalar la imagen del kernel a partir del coacutedigo fuente

$ make menuconfig

Device Drivers

-gt Input device support

-gt Generic input layer

-gt Miscellaneous device

-gt User level driver support ltgt

Ten en cuenta que wiringPi debe instalarse antes de in-stalar gpio_keyd En la imagen GameStation de ODROID los comandos sudo deben ejecutarse como root porque la cuenta ldquoodroidrdquo no estaacute designada como usuario sudo

$ git clone httpsgithubcomhardkernelwiringPi

git

$ cd wiringPi

$ sudo build

Descarga el coacutedigo fuente gpio_keyd el cual estaacute dis-ponible en nuestro repositorio GitHub El procedimiento para compilar e instalar gpio_keyd es muy simple

$ git clone httpsgithubcombkrepogpio_keydgit

$ cd gpio_keyd

$ make

$ sudo make install

El script gpio_keyd hace referencia a etcgpio_keydconf como el predeterminado para la informacioacuten de los botones y GPIO El archivo de configuracioacuten fue modi-ficado para las 27 entradas de la ODROID Arcade Box Algunas botones ya se utilizaban en el emulador de juego de modo que tuvimos que cambiar la configuracioacuten del emulador para evitar conflictos entre los botones de en-trada GPIO y el emulador Ten en cuenta que el campo ltGPIO pingt en el archivo de configuracioacuten hace referen-

ARCADE BOX

plano del disentildeo de joypad

la oDroiD Arcade box montada

ODROID MAGAZINE 25

cia al nuacutemero wiringPi no al GPIO y al nuacutemero de pin (httpbitly2lbzPIB)

Ejemplo de configuracioacuten para las 27 entradas etcgpio_keydconf

Digital input ltKey codegt ltGPIO typegt ltGPIO pingt ltActive valuegt User 1KEY_LEFT digital 15 0KEY_RIGHT digital 1 0KEY_UP digital 4 0KEY_DOWN digital 16 0KEY_A digital 2 0KEY_S digital 3 0KEY_D digital 30 0KEY_F digital 21 0KEY_Z digital 8 0KEY_X digital 9 0KEY_C digital 7 0KEY_V digital 0 0 User 2KEY_BACKSLASH digital 12 0KEY_SLASH digital 13 0KEY_SEMICOLON digital 14 0KEY_LEFTBRACE digital 5 0KEY_Y digital 26 0KEY_U digital 27 0KEY_I digital 22 0KEY_O digital 23 0KEY_H digital 6 0KEY_J digital 10 0KEY_K digital 11 0KEY_L digital 31 0

Analog input ltKey codegt ltGPIO typegt ltADC portgt ltADC ac-tive valuegtKEY_B analog 0 0KEY_N analog 0 2045KEY_M analog 1 2045

To run gpio_keyd daemon at every startup is conve-nient for ODROID Arcade Box

etcinitdgpio_keyd binsh BEGIN INIT INFO

ARCADE BOX

Mapeo Gpio externo para los botones y Joysticks

cableado de la oDroiD Arcade box

ODROID MAGAZINE 26

Provides gpio_keyd Required-Start $all Required-Stop Default-Start 2 3 4 5 Default-Stop Short-Description Run usrbingpio_keyd if it ex-ist END INIT INFO

PATH=sbinusrsbinbinusrbin

libinitvarssh

liblsbinit-functions

do_start() if [ -x usrbingpio_keyd ] then usrbingpio_keyd -d ES=$ [ ldquo$VERBOSErdquo = no ] ampamp log_end_msg $ES return $ES fi

case ldquo$1rdquo in start) do_start restart|reload|force-reload) echo ldquoError argument lsquo$1rsquo not supportedrdquo gtamp2 exit 3 stop) killall gpio_keyd exit 0 ) echo ldquoUsage $0 start|stoprdquo gtamp2 exit 3 Esac

$ sudo chmod +x etcinitdgpio_keyd$ sudo update-rcd gpio_keyd defaults$ sudo reboot

En los comandos anteriores el script gpio_keyd se ejecuta como un demonio uti-lizando la opcioacuten ldquo-drdquo El uso de gpio_keyd se puede comprobar con la opcioacuten ldquo-hrdquo Comprue-ba de nuevo las teclas usadas por el juego o el emulador despueacutes fija la configuracioacuten del gpio_ keyd correctamente Es ahora cuando estaacutes listo para jugar y disfrutar de tus juegos con tu nueva ODROID Arcade Box

ARCADE BOX

the King of fighters 98 John vs brian

ODROID MAGAZINE 27

En este artiacuteculo analizaremos las diferentes formas que existen para ob-tener los datos del uso de la red

ConfiguracioacutenLa forma normal de analizar los datos

de traacutefico de la red es mediante el uso de datos a traveacutes de las aplicaciones de configuracioacuten del sistema tal y como se muestra en la figura 1

El uso de datos muestra la cantidad total de traacutefico de datos entrante y sa-liente que ha sido utilizada por una apli-cacioacuten Si seleccionas la aplicacioacuten veraacute una pantalla como la que aparece en la Figura 2 que muestra informacioacuten detal-lada sobre el uso de la aplicacioacuten tanto en primer plano como de fondo

La informacioacuten que se muestra den-tro de la aplicacioacuten de Configuracioacuten se almacena en data systemnetstats que requiere acceso root Al eliminar todo lo que hay dentro de esta carpeta se resta-

Como desarrolladores queremos que nuestras aplicaciones sean eficientes y a menudo nos gus-

tariacutea saber cuaacutento ancho de banda de red estaacute utilizando nuestra aplicacioacuten Esto es muy uacutetil por varias razones

bull Para monitorizar y asegurarnos de que la aplicacioacuten es realmente la nuestra y no una aplicacioacuten que ha sido pirateada y publi-cada con diferentes nombres en Play Store

bull Para asegurarnos de que no es-tamos cogiendo ancho de banda innecesario del plan de datos del usuario

bull Para comprobar que el disposi-tivo que estamos usando no estaacute accediendo a Internet sin nuestro consentimiento

blecen las estadiacutesticas de red mostradas en esta aplicacioacuten

Estadiacutesticas de la redLa aplicacioacuten de configuracioacuten nos

puede dar una informacioacuten general so-bre las estadiacutesticas de la red de datos que es un buen comienzo pero a veces necesitamos un anaacutelisis maacutes detallado que puede hacerse a traveacutes del coman-do dumpsys Android cuenta con una poderosa herramienta llamada dumpsys que nos permite obtener una instan-taacutenea o volcado del sistema que pu-ede incluir informacioacuten sobre la red la memoria y otros componentes Lee la documentacioacuten de Android en httpbitly2kK9dep para obtener maacutes infor-macioacuten del sistema Para conseguir maacutes informacioacuten relacionada con la red nos interesa el comando

$ dumpsys netstats detail

La Figura 3 muestra un pantallazo de lo que puedes ver desde una tablet Nexus 7 que ejecuta Lollipop 511

Hay algunas cuestiones importantes para entender las estadiacutesticas

bull Las estadiacutesticas UID muestran el desglose de las aplicaciones de primer plano y de fondo

bull Uid muestra el ID de usuario de la aplicacioacuten que se puede utili-zar para relacionar eacutesta con la in-

DESARROLLO AnDROID AnALIzAnDO EL uSO DE RED DE LAS APLICACIOnESpor Nanik tolaram

DESARROLLO ANDROID

figura 1 - Uso de datos en la configuracioacuten

figura 2 - Desglose del uso de datos de la app

ODROID MAGAZINE 28

$ dumpsys package detail

Este comando te proporcionaraacute una larga lista de informacioacuten sobre los pa-quetes que estaacuten instalados en tu dis-positivo Para las estadiacutesticas de red nos interesa la seccioacuten que se muestra en la Figura 5

La seccioacuten resaltada muestra el userId que se relaciona con el uid que se mues-tra en las estadiacutesticas de red Al relacio-nar este nuacutemero sabemos el nombre del paquete de la aplicacioacuten sobre el que es-tamos leyendo las estadiacutesticas de red

Aplicacioacuten de ejemplo

La aplicacioacuten de ejemplo de este artiacute-culo se puede descargar desde httpbitly2m8WenA que muestra coacutemo etiqu-etar la conexioacuten de red desde distintas

secciones de la aplicacioacuten lo cual puede ayudar a analizar el volumen de traacutefico de datos de la aplicacioacuten La Figura 6 muestra un ejemplo de coacutemo lo vemos si utilizamos Android Device Monitor (dentro de Studio diriacutegete a Tools -gt Android -gt Android Device Monitor)

Tal y como se puede ver en el graacutefico la simple aplicacioacuten tiene 3 conexiones dife-rentes y cada una de ellas estaacute accediendo a un sitio web diferente Al etiquetarlas con

formacioacuten del paquete (que ver-emos en la seccioacuten de detalles del paquete dumpsys) con el objeto de conocer queacute aplicacioacuten utiliza estas estadiacutesticas de red

bull Las etiquetas son uacutetiles si de-sea ver la cantidad de datos que utiliza cada conexioacuten de tu apli-cacioacuten Puedes ver un ejemplo de esto en la Figura 4 que muestra que el uid 10007 tiene las siguien-tes etiquetas 0x30000401 0x30003201 0x30002804 0x10000401 y 0x30000407 Es-tas etiquetas ayudan al desarrol-lador a saber cuaacutentos datos uti-liza cada parte de la aplicacioacuten Estas estadiacutesticas de red en par-ticular estaacuten vinculada al paquete Google Framework que forma parte de Google Play Store

En el siguiente apartado veremos coacutemo escribir una aplicacioacuten etiquetando el hilo que hace la conexioacuten de red para determi-nar la cantidad de datos que se utilizan

Estadiacutesticas de paquetes

En la seccioacuten anterior analizamos el uid que aparece al ejecutar el comando dumpsys netstats Ahora necesitamos sa-ber queacute uid corresponde a la aplicacioacuten en el dispositivo y esto se hace mediante el siguiente comando

DESARROLLO ANDROID

figura 3 ndash estadiacutesticas de red con Dumpsys

figura 4 - estadiacutesticas de etiquetas UiD

figura 5 - Detalles del paquete dumpsys

figura 6 - etiquetas de red

coacutedigos diferentes podemos ver la cantidad de traacutefico que consume cada conexioacuten y esto nos ayudaraacute a ver si nuestra aplicacioacuten utiliza el ancho de banda de un modo eficiente

El coacutedigo del siguiente fragmento muestra el uso de la API TrafficStats interna Esta etiqueta API muestra el subproceso que utiliza actualmente un socket con un identificador y todo el traacute-fico que pasa por la misma conexioacuten se grabaraacute junto Asiacute es como la aplicacioacuten es capaz de agrupar las 3 conexiones diferentes Internamente Android utili-za el moacutedulo xt_qtaguid del kernel para realizar este tipo de etiquetado Tienes disponible maacutes informacioacuten en httpbitly2kU8KXB

public void getUsingNormalURLC

onnection(String urlText int

threadTag)

throws IOException

URL url = null

TrafficStats

setThreadStatsTag(threadTag)

HttpURLConnection urlConnec-

tion = getConnection(url)

try

finally

TrafficStatsclearThread-

StatsTag()

ODROID MAGAZINE 29

Disgustado te subes a tu 4x4 de dominacioacuten del mun-do un vehiacuteculo que desde fuera parece maacutes bien un viejo camioacuten de granja pero por dentro se parece maacutes

al sistema de control de un transbordador espacial porque el conductor del restaurante oriental que realiza las entrega a do-micilio estaacute enfermo Ahora tienes que ir a recoger tu propia comida ldquoQueacute rudimentariordquo piensas cuando sales de tu garaje secreto Justamente cuando vas a parar el vehiacuteculo en un stop oyes un fuerte ruido Sales y te diriges raacutepidamente a la parte posterior del 4x4 donde observas un cubo de basura Te tiras de los pelos y piensas ldquoiexclEsos basureros Neanderthales dejaron otra vez el cubo en mediordquo Ahora te toca recoger los restos de tu cena y la basura de otros

Conforme te vas alejando para hacer tus recados empiezas a pensar en coacutemo evitar este inconveniente en el futuro Varias ideas te vienen a la mente

Un sistema lidar para escanear en 3D el entorno en tiempo real y alarmas sonoras cuando sea necesarioUn brazo ciberneacutetico colocado en la parte posterior del 4x4 que procese video para detectar objetos agarrarlos y moverlosUna simple camara trasera

Empiezas a considerar la viabilidad de cada una

Muy bueno pero demasiado complicado y costosoAuacuten mejor y un proyecto propio de un cientiacutefico loco pero demasi-ado complicado y costosoya tengo dos iexclpero estaba demasiado preocupado en mis pensa-mientos para prestarles atencioacuten

Lo que necesitas es algo simple sin complicaciones y barato que haga sonar una alarma para alertarte incluso cuando estar absorto en tus pensamientos ldquoAhardquo Recuerdas haber visto un nuevo producto en ameriDroid que puede hacer precisamente esto Se trata de un microcontrolador conectado al USB que soporta hasta 6 sensores ultrasoacutenicos con simples comandos en serie (httpbitly2l26ptV) ldquoiexclPerfectordquo Piensas

Regresas a tu laboratorio subterraacuteneo con el pollo Kung Pao en la mano te apresurar a encender tus monitores entras en el sitio web ameriDroid y pides un kit ldquoUSB Ultrasonic Ranging Sensorrdquo con 6 sensores y carcasas

Vas sintiendo una sensacioacuten de alivio a medida que regresas a los 12 proyectos en lo que ya estabas trabajando a la espera de que pasen un par de diacuteas hasta que llegue tu nuevo pedido Mientras te comes tu Kung Pao dibujas un diagrama de coacutemo quieres colocar los sensores en la parte posterior de tu vehiacuteculo

Un par de diacuteas maacutes tarde el kit llega Inmediatamente em-piezas a montar el kit y los sensores en la parte posterior de tu 4x4 teniendo cuidado de usar sellador de silicona para pro-teger los sensores de la lluvia aguanieve y nieve que puedas encontrar durante tus aventuras para dominar el mundo

A continuacioacuten consultas las instrucciones proporcionadas por ameriDroid con el kit sobre coacutemo controlar y leer los sen-sores desde tu fiel ODROID-C2 y VU7 que montaste en el salpicadero para este propoacutesito

Conectando el cable USBEl cable USB suministrado debe conectarse al microcon-

trolador (la pequentildea placa de circuito con filas de pines que sobresalen) El microcontrolador tiene una fila de 4 o 6 pines

DETECTAR LA PRESEnCIACROnICAS DE un CIEnTIfICO LOCOpor bo lechnowsky

SENSOR ULTRASONICO

ODROID MAGAZINE 30

en un extremo Si tiene 6 pines ceacutentrate en los 4 pines centrales y sigue estas instrucciones

Negro - conectar a GNDrojo - conectar a VccVerde - conectar a rxi

blanco - conectar a txD

Conectando los sensoresultrasoacutenicos

En cada sensor ultrasoacutenico hay cuatro pines marcados Vcc Trig Echo Gnd Para el primer sensor ultrasoacutenico conecta el pin 2 del microcontrolador al pin ldquoTrigrdquo del sensor ultrasoacutenico Conecta el pin 3 del microcontrolador al pin ldquoEchordquo del sensor Conecte el pin ldquoVccrdquo del sensor a DC 5V (el pin ldquoVCCrdquo del microcontrolador suministra 5V) y el pin ldquoGndrdquo del sensor a una conexioacuten a tierra como por ejemplo los pines ldquoGNDrdquo del microcontrolador

Si conectas un segundo sensor de ultrasonidos conecta ldquoTrigrdquo al pin 4 y ldquoEchordquo al pin 5 Continuacutea conectando los siguientes pines a los sensores hasta los pines 12 y 13 si al final optas por conectar los seis sensores ultrasonidos

Conexioacuten del softwareUtilizas un programa terminal como PuTTY Screen o tu

lenguaje de script o programacioacuten favorito para conectarte al puerto serie que aparece cuando te conectas el sensor ultrasoacuteni-co Esto variaraacute en funcioacuten del sistema operativo que utilizas para conectarte al microcontrolador En Windows consultar el ldquoAdministrador de dispositivosrdquo es la forma maacutes comuacuten de averiguarlo En Linux ldquodmesgrdquo o ldquolsusbrdquo son las formas de de-tectar a queacute puerto estaacute conectado Deberiacuteas ver algo denomi-nado ldquoPL2303rdquo que es la conexioacuten del microcontrolador Si recibes informacioacuten basura en tu terminal cuando te conectes aseguacuterate de que los ajustes en serie son 9600 baudios 8 bits ninguno (paridad) y 1 bit de parada Aquiacute tienes una lista de los comandos que puede aceptar el microcontrolador

bull debug on Activa la retroalimentacioacuten detallada Estaacute deshabilitada por defecto nos proporcionaraacute aclaracio-nes sobre los errores de entrada

bull debug off desactiva la retroalimentacioacuten detalladabull init x y activa un HC-SR04 en los pines especificados

X es trigger Y es echo Estos deben ser pines digitales El dispositivo 0 estaacute preestablecido en los pines 2 y 3 de modo que no es necesario especificar estos pines La seleccioacuten de pines no vaacutelidos devolveraacute un signo de ex-clamacioacuten ()

bull ping enviacutea una sola lectura del HCSR04 previamente utilizado Si no se ha utilizado todaviacutea se usaraacute el dis-positivo 0 Si al comando le sigue un espacio y un nuacutemero entre 0-100 (exclusivo) se realizaraacute ese nuacutemero de lecturas emitiendo primero el promedio de esas lec-

SENSOR ULTRASONICO

turas despueacutes el nuacutemero de lecturas fallidas (que no cuentan para el promedio) y luego los valores miacutenimo y maacuteximo de lectura separados por espacios En cual-quier caso si una sentildeal se desconecta automaacuteticamente devolveraacute -1

bull start Hace ping constantemente a todos los dispositivos conectados en secuencia Debido a que los dispositivos se utilizan uno a uno el flujo de datos de este comando seraacute maacutes raacutepido si los dispositivos miden distancias cor-tas Si este comando le sigue un espacio y un nuacutemero mayor que 0 la placa esperaraacute estos milisegundos entre la lectura del uacuteltimo dispositivo y la lectura del primer dispositivo El resultado de este comando seraacute la lectura de cada dispositivo (con un uacutenico espacio despueacutes de cada uno) y una vuelta tras el uacuteltimo dispositivo

bull stop detiene la operacioacuten ldquostartrdquo soacutelo es efectivo tras haber iniciado ldquostartrdquo

bull mode emite el modo de medicioacuten del flujo M para meacutetrico (miliacutemetros) I para Imperial (deacutecimas de pul-gada) o R para Raw (la longitud de pulso en microse-gundos devuelta por el HC-SR04) El valor predeter-minado es M

bull timeout emite el tiempo de espera actual para lecturas de la sentildeal El tiempo de espera es la mayor cantidad de microsegundos que la placa esperaraacute antes de declarar que el HC-SR04 ha realizado una mala lectura lo cual no es necesariamente lo mismo que el pulso maacutes largo que la placa aceptaraacute del HC-SR04 Cuando la placa mide el pulso del HC-SR04 primero espera a que el HC-SR04 comience a enviar un pulso Este tiempo cuenta para el tiempo de espera Cuando este comando le sigue un espacio y un nuacutemero el tiempo de espera se ajusta a ese nuacutemero El valor predeterminado es 1 segundo (1000000 microsegundos)

bull ver emite informacioacuten de versioacuten y creacuteditos

Si cualquier comando (o ninguacuten comando) estaacute precedido por un uacutenico diacutegito de 0-5 (inclusive) seguido de un espacio el dispositivo que corresponde a ese diacutegito se seleccionaraacute para ser usado con el siguiente comando ldquopingrdquo Cada vez que la placa esteacute lista para un comando emitiraacute ldquogtrdquo para la serie La uacutenica excepcioacuten estaacute tras el comando ldquostartrdquo que no solicitaraacute entrada hasta que sea reconocido ldquostoprdquo

ODROID MAGAZINE 31

iquestCoacutemo empezaste con los ordenadoresCuando empeceacute mi negocio tuve que decidir queacute plat-

aforma de hardware iba a utilizar para la recogida de datos del traacutefico Simplemente para que no pienses mal de miacute mis caacutemaras de traacutefico no son las que se usan para multar por exceso de velocidad o algo asiacute Mi sistema estaba desti-nado suavizar el flujo de traacutefico fijando los controles oacutepti-mos de las sentildeales de traacutefico Anteriormente usaba un PC industrial para ejecutar mi software de reconocimiento de imaacutegenes Ahora uso la familia de dispositivos ODROID para esta cuestioacuten

iquestQueacute te atrajo de la plataforma ODROID En 2012 useacute Google para buscar una plataforma que

fuera muy compacta y al mismo tiempo potente para que cubriera mis necesidades que resultoacute ser la placa

Por favor haacuteblanos un poco sobre tiSoy ingeniero de electroacutenica y software en Rusia desde

hace 47 antildeos Naciacute en Siberia y tras terminar la escuela me mudeacute a Moscuacute para estudiar en la universidad Ser estudi-ante en el Instituto de Aviacioacuten de Moscuacute (MAI) fue una experiencia increiacuteble probablemente la mejor de mi vida A principios de los 90 llegoacute a Rusia la era de los microordena-dores soliacutea jugar a un juego de saltos en una CPU z80 y el i486 Tras finalizar mis estudios universitarios y de posgrado me convertiacute en ingeniero Trabajeacute en unos cuantos puestos de trabajo para diferentes empresas y finalmente decidiacute em-prender mi propio negocio En 2006 puse en marcha una iniciativa para crear sistemas de recuento del traacutefico de au-tomoacuteviles Estoy casado y tengo una hija de 21 antildeos llamada Lena que trabaja como enfermera Mi esposa Nadezhda es disentildeadora de vestuario de produccioacuten pero ahora trabaja como disentildeadora web Ella es aficionada a la fotografiacutea digi-tal y le encanta su caacutemara reacuteflex digital

COnOCIEnDO un ODROIDIAnvIACHESLAv ALEKSEEveditado por rob roy (robroy)

CONOCIENDO UN ODROIDIAN

Viacheslav disfruta tocando la guitarra y escuchando muacutesica

1995 en el campus MAi probando uno de los primeros equipos Vr comerciales del mundo que funcionaba a 640x480 a 30fps Utiliz-aba un sensor magneacutetico en la nuca para la posicioacuten de la cabeza la mejor broma que se podiacutea gastar a alguien era colocar un imaacuten cerca de la espalda y sacudirlo iexcllos gritos estaban garantizados cuando el mundo en 3D daba vueltas sin cesar

ODROID MAGAZINE 32

ODROID-X2 Con sus cuatro nuacutecleos funcionando a 17 GHz calculaba con facilidad los algoritmos de reconteo del traacutefico de automoacuteviles Maacutes tarde cambieacute al U3 y el XU4

iquestCuaacutel es tu ODROID favorito y por queacuteDe momento mi favorito es el XU4 Mi sistema estaacute

basado en el tratamiento de fotogramas de video en tiempo real por lo que el bus USB 30 del XU4 es bastante bueno para una caacutemara con una interfaz de captura de viacutedeo Para mi sistema es muy importante tener una buena conexioacuten entre la caacutemara de viacutedeo y la CPU Probablemente tendreacute que echar un vistazo a las interfaces de nivel inferior como MIPI CSI-2 que por desgracia estaacuten ausente en el XU4 Recientemente he estado aprendiendo como usar la caacute-mara oCam GS BW La caacutemara es buena en siacute misma pero para un uso industrial al aire libre tengo que implementar un software de control de exposicioacuten automaacutetica y posible-mente de control de apertura de la lente que todaviacutea estaacute en estudio

MEET AN ODROIDIAN

Una vieja joya el mini ordenador Nixdorf

An old gem the Nixdorf mini computer

CONOCIENDO UN ODROIDIAN

iquestQueacute aficiones e intereses tienes aparte de los ordenadoresDisfruto conduciendo y leyendo sobre coches y viendo

los campeonatos de carreras de F1 Tambieacuten me gusta via-jar pescar escuchar muacutesica y tocar la guitarra Tengo un gato siberiano llamado Leia y soy fan de Star Wars

iquestQueacute consejo le dariacuteas a alguien que quiere aprender maacutes sobre la programacioacuten

Hacer software es algo increiacuteble y miacutestico Es una fusioacuten de arte y tecnologiacutea Nada te inspira maacutes que tu aplicacioacuten cuando empieza a cobrar vida Sin embargo siempre estaacute ahiacute el otro lado de la Fuerza Estar listo para instruirte inc-esantemente El desarrollo de software es una de las activi-dades que cambia maacutes raacutepido Si tienes pensado dejar de hacer software en uno o dos antildeos puede dejar de aprender ahora El conocimiento se volveraacute anticuado en un par de antildeos maacutes o menos Para estar en lo maacutes alto siempre tienes que correr Es similar a la cancioacutenrdquoRun like Hellrdquo de Pink Floyd Si estaacutes listo para vivir de esta forma seguro que tendraacutes eacutexito

ODROID MAGAZINE 33

Page 16: Estación ARCADE · gias de marketing, administración de medios sociales y producción multimedia impresa, web, vídeo y cine. Ges-tionando múltiples cuentas con agencias y productores

ergiacutea completamenteIrswitchsh (solo cambia el script

original de MSL Digital de GPIOpin1 = 14 a GPIOpin1 = 225)

binbash

prevent restarting XBMC at

shutdown This is only used for

OpenElec before V5

LOCKDIR=rdquovarlockrdquo

LOCKFILE=rdquoxbmcdisabledrdquo

this is the GPIO pin receiving

the shut-down signal

Raspberry Pi pin8 GPIOpin1=14

Odroid-C2 pin26 GPIOpin1=225

GPIOpin1=225

functions

add_omit_pids()

omit_pids=rdquo$omit_pids -o $1rdquo

safe_shutdown ()

for OpenElec before V5

touch ldquo$LOCKDIR$LOCKFILErdquo

for OpenElec V5 and later

systemctl stop kodi

add_omit_pids $(pidof connmand)

add_omit_pids $(pidof dbus-dae-

mon)

killall5 -15 $omit_pids

for seq in `seq 1 10` do

usleep 500000

clear gt devtty1

killall5 -18 $omit_pids || break

done

sync

umount -a gtdevnull 2gtamp1

poweroff -f

echo ldquo$GPIOpin1rdquo gt sysclass

gpioexport

echo ldquoinrdquo gt sysclassgpio

gpio$GPIOpin1direction

while true do

sleep 1

power=$(cat sysclassgpio

gpio$GPIOpin1value)

if [ $power = 0 ] then

echo ldquooutrdquo gt sysclassgpio

gpio$GPIOpin1direction

echo ldquo1rdquo gt sysclassgpio

una carcasa personalizada de modo que el receptor integrado podriacutea estar oculto y no ser uacutetil En ese caso puedes desac-tivar el IR del ODROID en favor del re-ceptor externo GPIO-IR en la RemotePi y conectar el pin 12 Tienes disponible maacutes informacioacuten sobre el cambio al receptor GPIOIR en LibreELEC en httpbitly2lpDl27

Scripts de apagado para LibreELEC

Los dos scripts tratados a continu-acioacuten pueden descargarse desde la paacutegina de soporte de MSL Digital Solutions en httpbitly2kMxyVG En esta paacutegina tambieacuten encontraras una guiacutea para utili-zar estos scripts en otros sistemas opera-tivos como Volumio y RuneAudio

El script irswitchsh se usa para el apagado seguro a traveacutes de sistema In-frarrojos Tras pulsar el correspondiente botoacuten el sistema se apagaraacute de forma se-gura luego RemotePi esperaraacute a que el GPIO225 alcance el estado 0 (low) que aparece tras el cierre exitoso del sistema Finalmente cortaraacute la energiacutea

El script shutdownsh se usa para el apagado seguro a traveacutes de la interfaz del programa o script Despueacutes de navegar hasta el botoacuten de apagado en la GUI el sistema se apagaraacute de forma segura luego RemotePi esperaraacute a que el GPIO225 alcance el estado 0 (low) que apareceraacute tras apagarse el sistema de forma adec-uada y segura Finalmente cortaraacute la en-

originalmente para una Raspberry Pi desgraciadamente no es soacutelo enchufar y usar Necesitaraacutes volver a cablear dos pines usando los cables de todos los pines tal y como se muestra en la Figura 2 Re-cablea el pin 8 de la RemotePi al pin 26 del ODROID-C2 y el pin 10 de la RemotePi al pin 7 del ODROID-C2

Si no quieres utilizar el receptor IR de la RemotePi para el mando a distan-cia de LibreELEC puedes dejar desco-nectado el pin 12 La placa continuaraacute encendieacutendose y apagaacutendose a traveacutes del comando de control remoto IR pero el control de la GUI de LibreELEC seraacute asumido por el receptor de infrarrojos integrado en el ODROID Sin embargo si has comprado una RemotePi con un receptor IR y un LED externo es posible que hayas decidido colocarla dentro de

REMOTEPI

figura 3 - la remotepi ha sido recableada y montada en una carcasa personalizada

figura 2 - re-cableado Gpio

ODROID MAGAZINE 16

Centro Multimedia por ejemplo Esos comandos de apagado se equiparaacuten a eventos internos similar a cuando nave-gas por el menuacute de apagado de Kodi Sin utilizar este segundo script el sistema se cerraraacute con seguridad pero la placa Re-motePi no recibiriacutea ninguna indicacioacuten para monitorizar el GPIO225 de modo que no cortariacutea la energiacutea tras apagarse el sistema correctamente

Usando el receptor IR de la RemotePi

Si deseas utilizar el receptor IR de la RemotePi en lugar del receptor IR ODROID integrado tendraacutes que des-activar el sistema IR integrado y activar el receptor IR GPIO Para hacer esto en Ubuntu puede consultar el artiacuteculo de la Wiki de Hardkernel en httpbitly2l8KrWg Para Libre-ELEC echa un vistazo a mi mini-guiacutea en httpbitly2lLKj2A Para preguntas comentari-os o sugerencias visita el hilo original en httpbitly2mgFGKk

gpio$GPIOpin1value

sleep 3

safe_shutdown

fi

done

Shutdownsh (solo cambia GPIOpin =15 a GPIOpin =249 y GPIOpin1 =14 a GPIOpin1 =225)

binbash

if [ ldquo$1rdquo = ldquorebootrdquo ] then

Raspberry Pi pin10 GPIOpin=15

Odroid-C2 pin7 GPIOpin=249

GPIOpin=249

Raspberry Pi pin8 GPIOpin1=14

Odroid-C2 pin26 GPIOpin1=225

GPIOpin1=225

echo ldquo$GPIOpinrdquo gt sysclass

gpioexport

execute shutdown sequence on

pin

echo ldquooutrdquo gt sysclassgpio

gpio$GPIOpindirection

echo ldquo1rdquo gt sysclassgpio

gpio$GPIOpinvalue

usleep 125000

echo ldquo0rdquo gt sysclassgpio

gpio$GPIOpinvalue

usleep 200000

echo ldquo1rdquo gt sysclassgpio

gpio$GPIOpinvalue

usleep 400000

echo ldquo0rdquo gt sysclassgpio

gpio$GPIOpinvalue

set GPIO 14 high to feedback

shutdown to RemotePi Board

because the irswitchsh has

already been terminated

echo ldquo$GPIOpin1rdquo gt sysclass

gpioexport

echo ldquooutrdquo gt sysclassgpio

gpio$GPIOpin1direction

echo ldquo1rdquo gt sysclassgpio

gpio$GPIOpin1value

usleep 4000000

fi

El script shutdownsh es uacutetil si a vec-es usas las aplicaciones remotas Android Yatse o Kore o hotkeys para apagar tu

REMOTEPI

ODROID Talk Subreddit

httpwwwredditcomrodroid

ODROID Magazine

estaacute en Reddit

ODROID MAGAZINE 17

El HiFi Shield 2 (39$ httpbitly2lHSlZJ) es un Con-vertidor Digital a Analoacutegico de Alta definicioacuten (DAC) para el ODROID-C2 y el ODROID-C1+ Se trata de

una placa de sonido especial para el ODROID-C2 y C1 + que estaacute optimizada para mejorar la calidad de reproduccioacuten del sonido Ofrece un sonido muy bien equilibrado consistente intenso amplio y muy bien dimensionado por niveles Hemos analizado la calidad de audio de la salida HiFi Shield 2 DAC con un equipo estaacutendar de la industria del sonido llamado Au-dio Precision Audio Precision es un analizador de audio de alto rendimiento optimizado para la produccioacuten de audio digital

Usando el chip DAC PCM5242 de uacuteltima generacioacuten de Texas Instrument conocido como Burr-Brown el HiFi Shield 2 soporta formatos de audio de 16 24 y 32 bits con una ra-tio THD+N miacutenima (0002) y una dinaacutemica ideal (114dB +) ademaacutes de sorprendentes tasas de muestreo de 384 kHz La interfaz dedicada SPDIF soporta una definicioacuten de hasta 192kHz24bit a traveacutes de una salida oacuteptica (Toslink)

Si hacemos uso del puerto de expansioacuten I2S en el C2C1+ no es necesario ocupar un puerto USB permitiendo al usu-ario seleccionar el sistema de reproduccioacuten de audio que desee como Volumio y Debian (DietPi) para reproducir sonido HiFi

HIFI SHIELD 2

HIfI SHIELD 2EL MEJOR SOnIDO quE PODRAS COnSEGuIR En AnDROIDeditado por rob roy (robroy)

oDroiD-c2 y hifi Shield 2 Audio pb +J

primer plano de la placa con anotaciones

Distribucioacuten de los 7 pines i2S del c2c1+

la salida de audio es estaacutendar la salida de color rojo corresponde al canal de audio iz-quierdo y la salida de color blanco correspon-de al canal de audio derecho

ODROID MAGAZINE 18

Detalles

La guiacutea de configuracioacuten de UbuntuLinux para ODROID-C2 estaacute disponible en httpbitly2brrGdG y para ODROID-C1+ en httpbitly2lI7AC7 El sistema operativo oficial Volumio 2 se puede descargar desde httpbitly2kOJNAV y la imagen DietPi basada en Debian se encuentra en httpbitly2ls45yM Puede ver los esquemas en httpbitly2mnukV4

Diagrama por bloques del hifi Shield2

Caracteriacutesticasbull El control de volumen a traveacutes de la interfaz

i2c es una gran caracteriacutestica para mantener una buena calidad del sonido con varios voluacutemenes de salida de audio

bull Los puertos de salida incluyen terminales esteacute-reo rcA chapados en oro

bull La fuente de alimentacioacuten tiene habilitado un regulador de interferencias de ruido ultra-bajo lo cual reduce el ruido de la fuente de alimentacioacuten y aumenta en gran medida el ratio sentildealruido

bull La interfaz I2S permite la descodificacioacuten di-recta de la entrada digital a la salida analoacutegica utili-zando la sincronizacioacuten del reloj maestro

bull La superficie de la PCB estaacute chapada en oro so-bre 2 onzas de cobre lo cual garantiza la continui-dad de la sentildeal y reduce la reflexioacuten y deflacioacuten de la sentildeal

bull Dispone de almohadillas soldadas a la salida de audio balanceada (sentildeal diferencial)

bull La interfaz SPDIF dedicada es nueva admite una definicioacuten de hasta 192khz24bit a traveacutes de una nueva salida oacuteptica (toslink)

bull Este HiFi shield no es compatible con Android y hardkernel no tiene planes para hacerlo compatible y asiacute poder habilitar el controlador i2S en el Kernel y el hAl de Android

El Manual de usuario del ODROID-XU4 disponible en httpbitly1U9Q8yg ha sido revisado hace poco para incluir algunos de los perifeacutericos maacutes recientes como

la Expansion Board SmartPower2 y oCam Puesto que ahora Hardkernel tambieacuten ofrece Ubuntu 1604 todos los ejemplos de coacutedigo se han actualizado para que sean compatibles con el nuevo sistema operativo Si tiene comentarios preguntas o sugerencias visita el hilo de los foros ODROID en httpbitly1RykBrT

MAnuAL Xu4ACTuALIzADOREvISADO PARA uBunTu 1604 y LOS PERIfERICOS MAS RECIEnTESeditado por rob roy (robroy)

MANUAL XU4

el manual del oDroiD-xU4 incluye informacioacuten detallada de los diferentes sistemas operativos software y perifeacutericos disponibles para el oDroiD-xU4

ODROID MAGAZINE 19

El DevOps es complicado Los grandes proyectos de soft-ware como Mesos y Kubernetes desarrollan equipos como los que se encuentran en la mayoriacutea de las empre-

sas y organizaciones tecnoloacutegicas como CoreOS con la finali-dad de ayudar a los desarrolladores a poner sus aplicaciones en funcionamiento Sin embargo iquestcuaacutel seriacutea una buena solucioacuten para un desarrollador en solitario o una pequentildea red domeacutesti-ca iquestCoacutemo podemos usar el coacutedigo a nivel de infraestructura

Uso un portaacutetil Macintosh OSX para desarrollo pero para las aplicaciones de larga duracioacuten o aplicaciones que se ejecu-tan por la noche necesito un entorno remoto siempre activo ya que mi portaacutetil estaraacute fuera de liacutenea o en el tren conmigo mientras voy y vengo del trabajo Tiene su sentido no utilizar el ordenador como un entorno para la puesta en funcionamiento de aplicaciones

El ODROID-XU4 es un ordenador ideal para un entor-no de implementacioacuten remoto ya que es econoacutemico flexible cuenta con excelentes especificaciones teacutecnicas y puede ejecutar Linux Este artiacuteculo tiene por objetivo explicar coacutemo almacenar coacutedigo de implementacioacuten en tu repositorio de proyectos asiacute como automatizar las implementaciones y ejecuciones

Arch LinuxArch Linux es una distribucioacuten de Linux gratuita de coacutedigo

abierto que fue lanzada en 2002 Estaacute centrada en la elegancia la integridad del coacutedigo el minimalismo y la simplicidad y cuenta con que el usuario haga un esfuerzo en comprender el funcionamiento del sistema Arch Linux utiliza en particular un modelo de revisioacuten continua de modo que todo lo que se necesitas para conseguir el software del sistema maacutes reciente es actualizar el sistema de forma perioacutedica

Arch Linux puede ser algo difiacutecil de asimilar ya que uti-liza herramientas diferentes a las de una distribucioacuten Debian El gestor de paquetes se activa a traveacutes de ldquopacmanrdquo en lugar de ldquoapt-getrdquo y existe un gestor complementario de paquetes muy popular llamado ldquoyaourtrdquo Muchos de los servicios o her-ramientas maacutes comunes no se instalan por defecto

Arch Linux esta hecho principalmente para procesadores x86 pero un proyecto llamado Arch Linux ARM (ALARM) tiene una distribucioacuten ARM de Arch Linux para arquitectu-ras AArch64 ARMv8 y ARMv7 Hardkernel el fabricante de ODROIDs es de hecho un patrocinador del proyecto Arch Linux ARM

HOME DATA CENTER

HOME DATA CEnTERIMPLEMEnTACIOn DEL CODIGO COn ARCHLInuXpor John Skilbeck

Configurar la redDeberaacutes asignarle a tu dispositivo una direccioacuten IP LAN

DHCP reservada y en el mejor de los casos un nombre de host que se propagaraacute a lo largo de tu red por medio del servidor DNS de tu router De esta forma en nuestro entorno de desar-rollolocal podremos utilizar un nombre de host para resolver siempre el entorno de implementacioacutenremoto

Por ejemplo en mi red reservo el 192168249 a la direc-cioacuten MAC de mi ODROID Tambieacuten configuro una entrada DNS que asigna a esa direccioacuten IP ldquoodroidrdquo Utilizar un firm-ware personalizado en el router como Tomato USB o DD-WRT lo hace extremadamente faacutecil ya que esos firmwares convierten tu router en un pequentildeo ordenador Linux con una aplicacioacuten web GUI muy pulida aunque su implementacioacuten estaacute fuera del alcance de este artiacuteculo Si operas con subredes aseguacuterate dirigir el puerto hacia el puerto externo que se asigna al puerto SSH del dispositivo odroid ya que Git se ejecuta a traveacutes de SSH

Configurar el proyectoLoacutegicamente desearaacutes estandarizar el flujo de trabajo de la

implementacioacuten Esto haraacute que el trabajo con proyectos sea

el home data center de John es una auteacutentica obra de arte

ODROID MAGAZINE 20

extremadamente faacutecil y eliminas muchos de los cambios de contexto mental que utilizas cuando trabaja en varios proyec-tos Crearemos una carpeta para alojar todos nuestros archivos relacionados con implementaciones Coloca los archivos eje-cutables en ldquodeploybinrdquo y cualquier archivo cron en ldquodeploytasksrdquo (maacutes informacioacuten sobre esta cuestioacuten maacutes adelante)

Navega hasta el directorio del proyecto en una ventana de Terminal y luego escribe los siguientes comandos

$ mkdir -p deploybin

$ mkdir -p deploytasks

$ cd deploybin ampamp touch run-job ampamp

chmod u+x run-job ampamp cd -

$ cd deploytasks ampamp touch crontab

Tambieacuten puede estandarizar doacutende colocar tu coacutedigo fuente De esta forma le seraacute maacutes faacutecil a otras personas ver coacutemo se or-ganiza tu proyecto y conocer queacute es el coacutedigo fuente y queacute no

$ mkdir src

$ cd src ampamp (place source code here ie python core

py clojure coreclj nodejs appjs)

Simplificar los puntos de entradaIniciar una aplicacioacuten puede resultar algo confuso con todos

los comandos que se pueden ejecutar en diferentes lenguajes Por ejemplo puede usar Java ldquojava -jar [my-jar] jarrdquo o python ldquopython my-apppyrdquo y tu aplicacioacuten tambieacuten puede necesitar varios argumentos Todo esto deberiacutea simplificarse y resumirse en un archivo ldquodeploybinrun-jobrdquo

binsh

set -e

CMD=rdquosrcduckrdquo

exec $CMD $

Crear el archivo cronArch Linux no viene con un cliente o demonio cron por

defecto Instaacutelalo con ldquosudo pacman -Syu cronierdquo Utilizando cron puede ejecutar comandos en intervalos de tiempo espe-cificados haciendo uso de la sintaxis especial de cron Normal-mente se almacena en el archivo crontab del usuario al que puedes acceder con ldquocrontab -erdquo Sin embargo esto es demasi-ado manual y queremos usar coacutedigo como infraestructura Cron tambieacuten tiene algunos subdirectorios muy uacutetiles en ldquoetccronrdquo como ldquoetccrondailyrdquo yrdquoetccronhourly ldquo si co-locamos los archivos aquiacute eacutestos se ejecutaraacuten en los intervalos especificados

Revisa el archivo de ldquodeploytaskscrontabrdquo que colocare-mos en ldquoetccrondrdquo que se crea automaacuteticamente con nuestro script ldquoposttreceiverdquo

variables

SHELL=binbash

PATH=binusrbinusrlocalbinusrsbinusrlo-

calsbin

MAILTO=[your-email-address]gmailcom

cmd=rdquodeploybinrun-jobrdquo

app_dir=rdquohomeskilbjodeployappduckdnsrdquo

jobs

5 skilbjo cd ldquo$app_dirrdquo $cmd gtdevnull

Aquiacute tienes el esquema general de la estructura de un simple proyecto El uacutenico ejecutable del proyecto es un uacutenico script shell ubicado en ldquosrcrdquo

$ tree

READMEmd

deploy

bin

post-receive

run-job

tasks

crontab

src

duck

4 directories 5 files

GitPrimero queremos agregar una URL remota a nuestro

proyecto en nuestro entorno local

$ git remote add odroid sshodroid~deploygit

duckdnsgit

Ten en cuenta que dependiendo de la topologiacutea de tu red es posible que tenga que modificar esta url Si no puedes asignar nombres de host la URL de git se veriacutea asiacute donde 192168249 es la direccioacuten IP LAN de tu dispositivo

$ ssh192168249~deploygitduckdnsgit

Si tienes un usuario en tu entorno ODROID distinto al que tienes en tu entorno de desarrollo la url se veriacutea asiacute donde ldquoskilbjordquo es tu nombre de usuario

$ sshskilbjoodroid~deploygitduckdnsgit

Si tu servidor remoto estaacute en una subred diferente y tienes redireccionados los puertos tu url tendriacutea este aspecto donde

HOME DATA CENTER

ODROID MAGAZINE 21

ldquo2222rdquo es tu puerto externo

$ ssh192168122222~deploygitduckdnsgit

En el directorio principal de tu entorno remoto crea una carpeta llamada ldquo~deployrdquo con dos subcarpetas ldquo~deployapprdquo y ldquo~deploygitrdquo Los subdirectorios de ldquo~deploygitrdquo seraacuten los puntos finales de nuestros desarrollos y con un hook ejecutaraacuten comandos de implementacioacuten en los subdirectorios de ldquo~ deployapprdquo

Primero navega hasta el directorio principal del entorno re-moto y a continuacioacuten escribe los siguientes comandos

$ mkdir -p ~deployapp

$ mkdir -p ~deploygit

$ mkdir -p ~deploygitduckdnsgit

$ mkdir -p ~deployappduckdns

Ahora en ldquo~ deploygitduckdnsgithooksrdquo crea un archi-vo ejecutable llamado ldquopost-receiverdquo que se activaraacute con cada accioacuten hacia el punto final

$ cd ~deployappgitduckdnsgithooks

$ touch post-receive ampamp chmod u+x post-receive

$ vim post-receive

Rellena el ejecutable con lo siguiente en el directorio ldquo~deploygitduckdnsgithooksrdquo del entorno remoto

usrbinenv bash

set -eou pipefail

user=$(whoami)

dir=rdquohome$userdeployapprdquo

app=$(basename $(pwd) | sed -e lsquosgitrsquo)

deploy_dir=rdquo$dir$apprdquo

cron_dir=rdquoetccrondrdquo

GIT_WORK_TREE=rdquo$deploy_dirrdquo git checkout -f

cd ldquo$deploy_dirrdquo

build steps here

case ldquo$userrdquo in

(skilbjo) sudo cp deploytaskscrontab ldquo$cron_

dir$apprdquo

esac

you can also do project-specific build steps in

this section like install

dependencies (ie npm install) compile source

code (ie lein uberjar)

as well as if a long-lived app run commands as

well (ie java -jar my_jarjar)

echo ldquoall donerdquo

exit 0

ImplementacioacutenAhora estamos listos para implementar ya que nuestro en-

torno local estaacute configurado para alcanzar el punto final del servidor de implementacioacuten nuestro entorno remoto estaacute con-figurado para recibir la notificacioacuten y revisar el coacutedigo fuente ejecutar cualquier paso de compilacioacuten y colocar una tarea en el directorio cron del sistema para su lanzamiento Ponto todo en praacutectica con el siguiente comando en el directorio del proyecto del entorno local

$ git push odroid

Ademaacutes para ver coacutemo se ha implementado todo esto en un proyecto de ejemplo visita httpbitly2lthYKW

Pasos finalesSe puede antildeadir al flujo anterior algunas caracteriacutesticas

como son muacuteltiples entornos ya sea con muacuteltiples ODROIDs o con un solo ODROID trataacutendolo como un servidor de ser-vicio Esto se puede hacer con subdirectorios bajo ldquo~deployrdquo como ldquo~deploystagingappmy_apprdquo o ldquo~ deployproduc-tionappmy_apprdquo

Ademaacutes podriacuteas antildeadir un servicio de integracioacuten conti-nua como CircleCI que ejecutariacutea una suite de testeo desde cada desarrollo a GitHub y si tiene eacutexito compila una imagen Docker No podriacuteas entonces tener un archivo en el entorno remoto que verificariacutea una imagen de un repositorio Docker y la ejecutariacutea en un intervalo especificado Esto es lo que hacen muchos de los softwares DevOps distribuidos como Mesos y Kubernetes pero en un entorno mucho maacutes rico que BASH y Linux

Referencias

Artiacuteculo Wikipedia de Arch linux httpbitly2l71ADKWebsite Arch linux ArM httpsarchlinuxarmorgArtiacuteculo que leiacute hace unos tres antildeos y que me inspiroacute para escribir mi propio artiacuteculo httpbitly2m5JAct

HOME DATA CENTER

ODROID MAGAZINE 22

odroid ARCADE BOXLA EXPERIEnCIA PERfECTA COn TuS JuEGOS ARCADE fAvORITOSpor brian Kim charles park y John lee

ARCADE BOX

Los ODROIDs tienen mejor rendimiento que las placas de la competencia especialmente en lo que respecta al renderizado de video lo que significa que

las placas ODROID son ideales para jugar lo cual hacen muchos usuarios de ODROID Ya hay disponibles varios sistemas operativos de plataforma de juegos como Lakka (httpbitly1NO8BBC) y ODROID GameStation Tur-bo (httpbitly1ASFO5O) Para disfrutar auacuten maacutes de nuestras sesiones de juegos creamos nuestra propia consola arcade con simples botones GPIO y joysticks y la llama-mos la ODROID Arcade Box Elegimos un ODROID-XU4 para este proyecto porque es el que tiene mejor rendimiento GPU de todos los dispositivos ODROID actuales En este artiacuteculo vamos a describir como hemos creado la ODROID Arcade Box

Requisitos( Figura 3 ndash )Decidimos hacer la ODROID Arcade Box usando

un MDF (tablero de fibra de densidad media) El Shifter Shield del XU4 tambieacuten es uacutetil para utilizar los pines de expansioacuten del ODROID-XU4 Los Joysticks los botones y los cables eran los componentes de entrada y se utilizoacute

Nuestro primer y simple prototipo

ODROID MAGAZINE 23

panel MDf 12t2eA 600x2202eA 600x752eA 220x75taladroplegadoraDesmontadorcinta meacutetricaNavaja multiusoAlicates de punta largaoDroiD-xU4xU4 Shifter shieldSMpS (fuete Alimentacioacuten)

extendedores hDMi USb ethernetenchufe de alimentacioacuten y Switchbisagras 2eAreceptor de puertacaucho 4eAtornillospulsadores 19eAJoystick 2eAcablesterminales

una SMPS (Fuente de alimentacioacuten conmutada) como fuente de alimentacioacuten Las herramientas y las piezas utilizadas las tienes en esta paacutegina

La ODROID Arcade Box necesita un total de 27 entradas (19 entradas para botones y 8 entra-das para joysticks) Las 24 entradas GPIO digi-tales del ODROID-XU4 no son suficientes para las 27 entradas de modo que creamos dos puertos ADC adicionales para los tres botones que nos fal-taban Los valores de entrada ADC se basan en el voltaje de entrada y los valores de entrada digital y analoacutegica se procesan en el demonio GPIO que se describe a continuacioacuten

Disentildeo y montajeLos paneles de la ODROID Arcade Box deben

ser disentildeados y fabricados para que los botones y joysticks esteacuten bien colocados Elegimos MDF 12T teniendo en cuenta el precio y la durabilidad El dise-ntildeo se puede hacer con cualquier herramienta CAD como Google Sketch o SolidWorks Aunque existen muchas plantillas de disentildeo para los paneles de joypad decidimos elegir un disentildeo arcade estaacutendar japoneacutes

El primer paso del montaje es unir la placa al panel MDF Este paso fue faacutecil aunque nos llevo maacutes tiempo que el resto Despueacutes insertamos los joysticks la toma de corri-ente el interruptor y los botones en el panel MDF superior Los conectores HDMI Ethernet y USB se colocaron en la parte trasera del panel MDF El siguiente paso fue montar cada panel MDF usando un taladro para hacer los agujeros luego con tornillos los sujetamos

El uacuteltimo paso del montaje de la ODROID Arcade Box es conectar por cable los pines de expansioacuten del ODROID-XU4 a los componentes de entrada En este proyecto dise-ntildeamos las entradas GPIO externas tal y como se muestra en la paacutegina 26 Los botones Select y Temp estaacuten conecta-dos a puertos de expansioacuten ADC

Configuracion del softwareDesarrollamos un nuevo demonio GPIO llamado gpio_

keyd (httpbitly2ljOZKg) Este demonio es capaz de asignar entradas GPIO y eventos claves usando uinput y wiringPi una libreriacutea de acceso GPIO basada en pines Estaacute disentildeada para que le sea familiar a quiene ya ha utilizado el sistema de cableado Arduino Aunque la blibreriacutea wiring-Pi upstream soacutelo admite Raspberry Pi Hardkernel ofrece una versioacuten de wiringPi para ODROIDs en su repositorio GitHub (httpbitly1Eq3UpF) El moacutedulo uinput es un moacutedulo del kernel de Linux que gestiona el subsistema de entrada del usuario Se puede utilizar para crear y manejar dispositivos de entrada desde una aplicacioacuten

ARCADE BOX

herramientas compentes y lo que hay justamente debajo

esquema de los puertos de expansioacuten

ODROID MAGAZINE 24

Elegimos ODROID GameStation Turbo (httpbitly1ASFO5O) como plataforma de software para nuestra ODROID Arcade Box que tiene integrado uinput Debes asegurarte de que el archivo de dispositivo uinput existe en el sistema operativo elegido porque algunos no tienen dispositivos uinput

$ ls devuinput

Si tu sistema operativo no tiene un archivo de disposi-tivo devuinput entonces seraacute necesario recompilar e in-stalar un nuevo kernel con la opcioacuten de configuracioacuten IN-PUT_UINPUT habilitada La paacutegina Wiki en httpbitly1YIToBI describe coacutemo compilar e instalar la imagen del kernel a partir del coacutedigo fuente

$ make menuconfig

Device Drivers

-gt Input device support

-gt Generic input layer

-gt Miscellaneous device

-gt User level driver support ltgt

Ten en cuenta que wiringPi debe instalarse antes de in-stalar gpio_keyd En la imagen GameStation de ODROID los comandos sudo deben ejecutarse como root porque la cuenta ldquoodroidrdquo no estaacute designada como usuario sudo

$ git clone httpsgithubcomhardkernelwiringPi

git

$ cd wiringPi

$ sudo build

Descarga el coacutedigo fuente gpio_keyd el cual estaacute dis-ponible en nuestro repositorio GitHub El procedimiento para compilar e instalar gpio_keyd es muy simple

$ git clone httpsgithubcombkrepogpio_keydgit

$ cd gpio_keyd

$ make

$ sudo make install

El script gpio_keyd hace referencia a etcgpio_keydconf como el predeterminado para la informacioacuten de los botones y GPIO El archivo de configuracioacuten fue modi-ficado para las 27 entradas de la ODROID Arcade Box Algunas botones ya se utilizaban en el emulador de juego de modo que tuvimos que cambiar la configuracioacuten del emulador para evitar conflictos entre los botones de en-trada GPIO y el emulador Ten en cuenta que el campo ltGPIO pingt en el archivo de configuracioacuten hace referen-

ARCADE BOX

plano del disentildeo de joypad

la oDroiD Arcade box montada

ODROID MAGAZINE 25

cia al nuacutemero wiringPi no al GPIO y al nuacutemero de pin (httpbitly2lbzPIB)

Ejemplo de configuracioacuten para las 27 entradas etcgpio_keydconf

Digital input ltKey codegt ltGPIO typegt ltGPIO pingt ltActive valuegt User 1KEY_LEFT digital 15 0KEY_RIGHT digital 1 0KEY_UP digital 4 0KEY_DOWN digital 16 0KEY_A digital 2 0KEY_S digital 3 0KEY_D digital 30 0KEY_F digital 21 0KEY_Z digital 8 0KEY_X digital 9 0KEY_C digital 7 0KEY_V digital 0 0 User 2KEY_BACKSLASH digital 12 0KEY_SLASH digital 13 0KEY_SEMICOLON digital 14 0KEY_LEFTBRACE digital 5 0KEY_Y digital 26 0KEY_U digital 27 0KEY_I digital 22 0KEY_O digital 23 0KEY_H digital 6 0KEY_J digital 10 0KEY_K digital 11 0KEY_L digital 31 0

Analog input ltKey codegt ltGPIO typegt ltADC portgt ltADC ac-tive valuegtKEY_B analog 0 0KEY_N analog 0 2045KEY_M analog 1 2045

To run gpio_keyd daemon at every startup is conve-nient for ODROID Arcade Box

etcinitdgpio_keyd binsh BEGIN INIT INFO

ARCADE BOX

Mapeo Gpio externo para los botones y Joysticks

cableado de la oDroiD Arcade box

ODROID MAGAZINE 26

Provides gpio_keyd Required-Start $all Required-Stop Default-Start 2 3 4 5 Default-Stop Short-Description Run usrbingpio_keyd if it ex-ist END INIT INFO

PATH=sbinusrsbinbinusrbin

libinitvarssh

liblsbinit-functions

do_start() if [ -x usrbingpio_keyd ] then usrbingpio_keyd -d ES=$ [ ldquo$VERBOSErdquo = no ] ampamp log_end_msg $ES return $ES fi

case ldquo$1rdquo in start) do_start restart|reload|force-reload) echo ldquoError argument lsquo$1rsquo not supportedrdquo gtamp2 exit 3 stop) killall gpio_keyd exit 0 ) echo ldquoUsage $0 start|stoprdquo gtamp2 exit 3 Esac

$ sudo chmod +x etcinitdgpio_keyd$ sudo update-rcd gpio_keyd defaults$ sudo reboot

En los comandos anteriores el script gpio_keyd se ejecuta como un demonio uti-lizando la opcioacuten ldquo-drdquo El uso de gpio_keyd se puede comprobar con la opcioacuten ldquo-hrdquo Comprue-ba de nuevo las teclas usadas por el juego o el emulador despueacutes fija la configuracioacuten del gpio_ keyd correctamente Es ahora cuando estaacutes listo para jugar y disfrutar de tus juegos con tu nueva ODROID Arcade Box

ARCADE BOX

the King of fighters 98 John vs brian

ODROID MAGAZINE 27

En este artiacuteculo analizaremos las diferentes formas que existen para ob-tener los datos del uso de la red

ConfiguracioacutenLa forma normal de analizar los datos

de traacutefico de la red es mediante el uso de datos a traveacutes de las aplicaciones de configuracioacuten del sistema tal y como se muestra en la figura 1

El uso de datos muestra la cantidad total de traacutefico de datos entrante y sa-liente que ha sido utilizada por una apli-cacioacuten Si seleccionas la aplicacioacuten veraacute una pantalla como la que aparece en la Figura 2 que muestra informacioacuten detal-lada sobre el uso de la aplicacioacuten tanto en primer plano como de fondo

La informacioacuten que se muestra den-tro de la aplicacioacuten de Configuracioacuten se almacena en data systemnetstats que requiere acceso root Al eliminar todo lo que hay dentro de esta carpeta se resta-

Como desarrolladores queremos que nuestras aplicaciones sean eficientes y a menudo nos gus-

tariacutea saber cuaacutento ancho de banda de red estaacute utilizando nuestra aplicacioacuten Esto es muy uacutetil por varias razones

bull Para monitorizar y asegurarnos de que la aplicacioacuten es realmente la nuestra y no una aplicacioacuten que ha sido pirateada y publi-cada con diferentes nombres en Play Store

bull Para asegurarnos de que no es-tamos cogiendo ancho de banda innecesario del plan de datos del usuario

bull Para comprobar que el disposi-tivo que estamos usando no estaacute accediendo a Internet sin nuestro consentimiento

blecen las estadiacutesticas de red mostradas en esta aplicacioacuten

Estadiacutesticas de la redLa aplicacioacuten de configuracioacuten nos

puede dar una informacioacuten general so-bre las estadiacutesticas de la red de datos que es un buen comienzo pero a veces necesitamos un anaacutelisis maacutes detallado que puede hacerse a traveacutes del coman-do dumpsys Android cuenta con una poderosa herramienta llamada dumpsys que nos permite obtener una instan-taacutenea o volcado del sistema que pu-ede incluir informacioacuten sobre la red la memoria y otros componentes Lee la documentacioacuten de Android en httpbitly2kK9dep para obtener maacutes infor-macioacuten del sistema Para conseguir maacutes informacioacuten relacionada con la red nos interesa el comando

$ dumpsys netstats detail

La Figura 3 muestra un pantallazo de lo que puedes ver desde una tablet Nexus 7 que ejecuta Lollipop 511

Hay algunas cuestiones importantes para entender las estadiacutesticas

bull Las estadiacutesticas UID muestran el desglose de las aplicaciones de primer plano y de fondo

bull Uid muestra el ID de usuario de la aplicacioacuten que se puede utili-zar para relacionar eacutesta con la in-

DESARROLLO AnDROID AnALIzAnDO EL uSO DE RED DE LAS APLICACIOnESpor Nanik tolaram

DESARROLLO ANDROID

figura 1 - Uso de datos en la configuracioacuten

figura 2 - Desglose del uso de datos de la app

ODROID MAGAZINE 28

$ dumpsys package detail

Este comando te proporcionaraacute una larga lista de informacioacuten sobre los pa-quetes que estaacuten instalados en tu dis-positivo Para las estadiacutesticas de red nos interesa la seccioacuten que se muestra en la Figura 5

La seccioacuten resaltada muestra el userId que se relaciona con el uid que se mues-tra en las estadiacutesticas de red Al relacio-nar este nuacutemero sabemos el nombre del paquete de la aplicacioacuten sobre el que es-tamos leyendo las estadiacutesticas de red

Aplicacioacuten de ejemplo

La aplicacioacuten de ejemplo de este artiacute-culo se puede descargar desde httpbitly2m8WenA que muestra coacutemo etiqu-etar la conexioacuten de red desde distintas

secciones de la aplicacioacuten lo cual puede ayudar a analizar el volumen de traacutefico de datos de la aplicacioacuten La Figura 6 muestra un ejemplo de coacutemo lo vemos si utilizamos Android Device Monitor (dentro de Studio diriacutegete a Tools -gt Android -gt Android Device Monitor)

Tal y como se puede ver en el graacutefico la simple aplicacioacuten tiene 3 conexiones dife-rentes y cada una de ellas estaacute accediendo a un sitio web diferente Al etiquetarlas con

formacioacuten del paquete (que ver-emos en la seccioacuten de detalles del paquete dumpsys) con el objeto de conocer queacute aplicacioacuten utiliza estas estadiacutesticas de red

bull Las etiquetas son uacutetiles si de-sea ver la cantidad de datos que utiliza cada conexioacuten de tu apli-cacioacuten Puedes ver un ejemplo de esto en la Figura 4 que muestra que el uid 10007 tiene las siguien-tes etiquetas 0x30000401 0x30003201 0x30002804 0x10000401 y 0x30000407 Es-tas etiquetas ayudan al desarrol-lador a saber cuaacutentos datos uti-liza cada parte de la aplicacioacuten Estas estadiacutesticas de red en par-ticular estaacuten vinculada al paquete Google Framework que forma parte de Google Play Store

En el siguiente apartado veremos coacutemo escribir una aplicacioacuten etiquetando el hilo que hace la conexioacuten de red para determi-nar la cantidad de datos que se utilizan

Estadiacutesticas de paquetes

En la seccioacuten anterior analizamos el uid que aparece al ejecutar el comando dumpsys netstats Ahora necesitamos sa-ber queacute uid corresponde a la aplicacioacuten en el dispositivo y esto se hace mediante el siguiente comando

DESARROLLO ANDROID

figura 3 ndash estadiacutesticas de red con Dumpsys

figura 4 - estadiacutesticas de etiquetas UiD

figura 5 - Detalles del paquete dumpsys

figura 6 - etiquetas de red

coacutedigos diferentes podemos ver la cantidad de traacutefico que consume cada conexioacuten y esto nos ayudaraacute a ver si nuestra aplicacioacuten utiliza el ancho de banda de un modo eficiente

El coacutedigo del siguiente fragmento muestra el uso de la API TrafficStats interna Esta etiqueta API muestra el subproceso que utiliza actualmente un socket con un identificador y todo el traacute-fico que pasa por la misma conexioacuten se grabaraacute junto Asiacute es como la aplicacioacuten es capaz de agrupar las 3 conexiones diferentes Internamente Android utili-za el moacutedulo xt_qtaguid del kernel para realizar este tipo de etiquetado Tienes disponible maacutes informacioacuten en httpbitly2kU8KXB

public void getUsingNormalURLC

onnection(String urlText int

threadTag)

throws IOException

URL url = null

TrafficStats

setThreadStatsTag(threadTag)

HttpURLConnection urlConnec-

tion = getConnection(url)

try

finally

TrafficStatsclearThread-

StatsTag()

ODROID MAGAZINE 29

Disgustado te subes a tu 4x4 de dominacioacuten del mun-do un vehiacuteculo que desde fuera parece maacutes bien un viejo camioacuten de granja pero por dentro se parece maacutes

al sistema de control de un transbordador espacial porque el conductor del restaurante oriental que realiza las entrega a do-micilio estaacute enfermo Ahora tienes que ir a recoger tu propia comida ldquoQueacute rudimentariordquo piensas cuando sales de tu garaje secreto Justamente cuando vas a parar el vehiacuteculo en un stop oyes un fuerte ruido Sales y te diriges raacutepidamente a la parte posterior del 4x4 donde observas un cubo de basura Te tiras de los pelos y piensas ldquoiexclEsos basureros Neanderthales dejaron otra vez el cubo en mediordquo Ahora te toca recoger los restos de tu cena y la basura de otros

Conforme te vas alejando para hacer tus recados empiezas a pensar en coacutemo evitar este inconveniente en el futuro Varias ideas te vienen a la mente

Un sistema lidar para escanear en 3D el entorno en tiempo real y alarmas sonoras cuando sea necesarioUn brazo ciberneacutetico colocado en la parte posterior del 4x4 que procese video para detectar objetos agarrarlos y moverlosUna simple camara trasera

Empiezas a considerar la viabilidad de cada una

Muy bueno pero demasiado complicado y costosoAuacuten mejor y un proyecto propio de un cientiacutefico loco pero demasi-ado complicado y costosoya tengo dos iexclpero estaba demasiado preocupado en mis pensa-mientos para prestarles atencioacuten

Lo que necesitas es algo simple sin complicaciones y barato que haga sonar una alarma para alertarte incluso cuando estar absorto en tus pensamientos ldquoAhardquo Recuerdas haber visto un nuevo producto en ameriDroid que puede hacer precisamente esto Se trata de un microcontrolador conectado al USB que soporta hasta 6 sensores ultrasoacutenicos con simples comandos en serie (httpbitly2l26ptV) ldquoiexclPerfectordquo Piensas

Regresas a tu laboratorio subterraacuteneo con el pollo Kung Pao en la mano te apresurar a encender tus monitores entras en el sitio web ameriDroid y pides un kit ldquoUSB Ultrasonic Ranging Sensorrdquo con 6 sensores y carcasas

Vas sintiendo una sensacioacuten de alivio a medida que regresas a los 12 proyectos en lo que ya estabas trabajando a la espera de que pasen un par de diacuteas hasta que llegue tu nuevo pedido Mientras te comes tu Kung Pao dibujas un diagrama de coacutemo quieres colocar los sensores en la parte posterior de tu vehiacuteculo

Un par de diacuteas maacutes tarde el kit llega Inmediatamente em-piezas a montar el kit y los sensores en la parte posterior de tu 4x4 teniendo cuidado de usar sellador de silicona para pro-teger los sensores de la lluvia aguanieve y nieve que puedas encontrar durante tus aventuras para dominar el mundo

A continuacioacuten consultas las instrucciones proporcionadas por ameriDroid con el kit sobre coacutemo controlar y leer los sen-sores desde tu fiel ODROID-C2 y VU7 que montaste en el salpicadero para este propoacutesito

Conectando el cable USBEl cable USB suministrado debe conectarse al microcon-

trolador (la pequentildea placa de circuito con filas de pines que sobresalen) El microcontrolador tiene una fila de 4 o 6 pines

DETECTAR LA PRESEnCIACROnICAS DE un CIEnTIfICO LOCOpor bo lechnowsky

SENSOR ULTRASONICO

ODROID MAGAZINE 30

en un extremo Si tiene 6 pines ceacutentrate en los 4 pines centrales y sigue estas instrucciones

Negro - conectar a GNDrojo - conectar a VccVerde - conectar a rxi

blanco - conectar a txD

Conectando los sensoresultrasoacutenicos

En cada sensor ultrasoacutenico hay cuatro pines marcados Vcc Trig Echo Gnd Para el primer sensor ultrasoacutenico conecta el pin 2 del microcontrolador al pin ldquoTrigrdquo del sensor ultrasoacutenico Conecta el pin 3 del microcontrolador al pin ldquoEchordquo del sensor Conecte el pin ldquoVccrdquo del sensor a DC 5V (el pin ldquoVCCrdquo del microcontrolador suministra 5V) y el pin ldquoGndrdquo del sensor a una conexioacuten a tierra como por ejemplo los pines ldquoGNDrdquo del microcontrolador

Si conectas un segundo sensor de ultrasonidos conecta ldquoTrigrdquo al pin 4 y ldquoEchordquo al pin 5 Continuacutea conectando los siguientes pines a los sensores hasta los pines 12 y 13 si al final optas por conectar los seis sensores ultrasonidos

Conexioacuten del softwareUtilizas un programa terminal como PuTTY Screen o tu

lenguaje de script o programacioacuten favorito para conectarte al puerto serie que aparece cuando te conectas el sensor ultrasoacuteni-co Esto variaraacute en funcioacuten del sistema operativo que utilizas para conectarte al microcontrolador En Windows consultar el ldquoAdministrador de dispositivosrdquo es la forma maacutes comuacuten de averiguarlo En Linux ldquodmesgrdquo o ldquolsusbrdquo son las formas de de-tectar a queacute puerto estaacute conectado Deberiacuteas ver algo denomi-nado ldquoPL2303rdquo que es la conexioacuten del microcontrolador Si recibes informacioacuten basura en tu terminal cuando te conectes aseguacuterate de que los ajustes en serie son 9600 baudios 8 bits ninguno (paridad) y 1 bit de parada Aquiacute tienes una lista de los comandos que puede aceptar el microcontrolador

bull debug on Activa la retroalimentacioacuten detallada Estaacute deshabilitada por defecto nos proporcionaraacute aclaracio-nes sobre los errores de entrada

bull debug off desactiva la retroalimentacioacuten detalladabull init x y activa un HC-SR04 en los pines especificados

X es trigger Y es echo Estos deben ser pines digitales El dispositivo 0 estaacute preestablecido en los pines 2 y 3 de modo que no es necesario especificar estos pines La seleccioacuten de pines no vaacutelidos devolveraacute un signo de ex-clamacioacuten ()

bull ping enviacutea una sola lectura del HCSR04 previamente utilizado Si no se ha utilizado todaviacutea se usaraacute el dis-positivo 0 Si al comando le sigue un espacio y un nuacutemero entre 0-100 (exclusivo) se realizaraacute ese nuacutemero de lecturas emitiendo primero el promedio de esas lec-

SENSOR ULTRASONICO

turas despueacutes el nuacutemero de lecturas fallidas (que no cuentan para el promedio) y luego los valores miacutenimo y maacuteximo de lectura separados por espacios En cual-quier caso si una sentildeal se desconecta automaacuteticamente devolveraacute -1

bull start Hace ping constantemente a todos los dispositivos conectados en secuencia Debido a que los dispositivos se utilizan uno a uno el flujo de datos de este comando seraacute maacutes raacutepido si los dispositivos miden distancias cor-tas Si este comando le sigue un espacio y un nuacutemero mayor que 0 la placa esperaraacute estos milisegundos entre la lectura del uacuteltimo dispositivo y la lectura del primer dispositivo El resultado de este comando seraacute la lectura de cada dispositivo (con un uacutenico espacio despueacutes de cada uno) y una vuelta tras el uacuteltimo dispositivo

bull stop detiene la operacioacuten ldquostartrdquo soacutelo es efectivo tras haber iniciado ldquostartrdquo

bull mode emite el modo de medicioacuten del flujo M para meacutetrico (miliacutemetros) I para Imperial (deacutecimas de pul-gada) o R para Raw (la longitud de pulso en microse-gundos devuelta por el HC-SR04) El valor predeter-minado es M

bull timeout emite el tiempo de espera actual para lecturas de la sentildeal El tiempo de espera es la mayor cantidad de microsegundos que la placa esperaraacute antes de declarar que el HC-SR04 ha realizado una mala lectura lo cual no es necesariamente lo mismo que el pulso maacutes largo que la placa aceptaraacute del HC-SR04 Cuando la placa mide el pulso del HC-SR04 primero espera a que el HC-SR04 comience a enviar un pulso Este tiempo cuenta para el tiempo de espera Cuando este comando le sigue un espacio y un nuacutemero el tiempo de espera se ajusta a ese nuacutemero El valor predeterminado es 1 segundo (1000000 microsegundos)

bull ver emite informacioacuten de versioacuten y creacuteditos

Si cualquier comando (o ninguacuten comando) estaacute precedido por un uacutenico diacutegito de 0-5 (inclusive) seguido de un espacio el dispositivo que corresponde a ese diacutegito se seleccionaraacute para ser usado con el siguiente comando ldquopingrdquo Cada vez que la placa esteacute lista para un comando emitiraacute ldquogtrdquo para la serie La uacutenica excepcioacuten estaacute tras el comando ldquostartrdquo que no solicitaraacute entrada hasta que sea reconocido ldquostoprdquo

ODROID MAGAZINE 31

iquestCoacutemo empezaste con los ordenadoresCuando empeceacute mi negocio tuve que decidir queacute plat-

aforma de hardware iba a utilizar para la recogida de datos del traacutefico Simplemente para que no pienses mal de miacute mis caacutemaras de traacutefico no son las que se usan para multar por exceso de velocidad o algo asiacute Mi sistema estaba desti-nado suavizar el flujo de traacutefico fijando los controles oacutepti-mos de las sentildeales de traacutefico Anteriormente usaba un PC industrial para ejecutar mi software de reconocimiento de imaacutegenes Ahora uso la familia de dispositivos ODROID para esta cuestioacuten

iquestQueacute te atrajo de la plataforma ODROID En 2012 useacute Google para buscar una plataforma que

fuera muy compacta y al mismo tiempo potente para que cubriera mis necesidades que resultoacute ser la placa

Por favor haacuteblanos un poco sobre tiSoy ingeniero de electroacutenica y software en Rusia desde

hace 47 antildeos Naciacute en Siberia y tras terminar la escuela me mudeacute a Moscuacute para estudiar en la universidad Ser estudi-ante en el Instituto de Aviacioacuten de Moscuacute (MAI) fue una experiencia increiacuteble probablemente la mejor de mi vida A principios de los 90 llegoacute a Rusia la era de los microordena-dores soliacutea jugar a un juego de saltos en una CPU z80 y el i486 Tras finalizar mis estudios universitarios y de posgrado me convertiacute en ingeniero Trabajeacute en unos cuantos puestos de trabajo para diferentes empresas y finalmente decidiacute em-prender mi propio negocio En 2006 puse en marcha una iniciativa para crear sistemas de recuento del traacutefico de au-tomoacuteviles Estoy casado y tengo una hija de 21 antildeos llamada Lena que trabaja como enfermera Mi esposa Nadezhda es disentildeadora de vestuario de produccioacuten pero ahora trabaja como disentildeadora web Ella es aficionada a la fotografiacutea digi-tal y le encanta su caacutemara reacuteflex digital

COnOCIEnDO un ODROIDIAnvIACHESLAv ALEKSEEveditado por rob roy (robroy)

CONOCIENDO UN ODROIDIAN

Viacheslav disfruta tocando la guitarra y escuchando muacutesica

1995 en el campus MAi probando uno de los primeros equipos Vr comerciales del mundo que funcionaba a 640x480 a 30fps Utiliz-aba un sensor magneacutetico en la nuca para la posicioacuten de la cabeza la mejor broma que se podiacutea gastar a alguien era colocar un imaacuten cerca de la espalda y sacudirlo iexcllos gritos estaban garantizados cuando el mundo en 3D daba vueltas sin cesar

ODROID MAGAZINE 32

ODROID-X2 Con sus cuatro nuacutecleos funcionando a 17 GHz calculaba con facilidad los algoritmos de reconteo del traacutefico de automoacuteviles Maacutes tarde cambieacute al U3 y el XU4

iquestCuaacutel es tu ODROID favorito y por queacuteDe momento mi favorito es el XU4 Mi sistema estaacute

basado en el tratamiento de fotogramas de video en tiempo real por lo que el bus USB 30 del XU4 es bastante bueno para una caacutemara con una interfaz de captura de viacutedeo Para mi sistema es muy importante tener una buena conexioacuten entre la caacutemara de viacutedeo y la CPU Probablemente tendreacute que echar un vistazo a las interfaces de nivel inferior como MIPI CSI-2 que por desgracia estaacuten ausente en el XU4 Recientemente he estado aprendiendo como usar la caacute-mara oCam GS BW La caacutemara es buena en siacute misma pero para un uso industrial al aire libre tengo que implementar un software de control de exposicioacuten automaacutetica y posible-mente de control de apertura de la lente que todaviacutea estaacute en estudio

MEET AN ODROIDIAN

Una vieja joya el mini ordenador Nixdorf

An old gem the Nixdorf mini computer

CONOCIENDO UN ODROIDIAN

iquestQueacute aficiones e intereses tienes aparte de los ordenadoresDisfruto conduciendo y leyendo sobre coches y viendo

los campeonatos de carreras de F1 Tambieacuten me gusta via-jar pescar escuchar muacutesica y tocar la guitarra Tengo un gato siberiano llamado Leia y soy fan de Star Wars

iquestQueacute consejo le dariacuteas a alguien que quiere aprender maacutes sobre la programacioacuten

Hacer software es algo increiacuteble y miacutestico Es una fusioacuten de arte y tecnologiacutea Nada te inspira maacutes que tu aplicacioacuten cuando empieza a cobrar vida Sin embargo siempre estaacute ahiacute el otro lado de la Fuerza Estar listo para instruirte inc-esantemente El desarrollo de software es una de las activi-dades que cambia maacutes raacutepido Si tienes pensado dejar de hacer software en uno o dos antildeos puede dejar de aprender ahora El conocimiento se volveraacute anticuado en un par de antildeos maacutes o menos Para estar en lo maacutes alto siempre tienes que correr Es similar a la cancioacutenrdquoRun like Hellrdquo de Pink Floyd Si estaacutes listo para vivir de esta forma seguro que tendraacutes eacutexito

ODROID MAGAZINE 33

Page 17: Estación ARCADE · gias de marketing, administración de medios sociales y producción multimedia impresa, web, vídeo y cine. Ges-tionando múltiples cuentas con agencias y productores

Centro Multimedia por ejemplo Esos comandos de apagado se equiparaacuten a eventos internos similar a cuando nave-gas por el menuacute de apagado de Kodi Sin utilizar este segundo script el sistema se cerraraacute con seguridad pero la placa Re-motePi no recibiriacutea ninguna indicacioacuten para monitorizar el GPIO225 de modo que no cortariacutea la energiacutea tras apagarse el sistema correctamente

Usando el receptor IR de la RemotePi

Si deseas utilizar el receptor IR de la RemotePi en lugar del receptor IR ODROID integrado tendraacutes que des-activar el sistema IR integrado y activar el receptor IR GPIO Para hacer esto en Ubuntu puede consultar el artiacuteculo de la Wiki de Hardkernel en httpbitly2l8KrWg Para Libre-ELEC echa un vistazo a mi mini-guiacutea en httpbitly2lLKj2A Para preguntas comentari-os o sugerencias visita el hilo original en httpbitly2mgFGKk

gpio$GPIOpin1value

sleep 3

safe_shutdown

fi

done

Shutdownsh (solo cambia GPIOpin =15 a GPIOpin =249 y GPIOpin1 =14 a GPIOpin1 =225)

binbash

if [ ldquo$1rdquo = ldquorebootrdquo ] then

Raspberry Pi pin10 GPIOpin=15

Odroid-C2 pin7 GPIOpin=249

GPIOpin=249

Raspberry Pi pin8 GPIOpin1=14

Odroid-C2 pin26 GPIOpin1=225

GPIOpin1=225

echo ldquo$GPIOpinrdquo gt sysclass

gpioexport

execute shutdown sequence on

pin

echo ldquooutrdquo gt sysclassgpio

gpio$GPIOpindirection

echo ldquo1rdquo gt sysclassgpio

gpio$GPIOpinvalue

usleep 125000

echo ldquo0rdquo gt sysclassgpio

gpio$GPIOpinvalue

usleep 200000

echo ldquo1rdquo gt sysclassgpio

gpio$GPIOpinvalue

usleep 400000

echo ldquo0rdquo gt sysclassgpio

gpio$GPIOpinvalue

set GPIO 14 high to feedback

shutdown to RemotePi Board

because the irswitchsh has

already been terminated

echo ldquo$GPIOpin1rdquo gt sysclass

gpioexport

echo ldquooutrdquo gt sysclassgpio

gpio$GPIOpin1direction

echo ldquo1rdquo gt sysclassgpio

gpio$GPIOpin1value

usleep 4000000

fi

El script shutdownsh es uacutetil si a vec-es usas las aplicaciones remotas Android Yatse o Kore o hotkeys para apagar tu

REMOTEPI

ODROID Talk Subreddit

httpwwwredditcomrodroid

ODROID Magazine

estaacute en Reddit

ODROID MAGAZINE 17

El HiFi Shield 2 (39$ httpbitly2lHSlZJ) es un Con-vertidor Digital a Analoacutegico de Alta definicioacuten (DAC) para el ODROID-C2 y el ODROID-C1+ Se trata de

una placa de sonido especial para el ODROID-C2 y C1 + que estaacute optimizada para mejorar la calidad de reproduccioacuten del sonido Ofrece un sonido muy bien equilibrado consistente intenso amplio y muy bien dimensionado por niveles Hemos analizado la calidad de audio de la salida HiFi Shield 2 DAC con un equipo estaacutendar de la industria del sonido llamado Au-dio Precision Audio Precision es un analizador de audio de alto rendimiento optimizado para la produccioacuten de audio digital

Usando el chip DAC PCM5242 de uacuteltima generacioacuten de Texas Instrument conocido como Burr-Brown el HiFi Shield 2 soporta formatos de audio de 16 24 y 32 bits con una ra-tio THD+N miacutenima (0002) y una dinaacutemica ideal (114dB +) ademaacutes de sorprendentes tasas de muestreo de 384 kHz La interfaz dedicada SPDIF soporta una definicioacuten de hasta 192kHz24bit a traveacutes de una salida oacuteptica (Toslink)

Si hacemos uso del puerto de expansioacuten I2S en el C2C1+ no es necesario ocupar un puerto USB permitiendo al usu-ario seleccionar el sistema de reproduccioacuten de audio que desee como Volumio y Debian (DietPi) para reproducir sonido HiFi

HIFI SHIELD 2

HIfI SHIELD 2EL MEJOR SOnIDO quE PODRAS COnSEGuIR En AnDROIDeditado por rob roy (robroy)

oDroiD-c2 y hifi Shield 2 Audio pb +J

primer plano de la placa con anotaciones

Distribucioacuten de los 7 pines i2S del c2c1+

la salida de audio es estaacutendar la salida de color rojo corresponde al canal de audio iz-quierdo y la salida de color blanco correspon-de al canal de audio derecho

ODROID MAGAZINE 18

Detalles

La guiacutea de configuracioacuten de UbuntuLinux para ODROID-C2 estaacute disponible en httpbitly2brrGdG y para ODROID-C1+ en httpbitly2lI7AC7 El sistema operativo oficial Volumio 2 se puede descargar desde httpbitly2kOJNAV y la imagen DietPi basada en Debian se encuentra en httpbitly2ls45yM Puede ver los esquemas en httpbitly2mnukV4

Diagrama por bloques del hifi Shield2

Caracteriacutesticasbull El control de volumen a traveacutes de la interfaz

i2c es una gran caracteriacutestica para mantener una buena calidad del sonido con varios voluacutemenes de salida de audio

bull Los puertos de salida incluyen terminales esteacute-reo rcA chapados en oro

bull La fuente de alimentacioacuten tiene habilitado un regulador de interferencias de ruido ultra-bajo lo cual reduce el ruido de la fuente de alimentacioacuten y aumenta en gran medida el ratio sentildealruido

bull La interfaz I2S permite la descodificacioacuten di-recta de la entrada digital a la salida analoacutegica utili-zando la sincronizacioacuten del reloj maestro

bull La superficie de la PCB estaacute chapada en oro so-bre 2 onzas de cobre lo cual garantiza la continui-dad de la sentildeal y reduce la reflexioacuten y deflacioacuten de la sentildeal

bull Dispone de almohadillas soldadas a la salida de audio balanceada (sentildeal diferencial)

bull La interfaz SPDIF dedicada es nueva admite una definicioacuten de hasta 192khz24bit a traveacutes de una nueva salida oacuteptica (toslink)

bull Este HiFi shield no es compatible con Android y hardkernel no tiene planes para hacerlo compatible y asiacute poder habilitar el controlador i2S en el Kernel y el hAl de Android

El Manual de usuario del ODROID-XU4 disponible en httpbitly1U9Q8yg ha sido revisado hace poco para incluir algunos de los perifeacutericos maacutes recientes como

la Expansion Board SmartPower2 y oCam Puesto que ahora Hardkernel tambieacuten ofrece Ubuntu 1604 todos los ejemplos de coacutedigo se han actualizado para que sean compatibles con el nuevo sistema operativo Si tiene comentarios preguntas o sugerencias visita el hilo de los foros ODROID en httpbitly1RykBrT

MAnuAL Xu4ACTuALIzADOREvISADO PARA uBunTu 1604 y LOS PERIfERICOS MAS RECIEnTESeditado por rob roy (robroy)

MANUAL XU4

el manual del oDroiD-xU4 incluye informacioacuten detallada de los diferentes sistemas operativos software y perifeacutericos disponibles para el oDroiD-xU4

ODROID MAGAZINE 19

El DevOps es complicado Los grandes proyectos de soft-ware como Mesos y Kubernetes desarrollan equipos como los que se encuentran en la mayoriacutea de las empre-

sas y organizaciones tecnoloacutegicas como CoreOS con la finali-dad de ayudar a los desarrolladores a poner sus aplicaciones en funcionamiento Sin embargo iquestcuaacutel seriacutea una buena solucioacuten para un desarrollador en solitario o una pequentildea red domeacutesti-ca iquestCoacutemo podemos usar el coacutedigo a nivel de infraestructura

Uso un portaacutetil Macintosh OSX para desarrollo pero para las aplicaciones de larga duracioacuten o aplicaciones que se ejecu-tan por la noche necesito un entorno remoto siempre activo ya que mi portaacutetil estaraacute fuera de liacutenea o en el tren conmigo mientras voy y vengo del trabajo Tiene su sentido no utilizar el ordenador como un entorno para la puesta en funcionamiento de aplicaciones

El ODROID-XU4 es un ordenador ideal para un entor-no de implementacioacuten remoto ya que es econoacutemico flexible cuenta con excelentes especificaciones teacutecnicas y puede ejecutar Linux Este artiacuteculo tiene por objetivo explicar coacutemo almacenar coacutedigo de implementacioacuten en tu repositorio de proyectos asiacute como automatizar las implementaciones y ejecuciones

Arch LinuxArch Linux es una distribucioacuten de Linux gratuita de coacutedigo

abierto que fue lanzada en 2002 Estaacute centrada en la elegancia la integridad del coacutedigo el minimalismo y la simplicidad y cuenta con que el usuario haga un esfuerzo en comprender el funcionamiento del sistema Arch Linux utiliza en particular un modelo de revisioacuten continua de modo que todo lo que se necesitas para conseguir el software del sistema maacutes reciente es actualizar el sistema de forma perioacutedica

Arch Linux puede ser algo difiacutecil de asimilar ya que uti-liza herramientas diferentes a las de una distribucioacuten Debian El gestor de paquetes se activa a traveacutes de ldquopacmanrdquo en lugar de ldquoapt-getrdquo y existe un gestor complementario de paquetes muy popular llamado ldquoyaourtrdquo Muchos de los servicios o her-ramientas maacutes comunes no se instalan por defecto

Arch Linux esta hecho principalmente para procesadores x86 pero un proyecto llamado Arch Linux ARM (ALARM) tiene una distribucioacuten ARM de Arch Linux para arquitectu-ras AArch64 ARMv8 y ARMv7 Hardkernel el fabricante de ODROIDs es de hecho un patrocinador del proyecto Arch Linux ARM

HOME DATA CENTER

HOME DATA CEnTERIMPLEMEnTACIOn DEL CODIGO COn ARCHLInuXpor John Skilbeck

Configurar la redDeberaacutes asignarle a tu dispositivo una direccioacuten IP LAN

DHCP reservada y en el mejor de los casos un nombre de host que se propagaraacute a lo largo de tu red por medio del servidor DNS de tu router De esta forma en nuestro entorno de desar-rollolocal podremos utilizar un nombre de host para resolver siempre el entorno de implementacioacutenremoto

Por ejemplo en mi red reservo el 192168249 a la direc-cioacuten MAC de mi ODROID Tambieacuten configuro una entrada DNS que asigna a esa direccioacuten IP ldquoodroidrdquo Utilizar un firm-ware personalizado en el router como Tomato USB o DD-WRT lo hace extremadamente faacutecil ya que esos firmwares convierten tu router en un pequentildeo ordenador Linux con una aplicacioacuten web GUI muy pulida aunque su implementacioacuten estaacute fuera del alcance de este artiacuteculo Si operas con subredes aseguacuterate dirigir el puerto hacia el puerto externo que se asigna al puerto SSH del dispositivo odroid ya que Git se ejecuta a traveacutes de SSH

Configurar el proyectoLoacutegicamente desearaacutes estandarizar el flujo de trabajo de la

implementacioacuten Esto haraacute que el trabajo con proyectos sea

el home data center de John es una auteacutentica obra de arte

ODROID MAGAZINE 20

extremadamente faacutecil y eliminas muchos de los cambios de contexto mental que utilizas cuando trabaja en varios proyec-tos Crearemos una carpeta para alojar todos nuestros archivos relacionados con implementaciones Coloca los archivos eje-cutables en ldquodeploybinrdquo y cualquier archivo cron en ldquodeploytasksrdquo (maacutes informacioacuten sobre esta cuestioacuten maacutes adelante)

Navega hasta el directorio del proyecto en una ventana de Terminal y luego escribe los siguientes comandos

$ mkdir -p deploybin

$ mkdir -p deploytasks

$ cd deploybin ampamp touch run-job ampamp

chmod u+x run-job ampamp cd -

$ cd deploytasks ampamp touch crontab

Tambieacuten puede estandarizar doacutende colocar tu coacutedigo fuente De esta forma le seraacute maacutes faacutecil a otras personas ver coacutemo se or-ganiza tu proyecto y conocer queacute es el coacutedigo fuente y queacute no

$ mkdir src

$ cd src ampamp (place source code here ie python core

py clojure coreclj nodejs appjs)

Simplificar los puntos de entradaIniciar una aplicacioacuten puede resultar algo confuso con todos

los comandos que se pueden ejecutar en diferentes lenguajes Por ejemplo puede usar Java ldquojava -jar [my-jar] jarrdquo o python ldquopython my-apppyrdquo y tu aplicacioacuten tambieacuten puede necesitar varios argumentos Todo esto deberiacutea simplificarse y resumirse en un archivo ldquodeploybinrun-jobrdquo

binsh

set -e

CMD=rdquosrcduckrdquo

exec $CMD $

Crear el archivo cronArch Linux no viene con un cliente o demonio cron por

defecto Instaacutelalo con ldquosudo pacman -Syu cronierdquo Utilizando cron puede ejecutar comandos en intervalos de tiempo espe-cificados haciendo uso de la sintaxis especial de cron Normal-mente se almacena en el archivo crontab del usuario al que puedes acceder con ldquocrontab -erdquo Sin embargo esto es demasi-ado manual y queremos usar coacutedigo como infraestructura Cron tambieacuten tiene algunos subdirectorios muy uacutetiles en ldquoetccronrdquo como ldquoetccrondailyrdquo yrdquoetccronhourly ldquo si co-locamos los archivos aquiacute eacutestos se ejecutaraacuten en los intervalos especificados

Revisa el archivo de ldquodeploytaskscrontabrdquo que colocare-mos en ldquoetccrondrdquo que se crea automaacuteticamente con nuestro script ldquoposttreceiverdquo

variables

SHELL=binbash

PATH=binusrbinusrlocalbinusrsbinusrlo-

calsbin

MAILTO=[your-email-address]gmailcom

cmd=rdquodeploybinrun-jobrdquo

app_dir=rdquohomeskilbjodeployappduckdnsrdquo

jobs

5 skilbjo cd ldquo$app_dirrdquo $cmd gtdevnull

Aquiacute tienes el esquema general de la estructura de un simple proyecto El uacutenico ejecutable del proyecto es un uacutenico script shell ubicado en ldquosrcrdquo

$ tree

READMEmd

deploy

bin

post-receive

run-job

tasks

crontab

src

duck

4 directories 5 files

GitPrimero queremos agregar una URL remota a nuestro

proyecto en nuestro entorno local

$ git remote add odroid sshodroid~deploygit

duckdnsgit

Ten en cuenta que dependiendo de la topologiacutea de tu red es posible que tenga que modificar esta url Si no puedes asignar nombres de host la URL de git se veriacutea asiacute donde 192168249 es la direccioacuten IP LAN de tu dispositivo

$ ssh192168249~deploygitduckdnsgit

Si tienes un usuario en tu entorno ODROID distinto al que tienes en tu entorno de desarrollo la url se veriacutea asiacute donde ldquoskilbjordquo es tu nombre de usuario

$ sshskilbjoodroid~deploygitduckdnsgit

Si tu servidor remoto estaacute en una subred diferente y tienes redireccionados los puertos tu url tendriacutea este aspecto donde

HOME DATA CENTER

ODROID MAGAZINE 21

ldquo2222rdquo es tu puerto externo

$ ssh192168122222~deploygitduckdnsgit

En el directorio principal de tu entorno remoto crea una carpeta llamada ldquo~deployrdquo con dos subcarpetas ldquo~deployapprdquo y ldquo~deploygitrdquo Los subdirectorios de ldquo~deploygitrdquo seraacuten los puntos finales de nuestros desarrollos y con un hook ejecutaraacuten comandos de implementacioacuten en los subdirectorios de ldquo~ deployapprdquo

Primero navega hasta el directorio principal del entorno re-moto y a continuacioacuten escribe los siguientes comandos

$ mkdir -p ~deployapp

$ mkdir -p ~deploygit

$ mkdir -p ~deploygitduckdnsgit

$ mkdir -p ~deployappduckdns

Ahora en ldquo~ deploygitduckdnsgithooksrdquo crea un archi-vo ejecutable llamado ldquopost-receiverdquo que se activaraacute con cada accioacuten hacia el punto final

$ cd ~deployappgitduckdnsgithooks

$ touch post-receive ampamp chmod u+x post-receive

$ vim post-receive

Rellena el ejecutable con lo siguiente en el directorio ldquo~deploygitduckdnsgithooksrdquo del entorno remoto

usrbinenv bash

set -eou pipefail

user=$(whoami)

dir=rdquohome$userdeployapprdquo

app=$(basename $(pwd) | sed -e lsquosgitrsquo)

deploy_dir=rdquo$dir$apprdquo

cron_dir=rdquoetccrondrdquo

GIT_WORK_TREE=rdquo$deploy_dirrdquo git checkout -f

cd ldquo$deploy_dirrdquo

build steps here

case ldquo$userrdquo in

(skilbjo) sudo cp deploytaskscrontab ldquo$cron_

dir$apprdquo

esac

you can also do project-specific build steps in

this section like install

dependencies (ie npm install) compile source

code (ie lein uberjar)

as well as if a long-lived app run commands as

well (ie java -jar my_jarjar)

echo ldquoall donerdquo

exit 0

ImplementacioacutenAhora estamos listos para implementar ya que nuestro en-

torno local estaacute configurado para alcanzar el punto final del servidor de implementacioacuten nuestro entorno remoto estaacute con-figurado para recibir la notificacioacuten y revisar el coacutedigo fuente ejecutar cualquier paso de compilacioacuten y colocar una tarea en el directorio cron del sistema para su lanzamiento Ponto todo en praacutectica con el siguiente comando en el directorio del proyecto del entorno local

$ git push odroid

Ademaacutes para ver coacutemo se ha implementado todo esto en un proyecto de ejemplo visita httpbitly2lthYKW

Pasos finalesSe puede antildeadir al flujo anterior algunas caracteriacutesticas

como son muacuteltiples entornos ya sea con muacuteltiples ODROIDs o con un solo ODROID trataacutendolo como un servidor de ser-vicio Esto se puede hacer con subdirectorios bajo ldquo~deployrdquo como ldquo~deploystagingappmy_apprdquo o ldquo~ deployproduc-tionappmy_apprdquo

Ademaacutes podriacuteas antildeadir un servicio de integracioacuten conti-nua como CircleCI que ejecutariacutea una suite de testeo desde cada desarrollo a GitHub y si tiene eacutexito compila una imagen Docker No podriacuteas entonces tener un archivo en el entorno remoto que verificariacutea una imagen de un repositorio Docker y la ejecutariacutea en un intervalo especificado Esto es lo que hacen muchos de los softwares DevOps distribuidos como Mesos y Kubernetes pero en un entorno mucho maacutes rico que BASH y Linux

Referencias

Artiacuteculo Wikipedia de Arch linux httpbitly2l71ADKWebsite Arch linux ArM httpsarchlinuxarmorgArtiacuteculo que leiacute hace unos tres antildeos y que me inspiroacute para escribir mi propio artiacuteculo httpbitly2m5JAct

HOME DATA CENTER

ODROID MAGAZINE 22

odroid ARCADE BOXLA EXPERIEnCIA PERfECTA COn TuS JuEGOS ARCADE fAvORITOSpor brian Kim charles park y John lee

ARCADE BOX

Los ODROIDs tienen mejor rendimiento que las placas de la competencia especialmente en lo que respecta al renderizado de video lo que significa que

las placas ODROID son ideales para jugar lo cual hacen muchos usuarios de ODROID Ya hay disponibles varios sistemas operativos de plataforma de juegos como Lakka (httpbitly1NO8BBC) y ODROID GameStation Tur-bo (httpbitly1ASFO5O) Para disfrutar auacuten maacutes de nuestras sesiones de juegos creamos nuestra propia consola arcade con simples botones GPIO y joysticks y la llama-mos la ODROID Arcade Box Elegimos un ODROID-XU4 para este proyecto porque es el que tiene mejor rendimiento GPU de todos los dispositivos ODROID actuales En este artiacuteculo vamos a describir como hemos creado la ODROID Arcade Box

Requisitos( Figura 3 ndash )Decidimos hacer la ODROID Arcade Box usando

un MDF (tablero de fibra de densidad media) El Shifter Shield del XU4 tambieacuten es uacutetil para utilizar los pines de expansioacuten del ODROID-XU4 Los Joysticks los botones y los cables eran los componentes de entrada y se utilizoacute

Nuestro primer y simple prototipo

ODROID MAGAZINE 23

panel MDf 12t2eA 600x2202eA 600x752eA 220x75taladroplegadoraDesmontadorcinta meacutetricaNavaja multiusoAlicates de punta largaoDroiD-xU4xU4 Shifter shieldSMpS (fuete Alimentacioacuten)

extendedores hDMi USb ethernetenchufe de alimentacioacuten y Switchbisagras 2eAreceptor de puertacaucho 4eAtornillospulsadores 19eAJoystick 2eAcablesterminales

una SMPS (Fuente de alimentacioacuten conmutada) como fuente de alimentacioacuten Las herramientas y las piezas utilizadas las tienes en esta paacutegina

La ODROID Arcade Box necesita un total de 27 entradas (19 entradas para botones y 8 entra-das para joysticks) Las 24 entradas GPIO digi-tales del ODROID-XU4 no son suficientes para las 27 entradas de modo que creamos dos puertos ADC adicionales para los tres botones que nos fal-taban Los valores de entrada ADC se basan en el voltaje de entrada y los valores de entrada digital y analoacutegica se procesan en el demonio GPIO que se describe a continuacioacuten

Disentildeo y montajeLos paneles de la ODROID Arcade Box deben

ser disentildeados y fabricados para que los botones y joysticks esteacuten bien colocados Elegimos MDF 12T teniendo en cuenta el precio y la durabilidad El dise-ntildeo se puede hacer con cualquier herramienta CAD como Google Sketch o SolidWorks Aunque existen muchas plantillas de disentildeo para los paneles de joypad decidimos elegir un disentildeo arcade estaacutendar japoneacutes

El primer paso del montaje es unir la placa al panel MDF Este paso fue faacutecil aunque nos llevo maacutes tiempo que el resto Despueacutes insertamos los joysticks la toma de corri-ente el interruptor y los botones en el panel MDF superior Los conectores HDMI Ethernet y USB se colocaron en la parte trasera del panel MDF El siguiente paso fue montar cada panel MDF usando un taladro para hacer los agujeros luego con tornillos los sujetamos

El uacuteltimo paso del montaje de la ODROID Arcade Box es conectar por cable los pines de expansioacuten del ODROID-XU4 a los componentes de entrada En este proyecto dise-ntildeamos las entradas GPIO externas tal y como se muestra en la paacutegina 26 Los botones Select y Temp estaacuten conecta-dos a puertos de expansioacuten ADC

Configuracion del softwareDesarrollamos un nuevo demonio GPIO llamado gpio_

keyd (httpbitly2ljOZKg) Este demonio es capaz de asignar entradas GPIO y eventos claves usando uinput y wiringPi una libreriacutea de acceso GPIO basada en pines Estaacute disentildeada para que le sea familiar a quiene ya ha utilizado el sistema de cableado Arduino Aunque la blibreriacutea wiring-Pi upstream soacutelo admite Raspberry Pi Hardkernel ofrece una versioacuten de wiringPi para ODROIDs en su repositorio GitHub (httpbitly1Eq3UpF) El moacutedulo uinput es un moacutedulo del kernel de Linux que gestiona el subsistema de entrada del usuario Se puede utilizar para crear y manejar dispositivos de entrada desde una aplicacioacuten

ARCADE BOX

herramientas compentes y lo que hay justamente debajo

esquema de los puertos de expansioacuten

ODROID MAGAZINE 24

Elegimos ODROID GameStation Turbo (httpbitly1ASFO5O) como plataforma de software para nuestra ODROID Arcade Box que tiene integrado uinput Debes asegurarte de que el archivo de dispositivo uinput existe en el sistema operativo elegido porque algunos no tienen dispositivos uinput

$ ls devuinput

Si tu sistema operativo no tiene un archivo de disposi-tivo devuinput entonces seraacute necesario recompilar e in-stalar un nuevo kernel con la opcioacuten de configuracioacuten IN-PUT_UINPUT habilitada La paacutegina Wiki en httpbitly1YIToBI describe coacutemo compilar e instalar la imagen del kernel a partir del coacutedigo fuente

$ make menuconfig

Device Drivers

-gt Input device support

-gt Generic input layer

-gt Miscellaneous device

-gt User level driver support ltgt

Ten en cuenta que wiringPi debe instalarse antes de in-stalar gpio_keyd En la imagen GameStation de ODROID los comandos sudo deben ejecutarse como root porque la cuenta ldquoodroidrdquo no estaacute designada como usuario sudo

$ git clone httpsgithubcomhardkernelwiringPi

git

$ cd wiringPi

$ sudo build

Descarga el coacutedigo fuente gpio_keyd el cual estaacute dis-ponible en nuestro repositorio GitHub El procedimiento para compilar e instalar gpio_keyd es muy simple

$ git clone httpsgithubcombkrepogpio_keydgit

$ cd gpio_keyd

$ make

$ sudo make install

El script gpio_keyd hace referencia a etcgpio_keydconf como el predeterminado para la informacioacuten de los botones y GPIO El archivo de configuracioacuten fue modi-ficado para las 27 entradas de la ODROID Arcade Box Algunas botones ya se utilizaban en el emulador de juego de modo que tuvimos que cambiar la configuracioacuten del emulador para evitar conflictos entre los botones de en-trada GPIO y el emulador Ten en cuenta que el campo ltGPIO pingt en el archivo de configuracioacuten hace referen-

ARCADE BOX

plano del disentildeo de joypad

la oDroiD Arcade box montada

ODROID MAGAZINE 25

cia al nuacutemero wiringPi no al GPIO y al nuacutemero de pin (httpbitly2lbzPIB)

Ejemplo de configuracioacuten para las 27 entradas etcgpio_keydconf

Digital input ltKey codegt ltGPIO typegt ltGPIO pingt ltActive valuegt User 1KEY_LEFT digital 15 0KEY_RIGHT digital 1 0KEY_UP digital 4 0KEY_DOWN digital 16 0KEY_A digital 2 0KEY_S digital 3 0KEY_D digital 30 0KEY_F digital 21 0KEY_Z digital 8 0KEY_X digital 9 0KEY_C digital 7 0KEY_V digital 0 0 User 2KEY_BACKSLASH digital 12 0KEY_SLASH digital 13 0KEY_SEMICOLON digital 14 0KEY_LEFTBRACE digital 5 0KEY_Y digital 26 0KEY_U digital 27 0KEY_I digital 22 0KEY_O digital 23 0KEY_H digital 6 0KEY_J digital 10 0KEY_K digital 11 0KEY_L digital 31 0

Analog input ltKey codegt ltGPIO typegt ltADC portgt ltADC ac-tive valuegtKEY_B analog 0 0KEY_N analog 0 2045KEY_M analog 1 2045

To run gpio_keyd daemon at every startup is conve-nient for ODROID Arcade Box

etcinitdgpio_keyd binsh BEGIN INIT INFO

ARCADE BOX

Mapeo Gpio externo para los botones y Joysticks

cableado de la oDroiD Arcade box

ODROID MAGAZINE 26

Provides gpio_keyd Required-Start $all Required-Stop Default-Start 2 3 4 5 Default-Stop Short-Description Run usrbingpio_keyd if it ex-ist END INIT INFO

PATH=sbinusrsbinbinusrbin

libinitvarssh

liblsbinit-functions

do_start() if [ -x usrbingpio_keyd ] then usrbingpio_keyd -d ES=$ [ ldquo$VERBOSErdquo = no ] ampamp log_end_msg $ES return $ES fi

case ldquo$1rdquo in start) do_start restart|reload|force-reload) echo ldquoError argument lsquo$1rsquo not supportedrdquo gtamp2 exit 3 stop) killall gpio_keyd exit 0 ) echo ldquoUsage $0 start|stoprdquo gtamp2 exit 3 Esac

$ sudo chmod +x etcinitdgpio_keyd$ sudo update-rcd gpio_keyd defaults$ sudo reboot

En los comandos anteriores el script gpio_keyd se ejecuta como un demonio uti-lizando la opcioacuten ldquo-drdquo El uso de gpio_keyd se puede comprobar con la opcioacuten ldquo-hrdquo Comprue-ba de nuevo las teclas usadas por el juego o el emulador despueacutes fija la configuracioacuten del gpio_ keyd correctamente Es ahora cuando estaacutes listo para jugar y disfrutar de tus juegos con tu nueva ODROID Arcade Box

ARCADE BOX

the King of fighters 98 John vs brian

ODROID MAGAZINE 27

En este artiacuteculo analizaremos las diferentes formas que existen para ob-tener los datos del uso de la red

ConfiguracioacutenLa forma normal de analizar los datos

de traacutefico de la red es mediante el uso de datos a traveacutes de las aplicaciones de configuracioacuten del sistema tal y como se muestra en la figura 1

El uso de datos muestra la cantidad total de traacutefico de datos entrante y sa-liente que ha sido utilizada por una apli-cacioacuten Si seleccionas la aplicacioacuten veraacute una pantalla como la que aparece en la Figura 2 que muestra informacioacuten detal-lada sobre el uso de la aplicacioacuten tanto en primer plano como de fondo

La informacioacuten que se muestra den-tro de la aplicacioacuten de Configuracioacuten se almacena en data systemnetstats que requiere acceso root Al eliminar todo lo que hay dentro de esta carpeta se resta-

Como desarrolladores queremos que nuestras aplicaciones sean eficientes y a menudo nos gus-

tariacutea saber cuaacutento ancho de banda de red estaacute utilizando nuestra aplicacioacuten Esto es muy uacutetil por varias razones

bull Para monitorizar y asegurarnos de que la aplicacioacuten es realmente la nuestra y no una aplicacioacuten que ha sido pirateada y publi-cada con diferentes nombres en Play Store

bull Para asegurarnos de que no es-tamos cogiendo ancho de banda innecesario del plan de datos del usuario

bull Para comprobar que el disposi-tivo que estamos usando no estaacute accediendo a Internet sin nuestro consentimiento

blecen las estadiacutesticas de red mostradas en esta aplicacioacuten

Estadiacutesticas de la redLa aplicacioacuten de configuracioacuten nos

puede dar una informacioacuten general so-bre las estadiacutesticas de la red de datos que es un buen comienzo pero a veces necesitamos un anaacutelisis maacutes detallado que puede hacerse a traveacutes del coman-do dumpsys Android cuenta con una poderosa herramienta llamada dumpsys que nos permite obtener una instan-taacutenea o volcado del sistema que pu-ede incluir informacioacuten sobre la red la memoria y otros componentes Lee la documentacioacuten de Android en httpbitly2kK9dep para obtener maacutes infor-macioacuten del sistema Para conseguir maacutes informacioacuten relacionada con la red nos interesa el comando

$ dumpsys netstats detail

La Figura 3 muestra un pantallazo de lo que puedes ver desde una tablet Nexus 7 que ejecuta Lollipop 511

Hay algunas cuestiones importantes para entender las estadiacutesticas

bull Las estadiacutesticas UID muestran el desglose de las aplicaciones de primer plano y de fondo

bull Uid muestra el ID de usuario de la aplicacioacuten que se puede utili-zar para relacionar eacutesta con la in-

DESARROLLO AnDROID AnALIzAnDO EL uSO DE RED DE LAS APLICACIOnESpor Nanik tolaram

DESARROLLO ANDROID

figura 1 - Uso de datos en la configuracioacuten

figura 2 - Desglose del uso de datos de la app

ODROID MAGAZINE 28

$ dumpsys package detail

Este comando te proporcionaraacute una larga lista de informacioacuten sobre los pa-quetes que estaacuten instalados en tu dis-positivo Para las estadiacutesticas de red nos interesa la seccioacuten que se muestra en la Figura 5

La seccioacuten resaltada muestra el userId que se relaciona con el uid que se mues-tra en las estadiacutesticas de red Al relacio-nar este nuacutemero sabemos el nombre del paquete de la aplicacioacuten sobre el que es-tamos leyendo las estadiacutesticas de red

Aplicacioacuten de ejemplo

La aplicacioacuten de ejemplo de este artiacute-culo se puede descargar desde httpbitly2m8WenA que muestra coacutemo etiqu-etar la conexioacuten de red desde distintas

secciones de la aplicacioacuten lo cual puede ayudar a analizar el volumen de traacutefico de datos de la aplicacioacuten La Figura 6 muestra un ejemplo de coacutemo lo vemos si utilizamos Android Device Monitor (dentro de Studio diriacutegete a Tools -gt Android -gt Android Device Monitor)

Tal y como se puede ver en el graacutefico la simple aplicacioacuten tiene 3 conexiones dife-rentes y cada una de ellas estaacute accediendo a un sitio web diferente Al etiquetarlas con

formacioacuten del paquete (que ver-emos en la seccioacuten de detalles del paquete dumpsys) con el objeto de conocer queacute aplicacioacuten utiliza estas estadiacutesticas de red

bull Las etiquetas son uacutetiles si de-sea ver la cantidad de datos que utiliza cada conexioacuten de tu apli-cacioacuten Puedes ver un ejemplo de esto en la Figura 4 que muestra que el uid 10007 tiene las siguien-tes etiquetas 0x30000401 0x30003201 0x30002804 0x10000401 y 0x30000407 Es-tas etiquetas ayudan al desarrol-lador a saber cuaacutentos datos uti-liza cada parte de la aplicacioacuten Estas estadiacutesticas de red en par-ticular estaacuten vinculada al paquete Google Framework que forma parte de Google Play Store

En el siguiente apartado veremos coacutemo escribir una aplicacioacuten etiquetando el hilo que hace la conexioacuten de red para determi-nar la cantidad de datos que se utilizan

Estadiacutesticas de paquetes

En la seccioacuten anterior analizamos el uid que aparece al ejecutar el comando dumpsys netstats Ahora necesitamos sa-ber queacute uid corresponde a la aplicacioacuten en el dispositivo y esto se hace mediante el siguiente comando

DESARROLLO ANDROID

figura 3 ndash estadiacutesticas de red con Dumpsys

figura 4 - estadiacutesticas de etiquetas UiD

figura 5 - Detalles del paquete dumpsys

figura 6 - etiquetas de red

coacutedigos diferentes podemos ver la cantidad de traacutefico que consume cada conexioacuten y esto nos ayudaraacute a ver si nuestra aplicacioacuten utiliza el ancho de banda de un modo eficiente

El coacutedigo del siguiente fragmento muestra el uso de la API TrafficStats interna Esta etiqueta API muestra el subproceso que utiliza actualmente un socket con un identificador y todo el traacute-fico que pasa por la misma conexioacuten se grabaraacute junto Asiacute es como la aplicacioacuten es capaz de agrupar las 3 conexiones diferentes Internamente Android utili-za el moacutedulo xt_qtaguid del kernel para realizar este tipo de etiquetado Tienes disponible maacutes informacioacuten en httpbitly2kU8KXB

public void getUsingNormalURLC

onnection(String urlText int

threadTag)

throws IOException

URL url = null

TrafficStats

setThreadStatsTag(threadTag)

HttpURLConnection urlConnec-

tion = getConnection(url)

try

finally

TrafficStatsclearThread-

StatsTag()

ODROID MAGAZINE 29

Disgustado te subes a tu 4x4 de dominacioacuten del mun-do un vehiacuteculo que desde fuera parece maacutes bien un viejo camioacuten de granja pero por dentro se parece maacutes

al sistema de control de un transbordador espacial porque el conductor del restaurante oriental que realiza las entrega a do-micilio estaacute enfermo Ahora tienes que ir a recoger tu propia comida ldquoQueacute rudimentariordquo piensas cuando sales de tu garaje secreto Justamente cuando vas a parar el vehiacuteculo en un stop oyes un fuerte ruido Sales y te diriges raacutepidamente a la parte posterior del 4x4 donde observas un cubo de basura Te tiras de los pelos y piensas ldquoiexclEsos basureros Neanderthales dejaron otra vez el cubo en mediordquo Ahora te toca recoger los restos de tu cena y la basura de otros

Conforme te vas alejando para hacer tus recados empiezas a pensar en coacutemo evitar este inconveniente en el futuro Varias ideas te vienen a la mente

Un sistema lidar para escanear en 3D el entorno en tiempo real y alarmas sonoras cuando sea necesarioUn brazo ciberneacutetico colocado en la parte posterior del 4x4 que procese video para detectar objetos agarrarlos y moverlosUna simple camara trasera

Empiezas a considerar la viabilidad de cada una

Muy bueno pero demasiado complicado y costosoAuacuten mejor y un proyecto propio de un cientiacutefico loco pero demasi-ado complicado y costosoya tengo dos iexclpero estaba demasiado preocupado en mis pensa-mientos para prestarles atencioacuten

Lo que necesitas es algo simple sin complicaciones y barato que haga sonar una alarma para alertarte incluso cuando estar absorto en tus pensamientos ldquoAhardquo Recuerdas haber visto un nuevo producto en ameriDroid que puede hacer precisamente esto Se trata de un microcontrolador conectado al USB que soporta hasta 6 sensores ultrasoacutenicos con simples comandos en serie (httpbitly2l26ptV) ldquoiexclPerfectordquo Piensas

Regresas a tu laboratorio subterraacuteneo con el pollo Kung Pao en la mano te apresurar a encender tus monitores entras en el sitio web ameriDroid y pides un kit ldquoUSB Ultrasonic Ranging Sensorrdquo con 6 sensores y carcasas

Vas sintiendo una sensacioacuten de alivio a medida que regresas a los 12 proyectos en lo que ya estabas trabajando a la espera de que pasen un par de diacuteas hasta que llegue tu nuevo pedido Mientras te comes tu Kung Pao dibujas un diagrama de coacutemo quieres colocar los sensores en la parte posterior de tu vehiacuteculo

Un par de diacuteas maacutes tarde el kit llega Inmediatamente em-piezas a montar el kit y los sensores en la parte posterior de tu 4x4 teniendo cuidado de usar sellador de silicona para pro-teger los sensores de la lluvia aguanieve y nieve que puedas encontrar durante tus aventuras para dominar el mundo

A continuacioacuten consultas las instrucciones proporcionadas por ameriDroid con el kit sobre coacutemo controlar y leer los sen-sores desde tu fiel ODROID-C2 y VU7 que montaste en el salpicadero para este propoacutesito

Conectando el cable USBEl cable USB suministrado debe conectarse al microcon-

trolador (la pequentildea placa de circuito con filas de pines que sobresalen) El microcontrolador tiene una fila de 4 o 6 pines

DETECTAR LA PRESEnCIACROnICAS DE un CIEnTIfICO LOCOpor bo lechnowsky

SENSOR ULTRASONICO

ODROID MAGAZINE 30

en un extremo Si tiene 6 pines ceacutentrate en los 4 pines centrales y sigue estas instrucciones

Negro - conectar a GNDrojo - conectar a VccVerde - conectar a rxi

blanco - conectar a txD

Conectando los sensoresultrasoacutenicos

En cada sensor ultrasoacutenico hay cuatro pines marcados Vcc Trig Echo Gnd Para el primer sensor ultrasoacutenico conecta el pin 2 del microcontrolador al pin ldquoTrigrdquo del sensor ultrasoacutenico Conecta el pin 3 del microcontrolador al pin ldquoEchordquo del sensor Conecte el pin ldquoVccrdquo del sensor a DC 5V (el pin ldquoVCCrdquo del microcontrolador suministra 5V) y el pin ldquoGndrdquo del sensor a una conexioacuten a tierra como por ejemplo los pines ldquoGNDrdquo del microcontrolador

Si conectas un segundo sensor de ultrasonidos conecta ldquoTrigrdquo al pin 4 y ldquoEchordquo al pin 5 Continuacutea conectando los siguientes pines a los sensores hasta los pines 12 y 13 si al final optas por conectar los seis sensores ultrasonidos

Conexioacuten del softwareUtilizas un programa terminal como PuTTY Screen o tu

lenguaje de script o programacioacuten favorito para conectarte al puerto serie que aparece cuando te conectas el sensor ultrasoacuteni-co Esto variaraacute en funcioacuten del sistema operativo que utilizas para conectarte al microcontrolador En Windows consultar el ldquoAdministrador de dispositivosrdquo es la forma maacutes comuacuten de averiguarlo En Linux ldquodmesgrdquo o ldquolsusbrdquo son las formas de de-tectar a queacute puerto estaacute conectado Deberiacuteas ver algo denomi-nado ldquoPL2303rdquo que es la conexioacuten del microcontrolador Si recibes informacioacuten basura en tu terminal cuando te conectes aseguacuterate de que los ajustes en serie son 9600 baudios 8 bits ninguno (paridad) y 1 bit de parada Aquiacute tienes una lista de los comandos que puede aceptar el microcontrolador

bull debug on Activa la retroalimentacioacuten detallada Estaacute deshabilitada por defecto nos proporcionaraacute aclaracio-nes sobre los errores de entrada

bull debug off desactiva la retroalimentacioacuten detalladabull init x y activa un HC-SR04 en los pines especificados

X es trigger Y es echo Estos deben ser pines digitales El dispositivo 0 estaacute preestablecido en los pines 2 y 3 de modo que no es necesario especificar estos pines La seleccioacuten de pines no vaacutelidos devolveraacute un signo de ex-clamacioacuten ()

bull ping enviacutea una sola lectura del HCSR04 previamente utilizado Si no se ha utilizado todaviacutea se usaraacute el dis-positivo 0 Si al comando le sigue un espacio y un nuacutemero entre 0-100 (exclusivo) se realizaraacute ese nuacutemero de lecturas emitiendo primero el promedio de esas lec-

SENSOR ULTRASONICO

turas despueacutes el nuacutemero de lecturas fallidas (que no cuentan para el promedio) y luego los valores miacutenimo y maacuteximo de lectura separados por espacios En cual-quier caso si una sentildeal se desconecta automaacuteticamente devolveraacute -1

bull start Hace ping constantemente a todos los dispositivos conectados en secuencia Debido a que los dispositivos se utilizan uno a uno el flujo de datos de este comando seraacute maacutes raacutepido si los dispositivos miden distancias cor-tas Si este comando le sigue un espacio y un nuacutemero mayor que 0 la placa esperaraacute estos milisegundos entre la lectura del uacuteltimo dispositivo y la lectura del primer dispositivo El resultado de este comando seraacute la lectura de cada dispositivo (con un uacutenico espacio despueacutes de cada uno) y una vuelta tras el uacuteltimo dispositivo

bull stop detiene la operacioacuten ldquostartrdquo soacutelo es efectivo tras haber iniciado ldquostartrdquo

bull mode emite el modo de medicioacuten del flujo M para meacutetrico (miliacutemetros) I para Imperial (deacutecimas de pul-gada) o R para Raw (la longitud de pulso en microse-gundos devuelta por el HC-SR04) El valor predeter-minado es M

bull timeout emite el tiempo de espera actual para lecturas de la sentildeal El tiempo de espera es la mayor cantidad de microsegundos que la placa esperaraacute antes de declarar que el HC-SR04 ha realizado una mala lectura lo cual no es necesariamente lo mismo que el pulso maacutes largo que la placa aceptaraacute del HC-SR04 Cuando la placa mide el pulso del HC-SR04 primero espera a que el HC-SR04 comience a enviar un pulso Este tiempo cuenta para el tiempo de espera Cuando este comando le sigue un espacio y un nuacutemero el tiempo de espera se ajusta a ese nuacutemero El valor predeterminado es 1 segundo (1000000 microsegundos)

bull ver emite informacioacuten de versioacuten y creacuteditos

Si cualquier comando (o ninguacuten comando) estaacute precedido por un uacutenico diacutegito de 0-5 (inclusive) seguido de un espacio el dispositivo que corresponde a ese diacutegito se seleccionaraacute para ser usado con el siguiente comando ldquopingrdquo Cada vez que la placa esteacute lista para un comando emitiraacute ldquogtrdquo para la serie La uacutenica excepcioacuten estaacute tras el comando ldquostartrdquo que no solicitaraacute entrada hasta que sea reconocido ldquostoprdquo

ODROID MAGAZINE 31

iquestCoacutemo empezaste con los ordenadoresCuando empeceacute mi negocio tuve que decidir queacute plat-

aforma de hardware iba a utilizar para la recogida de datos del traacutefico Simplemente para que no pienses mal de miacute mis caacutemaras de traacutefico no son las que se usan para multar por exceso de velocidad o algo asiacute Mi sistema estaba desti-nado suavizar el flujo de traacutefico fijando los controles oacutepti-mos de las sentildeales de traacutefico Anteriormente usaba un PC industrial para ejecutar mi software de reconocimiento de imaacutegenes Ahora uso la familia de dispositivos ODROID para esta cuestioacuten

iquestQueacute te atrajo de la plataforma ODROID En 2012 useacute Google para buscar una plataforma que

fuera muy compacta y al mismo tiempo potente para que cubriera mis necesidades que resultoacute ser la placa

Por favor haacuteblanos un poco sobre tiSoy ingeniero de electroacutenica y software en Rusia desde

hace 47 antildeos Naciacute en Siberia y tras terminar la escuela me mudeacute a Moscuacute para estudiar en la universidad Ser estudi-ante en el Instituto de Aviacioacuten de Moscuacute (MAI) fue una experiencia increiacuteble probablemente la mejor de mi vida A principios de los 90 llegoacute a Rusia la era de los microordena-dores soliacutea jugar a un juego de saltos en una CPU z80 y el i486 Tras finalizar mis estudios universitarios y de posgrado me convertiacute en ingeniero Trabajeacute en unos cuantos puestos de trabajo para diferentes empresas y finalmente decidiacute em-prender mi propio negocio En 2006 puse en marcha una iniciativa para crear sistemas de recuento del traacutefico de au-tomoacuteviles Estoy casado y tengo una hija de 21 antildeos llamada Lena que trabaja como enfermera Mi esposa Nadezhda es disentildeadora de vestuario de produccioacuten pero ahora trabaja como disentildeadora web Ella es aficionada a la fotografiacutea digi-tal y le encanta su caacutemara reacuteflex digital

COnOCIEnDO un ODROIDIAnvIACHESLAv ALEKSEEveditado por rob roy (robroy)

CONOCIENDO UN ODROIDIAN

Viacheslav disfruta tocando la guitarra y escuchando muacutesica

1995 en el campus MAi probando uno de los primeros equipos Vr comerciales del mundo que funcionaba a 640x480 a 30fps Utiliz-aba un sensor magneacutetico en la nuca para la posicioacuten de la cabeza la mejor broma que se podiacutea gastar a alguien era colocar un imaacuten cerca de la espalda y sacudirlo iexcllos gritos estaban garantizados cuando el mundo en 3D daba vueltas sin cesar

ODROID MAGAZINE 32

ODROID-X2 Con sus cuatro nuacutecleos funcionando a 17 GHz calculaba con facilidad los algoritmos de reconteo del traacutefico de automoacuteviles Maacutes tarde cambieacute al U3 y el XU4

iquestCuaacutel es tu ODROID favorito y por queacuteDe momento mi favorito es el XU4 Mi sistema estaacute

basado en el tratamiento de fotogramas de video en tiempo real por lo que el bus USB 30 del XU4 es bastante bueno para una caacutemara con una interfaz de captura de viacutedeo Para mi sistema es muy importante tener una buena conexioacuten entre la caacutemara de viacutedeo y la CPU Probablemente tendreacute que echar un vistazo a las interfaces de nivel inferior como MIPI CSI-2 que por desgracia estaacuten ausente en el XU4 Recientemente he estado aprendiendo como usar la caacute-mara oCam GS BW La caacutemara es buena en siacute misma pero para un uso industrial al aire libre tengo que implementar un software de control de exposicioacuten automaacutetica y posible-mente de control de apertura de la lente que todaviacutea estaacute en estudio

MEET AN ODROIDIAN

Una vieja joya el mini ordenador Nixdorf

An old gem the Nixdorf mini computer

CONOCIENDO UN ODROIDIAN

iquestQueacute aficiones e intereses tienes aparte de los ordenadoresDisfruto conduciendo y leyendo sobre coches y viendo

los campeonatos de carreras de F1 Tambieacuten me gusta via-jar pescar escuchar muacutesica y tocar la guitarra Tengo un gato siberiano llamado Leia y soy fan de Star Wars

iquestQueacute consejo le dariacuteas a alguien que quiere aprender maacutes sobre la programacioacuten

Hacer software es algo increiacuteble y miacutestico Es una fusioacuten de arte y tecnologiacutea Nada te inspira maacutes que tu aplicacioacuten cuando empieza a cobrar vida Sin embargo siempre estaacute ahiacute el otro lado de la Fuerza Estar listo para instruirte inc-esantemente El desarrollo de software es una de las activi-dades que cambia maacutes raacutepido Si tienes pensado dejar de hacer software en uno o dos antildeos puede dejar de aprender ahora El conocimiento se volveraacute anticuado en un par de antildeos maacutes o menos Para estar en lo maacutes alto siempre tienes que correr Es similar a la cancioacutenrdquoRun like Hellrdquo de Pink Floyd Si estaacutes listo para vivir de esta forma seguro que tendraacutes eacutexito

ODROID MAGAZINE 33

Page 18: Estación ARCADE · gias de marketing, administración de medios sociales y producción multimedia impresa, web, vídeo y cine. Ges-tionando múltiples cuentas con agencias y productores

El HiFi Shield 2 (39$ httpbitly2lHSlZJ) es un Con-vertidor Digital a Analoacutegico de Alta definicioacuten (DAC) para el ODROID-C2 y el ODROID-C1+ Se trata de

una placa de sonido especial para el ODROID-C2 y C1 + que estaacute optimizada para mejorar la calidad de reproduccioacuten del sonido Ofrece un sonido muy bien equilibrado consistente intenso amplio y muy bien dimensionado por niveles Hemos analizado la calidad de audio de la salida HiFi Shield 2 DAC con un equipo estaacutendar de la industria del sonido llamado Au-dio Precision Audio Precision es un analizador de audio de alto rendimiento optimizado para la produccioacuten de audio digital

Usando el chip DAC PCM5242 de uacuteltima generacioacuten de Texas Instrument conocido como Burr-Brown el HiFi Shield 2 soporta formatos de audio de 16 24 y 32 bits con una ra-tio THD+N miacutenima (0002) y una dinaacutemica ideal (114dB +) ademaacutes de sorprendentes tasas de muestreo de 384 kHz La interfaz dedicada SPDIF soporta una definicioacuten de hasta 192kHz24bit a traveacutes de una salida oacuteptica (Toslink)

Si hacemos uso del puerto de expansioacuten I2S en el C2C1+ no es necesario ocupar un puerto USB permitiendo al usu-ario seleccionar el sistema de reproduccioacuten de audio que desee como Volumio y Debian (DietPi) para reproducir sonido HiFi

HIFI SHIELD 2

HIfI SHIELD 2EL MEJOR SOnIDO quE PODRAS COnSEGuIR En AnDROIDeditado por rob roy (robroy)

oDroiD-c2 y hifi Shield 2 Audio pb +J

primer plano de la placa con anotaciones

Distribucioacuten de los 7 pines i2S del c2c1+

la salida de audio es estaacutendar la salida de color rojo corresponde al canal de audio iz-quierdo y la salida de color blanco correspon-de al canal de audio derecho

ODROID MAGAZINE 18

Detalles

La guiacutea de configuracioacuten de UbuntuLinux para ODROID-C2 estaacute disponible en httpbitly2brrGdG y para ODROID-C1+ en httpbitly2lI7AC7 El sistema operativo oficial Volumio 2 se puede descargar desde httpbitly2kOJNAV y la imagen DietPi basada en Debian se encuentra en httpbitly2ls45yM Puede ver los esquemas en httpbitly2mnukV4

Diagrama por bloques del hifi Shield2

Caracteriacutesticasbull El control de volumen a traveacutes de la interfaz

i2c es una gran caracteriacutestica para mantener una buena calidad del sonido con varios voluacutemenes de salida de audio

bull Los puertos de salida incluyen terminales esteacute-reo rcA chapados en oro

bull La fuente de alimentacioacuten tiene habilitado un regulador de interferencias de ruido ultra-bajo lo cual reduce el ruido de la fuente de alimentacioacuten y aumenta en gran medida el ratio sentildealruido

bull La interfaz I2S permite la descodificacioacuten di-recta de la entrada digital a la salida analoacutegica utili-zando la sincronizacioacuten del reloj maestro

bull La superficie de la PCB estaacute chapada en oro so-bre 2 onzas de cobre lo cual garantiza la continui-dad de la sentildeal y reduce la reflexioacuten y deflacioacuten de la sentildeal

bull Dispone de almohadillas soldadas a la salida de audio balanceada (sentildeal diferencial)

bull La interfaz SPDIF dedicada es nueva admite una definicioacuten de hasta 192khz24bit a traveacutes de una nueva salida oacuteptica (toslink)

bull Este HiFi shield no es compatible con Android y hardkernel no tiene planes para hacerlo compatible y asiacute poder habilitar el controlador i2S en el Kernel y el hAl de Android

El Manual de usuario del ODROID-XU4 disponible en httpbitly1U9Q8yg ha sido revisado hace poco para incluir algunos de los perifeacutericos maacutes recientes como

la Expansion Board SmartPower2 y oCam Puesto que ahora Hardkernel tambieacuten ofrece Ubuntu 1604 todos los ejemplos de coacutedigo se han actualizado para que sean compatibles con el nuevo sistema operativo Si tiene comentarios preguntas o sugerencias visita el hilo de los foros ODROID en httpbitly1RykBrT

MAnuAL Xu4ACTuALIzADOREvISADO PARA uBunTu 1604 y LOS PERIfERICOS MAS RECIEnTESeditado por rob roy (robroy)

MANUAL XU4

el manual del oDroiD-xU4 incluye informacioacuten detallada de los diferentes sistemas operativos software y perifeacutericos disponibles para el oDroiD-xU4

ODROID MAGAZINE 19

El DevOps es complicado Los grandes proyectos de soft-ware como Mesos y Kubernetes desarrollan equipos como los que se encuentran en la mayoriacutea de las empre-

sas y organizaciones tecnoloacutegicas como CoreOS con la finali-dad de ayudar a los desarrolladores a poner sus aplicaciones en funcionamiento Sin embargo iquestcuaacutel seriacutea una buena solucioacuten para un desarrollador en solitario o una pequentildea red domeacutesti-ca iquestCoacutemo podemos usar el coacutedigo a nivel de infraestructura

Uso un portaacutetil Macintosh OSX para desarrollo pero para las aplicaciones de larga duracioacuten o aplicaciones que se ejecu-tan por la noche necesito un entorno remoto siempre activo ya que mi portaacutetil estaraacute fuera de liacutenea o en el tren conmigo mientras voy y vengo del trabajo Tiene su sentido no utilizar el ordenador como un entorno para la puesta en funcionamiento de aplicaciones

El ODROID-XU4 es un ordenador ideal para un entor-no de implementacioacuten remoto ya que es econoacutemico flexible cuenta con excelentes especificaciones teacutecnicas y puede ejecutar Linux Este artiacuteculo tiene por objetivo explicar coacutemo almacenar coacutedigo de implementacioacuten en tu repositorio de proyectos asiacute como automatizar las implementaciones y ejecuciones

Arch LinuxArch Linux es una distribucioacuten de Linux gratuita de coacutedigo

abierto que fue lanzada en 2002 Estaacute centrada en la elegancia la integridad del coacutedigo el minimalismo y la simplicidad y cuenta con que el usuario haga un esfuerzo en comprender el funcionamiento del sistema Arch Linux utiliza en particular un modelo de revisioacuten continua de modo que todo lo que se necesitas para conseguir el software del sistema maacutes reciente es actualizar el sistema de forma perioacutedica

Arch Linux puede ser algo difiacutecil de asimilar ya que uti-liza herramientas diferentes a las de una distribucioacuten Debian El gestor de paquetes se activa a traveacutes de ldquopacmanrdquo en lugar de ldquoapt-getrdquo y existe un gestor complementario de paquetes muy popular llamado ldquoyaourtrdquo Muchos de los servicios o her-ramientas maacutes comunes no se instalan por defecto

Arch Linux esta hecho principalmente para procesadores x86 pero un proyecto llamado Arch Linux ARM (ALARM) tiene una distribucioacuten ARM de Arch Linux para arquitectu-ras AArch64 ARMv8 y ARMv7 Hardkernel el fabricante de ODROIDs es de hecho un patrocinador del proyecto Arch Linux ARM

HOME DATA CENTER

HOME DATA CEnTERIMPLEMEnTACIOn DEL CODIGO COn ARCHLInuXpor John Skilbeck

Configurar la redDeberaacutes asignarle a tu dispositivo una direccioacuten IP LAN

DHCP reservada y en el mejor de los casos un nombre de host que se propagaraacute a lo largo de tu red por medio del servidor DNS de tu router De esta forma en nuestro entorno de desar-rollolocal podremos utilizar un nombre de host para resolver siempre el entorno de implementacioacutenremoto

Por ejemplo en mi red reservo el 192168249 a la direc-cioacuten MAC de mi ODROID Tambieacuten configuro una entrada DNS que asigna a esa direccioacuten IP ldquoodroidrdquo Utilizar un firm-ware personalizado en el router como Tomato USB o DD-WRT lo hace extremadamente faacutecil ya que esos firmwares convierten tu router en un pequentildeo ordenador Linux con una aplicacioacuten web GUI muy pulida aunque su implementacioacuten estaacute fuera del alcance de este artiacuteculo Si operas con subredes aseguacuterate dirigir el puerto hacia el puerto externo que se asigna al puerto SSH del dispositivo odroid ya que Git se ejecuta a traveacutes de SSH

Configurar el proyectoLoacutegicamente desearaacutes estandarizar el flujo de trabajo de la

implementacioacuten Esto haraacute que el trabajo con proyectos sea

el home data center de John es una auteacutentica obra de arte

ODROID MAGAZINE 20

extremadamente faacutecil y eliminas muchos de los cambios de contexto mental que utilizas cuando trabaja en varios proyec-tos Crearemos una carpeta para alojar todos nuestros archivos relacionados con implementaciones Coloca los archivos eje-cutables en ldquodeploybinrdquo y cualquier archivo cron en ldquodeploytasksrdquo (maacutes informacioacuten sobre esta cuestioacuten maacutes adelante)

Navega hasta el directorio del proyecto en una ventana de Terminal y luego escribe los siguientes comandos

$ mkdir -p deploybin

$ mkdir -p deploytasks

$ cd deploybin ampamp touch run-job ampamp

chmod u+x run-job ampamp cd -

$ cd deploytasks ampamp touch crontab

Tambieacuten puede estandarizar doacutende colocar tu coacutedigo fuente De esta forma le seraacute maacutes faacutecil a otras personas ver coacutemo se or-ganiza tu proyecto y conocer queacute es el coacutedigo fuente y queacute no

$ mkdir src

$ cd src ampamp (place source code here ie python core

py clojure coreclj nodejs appjs)

Simplificar los puntos de entradaIniciar una aplicacioacuten puede resultar algo confuso con todos

los comandos que se pueden ejecutar en diferentes lenguajes Por ejemplo puede usar Java ldquojava -jar [my-jar] jarrdquo o python ldquopython my-apppyrdquo y tu aplicacioacuten tambieacuten puede necesitar varios argumentos Todo esto deberiacutea simplificarse y resumirse en un archivo ldquodeploybinrun-jobrdquo

binsh

set -e

CMD=rdquosrcduckrdquo

exec $CMD $

Crear el archivo cronArch Linux no viene con un cliente o demonio cron por

defecto Instaacutelalo con ldquosudo pacman -Syu cronierdquo Utilizando cron puede ejecutar comandos en intervalos de tiempo espe-cificados haciendo uso de la sintaxis especial de cron Normal-mente se almacena en el archivo crontab del usuario al que puedes acceder con ldquocrontab -erdquo Sin embargo esto es demasi-ado manual y queremos usar coacutedigo como infraestructura Cron tambieacuten tiene algunos subdirectorios muy uacutetiles en ldquoetccronrdquo como ldquoetccrondailyrdquo yrdquoetccronhourly ldquo si co-locamos los archivos aquiacute eacutestos se ejecutaraacuten en los intervalos especificados

Revisa el archivo de ldquodeploytaskscrontabrdquo que colocare-mos en ldquoetccrondrdquo que se crea automaacuteticamente con nuestro script ldquoposttreceiverdquo

variables

SHELL=binbash

PATH=binusrbinusrlocalbinusrsbinusrlo-

calsbin

MAILTO=[your-email-address]gmailcom

cmd=rdquodeploybinrun-jobrdquo

app_dir=rdquohomeskilbjodeployappduckdnsrdquo

jobs

5 skilbjo cd ldquo$app_dirrdquo $cmd gtdevnull

Aquiacute tienes el esquema general de la estructura de un simple proyecto El uacutenico ejecutable del proyecto es un uacutenico script shell ubicado en ldquosrcrdquo

$ tree

READMEmd

deploy

bin

post-receive

run-job

tasks

crontab

src

duck

4 directories 5 files

GitPrimero queremos agregar una URL remota a nuestro

proyecto en nuestro entorno local

$ git remote add odroid sshodroid~deploygit

duckdnsgit

Ten en cuenta que dependiendo de la topologiacutea de tu red es posible que tenga que modificar esta url Si no puedes asignar nombres de host la URL de git se veriacutea asiacute donde 192168249 es la direccioacuten IP LAN de tu dispositivo

$ ssh192168249~deploygitduckdnsgit

Si tienes un usuario en tu entorno ODROID distinto al que tienes en tu entorno de desarrollo la url se veriacutea asiacute donde ldquoskilbjordquo es tu nombre de usuario

$ sshskilbjoodroid~deploygitduckdnsgit

Si tu servidor remoto estaacute en una subred diferente y tienes redireccionados los puertos tu url tendriacutea este aspecto donde

HOME DATA CENTER

ODROID MAGAZINE 21

ldquo2222rdquo es tu puerto externo

$ ssh192168122222~deploygitduckdnsgit

En el directorio principal de tu entorno remoto crea una carpeta llamada ldquo~deployrdquo con dos subcarpetas ldquo~deployapprdquo y ldquo~deploygitrdquo Los subdirectorios de ldquo~deploygitrdquo seraacuten los puntos finales de nuestros desarrollos y con un hook ejecutaraacuten comandos de implementacioacuten en los subdirectorios de ldquo~ deployapprdquo

Primero navega hasta el directorio principal del entorno re-moto y a continuacioacuten escribe los siguientes comandos

$ mkdir -p ~deployapp

$ mkdir -p ~deploygit

$ mkdir -p ~deploygitduckdnsgit

$ mkdir -p ~deployappduckdns

Ahora en ldquo~ deploygitduckdnsgithooksrdquo crea un archi-vo ejecutable llamado ldquopost-receiverdquo que se activaraacute con cada accioacuten hacia el punto final

$ cd ~deployappgitduckdnsgithooks

$ touch post-receive ampamp chmod u+x post-receive

$ vim post-receive

Rellena el ejecutable con lo siguiente en el directorio ldquo~deploygitduckdnsgithooksrdquo del entorno remoto

usrbinenv bash

set -eou pipefail

user=$(whoami)

dir=rdquohome$userdeployapprdquo

app=$(basename $(pwd) | sed -e lsquosgitrsquo)

deploy_dir=rdquo$dir$apprdquo

cron_dir=rdquoetccrondrdquo

GIT_WORK_TREE=rdquo$deploy_dirrdquo git checkout -f

cd ldquo$deploy_dirrdquo

build steps here

case ldquo$userrdquo in

(skilbjo) sudo cp deploytaskscrontab ldquo$cron_

dir$apprdquo

esac

you can also do project-specific build steps in

this section like install

dependencies (ie npm install) compile source

code (ie lein uberjar)

as well as if a long-lived app run commands as

well (ie java -jar my_jarjar)

echo ldquoall donerdquo

exit 0

ImplementacioacutenAhora estamos listos para implementar ya que nuestro en-

torno local estaacute configurado para alcanzar el punto final del servidor de implementacioacuten nuestro entorno remoto estaacute con-figurado para recibir la notificacioacuten y revisar el coacutedigo fuente ejecutar cualquier paso de compilacioacuten y colocar una tarea en el directorio cron del sistema para su lanzamiento Ponto todo en praacutectica con el siguiente comando en el directorio del proyecto del entorno local

$ git push odroid

Ademaacutes para ver coacutemo se ha implementado todo esto en un proyecto de ejemplo visita httpbitly2lthYKW

Pasos finalesSe puede antildeadir al flujo anterior algunas caracteriacutesticas

como son muacuteltiples entornos ya sea con muacuteltiples ODROIDs o con un solo ODROID trataacutendolo como un servidor de ser-vicio Esto se puede hacer con subdirectorios bajo ldquo~deployrdquo como ldquo~deploystagingappmy_apprdquo o ldquo~ deployproduc-tionappmy_apprdquo

Ademaacutes podriacuteas antildeadir un servicio de integracioacuten conti-nua como CircleCI que ejecutariacutea una suite de testeo desde cada desarrollo a GitHub y si tiene eacutexito compila una imagen Docker No podriacuteas entonces tener un archivo en el entorno remoto que verificariacutea una imagen de un repositorio Docker y la ejecutariacutea en un intervalo especificado Esto es lo que hacen muchos de los softwares DevOps distribuidos como Mesos y Kubernetes pero en un entorno mucho maacutes rico que BASH y Linux

Referencias

Artiacuteculo Wikipedia de Arch linux httpbitly2l71ADKWebsite Arch linux ArM httpsarchlinuxarmorgArtiacuteculo que leiacute hace unos tres antildeos y que me inspiroacute para escribir mi propio artiacuteculo httpbitly2m5JAct

HOME DATA CENTER

ODROID MAGAZINE 22

odroid ARCADE BOXLA EXPERIEnCIA PERfECTA COn TuS JuEGOS ARCADE fAvORITOSpor brian Kim charles park y John lee

ARCADE BOX

Los ODROIDs tienen mejor rendimiento que las placas de la competencia especialmente en lo que respecta al renderizado de video lo que significa que

las placas ODROID son ideales para jugar lo cual hacen muchos usuarios de ODROID Ya hay disponibles varios sistemas operativos de plataforma de juegos como Lakka (httpbitly1NO8BBC) y ODROID GameStation Tur-bo (httpbitly1ASFO5O) Para disfrutar auacuten maacutes de nuestras sesiones de juegos creamos nuestra propia consola arcade con simples botones GPIO y joysticks y la llama-mos la ODROID Arcade Box Elegimos un ODROID-XU4 para este proyecto porque es el que tiene mejor rendimiento GPU de todos los dispositivos ODROID actuales En este artiacuteculo vamos a describir como hemos creado la ODROID Arcade Box

Requisitos( Figura 3 ndash )Decidimos hacer la ODROID Arcade Box usando

un MDF (tablero de fibra de densidad media) El Shifter Shield del XU4 tambieacuten es uacutetil para utilizar los pines de expansioacuten del ODROID-XU4 Los Joysticks los botones y los cables eran los componentes de entrada y se utilizoacute

Nuestro primer y simple prototipo

ODROID MAGAZINE 23

panel MDf 12t2eA 600x2202eA 600x752eA 220x75taladroplegadoraDesmontadorcinta meacutetricaNavaja multiusoAlicates de punta largaoDroiD-xU4xU4 Shifter shieldSMpS (fuete Alimentacioacuten)

extendedores hDMi USb ethernetenchufe de alimentacioacuten y Switchbisagras 2eAreceptor de puertacaucho 4eAtornillospulsadores 19eAJoystick 2eAcablesterminales

una SMPS (Fuente de alimentacioacuten conmutada) como fuente de alimentacioacuten Las herramientas y las piezas utilizadas las tienes en esta paacutegina

La ODROID Arcade Box necesita un total de 27 entradas (19 entradas para botones y 8 entra-das para joysticks) Las 24 entradas GPIO digi-tales del ODROID-XU4 no son suficientes para las 27 entradas de modo que creamos dos puertos ADC adicionales para los tres botones que nos fal-taban Los valores de entrada ADC se basan en el voltaje de entrada y los valores de entrada digital y analoacutegica se procesan en el demonio GPIO que se describe a continuacioacuten

Disentildeo y montajeLos paneles de la ODROID Arcade Box deben

ser disentildeados y fabricados para que los botones y joysticks esteacuten bien colocados Elegimos MDF 12T teniendo en cuenta el precio y la durabilidad El dise-ntildeo se puede hacer con cualquier herramienta CAD como Google Sketch o SolidWorks Aunque existen muchas plantillas de disentildeo para los paneles de joypad decidimos elegir un disentildeo arcade estaacutendar japoneacutes

El primer paso del montaje es unir la placa al panel MDF Este paso fue faacutecil aunque nos llevo maacutes tiempo que el resto Despueacutes insertamos los joysticks la toma de corri-ente el interruptor y los botones en el panel MDF superior Los conectores HDMI Ethernet y USB se colocaron en la parte trasera del panel MDF El siguiente paso fue montar cada panel MDF usando un taladro para hacer los agujeros luego con tornillos los sujetamos

El uacuteltimo paso del montaje de la ODROID Arcade Box es conectar por cable los pines de expansioacuten del ODROID-XU4 a los componentes de entrada En este proyecto dise-ntildeamos las entradas GPIO externas tal y como se muestra en la paacutegina 26 Los botones Select y Temp estaacuten conecta-dos a puertos de expansioacuten ADC

Configuracion del softwareDesarrollamos un nuevo demonio GPIO llamado gpio_

keyd (httpbitly2ljOZKg) Este demonio es capaz de asignar entradas GPIO y eventos claves usando uinput y wiringPi una libreriacutea de acceso GPIO basada en pines Estaacute disentildeada para que le sea familiar a quiene ya ha utilizado el sistema de cableado Arduino Aunque la blibreriacutea wiring-Pi upstream soacutelo admite Raspberry Pi Hardkernel ofrece una versioacuten de wiringPi para ODROIDs en su repositorio GitHub (httpbitly1Eq3UpF) El moacutedulo uinput es un moacutedulo del kernel de Linux que gestiona el subsistema de entrada del usuario Se puede utilizar para crear y manejar dispositivos de entrada desde una aplicacioacuten

ARCADE BOX

herramientas compentes y lo que hay justamente debajo

esquema de los puertos de expansioacuten

ODROID MAGAZINE 24

Elegimos ODROID GameStation Turbo (httpbitly1ASFO5O) como plataforma de software para nuestra ODROID Arcade Box que tiene integrado uinput Debes asegurarte de que el archivo de dispositivo uinput existe en el sistema operativo elegido porque algunos no tienen dispositivos uinput

$ ls devuinput

Si tu sistema operativo no tiene un archivo de disposi-tivo devuinput entonces seraacute necesario recompilar e in-stalar un nuevo kernel con la opcioacuten de configuracioacuten IN-PUT_UINPUT habilitada La paacutegina Wiki en httpbitly1YIToBI describe coacutemo compilar e instalar la imagen del kernel a partir del coacutedigo fuente

$ make menuconfig

Device Drivers

-gt Input device support

-gt Generic input layer

-gt Miscellaneous device

-gt User level driver support ltgt

Ten en cuenta que wiringPi debe instalarse antes de in-stalar gpio_keyd En la imagen GameStation de ODROID los comandos sudo deben ejecutarse como root porque la cuenta ldquoodroidrdquo no estaacute designada como usuario sudo

$ git clone httpsgithubcomhardkernelwiringPi

git

$ cd wiringPi

$ sudo build

Descarga el coacutedigo fuente gpio_keyd el cual estaacute dis-ponible en nuestro repositorio GitHub El procedimiento para compilar e instalar gpio_keyd es muy simple

$ git clone httpsgithubcombkrepogpio_keydgit

$ cd gpio_keyd

$ make

$ sudo make install

El script gpio_keyd hace referencia a etcgpio_keydconf como el predeterminado para la informacioacuten de los botones y GPIO El archivo de configuracioacuten fue modi-ficado para las 27 entradas de la ODROID Arcade Box Algunas botones ya se utilizaban en el emulador de juego de modo que tuvimos que cambiar la configuracioacuten del emulador para evitar conflictos entre los botones de en-trada GPIO y el emulador Ten en cuenta que el campo ltGPIO pingt en el archivo de configuracioacuten hace referen-

ARCADE BOX

plano del disentildeo de joypad

la oDroiD Arcade box montada

ODROID MAGAZINE 25

cia al nuacutemero wiringPi no al GPIO y al nuacutemero de pin (httpbitly2lbzPIB)

Ejemplo de configuracioacuten para las 27 entradas etcgpio_keydconf

Digital input ltKey codegt ltGPIO typegt ltGPIO pingt ltActive valuegt User 1KEY_LEFT digital 15 0KEY_RIGHT digital 1 0KEY_UP digital 4 0KEY_DOWN digital 16 0KEY_A digital 2 0KEY_S digital 3 0KEY_D digital 30 0KEY_F digital 21 0KEY_Z digital 8 0KEY_X digital 9 0KEY_C digital 7 0KEY_V digital 0 0 User 2KEY_BACKSLASH digital 12 0KEY_SLASH digital 13 0KEY_SEMICOLON digital 14 0KEY_LEFTBRACE digital 5 0KEY_Y digital 26 0KEY_U digital 27 0KEY_I digital 22 0KEY_O digital 23 0KEY_H digital 6 0KEY_J digital 10 0KEY_K digital 11 0KEY_L digital 31 0

Analog input ltKey codegt ltGPIO typegt ltADC portgt ltADC ac-tive valuegtKEY_B analog 0 0KEY_N analog 0 2045KEY_M analog 1 2045

To run gpio_keyd daemon at every startup is conve-nient for ODROID Arcade Box

etcinitdgpio_keyd binsh BEGIN INIT INFO

ARCADE BOX

Mapeo Gpio externo para los botones y Joysticks

cableado de la oDroiD Arcade box

ODROID MAGAZINE 26

Provides gpio_keyd Required-Start $all Required-Stop Default-Start 2 3 4 5 Default-Stop Short-Description Run usrbingpio_keyd if it ex-ist END INIT INFO

PATH=sbinusrsbinbinusrbin

libinitvarssh

liblsbinit-functions

do_start() if [ -x usrbingpio_keyd ] then usrbingpio_keyd -d ES=$ [ ldquo$VERBOSErdquo = no ] ampamp log_end_msg $ES return $ES fi

case ldquo$1rdquo in start) do_start restart|reload|force-reload) echo ldquoError argument lsquo$1rsquo not supportedrdquo gtamp2 exit 3 stop) killall gpio_keyd exit 0 ) echo ldquoUsage $0 start|stoprdquo gtamp2 exit 3 Esac

$ sudo chmod +x etcinitdgpio_keyd$ sudo update-rcd gpio_keyd defaults$ sudo reboot

En los comandos anteriores el script gpio_keyd se ejecuta como un demonio uti-lizando la opcioacuten ldquo-drdquo El uso de gpio_keyd se puede comprobar con la opcioacuten ldquo-hrdquo Comprue-ba de nuevo las teclas usadas por el juego o el emulador despueacutes fija la configuracioacuten del gpio_ keyd correctamente Es ahora cuando estaacutes listo para jugar y disfrutar de tus juegos con tu nueva ODROID Arcade Box

ARCADE BOX

the King of fighters 98 John vs brian

ODROID MAGAZINE 27

En este artiacuteculo analizaremos las diferentes formas que existen para ob-tener los datos del uso de la red

ConfiguracioacutenLa forma normal de analizar los datos

de traacutefico de la red es mediante el uso de datos a traveacutes de las aplicaciones de configuracioacuten del sistema tal y como se muestra en la figura 1

El uso de datos muestra la cantidad total de traacutefico de datos entrante y sa-liente que ha sido utilizada por una apli-cacioacuten Si seleccionas la aplicacioacuten veraacute una pantalla como la que aparece en la Figura 2 que muestra informacioacuten detal-lada sobre el uso de la aplicacioacuten tanto en primer plano como de fondo

La informacioacuten que se muestra den-tro de la aplicacioacuten de Configuracioacuten se almacena en data systemnetstats que requiere acceso root Al eliminar todo lo que hay dentro de esta carpeta se resta-

Como desarrolladores queremos que nuestras aplicaciones sean eficientes y a menudo nos gus-

tariacutea saber cuaacutento ancho de banda de red estaacute utilizando nuestra aplicacioacuten Esto es muy uacutetil por varias razones

bull Para monitorizar y asegurarnos de que la aplicacioacuten es realmente la nuestra y no una aplicacioacuten que ha sido pirateada y publi-cada con diferentes nombres en Play Store

bull Para asegurarnos de que no es-tamos cogiendo ancho de banda innecesario del plan de datos del usuario

bull Para comprobar que el disposi-tivo que estamos usando no estaacute accediendo a Internet sin nuestro consentimiento

blecen las estadiacutesticas de red mostradas en esta aplicacioacuten

Estadiacutesticas de la redLa aplicacioacuten de configuracioacuten nos

puede dar una informacioacuten general so-bre las estadiacutesticas de la red de datos que es un buen comienzo pero a veces necesitamos un anaacutelisis maacutes detallado que puede hacerse a traveacutes del coman-do dumpsys Android cuenta con una poderosa herramienta llamada dumpsys que nos permite obtener una instan-taacutenea o volcado del sistema que pu-ede incluir informacioacuten sobre la red la memoria y otros componentes Lee la documentacioacuten de Android en httpbitly2kK9dep para obtener maacutes infor-macioacuten del sistema Para conseguir maacutes informacioacuten relacionada con la red nos interesa el comando

$ dumpsys netstats detail

La Figura 3 muestra un pantallazo de lo que puedes ver desde una tablet Nexus 7 que ejecuta Lollipop 511

Hay algunas cuestiones importantes para entender las estadiacutesticas

bull Las estadiacutesticas UID muestran el desglose de las aplicaciones de primer plano y de fondo

bull Uid muestra el ID de usuario de la aplicacioacuten que se puede utili-zar para relacionar eacutesta con la in-

DESARROLLO AnDROID AnALIzAnDO EL uSO DE RED DE LAS APLICACIOnESpor Nanik tolaram

DESARROLLO ANDROID

figura 1 - Uso de datos en la configuracioacuten

figura 2 - Desglose del uso de datos de la app

ODROID MAGAZINE 28

$ dumpsys package detail

Este comando te proporcionaraacute una larga lista de informacioacuten sobre los pa-quetes que estaacuten instalados en tu dis-positivo Para las estadiacutesticas de red nos interesa la seccioacuten que se muestra en la Figura 5

La seccioacuten resaltada muestra el userId que se relaciona con el uid que se mues-tra en las estadiacutesticas de red Al relacio-nar este nuacutemero sabemos el nombre del paquete de la aplicacioacuten sobre el que es-tamos leyendo las estadiacutesticas de red

Aplicacioacuten de ejemplo

La aplicacioacuten de ejemplo de este artiacute-culo se puede descargar desde httpbitly2m8WenA que muestra coacutemo etiqu-etar la conexioacuten de red desde distintas

secciones de la aplicacioacuten lo cual puede ayudar a analizar el volumen de traacutefico de datos de la aplicacioacuten La Figura 6 muestra un ejemplo de coacutemo lo vemos si utilizamos Android Device Monitor (dentro de Studio diriacutegete a Tools -gt Android -gt Android Device Monitor)

Tal y como se puede ver en el graacutefico la simple aplicacioacuten tiene 3 conexiones dife-rentes y cada una de ellas estaacute accediendo a un sitio web diferente Al etiquetarlas con

formacioacuten del paquete (que ver-emos en la seccioacuten de detalles del paquete dumpsys) con el objeto de conocer queacute aplicacioacuten utiliza estas estadiacutesticas de red

bull Las etiquetas son uacutetiles si de-sea ver la cantidad de datos que utiliza cada conexioacuten de tu apli-cacioacuten Puedes ver un ejemplo de esto en la Figura 4 que muestra que el uid 10007 tiene las siguien-tes etiquetas 0x30000401 0x30003201 0x30002804 0x10000401 y 0x30000407 Es-tas etiquetas ayudan al desarrol-lador a saber cuaacutentos datos uti-liza cada parte de la aplicacioacuten Estas estadiacutesticas de red en par-ticular estaacuten vinculada al paquete Google Framework que forma parte de Google Play Store

En el siguiente apartado veremos coacutemo escribir una aplicacioacuten etiquetando el hilo que hace la conexioacuten de red para determi-nar la cantidad de datos que se utilizan

Estadiacutesticas de paquetes

En la seccioacuten anterior analizamos el uid que aparece al ejecutar el comando dumpsys netstats Ahora necesitamos sa-ber queacute uid corresponde a la aplicacioacuten en el dispositivo y esto se hace mediante el siguiente comando

DESARROLLO ANDROID

figura 3 ndash estadiacutesticas de red con Dumpsys

figura 4 - estadiacutesticas de etiquetas UiD

figura 5 - Detalles del paquete dumpsys

figura 6 - etiquetas de red

coacutedigos diferentes podemos ver la cantidad de traacutefico que consume cada conexioacuten y esto nos ayudaraacute a ver si nuestra aplicacioacuten utiliza el ancho de banda de un modo eficiente

El coacutedigo del siguiente fragmento muestra el uso de la API TrafficStats interna Esta etiqueta API muestra el subproceso que utiliza actualmente un socket con un identificador y todo el traacute-fico que pasa por la misma conexioacuten se grabaraacute junto Asiacute es como la aplicacioacuten es capaz de agrupar las 3 conexiones diferentes Internamente Android utili-za el moacutedulo xt_qtaguid del kernel para realizar este tipo de etiquetado Tienes disponible maacutes informacioacuten en httpbitly2kU8KXB

public void getUsingNormalURLC

onnection(String urlText int

threadTag)

throws IOException

URL url = null

TrafficStats

setThreadStatsTag(threadTag)

HttpURLConnection urlConnec-

tion = getConnection(url)

try

finally

TrafficStatsclearThread-

StatsTag()

ODROID MAGAZINE 29

Disgustado te subes a tu 4x4 de dominacioacuten del mun-do un vehiacuteculo que desde fuera parece maacutes bien un viejo camioacuten de granja pero por dentro se parece maacutes

al sistema de control de un transbordador espacial porque el conductor del restaurante oriental que realiza las entrega a do-micilio estaacute enfermo Ahora tienes que ir a recoger tu propia comida ldquoQueacute rudimentariordquo piensas cuando sales de tu garaje secreto Justamente cuando vas a parar el vehiacuteculo en un stop oyes un fuerte ruido Sales y te diriges raacutepidamente a la parte posterior del 4x4 donde observas un cubo de basura Te tiras de los pelos y piensas ldquoiexclEsos basureros Neanderthales dejaron otra vez el cubo en mediordquo Ahora te toca recoger los restos de tu cena y la basura de otros

Conforme te vas alejando para hacer tus recados empiezas a pensar en coacutemo evitar este inconveniente en el futuro Varias ideas te vienen a la mente

Un sistema lidar para escanear en 3D el entorno en tiempo real y alarmas sonoras cuando sea necesarioUn brazo ciberneacutetico colocado en la parte posterior del 4x4 que procese video para detectar objetos agarrarlos y moverlosUna simple camara trasera

Empiezas a considerar la viabilidad de cada una

Muy bueno pero demasiado complicado y costosoAuacuten mejor y un proyecto propio de un cientiacutefico loco pero demasi-ado complicado y costosoya tengo dos iexclpero estaba demasiado preocupado en mis pensa-mientos para prestarles atencioacuten

Lo que necesitas es algo simple sin complicaciones y barato que haga sonar una alarma para alertarte incluso cuando estar absorto en tus pensamientos ldquoAhardquo Recuerdas haber visto un nuevo producto en ameriDroid que puede hacer precisamente esto Se trata de un microcontrolador conectado al USB que soporta hasta 6 sensores ultrasoacutenicos con simples comandos en serie (httpbitly2l26ptV) ldquoiexclPerfectordquo Piensas

Regresas a tu laboratorio subterraacuteneo con el pollo Kung Pao en la mano te apresurar a encender tus monitores entras en el sitio web ameriDroid y pides un kit ldquoUSB Ultrasonic Ranging Sensorrdquo con 6 sensores y carcasas

Vas sintiendo una sensacioacuten de alivio a medida que regresas a los 12 proyectos en lo que ya estabas trabajando a la espera de que pasen un par de diacuteas hasta que llegue tu nuevo pedido Mientras te comes tu Kung Pao dibujas un diagrama de coacutemo quieres colocar los sensores en la parte posterior de tu vehiacuteculo

Un par de diacuteas maacutes tarde el kit llega Inmediatamente em-piezas a montar el kit y los sensores en la parte posterior de tu 4x4 teniendo cuidado de usar sellador de silicona para pro-teger los sensores de la lluvia aguanieve y nieve que puedas encontrar durante tus aventuras para dominar el mundo

A continuacioacuten consultas las instrucciones proporcionadas por ameriDroid con el kit sobre coacutemo controlar y leer los sen-sores desde tu fiel ODROID-C2 y VU7 que montaste en el salpicadero para este propoacutesito

Conectando el cable USBEl cable USB suministrado debe conectarse al microcon-

trolador (la pequentildea placa de circuito con filas de pines que sobresalen) El microcontrolador tiene una fila de 4 o 6 pines

DETECTAR LA PRESEnCIACROnICAS DE un CIEnTIfICO LOCOpor bo lechnowsky

SENSOR ULTRASONICO

ODROID MAGAZINE 30

en un extremo Si tiene 6 pines ceacutentrate en los 4 pines centrales y sigue estas instrucciones

Negro - conectar a GNDrojo - conectar a VccVerde - conectar a rxi

blanco - conectar a txD

Conectando los sensoresultrasoacutenicos

En cada sensor ultrasoacutenico hay cuatro pines marcados Vcc Trig Echo Gnd Para el primer sensor ultrasoacutenico conecta el pin 2 del microcontrolador al pin ldquoTrigrdquo del sensor ultrasoacutenico Conecta el pin 3 del microcontrolador al pin ldquoEchordquo del sensor Conecte el pin ldquoVccrdquo del sensor a DC 5V (el pin ldquoVCCrdquo del microcontrolador suministra 5V) y el pin ldquoGndrdquo del sensor a una conexioacuten a tierra como por ejemplo los pines ldquoGNDrdquo del microcontrolador

Si conectas un segundo sensor de ultrasonidos conecta ldquoTrigrdquo al pin 4 y ldquoEchordquo al pin 5 Continuacutea conectando los siguientes pines a los sensores hasta los pines 12 y 13 si al final optas por conectar los seis sensores ultrasonidos

Conexioacuten del softwareUtilizas un programa terminal como PuTTY Screen o tu

lenguaje de script o programacioacuten favorito para conectarte al puerto serie que aparece cuando te conectas el sensor ultrasoacuteni-co Esto variaraacute en funcioacuten del sistema operativo que utilizas para conectarte al microcontrolador En Windows consultar el ldquoAdministrador de dispositivosrdquo es la forma maacutes comuacuten de averiguarlo En Linux ldquodmesgrdquo o ldquolsusbrdquo son las formas de de-tectar a queacute puerto estaacute conectado Deberiacuteas ver algo denomi-nado ldquoPL2303rdquo que es la conexioacuten del microcontrolador Si recibes informacioacuten basura en tu terminal cuando te conectes aseguacuterate de que los ajustes en serie son 9600 baudios 8 bits ninguno (paridad) y 1 bit de parada Aquiacute tienes una lista de los comandos que puede aceptar el microcontrolador

bull debug on Activa la retroalimentacioacuten detallada Estaacute deshabilitada por defecto nos proporcionaraacute aclaracio-nes sobre los errores de entrada

bull debug off desactiva la retroalimentacioacuten detalladabull init x y activa un HC-SR04 en los pines especificados

X es trigger Y es echo Estos deben ser pines digitales El dispositivo 0 estaacute preestablecido en los pines 2 y 3 de modo que no es necesario especificar estos pines La seleccioacuten de pines no vaacutelidos devolveraacute un signo de ex-clamacioacuten ()

bull ping enviacutea una sola lectura del HCSR04 previamente utilizado Si no se ha utilizado todaviacutea se usaraacute el dis-positivo 0 Si al comando le sigue un espacio y un nuacutemero entre 0-100 (exclusivo) se realizaraacute ese nuacutemero de lecturas emitiendo primero el promedio de esas lec-

SENSOR ULTRASONICO

turas despueacutes el nuacutemero de lecturas fallidas (que no cuentan para el promedio) y luego los valores miacutenimo y maacuteximo de lectura separados por espacios En cual-quier caso si una sentildeal se desconecta automaacuteticamente devolveraacute -1

bull start Hace ping constantemente a todos los dispositivos conectados en secuencia Debido a que los dispositivos se utilizan uno a uno el flujo de datos de este comando seraacute maacutes raacutepido si los dispositivos miden distancias cor-tas Si este comando le sigue un espacio y un nuacutemero mayor que 0 la placa esperaraacute estos milisegundos entre la lectura del uacuteltimo dispositivo y la lectura del primer dispositivo El resultado de este comando seraacute la lectura de cada dispositivo (con un uacutenico espacio despueacutes de cada uno) y una vuelta tras el uacuteltimo dispositivo

bull stop detiene la operacioacuten ldquostartrdquo soacutelo es efectivo tras haber iniciado ldquostartrdquo

bull mode emite el modo de medicioacuten del flujo M para meacutetrico (miliacutemetros) I para Imperial (deacutecimas de pul-gada) o R para Raw (la longitud de pulso en microse-gundos devuelta por el HC-SR04) El valor predeter-minado es M

bull timeout emite el tiempo de espera actual para lecturas de la sentildeal El tiempo de espera es la mayor cantidad de microsegundos que la placa esperaraacute antes de declarar que el HC-SR04 ha realizado una mala lectura lo cual no es necesariamente lo mismo que el pulso maacutes largo que la placa aceptaraacute del HC-SR04 Cuando la placa mide el pulso del HC-SR04 primero espera a que el HC-SR04 comience a enviar un pulso Este tiempo cuenta para el tiempo de espera Cuando este comando le sigue un espacio y un nuacutemero el tiempo de espera se ajusta a ese nuacutemero El valor predeterminado es 1 segundo (1000000 microsegundos)

bull ver emite informacioacuten de versioacuten y creacuteditos

Si cualquier comando (o ninguacuten comando) estaacute precedido por un uacutenico diacutegito de 0-5 (inclusive) seguido de un espacio el dispositivo que corresponde a ese diacutegito se seleccionaraacute para ser usado con el siguiente comando ldquopingrdquo Cada vez que la placa esteacute lista para un comando emitiraacute ldquogtrdquo para la serie La uacutenica excepcioacuten estaacute tras el comando ldquostartrdquo que no solicitaraacute entrada hasta que sea reconocido ldquostoprdquo

ODROID MAGAZINE 31

iquestCoacutemo empezaste con los ordenadoresCuando empeceacute mi negocio tuve que decidir queacute plat-

aforma de hardware iba a utilizar para la recogida de datos del traacutefico Simplemente para que no pienses mal de miacute mis caacutemaras de traacutefico no son las que se usan para multar por exceso de velocidad o algo asiacute Mi sistema estaba desti-nado suavizar el flujo de traacutefico fijando los controles oacutepti-mos de las sentildeales de traacutefico Anteriormente usaba un PC industrial para ejecutar mi software de reconocimiento de imaacutegenes Ahora uso la familia de dispositivos ODROID para esta cuestioacuten

iquestQueacute te atrajo de la plataforma ODROID En 2012 useacute Google para buscar una plataforma que

fuera muy compacta y al mismo tiempo potente para que cubriera mis necesidades que resultoacute ser la placa

Por favor haacuteblanos un poco sobre tiSoy ingeniero de electroacutenica y software en Rusia desde

hace 47 antildeos Naciacute en Siberia y tras terminar la escuela me mudeacute a Moscuacute para estudiar en la universidad Ser estudi-ante en el Instituto de Aviacioacuten de Moscuacute (MAI) fue una experiencia increiacuteble probablemente la mejor de mi vida A principios de los 90 llegoacute a Rusia la era de los microordena-dores soliacutea jugar a un juego de saltos en una CPU z80 y el i486 Tras finalizar mis estudios universitarios y de posgrado me convertiacute en ingeniero Trabajeacute en unos cuantos puestos de trabajo para diferentes empresas y finalmente decidiacute em-prender mi propio negocio En 2006 puse en marcha una iniciativa para crear sistemas de recuento del traacutefico de au-tomoacuteviles Estoy casado y tengo una hija de 21 antildeos llamada Lena que trabaja como enfermera Mi esposa Nadezhda es disentildeadora de vestuario de produccioacuten pero ahora trabaja como disentildeadora web Ella es aficionada a la fotografiacutea digi-tal y le encanta su caacutemara reacuteflex digital

COnOCIEnDO un ODROIDIAnvIACHESLAv ALEKSEEveditado por rob roy (robroy)

CONOCIENDO UN ODROIDIAN

Viacheslav disfruta tocando la guitarra y escuchando muacutesica

1995 en el campus MAi probando uno de los primeros equipos Vr comerciales del mundo que funcionaba a 640x480 a 30fps Utiliz-aba un sensor magneacutetico en la nuca para la posicioacuten de la cabeza la mejor broma que se podiacutea gastar a alguien era colocar un imaacuten cerca de la espalda y sacudirlo iexcllos gritos estaban garantizados cuando el mundo en 3D daba vueltas sin cesar

ODROID MAGAZINE 32

ODROID-X2 Con sus cuatro nuacutecleos funcionando a 17 GHz calculaba con facilidad los algoritmos de reconteo del traacutefico de automoacuteviles Maacutes tarde cambieacute al U3 y el XU4

iquestCuaacutel es tu ODROID favorito y por queacuteDe momento mi favorito es el XU4 Mi sistema estaacute

basado en el tratamiento de fotogramas de video en tiempo real por lo que el bus USB 30 del XU4 es bastante bueno para una caacutemara con una interfaz de captura de viacutedeo Para mi sistema es muy importante tener una buena conexioacuten entre la caacutemara de viacutedeo y la CPU Probablemente tendreacute que echar un vistazo a las interfaces de nivel inferior como MIPI CSI-2 que por desgracia estaacuten ausente en el XU4 Recientemente he estado aprendiendo como usar la caacute-mara oCam GS BW La caacutemara es buena en siacute misma pero para un uso industrial al aire libre tengo que implementar un software de control de exposicioacuten automaacutetica y posible-mente de control de apertura de la lente que todaviacutea estaacute en estudio

MEET AN ODROIDIAN

Una vieja joya el mini ordenador Nixdorf

An old gem the Nixdorf mini computer

CONOCIENDO UN ODROIDIAN

iquestQueacute aficiones e intereses tienes aparte de los ordenadoresDisfruto conduciendo y leyendo sobre coches y viendo

los campeonatos de carreras de F1 Tambieacuten me gusta via-jar pescar escuchar muacutesica y tocar la guitarra Tengo un gato siberiano llamado Leia y soy fan de Star Wars

iquestQueacute consejo le dariacuteas a alguien que quiere aprender maacutes sobre la programacioacuten

Hacer software es algo increiacuteble y miacutestico Es una fusioacuten de arte y tecnologiacutea Nada te inspira maacutes que tu aplicacioacuten cuando empieza a cobrar vida Sin embargo siempre estaacute ahiacute el otro lado de la Fuerza Estar listo para instruirte inc-esantemente El desarrollo de software es una de las activi-dades que cambia maacutes raacutepido Si tienes pensado dejar de hacer software en uno o dos antildeos puede dejar de aprender ahora El conocimiento se volveraacute anticuado en un par de antildeos maacutes o menos Para estar en lo maacutes alto siempre tienes que correr Es similar a la cancioacutenrdquoRun like Hellrdquo de Pink Floyd Si estaacutes listo para vivir de esta forma seguro que tendraacutes eacutexito

ODROID MAGAZINE 33

Page 19: Estación ARCADE · gias de marketing, administración de medios sociales y producción multimedia impresa, web, vídeo y cine. Ges-tionando múltiples cuentas con agencias y productores

Detalles

La guiacutea de configuracioacuten de UbuntuLinux para ODROID-C2 estaacute disponible en httpbitly2brrGdG y para ODROID-C1+ en httpbitly2lI7AC7 El sistema operativo oficial Volumio 2 se puede descargar desde httpbitly2kOJNAV y la imagen DietPi basada en Debian se encuentra en httpbitly2ls45yM Puede ver los esquemas en httpbitly2mnukV4

Diagrama por bloques del hifi Shield2

Caracteriacutesticasbull El control de volumen a traveacutes de la interfaz

i2c es una gran caracteriacutestica para mantener una buena calidad del sonido con varios voluacutemenes de salida de audio

bull Los puertos de salida incluyen terminales esteacute-reo rcA chapados en oro

bull La fuente de alimentacioacuten tiene habilitado un regulador de interferencias de ruido ultra-bajo lo cual reduce el ruido de la fuente de alimentacioacuten y aumenta en gran medida el ratio sentildealruido

bull La interfaz I2S permite la descodificacioacuten di-recta de la entrada digital a la salida analoacutegica utili-zando la sincronizacioacuten del reloj maestro

bull La superficie de la PCB estaacute chapada en oro so-bre 2 onzas de cobre lo cual garantiza la continui-dad de la sentildeal y reduce la reflexioacuten y deflacioacuten de la sentildeal

bull Dispone de almohadillas soldadas a la salida de audio balanceada (sentildeal diferencial)

bull La interfaz SPDIF dedicada es nueva admite una definicioacuten de hasta 192khz24bit a traveacutes de una nueva salida oacuteptica (toslink)

bull Este HiFi shield no es compatible con Android y hardkernel no tiene planes para hacerlo compatible y asiacute poder habilitar el controlador i2S en el Kernel y el hAl de Android

El Manual de usuario del ODROID-XU4 disponible en httpbitly1U9Q8yg ha sido revisado hace poco para incluir algunos de los perifeacutericos maacutes recientes como

la Expansion Board SmartPower2 y oCam Puesto que ahora Hardkernel tambieacuten ofrece Ubuntu 1604 todos los ejemplos de coacutedigo se han actualizado para que sean compatibles con el nuevo sistema operativo Si tiene comentarios preguntas o sugerencias visita el hilo de los foros ODROID en httpbitly1RykBrT

MAnuAL Xu4ACTuALIzADOREvISADO PARA uBunTu 1604 y LOS PERIfERICOS MAS RECIEnTESeditado por rob roy (robroy)

MANUAL XU4

el manual del oDroiD-xU4 incluye informacioacuten detallada de los diferentes sistemas operativos software y perifeacutericos disponibles para el oDroiD-xU4

ODROID MAGAZINE 19

El DevOps es complicado Los grandes proyectos de soft-ware como Mesos y Kubernetes desarrollan equipos como los que se encuentran en la mayoriacutea de las empre-

sas y organizaciones tecnoloacutegicas como CoreOS con la finali-dad de ayudar a los desarrolladores a poner sus aplicaciones en funcionamiento Sin embargo iquestcuaacutel seriacutea una buena solucioacuten para un desarrollador en solitario o una pequentildea red domeacutesti-ca iquestCoacutemo podemos usar el coacutedigo a nivel de infraestructura

Uso un portaacutetil Macintosh OSX para desarrollo pero para las aplicaciones de larga duracioacuten o aplicaciones que se ejecu-tan por la noche necesito un entorno remoto siempre activo ya que mi portaacutetil estaraacute fuera de liacutenea o en el tren conmigo mientras voy y vengo del trabajo Tiene su sentido no utilizar el ordenador como un entorno para la puesta en funcionamiento de aplicaciones

El ODROID-XU4 es un ordenador ideal para un entor-no de implementacioacuten remoto ya que es econoacutemico flexible cuenta con excelentes especificaciones teacutecnicas y puede ejecutar Linux Este artiacuteculo tiene por objetivo explicar coacutemo almacenar coacutedigo de implementacioacuten en tu repositorio de proyectos asiacute como automatizar las implementaciones y ejecuciones

Arch LinuxArch Linux es una distribucioacuten de Linux gratuita de coacutedigo

abierto que fue lanzada en 2002 Estaacute centrada en la elegancia la integridad del coacutedigo el minimalismo y la simplicidad y cuenta con que el usuario haga un esfuerzo en comprender el funcionamiento del sistema Arch Linux utiliza en particular un modelo de revisioacuten continua de modo que todo lo que se necesitas para conseguir el software del sistema maacutes reciente es actualizar el sistema de forma perioacutedica

Arch Linux puede ser algo difiacutecil de asimilar ya que uti-liza herramientas diferentes a las de una distribucioacuten Debian El gestor de paquetes se activa a traveacutes de ldquopacmanrdquo en lugar de ldquoapt-getrdquo y existe un gestor complementario de paquetes muy popular llamado ldquoyaourtrdquo Muchos de los servicios o her-ramientas maacutes comunes no se instalan por defecto

Arch Linux esta hecho principalmente para procesadores x86 pero un proyecto llamado Arch Linux ARM (ALARM) tiene una distribucioacuten ARM de Arch Linux para arquitectu-ras AArch64 ARMv8 y ARMv7 Hardkernel el fabricante de ODROIDs es de hecho un patrocinador del proyecto Arch Linux ARM

HOME DATA CENTER

HOME DATA CEnTERIMPLEMEnTACIOn DEL CODIGO COn ARCHLInuXpor John Skilbeck

Configurar la redDeberaacutes asignarle a tu dispositivo una direccioacuten IP LAN

DHCP reservada y en el mejor de los casos un nombre de host que se propagaraacute a lo largo de tu red por medio del servidor DNS de tu router De esta forma en nuestro entorno de desar-rollolocal podremos utilizar un nombre de host para resolver siempre el entorno de implementacioacutenremoto

Por ejemplo en mi red reservo el 192168249 a la direc-cioacuten MAC de mi ODROID Tambieacuten configuro una entrada DNS que asigna a esa direccioacuten IP ldquoodroidrdquo Utilizar un firm-ware personalizado en el router como Tomato USB o DD-WRT lo hace extremadamente faacutecil ya que esos firmwares convierten tu router en un pequentildeo ordenador Linux con una aplicacioacuten web GUI muy pulida aunque su implementacioacuten estaacute fuera del alcance de este artiacuteculo Si operas con subredes aseguacuterate dirigir el puerto hacia el puerto externo que se asigna al puerto SSH del dispositivo odroid ya que Git se ejecuta a traveacutes de SSH

Configurar el proyectoLoacutegicamente desearaacutes estandarizar el flujo de trabajo de la

implementacioacuten Esto haraacute que el trabajo con proyectos sea

el home data center de John es una auteacutentica obra de arte

ODROID MAGAZINE 20

extremadamente faacutecil y eliminas muchos de los cambios de contexto mental que utilizas cuando trabaja en varios proyec-tos Crearemos una carpeta para alojar todos nuestros archivos relacionados con implementaciones Coloca los archivos eje-cutables en ldquodeploybinrdquo y cualquier archivo cron en ldquodeploytasksrdquo (maacutes informacioacuten sobre esta cuestioacuten maacutes adelante)

Navega hasta el directorio del proyecto en una ventana de Terminal y luego escribe los siguientes comandos

$ mkdir -p deploybin

$ mkdir -p deploytasks

$ cd deploybin ampamp touch run-job ampamp

chmod u+x run-job ampamp cd -

$ cd deploytasks ampamp touch crontab

Tambieacuten puede estandarizar doacutende colocar tu coacutedigo fuente De esta forma le seraacute maacutes faacutecil a otras personas ver coacutemo se or-ganiza tu proyecto y conocer queacute es el coacutedigo fuente y queacute no

$ mkdir src

$ cd src ampamp (place source code here ie python core

py clojure coreclj nodejs appjs)

Simplificar los puntos de entradaIniciar una aplicacioacuten puede resultar algo confuso con todos

los comandos que se pueden ejecutar en diferentes lenguajes Por ejemplo puede usar Java ldquojava -jar [my-jar] jarrdquo o python ldquopython my-apppyrdquo y tu aplicacioacuten tambieacuten puede necesitar varios argumentos Todo esto deberiacutea simplificarse y resumirse en un archivo ldquodeploybinrun-jobrdquo

binsh

set -e

CMD=rdquosrcduckrdquo

exec $CMD $

Crear el archivo cronArch Linux no viene con un cliente o demonio cron por

defecto Instaacutelalo con ldquosudo pacman -Syu cronierdquo Utilizando cron puede ejecutar comandos en intervalos de tiempo espe-cificados haciendo uso de la sintaxis especial de cron Normal-mente se almacena en el archivo crontab del usuario al que puedes acceder con ldquocrontab -erdquo Sin embargo esto es demasi-ado manual y queremos usar coacutedigo como infraestructura Cron tambieacuten tiene algunos subdirectorios muy uacutetiles en ldquoetccronrdquo como ldquoetccrondailyrdquo yrdquoetccronhourly ldquo si co-locamos los archivos aquiacute eacutestos se ejecutaraacuten en los intervalos especificados

Revisa el archivo de ldquodeploytaskscrontabrdquo que colocare-mos en ldquoetccrondrdquo que se crea automaacuteticamente con nuestro script ldquoposttreceiverdquo

variables

SHELL=binbash

PATH=binusrbinusrlocalbinusrsbinusrlo-

calsbin

MAILTO=[your-email-address]gmailcom

cmd=rdquodeploybinrun-jobrdquo

app_dir=rdquohomeskilbjodeployappduckdnsrdquo

jobs

5 skilbjo cd ldquo$app_dirrdquo $cmd gtdevnull

Aquiacute tienes el esquema general de la estructura de un simple proyecto El uacutenico ejecutable del proyecto es un uacutenico script shell ubicado en ldquosrcrdquo

$ tree

READMEmd

deploy

bin

post-receive

run-job

tasks

crontab

src

duck

4 directories 5 files

GitPrimero queremos agregar una URL remota a nuestro

proyecto en nuestro entorno local

$ git remote add odroid sshodroid~deploygit

duckdnsgit

Ten en cuenta que dependiendo de la topologiacutea de tu red es posible que tenga que modificar esta url Si no puedes asignar nombres de host la URL de git se veriacutea asiacute donde 192168249 es la direccioacuten IP LAN de tu dispositivo

$ ssh192168249~deploygitduckdnsgit

Si tienes un usuario en tu entorno ODROID distinto al que tienes en tu entorno de desarrollo la url se veriacutea asiacute donde ldquoskilbjordquo es tu nombre de usuario

$ sshskilbjoodroid~deploygitduckdnsgit

Si tu servidor remoto estaacute en una subred diferente y tienes redireccionados los puertos tu url tendriacutea este aspecto donde

HOME DATA CENTER

ODROID MAGAZINE 21

ldquo2222rdquo es tu puerto externo

$ ssh192168122222~deploygitduckdnsgit

En el directorio principal de tu entorno remoto crea una carpeta llamada ldquo~deployrdquo con dos subcarpetas ldquo~deployapprdquo y ldquo~deploygitrdquo Los subdirectorios de ldquo~deploygitrdquo seraacuten los puntos finales de nuestros desarrollos y con un hook ejecutaraacuten comandos de implementacioacuten en los subdirectorios de ldquo~ deployapprdquo

Primero navega hasta el directorio principal del entorno re-moto y a continuacioacuten escribe los siguientes comandos

$ mkdir -p ~deployapp

$ mkdir -p ~deploygit

$ mkdir -p ~deploygitduckdnsgit

$ mkdir -p ~deployappduckdns

Ahora en ldquo~ deploygitduckdnsgithooksrdquo crea un archi-vo ejecutable llamado ldquopost-receiverdquo que se activaraacute con cada accioacuten hacia el punto final

$ cd ~deployappgitduckdnsgithooks

$ touch post-receive ampamp chmod u+x post-receive

$ vim post-receive

Rellena el ejecutable con lo siguiente en el directorio ldquo~deploygitduckdnsgithooksrdquo del entorno remoto

usrbinenv bash

set -eou pipefail

user=$(whoami)

dir=rdquohome$userdeployapprdquo

app=$(basename $(pwd) | sed -e lsquosgitrsquo)

deploy_dir=rdquo$dir$apprdquo

cron_dir=rdquoetccrondrdquo

GIT_WORK_TREE=rdquo$deploy_dirrdquo git checkout -f

cd ldquo$deploy_dirrdquo

build steps here

case ldquo$userrdquo in

(skilbjo) sudo cp deploytaskscrontab ldquo$cron_

dir$apprdquo

esac

you can also do project-specific build steps in

this section like install

dependencies (ie npm install) compile source

code (ie lein uberjar)

as well as if a long-lived app run commands as

well (ie java -jar my_jarjar)

echo ldquoall donerdquo

exit 0

ImplementacioacutenAhora estamos listos para implementar ya que nuestro en-

torno local estaacute configurado para alcanzar el punto final del servidor de implementacioacuten nuestro entorno remoto estaacute con-figurado para recibir la notificacioacuten y revisar el coacutedigo fuente ejecutar cualquier paso de compilacioacuten y colocar una tarea en el directorio cron del sistema para su lanzamiento Ponto todo en praacutectica con el siguiente comando en el directorio del proyecto del entorno local

$ git push odroid

Ademaacutes para ver coacutemo se ha implementado todo esto en un proyecto de ejemplo visita httpbitly2lthYKW

Pasos finalesSe puede antildeadir al flujo anterior algunas caracteriacutesticas

como son muacuteltiples entornos ya sea con muacuteltiples ODROIDs o con un solo ODROID trataacutendolo como un servidor de ser-vicio Esto se puede hacer con subdirectorios bajo ldquo~deployrdquo como ldquo~deploystagingappmy_apprdquo o ldquo~ deployproduc-tionappmy_apprdquo

Ademaacutes podriacuteas antildeadir un servicio de integracioacuten conti-nua como CircleCI que ejecutariacutea una suite de testeo desde cada desarrollo a GitHub y si tiene eacutexito compila una imagen Docker No podriacuteas entonces tener un archivo en el entorno remoto que verificariacutea una imagen de un repositorio Docker y la ejecutariacutea en un intervalo especificado Esto es lo que hacen muchos de los softwares DevOps distribuidos como Mesos y Kubernetes pero en un entorno mucho maacutes rico que BASH y Linux

Referencias

Artiacuteculo Wikipedia de Arch linux httpbitly2l71ADKWebsite Arch linux ArM httpsarchlinuxarmorgArtiacuteculo que leiacute hace unos tres antildeos y que me inspiroacute para escribir mi propio artiacuteculo httpbitly2m5JAct

HOME DATA CENTER

ODROID MAGAZINE 22

odroid ARCADE BOXLA EXPERIEnCIA PERfECTA COn TuS JuEGOS ARCADE fAvORITOSpor brian Kim charles park y John lee

ARCADE BOX

Los ODROIDs tienen mejor rendimiento que las placas de la competencia especialmente en lo que respecta al renderizado de video lo que significa que

las placas ODROID son ideales para jugar lo cual hacen muchos usuarios de ODROID Ya hay disponibles varios sistemas operativos de plataforma de juegos como Lakka (httpbitly1NO8BBC) y ODROID GameStation Tur-bo (httpbitly1ASFO5O) Para disfrutar auacuten maacutes de nuestras sesiones de juegos creamos nuestra propia consola arcade con simples botones GPIO y joysticks y la llama-mos la ODROID Arcade Box Elegimos un ODROID-XU4 para este proyecto porque es el que tiene mejor rendimiento GPU de todos los dispositivos ODROID actuales En este artiacuteculo vamos a describir como hemos creado la ODROID Arcade Box

Requisitos( Figura 3 ndash )Decidimos hacer la ODROID Arcade Box usando

un MDF (tablero de fibra de densidad media) El Shifter Shield del XU4 tambieacuten es uacutetil para utilizar los pines de expansioacuten del ODROID-XU4 Los Joysticks los botones y los cables eran los componentes de entrada y se utilizoacute

Nuestro primer y simple prototipo

ODROID MAGAZINE 23

panel MDf 12t2eA 600x2202eA 600x752eA 220x75taladroplegadoraDesmontadorcinta meacutetricaNavaja multiusoAlicates de punta largaoDroiD-xU4xU4 Shifter shieldSMpS (fuete Alimentacioacuten)

extendedores hDMi USb ethernetenchufe de alimentacioacuten y Switchbisagras 2eAreceptor de puertacaucho 4eAtornillospulsadores 19eAJoystick 2eAcablesterminales

una SMPS (Fuente de alimentacioacuten conmutada) como fuente de alimentacioacuten Las herramientas y las piezas utilizadas las tienes en esta paacutegina

La ODROID Arcade Box necesita un total de 27 entradas (19 entradas para botones y 8 entra-das para joysticks) Las 24 entradas GPIO digi-tales del ODROID-XU4 no son suficientes para las 27 entradas de modo que creamos dos puertos ADC adicionales para los tres botones que nos fal-taban Los valores de entrada ADC se basan en el voltaje de entrada y los valores de entrada digital y analoacutegica se procesan en el demonio GPIO que se describe a continuacioacuten

Disentildeo y montajeLos paneles de la ODROID Arcade Box deben

ser disentildeados y fabricados para que los botones y joysticks esteacuten bien colocados Elegimos MDF 12T teniendo en cuenta el precio y la durabilidad El dise-ntildeo se puede hacer con cualquier herramienta CAD como Google Sketch o SolidWorks Aunque existen muchas plantillas de disentildeo para los paneles de joypad decidimos elegir un disentildeo arcade estaacutendar japoneacutes

El primer paso del montaje es unir la placa al panel MDF Este paso fue faacutecil aunque nos llevo maacutes tiempo que el resto Despueacutes insertamos los joysticks la toma de corri-ente el interruptor y los botones en el panel MDF superior Los conectores HDMI Ethernet y USB se colocaron en la parte trasera del panel MDF El siguiente paso fue montar cada panel MDF usando un taladro para hacer los agujeros luego con tornillos los sujetamos

El uacuteltimo paso del montaje de la ODROID Arcade Box es conectar por cable los pines de expansioacuten del ODROID-XU4 a los componentes de entrada En este proyecto dise-ntildeamos las entradas GPIO externas tal y como se muestra en la paacutegina 26 Los botones Select y Temp estaacuten conecta-dos a puertos de expansioacuten ADC

Configuracion del softwareDesarrollamos un nuevo demonio GPIO llamado gpio_

keyd (httpbitly2ljOZKg) Este demonio es capaz de asignar entradas GPIO y eventos claves usando uinput y wiringPi una libreriacutea de acceso GPIO basada en pines Estaacute disentildeada para que le sea familiar a quiene ya ha utilizado el sistema de cableado Arduino Aunque la blibreriacutea wiring-Pi upstream soacutelo admite Raspberry Pi Hardkernel ofrece una versioacuten de wiringPi para ODROIDs en su repositorio GitHub (httpbitly1Eq3UpF) El moacutedulo uinput es un moacutedulo del kernel de Linux que gestiona el subsistema de entrada del usuario Se puede utilizar para crear y manejar dispositivos de entrada desde una aplicacioacuten

ARCADE BOX

herramientas compentes y lo que hay justamente debajo

esquema de los puertos de expansioacuten

ODROID MAGAZINE 24

Elegimos ODROID GameStation Turbo (httpbitly1ASFO5O) como plataforma de software para nuestra ODROID Arcade Box que tiene integrado uinput Debes asegurarte de que el archivo de dispositivo uinput existe en el sistema operativo elegido porque algunos no tienen dispositivos uinput

$ ls devuinput

Si tu sistema operativo no tiene un archivo de disposi-tivo devuinput entonces seraacute necesario recompilar e in-stalar un nuevo kernel con la opcioacuten de configuracioacuten IN-PUT_UINPUT habilitada La paacutegina Wiki en httpbitly1YIToBI describe coacutemo compilar e instalar la imagen del kernel a partir del coacutedigo fuente

$ make menuconfig

Device Drivers

-gt Input device support

-gt Generic input layer

-gt Miscellaneous device

-gt User level driver support ltgt

Ten en cuenta que wiringPi debe instalarse antes de in-stalar gpio_keyd En la imagen GameStation de ODROID los comandos sudo deben ejecutarse como root porque la cuenta ldquoodroidrdquo no estaacute designada como usuario sudo

$ git clone httpsgithubcomhardkernelwiringPi

git

$ cd wiringPi

$ sudo build

Descarga el coacutedigo fuente gpio_keyd el cual estaacute dis-ponible en nuestro repositorio GitHub El procedimiento para compilar e instalar gpio_keyd es muy simple

$ git clone httpsgithubcombkrepogpio_keydgit

$ cd gpio_keyd

$ make

$ sudo make install

El script gpio_keyd hace referencia a etcgpio_keydconf como el predeterminado para la informacioacuten de los botones y GPIO El archivo de configuracioacuten fue modi-ficado para las 27 entradas de la ODROID Arcade Box Algunas botones ya se utilizaban en el emulador de juego de modo que tuvimos que cambiar la configuracioacuten del emulador para evitar conflictos entre los botones de en-trada GPIO y el emulador Ten en cuenta que el campo ltGPIO pingt en el archivo de configuracioacuten hace referen-

ARCADE BOX

plano del disentildeo de joypad

la oDroiD Arcade box montada

ODROID MAGAZINE 25

cia al nuacutemero wiringPi no al GPIO y al nuacutemero de pin (httpbitly2lbzPIB)

Ejemplo de configuracioacuten para las 27 entradas etcgpio_keydconf

Digital input ltKey codegt ltGPIO typegt ltGPIO pingt ltActive valuegt User 1KEY_LEFT digital 15 0KEY_RIGHT digital 1 0KEY_UP digital 4 0KEY_DOWN digital 16 0KEY_A digital 2 0KEY_S digital 3 0KEY_D digital 30 0KEY_F digital 21 0KEY_Z digital 8 0KEY_X digital 9 0KEY_C digital 7 0KEY_V digital 0 0 User 2KEY_BACKSLASH digital 12 0KEY_SLASH digital 13 0KEY_SEMICOLON digital 14 0KEY_LEFTBRACE digital 5 0KEY_Y digital 26 0KEY_U digital 27 0KEY_I digital 22 0KEY_O digital 23 0KEY_H digital 6 0KEY_J digital 10 0KEY_K digital 11 0KEY_L digital 31 0

Analog input ltKey codegt ltGPIO typegt ltADC portgt ltADC ac-tive valuegtKEY_B analog 0 0KEY_N analog 0 2045KEY_M analog 1 2045

To run gpio_keyd daemon at every startup is conve-nient for ODROID Arcade Box

etcinitdgpio_keyd binsh BEGIN INIT INFO

ARCADE BOX

Mapeo Gpio externo para los botones y Joysticks

cableado de la oDroiD Arcade box

ODROID MAGAZINE 26

Provides gpio_keyd Required-Start $all Required-Stop Default-Start 2 3 4 5 Default-Stop Short-Description Run usrbingpio_keyd if it ex-ist END INIT INFO

PATH=sbinusrsbinbinusrbin

libinitvarssh

liblsbinit-functions

do_start() if [ -x usrbingpio_keyd ] then usrbingpio_keyd -d ES=$ [ ldquo$VERBOSErdquo = no ] ampamp log_end_msg $ES return $ES fi

case ldquo$1rdquo in start) do_start restart|reload|force-reload) echo ldquoError argument lsquo$1rsquo not supportedrdquo gtamp2 exit 3 stop) killall gpio_keyd exit 0 ) echo ldquoUsage $0 start|stoprdquo gtamp2 exit 3 Esac

$ sudo chmod +x etcinitdgpio_keyd$ sudo update-rcd gpio_keyd defaults$ sudo reboot

En los comandos anteriores el script gpio_keyd se ejecuta como un demonio uti-lizando la opcioacuten ldquo-drdquo El uso de gpio_keyd se puede comprobar con la opcioacuten ldquo-hrdquo Comprue-ba de nuevo las teclas usadas por el juego o el emulador despueacutes fija la configuracioacuten del gpio_ keyd correctamente Es ahora cuando estaacutes listo para jugar y disfrutar de tus juegos con tu nueva ODROID Arcade Box

ARCADE BOX

the King of fighters 98 John vs brian

ODROID MAGAZINE 27

En este artiacuteculo analizaremos las diferentes formas que existen para ob-tener los datos del uso de la red

ConfiguracioacutenLa forma normal de analizar los datos

de traacutefico de la red es mediante el uso de datos a traveacutes de las aplicaciones de configuracioacuten del sistema tal y como se muestra en la figura 1

El uso de datos muestra la cantidad total de traacutefico de datos entrante y sa-liente que ha sido utilizada por una apli-cacioacuten Si seleccionas la aplicacioacuten veraacute una pantalla como la que aparece en la Figura 2 que muestra informacioacuten detal-lada sobre el uso de la aplicacioacuten tanto en primer plano como de fondo

La informacioacuten que se muestra den-tro de la aplicacioacuten de Configuracioacuten se almacena en data systemnetstats que requiere acceso root Al eliminar todo lo que hay dentro de esta carpeta se resta-

Como desarrolladores queremos que nuestras aplicaciones sean eficientes y a menudo nos gus-

tariacutea saber cuaacutento ancho de banda de red estaacute utilizando nuestra aplicacioacuten Esto es muy uacutetil por varias razones

bull Para monitorizar y asegurarnos de que la aplicacioacuten es realmente la nuestra y no una aplicacioacuten que ha sido pirateada y publi-cada con diferentes nombres en Play Store

bull Para asegurarnos de que no es-tamos cogiendo ancho de banda innecesario del plan de datos del usuario

bull Para comprobar que el disposi-tivo que estamos usando no estaacute accediendo a Internet sin nuestro consentimiento

blecen las estadiacutesticas de red mostradas en esta aplicacioacuten

Estadiacutesticas de la redLa aplicacioacuten de configuracioacuten nos

puede dar una informacioacuten general so-bre las estadiacutesticas de la red de datos que es un buen comienzo pero a veces necesitamos un anaacutelisis maacutes detallado que puede hacerse a traveacutes del coman-do dumpsys Android cuenta con una poderosa herramienta llamada dumpsys que nos permite obtener una instan-taacutenea o volcado del sistema que pu-ede incluir informacioacuten sobre la red la memoria y otros componentes Lee la documentacioacuten de Android en httpbitly2kK9dep para obtener maacutes infor-macioacuten del sistema Para conseguir maacutes informacioacuten relacionada con la red nos interesa el comando

$ dumpsys netstats detail

La Figura 3 muestra un pantallazo de lo que puedes ver desde una tablet Nexus 7 que ejecuta Lollipop 511

Hay algunas cuestiones importantes para entender las estadiacutesticas

bull Las estadiacutesticas UID muestran el desglose de las aplicaciones de primer plano y de fondo

bull Uid muestra el ID de usuario de la aplicacioacuten que se puede utili-zar para relacionar eacutesta con la in-

DESARROLLO AnDROID AnALIzAnDO EL uSO DE RED DE LAS APLICACIOnESpor Nanik tolaram

DESARROLLO ANDROID

figura 1 - Uso de datos en la configuracioacuten

figura 2 - Desglose del uso de datos de la app

ODROID MAGAZINE 28

$ dumpsys package detail

Este comando te proporcionaraacute una larga lista de informacioacuten sobre los pa-quetes que estaacuten instalados en tu dis-positivo Para las estadiacutesticas de red nos interesa la seccioacuten que se muestra en la Figura 5

La seccioacuten resaltada muestra el userId que se relaciona con el uid que se mues-tra en las estadiacutesticas de red Al relacio-nar este nuacutemero sabemos el nombre del paquete de la aplicacioacuten sobre el que es-tamos leyendo las estadiacutesticas de red

Aplicacioacuten de ejemplo

La aplicacioacuten de ejemplo de este artiacute-culo se puede descargar desde httpbitly2m8WenA que muestra coacutemo etiqu-etar la conexioacuten de red desde distintas

secciones de la aplicacioacuten lo cual puede ayudar a analizar el volumen de traacutefico de datos de la aplicacioacuten La Figura 6 muestra un ejemplo de coacutemo lo vemos si utilizamos Android Device Monitor (dentro de Studio diriacutegete a Tools -gt Android -gt Android Device Monitor)

Tal y como se puede ver en el graacutefico la simple aplicacioacuten tiene 3 conexiones dife-rentes y cada una de ellas estaacute accediendo a un sitio web diferente Al etiquetarlas con

formacioacuten del paquete (que ver-emos en la seccioacuten de detalles del paquete dumpsys) con el objeto de conocer queacute aplicacioacuten utiliza estas estadiacutesticas de red

bull Las etiquetas son uacutetiles si de-sea ver la cantidad de datos que utiliza cada conexioacuten de tu apli-cacioacuten Puedes ver un ejemplo de esto en la Figura 4 que muestra que el uid 10007 tiene las siguien-tes etiquetas 0x30000401 0x30003201 0x30002804 0x10000401 y 0x30000407 Es-tas etiquetas ayudan al desarrol-lador a saber cuaacutentos datos uti-liza cada parte de la aplicacioacuten Estas estadiacutesticas de red en par-ticular estaacuten vinculada al paquete Google Framework que forma parte de Google Play Store

En el siguiente apartado veremos coacutemo escribir una aplicacioacuten etiquetando el hilo que hace la conexioacuten de red para determi-nar la cantidad de datos que se utilizan

Estadiacutesticas de paquetes

En la seccioacuten anterior analizamos el uid que aparece al ejecutar el comando dumpsys netstats Ahora necesitamos sa-ber queacute uid corresponde a la aplicacioacuten en el dispositivo y esto se hace mediante el siguiente comando

DESARROLLO ANDROID

figura 3 ndash estadiacutesticas de red con Dumpsys

figura 4 - estadiacutesticas de etiquetas UiD

figura 5 - Detalles del paquete dumpsys

figura 6 - etiquetas de red

coacutedigos diferentes podemos ver la cantidad de traacutefico que consume cada conexioacuten y esto nos ayudaraacute a ver si nuestra aplicacioacuten utiliza el ancho de banda de un modo eficiente

El coacutedigo del siguiente fragmento muestra el uso de la API TrafficStats interna Esta etiqueta API muestra el subproceso que utiliza actualmente un socket con un identificador y todo el traacute-fico que pasa por la misma conexioacuten se grabaraacute junto Asiacute es como la aplicacioacuten es capaz de agrupar las 3 conexiones diferentes Internamente Android utili-za el moacutedulo xt_qtaguid del kernel para realizar este tipo de etiquetado Tienes disponible maacutes informacioacuten en httpbitly2kU8KXB

public void getUsingNormalURLC

onnection(String urlText int

threadTag)

throws IOException

URL url = null

TrafficStats

setThreadStatsTag(threadTag)

HttpURLConnection urlConnec-

tion = getConnection(url)

try

finally

TrafficStatsclearThread-

StatsTag()

ODROID MAGAZINE 29

Disgustado te subes a tu 4x4 de dominacioacuten del mun-do un vehiacuteculo que desde fuera parece maacutes bien un viejo camioacuten de granja pero por dentro se parece maacutes

al sistema de control de un transbordador espacial porque el conductor del restaurante oriental que realiza las entrega a do-micilio estaacute enfermo Ahora tienes que ir a recoger tu propia comida ldquoQueacute rudimentariordquo piensas cuando sales de tu garaje secreto Justamente cuando vas a parar el vehiacuteculo en un stop oyes un fuerte ruido Sales y te diriges raacutepidamente a la parte posterior del 4x4 donde observas un cubo de basura Te tiras de los pelos y piensas ldquoiexclEsos basureros Neanderthales dejaron otra vez el cubo en mediordquo Ahora te toca recoger los restos de tu cena y la basura de otros

Conforme te vas alejando para hacer tus recados empiezas a pensar en coacutemo evitar este inconveniente en el futuro Varias ideas te vienen a la mente

Un sistema lidar para escanear en 3D el entorno en tiempo real y alarmas sonoras cuando sea necesarioUn brazo ciberneacutetico colocado en la parte posterior del 4x4 que procese video para detectar objetos agarrarlos y moverlosUna simple camara trasera

Empiezas a considerar la viabilidad de cada una

Muy bueno pero demasiado complicado y costosoAuacuten mejor y un proyecto propio de un cientiacutefico loco pero demasi-ado complicado y costosoya tengo dos iexclpero estaba demasiado preocupado en mis pensa-mientos para prestarles atencioacuten

Lo que necesitas es algo simple sin complicaciones y barato que haga sonar una alarma para alertarte incluso cuando estar absorto en tus pensamientos ldquoAhardquo Recuerdas haber visto un nuevo producto en ameriDroid que puede hacer precisamente esto Se trata de un microcontrolador conectado al USB que soporta hasta 6 sensores ultrasoacutenicos con simples comandos en serie (httpbitly2l26ptV) ldquoiexclPerfectordquo Piensas

Regresas a tu laboratorio subterraacuteneo con el pollo Kung Pao en la mano te apresurar a encender tus monitores entras en el sitio web ameriDroid y pides un kit ldquoUSB Ultrasonic Ranging Sensorrdquo con 6 sensores y carcasas

Vas sintiendo una sensacioacuten de alivio a medida que regresas a los 12 proyectos en lo que ya estabas trabajando a la espera de que pasen un par de diacuteas hasta que llegue tu nuevo pedido Mientras te comes tu Kung Pao dibujas un diagrama de coacutemo quieres colocar los sensores en la parte posterior de tu vehiacuteculo

Un par de diacuteas maacutes tarde el kit llega Inmediatamente em-piezas a montar el kit y los sensores en la parte posterior de tu 4x4 teniendo cuidado de usar sellador de silicona para pro-teger los sensores de la lluvia aguanieve y nieve que puedas encontrar durante tus aventuras para dominar el mundo

A continuacioacuten consultas las instrucciones proporcionadas por ameriDroid con el kit sobre coacutemo controlar y leer los sen-sores desde tu fiel ODROID-C2 y VU7 que montaste en el salpicadero para este propoacutesito

Conectando el cable USBEl cable USB suministrado debe conectarse al microcon-

trolador (la pequentildea placa de circuito con filas de pines que sobresalen) El microcontrolador tiene una fila de 4 o 6 pines

DETECTAR LA PRESEnCIACROnICAS DE un CIEnTIfICO LOCOpor bo lechnowsky

SENSOR ULTRASONICO

ODROID MAGAZINE 30

en un extremo Si tiene 6 pines ceacutentrate en los 4 pines centrales y sigue estas instrucciones

Negro - conectar a GNDrojo - conectar a VccVerde - conectar a rxi

blanco - conectar a txD

Conectando los sensoresultrasoacutenicos

En cada sensor ultrasoacutenico hay cuatro pines marcados Vcc Trig Echo Gnd Para el primer sensor ultrasoacutenico conecta el pin 2 del microcontrolador al pin ldquoTrigrdquo del sensor ultrasoacutenico Conecta el pin 3 del microcontrolador al pin ldquoEchordquo del sensor Conecte el pin ldquoVccrdquo del sensor a DC 5V (el pin ldquoVCCrdquo del microcontrolador suministra 5V) y el pin ldquoGndrdquo del sensor a una conexioacuten a tierra como por ejemplo los pines ldquoGNDrdquo del microcontrolador

Si conectas un segundo sensor de ultrasonidos conecta ldquoTrigrdquo al pin 4 y ldquoEchordquo al pin 5 Continuacutea conectando los siguientes pines a los sensores hasta los pines 12 y 13 si al final optas por conectar los seis sensores ultrasonidos

Conexioacuten del softwareUtilizas un programa terminal como PuTTY Screen o tu

lenguaje de script o programacioacuten favorito para conectarte al puerto serie que aparece cuando te conectas el sensor ultrasoacuteni-co Esto variaraacute en funcioacuten del sistema operativo que utilizas para conectarte al microcontrolador En Windows consultar el ldquoAdministrador de dispositivosrdquo es la forma maacutes comuacuten de averiguarlo En Linux ldquodmesgrdquo o ldquolsusbrdquo son las formas de de-tectar a queacute puerto estaacute conectado Deberiacuteas ver algo denomi-nado ldquoPL2303rdquo que es la conexioacuten del microcontrolador Si recibes informacioacuten basura en tu terminal cuando te conectes aseguacuterate de que los ajustes en serie son 9600 baudios 8 bits ninguno (paridad) y 1 bit de parada Aquiacute tienes una lista de los comandos que puede aceptar el microcontrolador

bull debug on Activa la retroalimentacioacuten detallada Estaacute deshabilitada por defecto nos proporcionaraacute aclaracio-nes sobre los errores de entrada

bull debug off desactiva la retroalimentacioacuten detalladabull init x y activa un HC-SR04 en los pines especificados

X es trigger Y es echo Estos deben ser pines digitales El dispositivo 0 estaacute preestablecido en los pines 2 y 3 de modo que no es necesario especificar estos pines La seleccioacuten de pines no vaacutelidos devolveraacute un signo de ex-clamacioacuten ()

bull ping enviacutea una sola lectura del HCSR04 previamente utilizado Si no se ha utilizado todaviacutea se usaraacute el dis-positivo 0 Si al comando le sigue un espacio y un nuacutemero entre 0-100 (exclusivo) se realizaraacute ese nuacutemero de lecturas emitiendo primero el promedio de esas lec-

SENSOR ULTRASONICO

turas despueacutes el nuacutemero de lecturas fallidas (que no cuentan para el promedio) y luego los valores miacutenimo y maacuteximo de lectura separados por espacios En cual-quier caso si una sentildeal se desconecta automaacuteticamente devolveraacute -1

bull start Hace ping constantemente a todos los dispositivos conectados en secuencia Debido a que los dispositivos se utilizan uno a uno el flujo de datos de este comando seraacute maacutes raacutepido si los dispositivos miden distancias cor-tas Si este comando le sigue un espacio y un nuacutemero mayor que 0 la placa esperaraacute estos milisegundos entre la lectura del uacuteltimo dispositivo y la lectura del primer dispositivo El resultado de este comando seraacute la lectura de cada dispositivo (con un uacutenico espacio despueacutes de cada uno) y una vuelta tras el uacuteltimo dispositivo

bull stop detiene la operacioacuten ldquostartrdquo soacutelo es efectivo tras haber iniciado ldquostartrdquo

bull mode emite el modo de medicioacuten del flujo M para meacutetrico (miliacutemetros) I para Imperial (deacutecimas de pul-gada) o R para Raw (la longitud de pulso en microse-gundos devuelta por el HC-SR04) El valor predeter-minado es M

bull timeout emite el tiempo de espera actual para lecturas de la sentildeal El tiempo de espera es la mayor cantidad de microsegundos que la placa esperaraacute antes de declarar que el HC-SR04 ha realizado una mala lectura lo cual no es necesariamente lo mismo que el pulso maacutes largo que la placa aceptaraacute del HC-SR04 Cuando la placa mide el pulso del HC-SR04 primero espera a que el HC-SR04 comience a enviar un pulso Este tiempo cuenta para el tiempo de espera Cuando este comando le sigue un espacio y un nuacutemero el tiempo de espera se ajusta a ese nuacutemero El valor predeterminado es 1 segundo (1000000 microsegundos)

bull ver emite informacioacuten de versioacuten y creacuteditos

Si cualquier comando (o ninguacuten comando) estaacute precedido por un uacutenico diacutegito de 0-5 (inclusive) seguido de un espacio el dispositivo que corresponde a ese diacutegito se seleccionaraacute para ser usado con el siguiente comando ldquopingrdquo Cada vez que la placa esteacute lista para un comando emitiraacute ldquogtrdquo para la serie La uacutenica excepcioacuten estaacute tras el comando ldquostartrdquo que no solicitaraacute entrada hasta que sea reconocido ldquostoprdquo

ODROID MAGAZINE 31

iquestCoacutemo empezaste con los ordenadoresCuando empeceacute mi negocio tuve que decidir queacute plat-

aforma de hardware iba a utilizar para la recogida de datos del traacutefico Simplemente para que no pienses mal de miacute mis caacutemaras de traacutefico no son las que se usan para multar por exceso de velocidad o algo asiacute Mi sistema estaba desti-nado suavizar el flujo de traacutefico fijando los controles oacutepti-mos de las sentildeales de traacutefico Anteriormente usaba un PC industrial para ejecutar mi software de reconocimiento de imaacutegenes Ahora uso la familia de dispositivos ODROID para esta cuestioacuten

iquestQueacute te atrajo de la plataforma ODROID En 2012 useacute Google para buscar una plataforma que

fuera muy compacta y al mismo tiempo potente para que cubriera mis necesidades que resultoacute ser la placa

Por favor haacuteblanos un poco sobre tiSoy ingeniero de electroacutenica y software en Rusia desde

hace 47 antildeos Naciacute en Siberia y tras terminar la escuela me mudeacute a Moscuacute para estudiar en la universidad Ser estudi-ante en el Instituto de Aviacioacuten de Moscuacute (MAI) fue una experiencia increiacuteble probablemente la mejor de mi vida A principios de los 90 llegoacute a Rusia la era de los microordena-dores soliacutea jugar a un juego de saltos en una CPU z80 y el i486 Tras finalizar mis estudios universitarios y de posgrado me convertiacute en ingeniero Trabajeacute en unos cuantos puestos de trabajo para diferentes empresas y finalmente decidiacute em-prender mi propio negocio En 2006 puse en marcha una iniciativa para crear sistemas de recuento del traacutefico de au-tomoacuteviles Estoy casado y tengo una hija de 21 antildeos llamada Lena que trabaja como enfermera Mi esposa Nadezhda es disentildeadora de vestuario de produccioacuten pero ahora trabaja como disentildeadora web Ella es aficionada a la fotografiacutea digi-tal y le encanta su caacutemara reacuteflex digital

COnOCIEnDO un ODROIDIAnvIACHESLAv ALEKSEEveditado por rob roy (robroy)

CONOCIENDO UN ODROIDIAN

Viacheslav disfruta tocando la guitarra y escuchando muacutesica

1995 en el campus MAi probando uno de los primeros equipos Vr comerciales del mundo que funcionaba a 640x480 a 30fps Utiliz-aba un sensor magneacutetico en la nuca para la posicioacuten de la cabeza la mejor broma que se podiacutea gastar a alguien era colocar un imaacuten cerca de la espalda y sacudirlo iexcllos gritos estaban garantizados cuando el mundo en 3D daba vueltas sin cesar

ODROID MAGAZINE 32

ODROID-X2 Con sus cuatro nuacutecleos funcionando a 17 GHz calculaba con facilidad los algoritmos de reconteo del traacutefico de automoacuteviles Maacutes tarde cambieacute al U3 y el XU4

iquestCuaacutel es tu ODROID favorito y por queacuteDe momento mi favorito es el XU4 Mi sistema estaacute

basado en el tratamiento de fotogramas de video en tiempo real por lo que el bus USB 30 del XU4 es bastante bueno para una caacutemara con una interfaz de captura de viacutedeo Para mi sistema es muy importante tener una buena conexioacuten entre la caacutemara de viacutedeo y la CPU Probablemente tendreacute que echar un vistazo a las interfaces de nivel inferior como MIPI CSI-2 que por desgracia estaacuten ausente en el XU4 Recientemente he estado aprendiendo como usar la caacute-mara oCam GS BW La caacutemara es buena en siacute misma pero para un uso industrial al aire libre tengo que implementar un software de control de exposicioacuten automaacutetica y posible-mente de control de apertura de la lente que todaviacutea estaacute en estudio

MEET AN ODROIDIAN

Una vieja joya el mini ordenador Nixdorf

An old gem the Nixdorf mini computer

CONOCIENDO UN ODROIDIAN

iquestQueacute aficiones e intereses tienes aparte de los ordenadoresDisfruto conduciendo y leyendo sobre coches y viendo

los campeonatos de carreras de F1 Tambieacuten me gusta via-jar pescar escuchar muacutesica y tocar la guitarra Tengo un gato siberiano llamado Leia y soy fan de Star Wars

iquestQueacute consejo le dariacuteas a alguien que quiere aprender maacutes sobre la programacioacuten

Hacer software es algo increiacuteble y miacutestico Es una fusioacuten de arte y tecnologiacutea Nada te inspira maacutes que tu aplicacioacuten cuando empieza a cobrar vida Sin embargo siempre estaacute ahiacute el otro lado de la Fuerza Estar listo para instruirte inc-esantemente El desarrollo de software es una de las activi-dades que cambia maacutes raacutepido Si tienes pensado dejar de hacer software en uno o dos antildeos puede dejar de aprender ahora El conocimiento se volveraacute anticuado en un par de antildeos maacutes o menos Para estar en lo maacutes alto siempre tienes que correr Es similar a la cancioacutenrdquoRun like Hellrdquo de Pink Floyd Si estaacutes listo para vivir de esta forma seguro que tendraacutes eacutexito

ODROID MAGAZINE 33

Page 20: Estación ARCADE · gias de marketing, administración de medios sociales y producción multimedia impresa, web, vídeo y cine. Ges-tionando múltiples cuentas con agencias y productores

El DevOps es complicado Los grandes proyectos de soft-ware como Mesos y Kubernetes desarrollan equipos como los que se encuentran en la mayoriacutea de las empre-

sas y organizaciones tecnoloacutegicas como CoreOS con la finali-dad de ayudar a los desarrolladores a poner sus aplicaciones en funcionamiento Sin embargo iquestcuaacutel seriacutea una buena solucioacuten para un desarrollador en solitario o una pequentildea red domeacutesti-ca iquestCoacutemo podemos usar el coacutedigo a nivel de infraestructura

Uso un portaacutetil Macintosh OSX para desarrollo pero para las aplicaciones de larga duracioacuten o aplicaciones que se ejecu-tan por la noche necesito un entorno remoto siempre activo ya que mi portaacutetil estaraacute fuera de liacutenea o en el tren conmigo mientras voy y vengo del trabajo Tiene su sentido no utilizar el ordenador como un entorno para la puesta en funcionamiento de aplicaciones

El ODROID-XU4 es un ordenador ideal para un entor-no de implementacioacuten remoto ya que es econoacutemico flexible cuenta con excelentes especificaciones teacutecnicas y puede ejecutar Linux Este artiacuteculo tiene por objetivo explicar coacutemo almacenar coacutedigo de implementacioacuten en tu repositorio de proyectos asiacute como automatizar las implementaciones y ejecuciones

Arch LinuxArch Linux es una distribucioacuten de Linux gratuita de coacutedigo

abierto que fue lanzada en 2002 Estaacute centrada en la elegancia la integridad del coacutedigo el minimalismo y la simplicidad y cuenta con que el usuario haga un esfuerzo en comprender el funcionamiento del sistema Arch Linux utiliza en particular un modelo de revisioacuten continua de modo que todo lo que se necesitas para conseguir el software del sistema maacutes reciente es actualizar el sistema de forma perioacutedica

Arch Linux puede ser algo difiacutecil de asimilar ya que uti-liza herramientas diferentes a las de una distribucioacuten Debian El gestor de paquetes se activa a traveacutes de ldquopacmanrdquo en lugar de ldquoapt-getrdquo y existe un gestor complementario de paquetes muy popular llamado ldquoyaourtrdquo Muchos de los servicios o her-ramientas maacutes comunes no se instalan por defecto

Arch Linux esta hecho principalmente para procesadores x86 pero un proyecto llamado Arch Linux ARM (ALARM) tiene una distribucioacuten ARM de Arch Linux para arquitectu-ras AArch64 ARMv8 y ARMv7 Hardkernel el fabricante de ODROIDs es de hecho un patrocinador del proyecto Arch Linux ARM

HOME DATA CENTER

HOME DATA CEnTERIMPLEMEnTACIOn DEL CODIGO COn ARCHLInuXpor John Skilbeck

Configurar la redDeberaacutes asignarle a tu dispositivo una direccioacuten IP LAN

DHCP reservada y en el mejor de los casos un nombre de host que se propagaraacute a lo largo de tu red por medio del servidor DNS de tu router De esta forma en nuestro entorno de desar-rollolocal podremos utilizar un nombre de host para resolver siempre el entorno de implementacioacutenremoto

Por ejemplo en mi red reservo el 192168249 a la direc-cioacuten MAC de mi ODROID Tambieacuten configuro una entrada DNS que asigna a esa direccioacuten IP ldquoodroidrdquo Utilizar un firm-ware personalizado en el router como Tomato USB o DD-WRT lo hace extremadamente faacutecil ya que esos firmwares convierten tu router en un pequentildeo ordenador Linux con una aplicacioacuten web GUI muy pulida aunque su implementacioacuten estaacute fuera del alcance de este artiacuteculo Si operas con subredes aseguacuterate dirigir el puerto hacia el puerto externo que se asigna al puerto SSH del dispositivo odroid ya que Git se ejecuta a traveacutes de SSH

Configurar el proyectoLoacutegicamente desearaacutes estandarizar el flujo de trabajo de la

implementacioacuten Esto haraacute que el trabajo con proyectos sea

el home data center de John es una auteacutentica obra de arte

ODROID MAGAZINE 20

extremadamente faacutecil y eliminas muchos de los cambios de contexto mental que utilizas cuando trabaja en varios proyec-tos Crearemos una carpeta para alojar todos nuestros archivos relacionados con implementaciones Coloca los archivos eje-cutables en ldquodeploybinrdquo y cualquier archivo cron en ldquodeploytasksrdquo (maacutes informacioacuten sobre esta cuestioacuten maacutes adelante)

Navega hasta el directorio del proyecto en una ventana de Terminal y luego escribe los siguientes comandos

$ mkdir -p deploybin

$ mkdir -p deploytasks

$ cd deploybin ampamp touch run-job ampamp

chmod u+x run-job ampamp cd -

$ cd deploytasks ampamp touch crontab

Tambieacuten puede estandarizar doacutende colocar tu coacutedigo fuente De esta forma le seraacute maacutes faacutecil a otras personas ver coacutemo se or-ganiza tu proyecto y conocer queacute es el coacutedigo fuente y queacute no

$ mkdir src

$ cd src ampamp (place source code here ie python core

py clojure coreclj nodejs appjs)

Simplificar los puntos de entradaIniciar una aplicacioacuten puede resultar algo confuso con todos

los comandos que se pueden ejecutar en diferentes lenguajes Por ejemplo puede usar Java ldquojava -jar [my-jar] jarrdquo o python ldquopython my-apppyrdquo y tu aplicacioacuten tambieacuten puede necesitar varios argumentos Todo esto deberiacutea simplificarse y resumirse en un archivo ldquodeploybinrun-jobrdquo

binsh

set -e

CMD=rdquosrcduckrdquo

exec $CMD $

Crear el archivo cronArch Linux no viene con un cliente o demonio cron por

defecto Instaacutelalo con ldquosudo pacman -Syu cronierdquo Utilizando cron puede ejecutar comandos en intervalos de tiempo espe-cificados haciendo uso de la sintaxis especial de cron Normal-mente se almacena en el archivo crontab del usuario al que puedes acceder con ldquocrontab -erdquo Sin embargo esto es demasi-ado manual y queremos usar coacutedigo como infraestructura Cron tambieacuten tiene algunos subdirectorios muy uacutetiles en ldquoetccronrdquo como ldquoetccrondailyrdquo yrdquoetccronhourly ldquo si co-locamos los archivos aquiacute eacutestos se ejecutaraacuten en los intervalos especificados

Revisa el archivo de ldquodeploytaskscrontabrdquo que colocare-mos en ldquoetccrondrdquo que se crea automaacuteticamente con nuestro script ldquoposttreceiverdquo

variables

SHELL=binbash

PATH=binusrbinusrlocalbinusrsbinusrlo-

calsbin

MAILTO=[your-email-address]gmailcom

cmd=rdquodeploybinrun-jobrdquo

app_dir=rdquohomeskilbjodeployappduckdnsrdquo

jobs

5 skilbjo cd ldquo$app_dirrdquo $cmd gtdevnull

Aquiacute tienes el esquema general de la estructura de un simple proyecto El uacutenico ejecutable del proyecto es un uacutenico script shell ubicado en ldquosrcrdquo

$ tree

READMEmd

deploy

bin

post-receive

run-job

tasks

crontab

src

duck

4 directories 5 files

GitPrimero queremos agregar una URL remota a nuestro

proyecto en nuestro entorno local

$ git remote add odroid sshodroid~deploygit

duckdnsgit

Ten en cuenta que dependiendo de la topologiacutea de tu red es posible que tenga que modificar esta url Si no puedes asignar nombres de host la URL de git se veriacutea asiacute donde 192168249 es la direccioacuten IP LAN de tu dispositivo

$ ssh192168249~deploygitduckdnsgit

Si tienes un usuario en tu entorno ODROID distinto al que tienes en tu entorno de desarrollo la url se veriacutea asiacute donde ldquoskilbjordquo es tu nombre de usuario

$ sshskilbjoodroid~deploygitduckdnsgit

Si tu servidor remoto estaacute en una subred diferente y tienes redireccionados los puertos tu url tendriacutea este aspecto donde

HOME DATA CENTER

ODROID MAGAZINE 21

ldquo2222rdquo es tu puerto externo

$ ssh192168122222~deploygitduckdnsgit

En el directorio principal de tu entorno remoto crea una carpeta llamada ldquo~deployrdquo con dos subcarpetas ldquo~deployapprdquo y ldquo~deploygitrdquo Los subdirectorios de ldquo~deploygitrdquo seraacuten los puntos finales de nuestros desarrollos y con un hook ejecutaraacuten comandos de implementacioacuten en los subdirectorios de ldquo~ deployapprdquo

Primero navega hasta el directorio principal del entorno re-moto y a continuacioacuten escribe los siguientes comandos

$ mkdir -p ~deployapp

$ mkdir -p ~deploygit

$ mkdir -p ~deploygitduckdnsgit

$ mkdir -p ~deployappduckdns

Ahora en ldquo~ deploygitduckdnsgithooksrdquo crea un archi-vo ejecutable llamado ldquopost-receiverdquo que se activaraacute con cada accioacuten hacia el punto final

$ cd ~deployappgitduckdnsgithooks

$ touch post-receive ampamp chmod u+x post-receive

$ vim post-receive

Rellena el ejecutable con lo siguiente en el directorio ldquo~deploygitduckdnsgithooksrdquo del entorno remoto

usrbinenv bash

set -eou pipefail

user=$(whoami)

dir=rdquohome$userdeployapprdquo

app=$(basename $(pwd) | sed -e lsquosgitrsquo)

deploy_dir=rdquo$dir$apprdquo

cron_dir=rdquoetccrondrdquo

GIT_WORK_TREE=rdquo$deploy_dirrdquo git checkout -f

cd ldquo$deploy_dirrdquo

build steps here

case ldquo$userrdquo in

(skilbjo) sudo cp deploytaskscrontab ldquo$cron_

dir$apprdquo

esac

you can also do project-specific build steps in

this section like install

dependencies (ie npm install) compile source

code (ie lein uberjar)

as well as if a long-lived app run commands as

well (ie java -jar my_jarjar)

echo ldquoall donerdquo

exit 0

ImplementacioacutenAhora estamos listos para implementar ya que nuestro en-

torno local estaacute configurado para alcanzar el punto final del servidor de implementacioacuten nuestro entorno remoto estaacute con-figurado para recibir la notificacioacuten y revisar el coacutedigo fuente ejecutar cualquier paso de compilacioacuten y colocar una tarea en el directorio cron del sistema para su lanzamiento Ponto todo en praacutectica con el siguiente comando en el directorio del proyecto del entorno local

$ git push odroid

Ademaacutes para ver coacutemo se ha implementado todo esto en un proyecto de ejemplo visita httpbitly2lthYKW

Pasos finalesSe puede antildeadir al flujo anterior algunas caracteriacutesticas

como son muacuteltiples entornos ya sea con muacuteltiples ODROIDs o con un solo ODROID trataacutendolo como un servidor de ser-vicio Esto se puede hacer con subdirectorios bajo ldquo~deployrdquo como ldquo~deploystagingappmy_apprdquo o ldquo~ deployproduc-tionappmy_apprdquo

Ademaacutes podriacuteas antildeadir un servicio de integracioacuten conti-nua como CircleCI que ejecutariacutea una suite de testeo desde cada desarrollo a GitHub y si tiene eacutexito compila una imagen Docker No podriacuteas entonces tener un archivo en el entorno remoto que verificariacutea una imagen de un repositorio Docker y la ejecutariacutea en un intervalo especificado Esto es lo que hacen muchos de los softwares DevOps distribuidos como Mesos y Kubernetes pero en un entorno mucho maacutes rico que BASH y Linux

Referencias

Artiacuteculo Wikipedia de Arch linux httpbitly2l71ADKWebsite Arch linux ArM httpsarchlinuxarmorgArtiacuteculo que leiacute hace unos tres antildeos y que me inspiroacute para escribir mi propio artiacuteculo httpbitly2m5JAct

HOME DATA CENTER

ODROID MAGAZINE 22

odroid ARCADE BOXLA EXPERIEnCIA PERfECTA COn TuS JuEGOS ARCADE fAvORITOSpor brian Kim charles park y John lee

ARCADE BOX

Los ODROIDs tienen mejor rendimiento que las placas de la competencia especialmente en lo que respecta al renderizado de video lo que significa que

las placas ODROID son ideales para jugar lo cual hacen muchos usuarios de ODROID Ya hay disponibles varios sistemas operativos de plataforma de juegos como Lakka (httpbitly1NO8BBC) y ODROID GameStation Tur-bo (httpbitly1ASFO5O) Para disfrutar auacuten maacutes de nuestras sesiones de juegos creamos nuestra propia consola arcade con simples botones GPIO y joysticks y la llama-mos la ODROID Arcade Box Elegimos un ODROID-XU4 para este proyecto porque es el que tiene mejor rendimiento GPU de todos los dispositivos ODROID actuales En este artiacuteculo vamos a describir como hemos creado la ODROID Arcade Box

Requisitos( Figura 3 ndash )Decidimos hacer la ODROID Arcade Box usando

un MDF (tablero de fibra de densidad media) El Shifter Shield del XU4 tambieacuten es uacutetil para utilizar los pines de expansioacuten del ODROID-XU4 Los Joysticks los botones y los cables eran los componentes de entrada y se utilizoacute

Nuestro primer y simple prototipo

ODROID MAGAZINE 23

panel MDf 12t2eA 600x2202eA 600x752eA 220x75taladroplegadoraDesmontadorcinta meacutetricaNavaja multiusoAlicates de punta largaoDroiD-xU4xU4 Shifter shieldSMpS (fuete Alimentacioacuten)

extendedores hDMi USb ethernetenchufe de alimentacioacuten y Switchbisagras 2eAreceptor de puertacaucho 4eAtornillospulsadores 19eAJoystick 2eAcablesterminales

una SMPS (Fuente de alimentacioacuten conmutada) como fuente de alimentacioacuten Las herramientas y las piezas utilizadas las tienes en esta paacutegina

La ODROID Arcade Box necesita un total de 27 entradas (19 entradas para botones y 8 entra-das para joysticks) Las 24 entradas GPIO digi-tales del ODROID-XU4 no son suficientes para las 27 entradas de modo que creamos dos puertos ADC adicionales para los tres botones que nos fal-taban Los valores de entrada ADC se basan en el voltaje de entrada y los valores de entrada digital y analoacutegica se procesan en el demonio GPIO que se describe a continuacioacuten

Disentildeo y montajeLos paneles de la ODROID Arcade Box deben

ser disentildeados y fabricados para que los botones y joysticks esteacuten bien colocados Elegimos MDF 12T teniendo en cuenta el precio y la durabilidad El dise-ntildeo se puede hacer con cualquier herramienta CAD como Google Sketch o SolidWorks Aunque existen muchas plantillas de disentildeo para los paneles de joypad decidimos elegir un disentildeo arcade estaacutendar japoneacutes

El primer paso del montaje es unir la placa al panel MDF Este paso fue faacutecil aunque nos llevo maacutes tiempo que el resto Despueacutes insertamos los joysticks la toma de corri-ente el interruptor y los botones en el panel MDF superior Los conectores HDMI Ethernet y USB se colocaron en la parte trasera del panel MDF El siguiente paso fue montar cada panel MDF usando un taladro para hacer los agujeros luego con tornillos los sujetamos

El uacuteltimo paso del montaje de la ODROID Arcade Box es conectar por cable los pines de expansioacuten del ODROID-XU4 a los componentes de entrada En este proyecto dise-ntildeamos las entradas GPIO externas tal y como se muestra en la paacutegina 26 Los botones Select y Temp estaacuten conecta-dos a puertos de expansioacuten ADC

Configuracion del softwareDesarrollamos un nuevo demonio GPIO llamado gpio_

keyd (httpbitly2ljOZKg) Este demonio es capaz de asignar entradas GPIO y eventos claves usando uinput y wiringPi una libreriacutea de acceso GPIO basada en pines Estaacute disentildeada para que le sea familiar a quiene ya ha utilizado el sistema de cableado Arduino Aunque la blibreriacutea wiring-Pi upstream soacutelo admite Raspberry Pi Hardkernel ofrece una versioacuten de wiringPi para ODROIDs en su repositorio GitHub (httpbitly1Eq3UpF) El moacutedulo uinput es un moacutedulo del kernel de Linux que gestiona el subsistema de entrada del usuario Se puede utilizar para crear y manejar dispositivos de entrada desde una aplicacioacuten

ARCADE BOX

herramientas compentes y lo que hay justamente debajo

esquema de los puertos de expansioacuten

ODROID MAGAZINE 24

Elegimos ODROID GameStation Turbo (httpbitly1ASFO5O) como plataforma de software para nuestra ODROID Arcade Box que tiene integrado uinput Debes asegurarte de que el archivo de dispositivo uinput existe en el sistema operativo elegido porque algunos no tienen dispositivos uinput

$ ls devuinput

Si tu sistema operativo no tiene un archivo de disposi-tivo devuinput entonces seraacute necesario recompilar e in-stalar un nuevo kernel con la opcioacuten de configuracioacuten IN-PUT_UINPUT habilitada La paacutegina Wiki en httpbitly1YIToBI describe coacutemo compilar e instalar la imagen del kernel a partir del coacutedigo fuente

$ make menuconfig

Device Drivers

-gt Input device support

-gt Generic input layer

-gt Miscellaneous device

-gt User level driver support ltgt

Ten en cuenta que wiringPi debe instalarse antes de in-stalar gpio_keyd En la imagen GameStation de ODROID los comandos sudo deben ejecutarse como root porque la cuenta ldquoodroidrdquo no estaacute designada como usuario sudo

$ git clone httpsgithubcomhardkernelwiringPi

git

$ cd wiringPi

$ sudo build

Descarga el coacutedigo fuente gpio_keyd el cual estaacute dis-ponible en nuestro repositorio GitHub El procedimiento para compilar e instalar gpio_keyd es muy simple

$ git clone httpsgithubcombkrepogpio_keydgit

$ cd gpio_keyd

$ make

$ sudo make install

El script gpio_keyd hace referencia a etcgpio_keydconf como el predeterminado para la informacioacuten de los botones y GPIO El archivo de configuracioacuten fue modi-ficado para las 27 entradas de la ODROID Arcade Box Algunas botones ya se utilizaban en el emulador de juego de modo que tuvimos que cambiar la configuracioacuten del emulador para evitar conflictos entre los botones de en-trada GPIO y el emulador Ten en cuenta que el campo ltGPIO pingt en el archivo de configuracioacuten hace referen-

ARCADE BOX

plano del disentildeo de joypad

la oDroiD Arcade box montada

ODROID MAGAZINE 25

cia al nuacutemero wiringPi no al GPIO y al nuacutemero de pin (httpbitly2lbzPIB)

Ejemplo de configuracioacuten para las 27 entradas etcgpio_keydconf

Digital input ltKey codegt ltGPIO typegt ltGPIO pingt ltActive valuegt User 1KEY_LEFT digital 15 0KEY_RIGHT digital 1 0KEY_UP digital 4 0KEY_DOWN digital 16 0KEY_A digital 2 0KEY_S digital 3 0KEY_D digital 30 0KEY_F digital 21 0KEY_Z digital 8 0KEY_X digital 9 0KEY_C digital 7 0KEY_V digital 0 0 User 2KEY_BACKSLASH digital 12 0KEY_SLASH digital 13 0KEY_SEMICOLON digital 14 0KEY_LEFTBRACE digital 5 0KEY_Y digital 26 0KEY_U digital 27 0KEY_I digital 22 0KEY_O digital 23 0KEY_H digital 6 0KEY_J digital 10 0KEY_K digital 11 0KEY_L digital 31 0

Analog input ltKey codegt ltGPIO typegt ltADC portgt ltADC ac-tive valuegtKEY_B analog 0 0KEY_N analog 0 2045KEY_M analog 1 2045

To run gpio_keyd daemon at every startup is conve-nient for ODROID Arcade Box

etcinitdgpio_keyd binsh BEGIN INIT INFO

ARCADE BOX

Mapeo Gpio externo para los botones y Joysticks

cableado de la oDroiD Arcade box

ODROID MAGAZINE 26

Provides gpio_keyd Required-Start $all Required-Stop Default-Start 2 3 4 5 Default-Stop Short-Description Run usrbingpio_keyd if it ex-ist END INIT INFO

PATH=sbinusrsbinbinusrbin

libinitvarssh

liblsbinit-functions

do_start() if [ -x usrbingpio_keyd ] then usrbingpio_keyd -d ES=$ [ ldquo$VERBOSErdquo = no ] ampamp log_end_msg $ES return $ES fi

case ldquo$1rdquo in start) do_start restart|reload|force-reload) echo ldquoError argument lsquo$1rsquo not supportedrdquo gtamp2 exit 3 stop) killall gpio_keyd exit 0 ) echo ldquoUsage $0 start|stoprdquo gtamp2 exit 3 Esac

$ sudo chmod +x etcinitdgpio_keyd$ sudo update-rcd gpio_keyd defaults$ sudo reboot

En los comandos anteriores el script gpio_keyd se ejecuta como un demonio uti-lizando la opcioacuten ldquo-drdquo El uso de gpio_keyd se puede comprobar con la opcioacuten ldquo-hrdquo Comprue-ba de nuevo las teclas usadas por el juego o el emulador despueacutes fija la configuracioacuten del gpio_ keyd correctamente Es ahora cuando estaacutes listo para jugar y disfrutar de tus juegos con tu nueva ODROID Arcade Box

ARCADE BOX

the King of fighters 98 John vs brian

ODROID MAGAZINE 27

En este artiacuteculo analizaremos las diferentes formas que existen para ob-tener los datos del uso de la red

ConfiguracioacutenLa forma normal de analizar los datos

de traacutefico de la red es mediante el uso de datos a traveacutes de las aplicaciones de configuracioacuten del sistema tal y como se muestra en la figura 1

El uso de datos muestra la cantidad total de traacutefico de datos entrante y sa-liente que ha sido utilizada por una apli-cacioacuten Si seleccionas la aplicacioacuten veraacute una pantalla como la que aparece en la Figura 2 que muestra informacioacuten detal-lada sobre el uso de la aplicacioacuten tanto en primer plano como de fondo

La informacioacuten que se muestra den-tro de la aplicacioacuten de Configuracioacuten se almacena en data systemnetstats que requiere acceso root Al eliminar todo lo que hay dentro de esta carpeta se resta-

Como desarrolladores queremos que nuestras aplicaciones sean eficientes y a menudo nos gus-

tariacutea saber cuaacutento ancho de banda de red estaacute utilizando nuestra aplicacioacuten Esto es muy uacutetil por varias razones

bull Para monitorizar y asegurarnos de que la aplicacioacuten es realmente la nuestra y no una aplicacioacuten que ha sido pirateada y publi-cada con diferentes nombres en Play Store

bull Para asegurarnos de que no es-tamos cogiendo ancho de banda innecesario del plan de datos del usuario

bull Para comprobar que el disposi-tivo que estamos usando no estaacute accediendo a Internet sin nuestro consentimiento

blecen las estadiacutesticas de red mostradas en esta aplicacioacuten

Estadiacutesticas de la redLa aplicacioacuten de configuracioacuten nos

puede dar una informacioacuten general so-bre las estadiacutesticas de la red de datos que es un buen comienzo pero a veces necesitamos un anaacutelisis maacutes detallado que puede hacerse a traveacutes del coman-do dumpsys Android cuenta con una poderosa herramienta llamada dumpsys que nos permite obtener una instan-taacutenea o volcado del sistema que pu-ede incluir informacioacuten sobre la red la memoria y otros componentes Lee la documentacioacuten de Android en httpbitly2kK9dep para obtener maacutes infor-macioacuten del sistema Para conseguir maacutes informacioacuten relacionada con la red nos interesa el comando

$ dumpsys netstats detail

La Figura 3 muestra un pantallazo de lo que puedes ver desde una tablet Nexus 7 que ejecuta Lollipop 511

Hay algunas cuestiones importantes para entender las estadiacutesticas

bull Las estadiacutesticas UID muestran el desglose de las aplicaciones de primer plano y de fondo

bull Uid muestra el ID de usuario de la aplicacioacuten que se puede utili-zar para relacionar eacutesta con la in-

DESARROLLO AnDROID AnALIzAnDO EL uSO DE RED DE LAS APLICACIOnESpor Nanik tolaram

DESARROLLO ANDROID

figura 1 - Uso de datos en la configuracioacuten

figura 2 - Desglose del uso de datos de la app

ODROID MAGAZINE 28

$ dumpsys package detail

Este comando te proporcionaraacute una larga lista de informacioacuten sobre los pa-quetes que estaacuten instalados en tu dis-positivo Para las estadiacutesticas de red nos interesa la seccioacuten que se muestra en la Figura 5

La seccioacuten resaltada muestra el userId que se relaciona con el uid que se mues-tra en las estadiacutesticas de red Al relacio-nar este nuacutemero sabemos el nombre del paquete de la aplicacioacuten sobre el que es-tamos leyendo las estadiacutesticas de red

Aplicacioacuten de ejemplo

La aplicacioacuten de ejemplo de este artiacute-culo se puede descargar desde httpbitly2m8WenA que muestra coacutemo etiqu-etar la conexioacuten de red desde distintas

secciones de la aplicacioacuten lo cual puede ayudar a analizar el volumen de traacutefico de datos de la aplicacioacuten La Figura 6 muestra un ejemplo de coacutemo lo vemos si utilizamos Android Device Monitor (dentro de Studio diriacutegete a Tools -gt Android -gt Android Device Monitor)

Tal y como se puede ver en el graacutefico la simple aplicacioacuten tiene 3 conexiones dife-rentes y cada una de ellas estaacute accediendo a un sitio web diferente Al etiquetarlas con

formacioacuten del paquete (que ver-emos en la seccioacuten de detalles del paquete dumpsys) con el objeto de conocer queacute aplicacioacuten utiliza estas estadiacutesticas de red

bull Las etiquetas son uacutetiles si de-sea ver la cantidad de datos que utiliza cada conexioacuten de tu apli-cacioacuten Puedes ver un ejemplo de esto en la Figura 4 que muestra que el uid 10007 tiene las siguien-tes etiquetas 0x30000401 0x30003201 0x30002804 0x10000401 y 0x30000407 Es-tas etiquetas ayudan al desarrol-lador a saber cuaacutentos datos uti-liza cada parte de la aplicacioacuten Estas estadiacutesticas de red en par-ticular estaacuten vinculada al paquete Google Framework que forma parte de Google Play Store

En el siguiente apartado veremos coacutemo escribir una aplicacioacuten etiquetando el hilo que hace la conexioacuten de red para determi-nar la cantidad de datos que se utilizan

Estadiacutesticas de paquetes

En la seccioacuten anterior analizamos el uid que aparece al ejecutar el comando dumpsys netstats Ahora necesitamos sa-ber queacute uid corresponde a la aplicacioacuten en el dispositivo y esto se hace mediante el siguiente comando

DESARROLLO ANDROID

figura 3 ndash estadiacutesticas de red con Dumpsys

figura 4 - estadiacutesticas de etiquetas UiD

figura 5 - Detalles del paquete dumpsys

figura 6 - etiquetas de red

coacutedigos diferentes podemos ver la cantidad de traacutefico que consume cada conexioacuten y esto nos ayudaraacute a ver si nuestra aplicacioacuten utiliza el ancho de banda de un modo eficiente

El coacutedigo del siguiente fragmento muestra el uso de la API TrafficStats interna Esta etiqueta API muestra el subproceso que utiliza actualmente un socket con un identificador y todo el traacute-fico que pasa por la misma conexioacuten se grabaraacute junto Asiacute es como la aplicacioacuten es capaz de agrupar las 3 conexiones diferentes Internamente Android utili-za el moacutedulo xt_qtaguid del kernel para realizar este tipo de etiquetado Tienes disponible maacutes informacioacuten en httpbitly2kU8KXB

public void getUsingNormalURLC

onnection(String urlText int

threadTag)

throws IOException

URL url = null

TrafficStats

setThreadStatsTag(threadTag)

HttpURLConnection urlConnec-

tion = getConnection(url)

try

finally

TrafficStatsclearThread-

StatsTag()

ODROID MAGAZINE 29

Disgustado te subes a tu 4x4 de dominacioacuten del mun-do un vehiacuteculo que desde fuera parece maacutes bien un viejo camioacuten de granja pero por dentro se parece maacutes

al sistema de control de un transbordador espacial porque el conductor del restaurante oriental que realiza las entrega a do-micilio estaacute enfermo Ahora tienes que ir a recoger tu propia comida ldquoQueacute rudimentariordquo piensas cuando sales de tu garaje secreto Justamente cuando vas a parar el vehiacuteculo en un stop oyes un fuerte ruido Sales y te diriges raacutepidamente a la parte posterior del 4x4 donde observas un cubo de basura Te tiras de los pelos y piensas ldquoiexclEsos basureros Neanderthales dejaron otra vez el cubo en mediordquo Ahora te toca recoger los restos de tu cena y la basura de otros

Conforme te vas alejando para hacer tus recados empiezas a pensar en coacutemo evitar este inconveniente en el futuro Varias ideas te vienen a la mente

Un sistema lidar para escanear en 3D el entorno en tiempo real y alarmas sonoras cuando sea necesarioUn brazo ciberneacutetico colocado en la parte posterior del 4x4 que procese video para detectar objetos agarrarlos y moverlosUna simple camara trasera

Empiezas a considerar la viabilidad de cada una

Muy bueno pero demasiado complicado y costosoAuacuten mejor y un proyecto propio de un cientiacutefico loco pero demasi-ado complicado y costosoya tengo dos iexclpero estaba demasiado preocupado en mis pensa-mientos para prestarles atencioacuten

Lo que necesitas es algo simple sin complicaciones y barato que haga sonar una alarma para alertarte incluso cuando estar absorto en tus pensamientos ldquoAhardquo Recuerdas haber visto un nuevo producto en ameriDroid que puede hacer precisamente esto Se trata de un microcontrolador conectado al USB que soporta hasta 6 sensores ultrasoacutenicos con simples comandos en serie (httpbitly2l26ptV) ldquoiexclPerfectordquo Piensas

Regresas a tu laboratorio subterraacuteneo con el pollo Kung Pao en la mano te apresurar a encender tus monitores entras en el sitio web ameriDroid y pides un kit ldquoUSB Ultrasonic Ranging Sensorrdquo con 6 sensores y carcasas

Vas sintiendo una sensacioacuten de alivio a medida que regresas a los 12 proyectos en lo que ya estabas trabajando a la espera de que pasen un par de diacuteas hasta que llegue tu nuevo pedido Mientras te comes tu Kung Pao dibujas un diagrama de coacutemo quieres colocar los sensores en la parte posterior de tu vehiacuteculo

Un par de diacuteas maacutes tarde el kit llega Inmediatamente em-piezas a montar el kit y los sensores en la parte posterior de tu 4x4 teniendo cuidado de usar sellador de silicona para pro-teger los sensores de la lluvia aguanieve y nieve que puedas encontrar durante tus aventuras para dominar el mundo

A continuacioacuten consultas las instrucciones proporcionadas por ameriDroid con el kit sobre coacutemo controlar y leer los sen-sores desde tu fiel ODROID-C2 y VU7 que montaste en el salpicadero para este propoacutesito

Conectando el cable USBEl cable USB suministrado debe conectarse al microcon-

trolador (la pequentildea placa de circuito con filas de pines que sobresalen) El microcontrolador tiene una fila de 4 o 6 pines

DETECTAR LA PRESEnCIACROnICAS DE un CIEnTIfICO LOCOpor bo lechnowsky

SENSOR ULTRASONICO

ODROID MAGAZINE 30

en un extremo Si tiene 6 pines ceacutentrate en los 4 pines centrales y sigue estas instrucciones

Negro - conectar a GNDrojo - conectar a VccVerde - conectar a rxi

blanco - conectar a txD

Conectando los sensoresultrasoacutenicos

En cada sensor ultrasoacutenico hay cuatro pines marcados Vcc Trig Echo Gnd Para el primer sensor ultrasoacutenico conecta el pin 2 del microcontrolador al pin ldquoTrigrdquo del sensor ultrasoacutenico Conecta el pin 3 del microcontrolador al pin ldquoEchordquo del sensor Conecte el pin ldquoVccrdquo del sensor a DC 5V (el pin ldquoVCCrdquo del microcontrolador suministra 5V) y el pin ldquoGndrdquo del sensor a una conexioacuten a tierra como por ejemplo los pines ldquoGNDrdquo del microcontrolador

Si conectas un segundo sensor de ultrasonidos conecta ldquoTrigrdquo al pin 4 y ldquoEchordquo al pin 5 Continuacutea conectando los siguientes pines a los sensores hasta los pines 12 y 13 si al final optas por conectar los seis sensores ultrasonidos

Conexioacuten del softwareUtilizas un programa terminal como PuTTY Screen o tu

lenguaje de script o programacioacuten favorito para conectarte al puerto serie que aparece cuando te conectas el sensor ultrasoacuteni-co Esto variaraacute en funcioacuten del sistema operativo que utilizas para conectarte al microcontrolador En Windows consultar el ldquoAdministrador de dispositivosrdquo es la forma maacutes comuacuten de averiguarlo En Linux ldquodmesgrdquo o ldquolsusbrdquo son las formas de de-tectar a queacute puerto estaacute conectado Deberiacuteas ver algo denomi-nado ldquoPL2303rdquo que es la conexioacuten del microcontrolador Si recibes informacioacuten basura en tu terminal cuando te conectes aseguacuterate de que los ajustes en serie son 9600 baudios 8 bits ninguno (paridad) y 1 bit de parada Aquiacute tienes una lista de los comandos que puede aceptar el microcontrolador

bull debug on Activa la retroalimentacioacuten detallada Estaacute deshabilitada por defecto nos proporcionaraacute aclaracio-nes sobre los errores de entrada

bull debug off desactiva la retroalimentacioacuten detalladabull init x y activa un HC-SR04 en los pines especificados

X es trigger Y es echo Estos deben ser pines digitales El dispositivo 0 estaacute preestablecido en los pines 2 y 3 de modo que no es necesario especificar estos pines La seleccioacuten de pines no vaacutelidos devolveraacute un signo de ex-clamacioacuten ()

bull ping enviacutea una sola lectura del HCSR04 previamente utilizado Si no se ha utilizado todaviacutea se usaraacute el dis-positivo 0 Si al comando le sigue un espacio y un nuacutemero entre 0-100 (exclusivo) se realizaraacute ese nuacutemero de lecturas emitiendo primero el promedio de esas lec-

SENSOR ULTRASONICO

turas despueacutes el nuacutemero de lecturas fallidas (que no cuentan para el promedio) y luego los valores miacutenimo y maacuteximo de lectura separados por espacios En cual-quier caso si una sentildeal se desconecta automaacuteticamente devolveraacute -1

bull start Hace ping constantemente a todos los dispositivos conectados en secuencia Debido a que los dispositivos se utilizan uno a uno el flujo de datos de este comando seraacute maacutes raacutepido si los dispositivos miden distancias cor-tas Si este comando le sigue un espacio y un nuacutemero mayor que 0 la placa esperaraacute estos milisegundos entre la lectura del uacuteltimo dispositivo y la lectura del primer dispositivo El resultado de este comando seraacute la lectura de cada dispositivo (con un uacutenico espacio despueacutes de cada uno) y una vuelta tras el uacuteltimo dispositivo

bull stop detiene la operacioacuten ldquostartrdquo soacutelo es efectivo tras haber iniciado ldquostartrdquo

bull mode emite el modo de medicioacuten del flujo M para meacutetrico (miliacutemetros) I para Imperial (deacutecimas de pul-gada) o R para Raw (la longitud de pulso en microse-gundos devuelta por el HC-SR04) El valor predeter-minado es M

bull timeout emite el tiempo de espera actual para lecturas de la sentildeal El tiempo de espera es la mayor cantidad de microsegundos que la placa esperaraacute antes de declarar que el HC-SR04 ha realizado una mala lectura lo cual no es necesariamente lo mismo que el pulso maacutes largo que la placa aceptaraacute del HC-SR04 Cuando la placa mide el pulso del HC-SR04 primero espera a que el HC-SR04 comience a enviar un pulso Este tiempo cuenta para el tiempo de espera Cuando este comando le sigue un espacio y un nuacutemero el tiempo de espera se ajusta a ese nuacutemero El valor predeterminado es 1 segundo (1000000 microsegundos)

bull ver emite informacioacuten de versioacuten y creacuteditos

Si cualquier comando (o ninguacuten comando) estaacute precedido por un uacutenico diacutegito de 0-5 (inclusive) seguido de un espacio el dispositivo que corresponde a ese diacutegito se seleccionaraacute para ser usado con el siguiente comando ldquopingrdquo Cada vez que la placa esteacute lista para un comando emitiraacute ldquogtrdquo para la serie La uacutenica excepcioacuten estaacute tras el comando ldquostartrdquo que no solicitaraacute entrada hasta que sea reconocido ldquostoprdquo

ODROID MAGAZINE 31

iquestCoacutemo empezaste con los ordenadoresCuando empeceacute mi negocio tuve que decidir queacute plat-

aforma de hardware iba a utilizar para la recogida de datos del traacutefico Simplemente para que no pienses mal de miacute mis caacutemaras de traacutefico no son las que se usan para multar por exceso de velocidad o algo asiacute Mi sistema estaba desti-nado suavizar el flujo de traacutefico fijando los controles oacutepti-mos de las sentildeales de traacutefico Anteriormente usaba un PC industrial para ejecutar mi software de reconocimiento de imaacutegenes Ahora uso la familia de dispositivos ODROID para esta cuestioacuten

iquestQueacute te atrajo de la plataforma ODROID En 2012 useacute Google para buscar una plataforma que

fuera muy compacta y al mismo tiempo potente para que cubriera mis necesidades que resultoacute ser la placa

Por favor haacuteblanos un poco sobre tiSoy ingeniero de electroacutenica y software en Rusia desde

hace 47 antildeos Naciacute en Siberia y tras terminar la escuela me mudeacute a Moscuacute para estudiar en la universidad Ser estudi-ante en el Instituto de Aviacioacuten de Moscuacute (MAI) fue una experiencia increiacuteble probablemente la mejor de mi vida A principios de los 90 llegoacute a Rusia la era de los microordena-dores soliacutea jugar a un juego de saltos en una CPU z80 y el i486 Tras finalizar mis estudios universitarios y de posgrado me convertiacute en ingeniero Trabajeacute en unos cuantos puestos de trabajo para diferentes empresas y finalmente decidiacute em-prender mi propio negocio En 2006 puse en marcha una iniciativa para crear sistemas de recuento del traacutefico de au-tomoacuteviles Estoy casado y tengo una hija de 21 antildeos llamada Lena que trabaja como enfermera Mi esposa Nadezhda es disentildeadora de vestuario de produccioacuten pero ahora trabaja como disentildeadora web Ella es aficionada a la fotografiacutea digi-tal y le encanta su caacutemara reacuteflex digital

COnOCIEnDO un ODROIDIAnvIACHESLAv ALEKSEEveditado por rob roy (robroy)

CONOCIENDO UN ODROIDIAN

Viacheslav disfruta tocando la guitarra y escuchando muacutesica

1995 en el campus MAi probando uno de los primeros equipos Vr comerciales del mundo que funcionaba a 640x480 a 30fps Utiliz-aba un sensor magneacutetico en la nuca para la posicioacuten de la cabeza la mejor broma que se podiacutea gastar a alguien era colocar un imaacuten cerca de la espalda y sacudirlo iexcllos gritos estaban garantizados cuando el mundo en 3D daba vueltas sin cesar

ODROID MAGAZINE 32

ODROID-X2 Con sus cuatro nuacutecleos funcionando a 17 GHz calculaba con facilidad los algoritmos de reconteo del traacutefico de automoacuteviles Maacutes tarde cambieacute al U3 y el XU4

iquestCuaacutel es tu ODROID favorito y por queacuteDe momento mi favorito es el XU4 Mi sistema estaacute

basado en el tratamiento de fotogramas de video en tiempo real por lo que el bus USB 30 del XU4 es bastante bueno para una caacutemara con una interfaz de captura de viacutedeo Para mi sistema es muy importante tener una buena conexioacuten entre la caacutemara de viacutedeo y la CPU Probablemente tendreacute que echar un vistazo a las interfaces de nivel inferior como MIPI CSI-2 que por desgracia estaacuten ausente en el XU4 Recientemente he estado aprendiendo como usar la caacute-mara oCam GS BW La caacutemara es buena en siacute misma pero para un uso industrial al aire libre tengo que implementar un software de control de exposicioacuten automaacutetica y posible-mente de control de apertura de la lente que todaviacutea estaacute en estudio

MEET AN ODROIDIAN

Una vieja joya el mini ordenador Nixdorf

An old gem the Nixdorf mini computer

CONOCIENDO UN ODROIDIAN

iquestQueacute aficiones e intereses tienes aparte de los ordenadoresDisfruto conduciendo y leyendo sobre coches y viendo

los campeonatos de carreras de F1 Tambieacuten me gusta via-jar pescar escuchar muacutesica y tocar la guitarra Tengo un gato siberiano llamado Leia y soy fan de Star Wars

iquestQueacute consejo le dariacuteas a alguien que quiere aprender maacutes sobre la programacioacuten

Hacer software es algo increiacuteble y miacutestico Es una fusioacuten de arte y tecnologiacutea Nada te inspira maacutes que tu aplicacioacuten cuando empieza a cobrar vida Sin embargo siempre estaacute ahiacute el otro lado de la Fuerza Estar listo para instruirte inc-esantemente El desarrollo de software es una de las activi-dades que cambia maacutes raacutepido Si tienes pensado dejar de hacer software en uno o dos antildeos puede dejar de aprender ahora El conocimiento se volveraacute anticuado en un par de antildeos maacutes o menos Para estar en lo maacutes alto siempre tienes que correr Es similar a la cancioacutenrdquoRun like Hellrdquo de Pink Floyd Si estaacutes listo para vivir de esta forma seguro que tendraacutes eacutexito

ODROID MAGAZINE 33

Page 21: Estación ARCADE · gias de marketing, administración de medios sociales y producción multimedia impresa, web, vídeo y cine. Ges-tionando múltiples cuentas con agencias y productores

extremadamente faacutecil y eliminas muchos de los cambios de contexto mental que utilizas cuando trabaja en varios proyec-tos Crearemos una carpeta para alojar todos nuestros archivos relacionados con implementaciones Coloca los archivos eje-cutables en ldquodeploybinrdquo y cualquier archivo cron en ldquodeploytasksrdquo (maacutes informacioacuten sobre esta cuestioacuten maacutes adelante)

Navega hasta el directorio del proyecto en una ventana de Terminal y luego escribe los siguientes comandos

$ mkdir -p deploybin

$ mkdir -p deploytasks

$ cd deploybin ampamp touch run-job ampamp

chmod u+x run-job ampamp cd -

$ cd deploytasks ampamp touch crontab

Tambieacuten puede estandarizar doacutende colocar tu coacutedigo fuente De esta forma le seraacute maacutes faacutecil a otras personas ver coacutemo se or-ganiza tu proyecto y conocer queacute es el coacutedigo fuente y queacute no

$ mkdir src

$ cd src ampamp (place source code here ie python core

py clojure coreclj nodejs appjs)

Simplificar los puntos de entradaIniciar una aplicacioacuten puede resultar algo confuso con todos

los comandos que se pueden ejecutar en diferentes lenguajes Por ejemplo puede usar Java ldquojava -jar [my-jar] jarrdquo o python ldquopython my-apppyrdquo y tu aplicacioacuten tambieacuten puede necesitar varios argumentos Todo esto deberiacutea simplificarse y resumirse en un archivo ldquodeploybinrun-jobrdquo

binsh

set -e

CMD=rdquosrcduckrdquo

exec $CMD $

Crear el archivo cronArch Linux no viene con un cliente o demonio cron por

defecto Instaacutelalo con ldquosudo pacman -Syu cronierdquo Utilizando cron puede ejecutar comandos en intervalos de tiempo espe-cificados haciendo uso de la sintaxis especial de cron Normal-mente se almacena en el archivo crontab del usuario al que puedes acceder con ldquocrontab -erdquo Sin embargo esto es demasi-ado manual y queremos usar coacutedigo como infraestructura Cron tambieacuten tiene algunos subdirectorios muy uacutetiles en ldquoetccronrdquo como ldquoetccrondailyrdquo yrdquoetccronhourly ldquo si co-locamos los archivos aquiacute eacutestos se ejecutaraacuten en los intervalos especificados

Revisa el archivo de ldquodeploytaskscrontabrdquo que colocare-mos en ldquoetccrondrdquo que se crea automaacuteticamente con nuestro script ldquoposttreceiverdquo

variables

SHELL=binbash

PATH=binusrbinusrlocalbinusrsbinusrlo-

calsbin

MAILTO=[your-email-address]gmailcom

cmd=rdquodeploybinrun-jobrdquo

app_dir=rdquohomeskilbjodeployappduckdnsrdquo

jobs

5 skilbjo cd ldquo$app_dirrdquo $cmd gtdevnull

Aquiacute tienes el esquema general de la estructura de un simple proyecto El uacutenico ejecutable del proyecto es un uacutenico script shell ubicado en ldquosrcrdquo

$ tree

READMEmd

deploy

bin

post-receive

run-job

tasks

crontab

src

duck

4 directories 5 files

GitPrimero queremos agregar una URL remota a nuestro

proyecto en nuestro entorno local

$ git remote add odroid sshodroid~deploygit

duckdnsgit

Ten en cuenta que dependiendo de la topologiacutea de tu red es posible que tenga que modificar esta url Si no puedes asignar nombres de host la URL de git se veriacutea asiacute donde 192168249 es la direccioacuten IP LAN de tu dispositivo

$ ssh192168249~deploygitduckdnsgit

Si tienes un usuario en tu entorno ODROID distinto al que tienes en tu entorno de desarrollo la url se veriacutea asiacute donde ldquoskilbjordquo es tu nombre de usuario

$ sshskilbjoodroid~deploygitduckdnsgit

Si tu servidor remoto estaacute en una subred diferente y tienes redireccionados los puertos tu url tendriacutea este aspecto donde

HOME DATA CENTER

ODROID MAGAZINE 21

ldquo2222rdquo es tu puerto externo

$ ssh192168122222~deploygitduckdnsgit

En el directorio principal de tu entorno remoto crea una carpeta llamada ldquo~deployrdquo con dos subcarpetas ldquo~deployapprdquo y ldquo~deploygitrdquo Los subdirectorios de ldquo~deploygitrdquo seraacuten los puntos finales de nuestros desarrollos y con un hook ejecutaraacuten comandos de implementacioacuten en los subdirectorios de ldquo~ deployapprdquo

Primero navega hasta el directorio principal del entorno re-moto y a continuacioacuten escribe los siguientes comandos

$ mkdir -p ~deployapp

$ mkdir -p ~deploygit

$ mkdir -p ~deploygitduckdnsgit

$ mkdir -p ~deployappduckdns

Ahora en ldquo~ deploygitduckdnsgithooksrdquo crea un archi-vo ejecutable llamado ldquopost-receiverdquo que se activaraacute con cada accioacuten hacia el punto final

$ cd ~deployappgitduckdnsgithooks

$ touch post-receive ampamp chmod u+x post-receive

$ vim post-receive

Rellena el ejecutable con lo siguiente en el directorio ldquo~deploygitduckdnsgithooksrdquo del entorno remoto

usrbinenv bash

set -eou pipefail

user=$(whoami)

dir=rdquohome$userdeployapprdquo

app=$(basename $(pwd) | sed -e lsquosgitrsquo)

deploy_dir=rdquo$dir$apprdquo

cron_dir=rdquoetccrondrdquo

GIT_WORK_TREE=rdquo$deploy_dirrdquo git checkout -f

cd ldquo$deploy_dirrdquo

build steps here

case ldquo$userrdquo in

(skilbjo) sudo cp deploytaskscrontab ldquo$cron_

dir$apprdquo

esac

you can also do project-specific build steps in

this section like install

dependencies (ie npm install) compile source

code (ie lein uberjar)

as well as if a long-lived app run commands as

well (ie java -jar my_jarjar)

echo ldquoall donerdquo

exit 0

ImplementacioacutenAhora estamos listos para implementar ya que nuestro en-

torno local estaacute configurado para alcanzar el punto final del servidor de implementacioacuten nuestro entorno remoto estaacute con-figurado para recibir la notificacioacuten y revisar el coacutedigo fuente ejecutar cualquier paso de compilacioacuten y colocar una tarea en el directorio cron del sistema para su lanzamiento Ponto todo en praacutectica con el siguiente comando en el directorio del proyecto del entorno local

$ git push odroid

Ademaacutes para ver coacutemo se ha implementado todo esto en un proyecto de ejemplo visita httpbitly2lthYKW

Pasos finalesSe puede antildeadir al flujo anterior algunas caracteriacutesticas

como son muacuteltiples entornos ya sea con muacuteltiples ODROIDs o con un solo ODROID trataacutendolo como un servidor de ser-vicio Esto se puede hacer con subdirectorios bajo ldquo~deployrdquo como ldquo~deploystagingappmy_apprdquo o ldquo~ deployproduc-tionappmy_apprdquo

Ademaacutes podriacuteas antildeadir un servicio de integracioacuten conti-nua como CircleCI que ejecutariacutea una suite de testeo desde cada desarrollo a GitHub y si tiene eacutexito compila una imagen Docker No podriacuteas entonces tener un archivo en el entorno remoto que verificariacutea una imagen de un repositorio Docker y la ejecutariacutea en un intervalo especificado Esto es lo que hacen muchos de los softwares DevOps distribuidos como Mesos y Kubernetes pero en un entorno mucho maacutes rico que BASH y Linux

Referencias

Artiacuteculo Wikipedia de Arch linux httpbitly2l71ADKWebsite Arch linux ArM httpsarchlinuxarmorgArtiacuteculo que leiacute hace unos tres antildeos y que me inspiroacute para escribir mi propio artiacuteculo httpbitly2m5JAct

HOME DATA CENTER

ODROID MAGAZINE 22

odroid ARCADE BOXLA EXPERIEnCIA PERfECTA COn TuS JuEGOS ARCADE fAvORITOSpor brian Kim charles park y John lee

ARCADE BOX

Los ODROIDs tienen mejor rendimiento que las placas de la competencia especialmente en lo que respecta al renderizado de video lo que significa que

las placas ODROID son ideales para jugar lo cual hacen muchos usuarios de ODROID Ya hay disponibles varios sistemas operativos de plataforma de juegos como Lakka (httpbitly1NO8BBC) y ODROID GameStation Tur-bo (httpbitly1ASFO5O) Para disfrutar auacuten maacutes de nuestras sesiones de juegos creamos nuestra propia consola arcade con simples botones GPIO y joysticks y la llama-mos la ODROID Arcade Box Elegimos un ODROID-XU4 para este proyecto porque es el que tiene mejor rendimiento GPU de todos los dispositivos ODROID actuales En este artiacuteculo vamos a describir como hemos creado la ODROID Arcade Box

Requisitos( Figura 3 ndash )Decidimos hacer la ODROID Arcade Box usando

un MDF (tablero de fibra de densidad media) El Shifter Shield del XU4 tambieacuten es uacutetil para utilizar los pines de expansioacuten del ODROID-XU4 Los Joysticks los botones y los cables eran los componentes de entrada y se utilizoacute

Nuestro primer y simple prototipo

ODROID MAGAZINE 23

panel MDf 12t2eA 600x2202eA 600x752eA 220x75taladroplegadoraDesmontadorcinta meacutetricaNavaja multiusoAlicates de punta largaoDroiD-xU4xU4 Shifter shieldSMpS (fuete Alimentacioacuten)

extendedores hDMi USb ethernetenchufe de alimentacioacuten y Switchbisagras 2eAreceptor de puertacaucho 4eAtornillospulsadores 19eAJoystick 2eAcablesterminales

una SMPS (Fuente de alimentacioacuten conmutada) como fuente de alimentacioacuten Las herramientas y las piezas utilizadas las tienes en esta paacutegina

La ODROID Arcade Box necesita un total de 27 entradas (19 entradas para botones y 8 entra-das para joysticks) Las 24 entradas GPIO digi-tales del ODROID-XU4 no son suficientes para las 27 entradas de modo que creamos dos puertos ADC adicionales para los tres botones que nos fal-taban Los valores de entrada ADC se basan en el voltaje de entrada y los valores de entrada digital y analoacutegica se procesan en el demonio GPIO que se describe a continuacioacuten

Disentildeo y montajeLos paneles de la ODROID Arcade Box deben

ser disentildeados y fabricados para que los botones y joysticks esteacuten bien colocados Elegimos MDF 12T teniendo en cuenta el precio y la durabilidad El dise-ntildeo se puede hacer con cualquier herramienta CAD como Google Sketch o SolidWorks Aunque existen muchas plantillas de disentildeo para los paneles de joypad decidimos elegir un disentildeo arcade estaacutendar japoneacutes

El primer paso del montaje es unir la placa al panel MDF Este paso fue faacutecil aunque nos llevo maacutes tiempo que el resto Despueacutes insertamos los joysticks la toma de corri-ente el interruptor y los botones en el panel MDF superior Los conectores HDMI Ethernet y USB se colocaron en la parte trasera del panel MDF El siguiente paso fue montar cada panel MDF usando un taladro para hacer los agujeros luego con tornillos los sujetamos

El uacuteltimo paso del montaje de la ODROID Arcade Box es conectar por cable los pines de expansioacuten del ODROID-XU4 a los componentes de entrada En este proyecto dise-ntildeamos las entradas GPIO externas tal y como se muestra en la paacutegina 26 Los botones Select y Temp estaacuten conecta-dos a puertos de expansioacuten ADC

Configuracion del softwareDesarrollamos un nuevo demonio GPIO llamado gpio_

keyd (httpbitly2ljOZKg) Este demonio es capaz de asignar entradas GPIO y eventos claves usando uinput y wiringPi una libreriacutea de acceso GPIO basada en pines Estaacute disentildeada para que le sea familiar a quiene ya ha utilizado el sistema de cableado Arduino Aunque la blibreriacutea wiring-Pi upstream soacutelo admite Raspberry Pi Hardkernel ofrece una versioacuten de wiringPi para ODROIDs en su repositorio GitHub (httpbitly1Eq3UpF) El moacutedulo uinput es un moacutedulo del kernel de Linux que gestiona el subsistema de entrada del usuario Se puede utilizar para crear y manejar dispositivos de entrada desde una aplicacioacuten

ARCADE BOX

herramientas compentes y lo que hay justamente debajo

esquema de los puertos de expansioacuten

ODROID MAGAZINE 24

Elegimos ODROID GameStation Turbo (httpbitly1ASFO5O) como plataforma de software para nuestra ODROID Arcade Box que tiene integrado uinput Debes asegurarte de que el archivo de dispositivo uinput existe en el sistema operativo elegido porque algunos no tienen dispositivos uinput

$ ls devuinput

Si tu sistema operativo no tiene un archivo de disposi-tivo devuinput entonces seraacute necesario recompilar e in-stalar un nuevo kernel con la opcioacuten de configuracioacuten IN-PUT_UINPUT habilitada La paacutegina Wiki en httpbitly1YIToBI describe coacutemo compilar e instalar la imagen del kernel a partir del coacutedigo fuente

$ make menuconfig

Device Drivers

-gt Input device support

-gt Generic input layer

-gt Miscellaneous device

-gt User level driver support ltgt

Ten en cuenta que wiringPi debe instalarse antes de in-stalar gpio_keyd En la imagen GameStation de ODROID los comandos sudo deben ejecutarse como root porque la cuenta ldquoodroidrdquo no estaacute designada como usuario sudo

$ git clone httpsgithubcomhardkernelwiringPi

git

$ cd wiringPi

$ sudo build

Descarga el coacutedigo fuente gpio_keyd el cual estaacute dis-ponible en nuestro repositorio GitHub El procedimiento para compilar e instalar gpio_keyd es muy simple

$ git clone httpsgithubcombkrepogpio_keydgit

$ cd gpio_keyd

$ make

$ sudo make install

El script gpio_keyd hace referencia a etcgpio_keydconf como el predeterminado para la informacioacuten de los botones y GPIO El archivo de configuracioacuten fue modi-ficado para las 27 entradas de la ODROID Arcade Box Algunas botones ya se utilizaban en el emulador de juego de modo que tuvimos que cambiar la configuracioacuten del emulador para evitar conflictos entre los botones de en-trada GPIO y el emulador Ten en cuenta que el campo ltGPIO pingt en el archivo de configuracioacuten hace referen-

ARCADE BOX

plano del disentildeo de joypad

la oDroiD Arcade box montada

ODROID MAGAZINE 25

cia al nuacutemero wiringPi no al GPIO y al nuacutemero de pin (httpbitly2lbzPIB)

Ejemplo de configuracioacuten para las 27 entradas etcgpio_keydconf

Digital input ltKey codegt ltGPIO typegt ltGPIO pingt ltActive valuegt User 1KEY_LEFT digital 15 0KEY_RIGHT digital 1 0KEY_UP digital 4 0KEY_DOWN digital 16 0KEY_A digital 2 0KEY_S digital 3 0KEY_D digital 30 0KEY_F digital 21 0KEY_Z digital 8 0KEY_X digital 9 0KEY_C digital 7 0KEY_V digital 0 0 User 2KEY_BACKSLASH digital 12 0KEY_SLASH digital 13 0KEY_SEMICOLON digital 14 0KEY_LEFTBRACE digital 5 0KEY_Y digital 26 0KEY_U digital 27 0KEY_I digital 22 0KEY_O digital 23 0KEY_H digital 6 0KEY_J digital 10 0KEY_K digital 11 0KEY_L digital 31 0

Analog input ltKey codegt ltGPIO typegt ltADC portgt ltADC ac-tive valuegtKEY_B analog 0 0KEY_N analog 0 2045KEY_M analog 1 2045

To run gpio_keyd daemon at every startup is conve-nient for ODROID Arcade Box

etcinitdgpio_keyd binsh BEGIN INIT INFO

ARCADE BOX

Mapeo Gpio externo para los botones y Joysticks

cableado de la oDroiD Arcade box

ODROID MAGAZINE 26

Provides gpio_keyd Required-Start $all Required-Stop Default-Start 2 3 4 5 Default-Stop Short-Description Run usrbingpio_keyd if it ex-ist END INIT INFO

PATH=sbinusrsbinbinusrbin

libinitvarssh

liblsbinit-functions

do_start() if [ -x usrbingpio_keyd ] then usrbingpio_keyd -d ES=$ [ ldquo$VERBOSErdquo = no ] ampamp log_end_msg $ES return $ES fi

case ldquo$1rdquo in start) do_start restart|reload|force-reload) echo ldquoError argument lsquo$1rsquo not supportedrdquo gtamp2 exit 3 stop) killall gpio_keyd exit 0 ) echo ldquoUsage $0 start|stoprdquo gtamp2 exit 3 Esac

$ sudo chmod +x etcinitdgpio_keyd$ sudo update-rcd gpio_keyd defaults$ sudo reboot

En los comandos anteriores el script gpio_keyd se ejecuta como un demonio uti-lizando la opcioacuten ldquo-drdquo El uso de gpio_keyd se puede comprobar con la opcioacuten ldquo-hrdquo Comprue-ba de nuevo las teclas usadas por el juego o el emulador despueacutes fija la configuracioacuten del gpio_ keyd correctamente Es ahora cuando estaacutes listo para jugar y disfrutar de tus juegos con tu nueva ODROID Arcade Box

ARCADE BOX

the King of fighters 98 John vs brian

ODROID MAGAZINE 27

En este artiacuteculo analizaremos las diferentes formas que existen para ob-tener los datos del uso de la red

ConfiguracioacutenLa forma normal de analizar los datos

de traacutefico de la red es mediante el uso de datos a traveacutes de las aplicaciones de configuracioacuten del sistema tal y como se muestra en la figura 1

El uso de datos muestra la cantidad total de traacutefico de datos entrante y sa-liente que ha sido utilizada por una apli-cacioacuten Si seleccionas la aplicacioacuten veraacute una pantalla como la que aparece en la Figura 2 que muestra informacioacuten detal-lada sobre el uso de la aplicacioacuten tanto en primer plano como de fondo

La informacioacuten que se muestra den-tro de la aplicacioacuten de Configuracioacuten se almacena en data systemnetstats que requiere acceso root Al eliminar todo lo que hay dentro de esta carpeta se resta-

Como desarrolladores queremos que nuestras aplicaciones sean eficientes y a menudo nos gus-

tariacutea saber cuaacutento ancho de banda de red estaacute utilizando nuestra aplicacioacuten Esto es muy uacutetil por varias razones

bull Para monitorizar y asegurarnos de que la aplicacioacuten es realmente la nuestra y no una aplicacioacuten que ha sido pirateada y publi-cada con diferentes nombres en Play Store

bull Para asegurarnos de que no es-tamos cogiendo ancho de banda innecesario del plan de datos del usuario

bull Para comprobar que el disposi-tivo que estamos usando no estaacute accediendo a Internet sin nuestro consentimiento

blecen las estadiacutesticas de red mostradas en esta aplicacioacuten

Estadiacutesticas de la redLa aplicacioacuten de configuracioacuten nos

puede dar una informacioacuten general so-bre las estadiacutesticas de la red de datos que es un buen comienzo pero a veces necesitamos un anaacutelisis maacutes detallado que puede hacerse a traveacutes del coman-do dumpsys Android cuenta con una poderosa herramienta llamada dumpsys que nos permite obtener una instan-taacutenea o volcado del sistema que pu-ede incluir informacioacuten sobre la red la memoria y otros componentes Lee la documentacioacuten de Android en httpbitly2kK9dep para obtener maacutes infor-macioacuten del sistema Para conseguir maacutes informacioacuten relacionada con la red nos interesa el comando

$ dumpsys netstats detail

La Figura 3 muestra un pantallazo de lo que puedes ver desde una tablet Nexus 7 que ejecuta Lollipop 511

Hay algunas cuestiones importantes para entender las estadiacutesticas

bull Las estadiacutesticas UID muestran el desglose de las aplicaciones de primer plano y de fondo

bull Uid muestra el ID de usuario de la aplicacioacuten que se puede utili-zar para relacionar eacutesta con la in-

DESARROLLO AnDROID AnALIzAnDO EL uSO DE RED DE LAS APLICACIOnESpor Nanik tolaram

DESARROLLO ANDROID

figura 1 - Uso de datos en la configuracioacuten

figura 2 - Desglose del uso de datos de la app

ODROID MAGAZINE 28

$ dumpsys package detail

Este comando te proporcionaraacute una larga lista de informacioacuten sobre los pa-quetes que estaacuten instalados en tu dis-positivo Para las estadiacutesticas de red nos interesa la seccioacuten que se muestra en la Figura 5

La seccioacuten resaltada muestra el userId que se relaciona con el uid que se mues-tra en las estadiacutesticas de red Al relacio-nar este nuacutemero sabemos el nombre del paquete de la aplicacioacuten sobre el que es-tamos leyendo las estadiacutesticas de red

Aplicacioacuten de ejemplo

La aplicacioacuten de ejemplo de este artiacute-culo se puede descargar desde httpbitly2m8WenA que muestra coacutemo etiqu-etar la conexioacuten de red desde distintas

secciones de la aplicacioacuten lo cual puede ayudar a analizar el volumen de traacutefico de datos de la aplicacioacuten La Figura 6 muestra un ejemplo de coacutemo lo vemos si utilizamos Android Device Monitor (dentro de Studio diriacutegete a Tools -gt Android -gt Android Device Monitor)

Tal y como se puede ver en el graacutefico la simple aplicacioacuten tiene 3 conexiones dife-rentes y cada una de ellas estaacute accediendo a un sitio web diferente Al etiquetarlas con

formacioacuten del paquete (que ver-emos en la seccioacuten de detalles del paquete dumpsys) con el objeto de conocer queacute aplicacioacuten utiliza estas estadiacutesticas de red

bull Las etiquetas son uacutetiles si de-sea ver la cantidad de datos que utiliza cada conexioacuten de tu apli-cacioacuten Puedes ver un ejemplo de esto en la Figura 4 que muestra que el uid 10007 tiene las siguien-tes etiquetas 0x30000401 0x30003201 0x30002804 0x10000401 y 0x30000407 Es-tas etiquetas ayudan al desarrol-lador a saber cuaacutentos datos uti-liza cada parte de la aplicacioacuten Estas estadiacutesticas de red en par-ticular estaacuten vinculada al paquete Google Framework que forma parte de Google Play Store

En el siguiente apartado veremos coacutemo escribir una aplicacioacuten etiquetando el hilo que hace la conexioacuten de red para determi-nar la cantidad de datos que se utilizan

Estadiacutesticas de paquetes

En la seccioacuten anterior analizamos el uid que aparece al ejecutar el comando dumpsys netstats Ahora necesitamos sa-ber queacute uid corresponde a la aplicacioacuten en el dispositivo y esto se hace mediante el siguiente comando

DESARROLLO ANDROID

figura 3 ndash estadiacutesticas de red con Dumpsys

figura 4 - estadiacutesticas de etiquetas UiD

figura 5 - Detalles del paquete dumpsys

figura 6 - etiquetas de red

coacutedigos diferentes podemos ver la cantidad de traacutefico que consume cada conexioacuten y esto nos ayudaraacute a ver si nuestra aplicacioacuten utiliza el ancho de banda de un modo eficiente

El coacutedigo del siguiente fragmento muestra el uso de la API TrafficStats interna Esta etiqueta API muestra el subproceso que utiliza actualmente un socket con un identificador y todo el traacute-fico que pasa por la misma conexioacuten se grabaraacute junto Asiacute es como la aplicacioacuten es capaz de agrupar las 3 conexiones diferentes Internamente Android utili-za el moacutedulo xt_qtaguid del kernel para realizar este tipo de etiquetado Tienes disponible maacutes informacioacuten en httpbitly2kU8KXB

public void getUsingNormalURLC

onnection(String urlText int

threadTag)

throws IOException

URL url = null

TrafficStats

setThreadStatsTag(threadTag)

HttpURLConnection urlConnec-

tion = getConnection(url)

try

finally

TrafficStatsclearThread-

StatsTag()

ODROID MAGAZINE 29

Disgustado te subes a tu 4x4 de dominacioacuten del mun-do un vehiacuteculo que desde fuera parece maacutes bien un viejo camioacuten de granja pero por dentro se parece maacutes

al sistema de control de un transbordador espacial porque el conductor del restaurante oriental que realiza las entrega a do-micilio estaacute enfermo Ahora tienes que ir a recoger tu propia comida ldquoQueacute rudimentariordquo piensas cuando sales de tu garaje secreto Justamente cuando vas a parar el vehiacuteculo en un stop oyes un fuerte ruido Sales y te diriges raacutepidamente a la parte posterior del 4x4 donde observas un cubo de basura Te tiras de los pelos y piensas ldquoiexclEsos basureros Neanderthales dejaron otra vez el cubo en mediordquo Ahora te toca recoger los restos de tu cena y la basura de otros

Conforme te vas alejando para hacer tus recados empiezas a pensar en coacutemo evitar este inconveniente en el futuro Varias ideas te vienen a la mente

Un sistema lidar para escanear en 3D el entorno en tiempo real y alarmas sonoras cuando sea necesarioUn brazo ciberneacutetico colocado en la parte posterior del 4x4 que procese video para detectar objetos agarrarlos y moverlosUna simple camara trasera

Empiezas a considerar la viabilidad de cada una

Muy bueno pero demasiado complicado y costosoAuacuten mejor y un proyecto propio de un cientiacutefico loco pero demasi-ado complicado y costosoya tengo dos iexclpero estaba demasiado preocupado en mis pensa-mientos para prestarles atencioacuten

Lo que necesitas es algo simple sin complicaciones y barato que haga sonar una alarma para alertarte incluso cuando estar absorto en tus pensamientos ldquoAhardquo Recuerdas haber visto un nuevo producto en ameriDroid que puede hacer precisamente esto Se trata de un microcontrolador conectado al USB que soporta hasta 6 sensores ultrasoacutenicos con simples comandos en serie (httpbitly2l26ptV) ldquoiexclPerfectordquo Piensas

Regresas a tu laboratorio subterraacuteneo con el pollo Kung Pao en la mano te apresurar a encender tus monitores entras en el sitio web ameriDroid y pides un kit ldquoUSB Ultrasonic Ranging Sensorrdquo con 6 sensores y carcasas

Vas sintiendo una sensacioacuten de alivio a medida que regresas a los 12 proyectos en lo que ya estabas trabajando a la espera de que pasen un par de diacuteas hasta que llegue tu nuevo pedido Mientras te comes tu Kung Pao dibujas un diagrama de coacutemo quieres colocar los sensores en la parte posterior de tu vehiacuteculo

Un par de diacuteas maacutes tarde el kit llega Inmediatamente em-piezas a montar el kit y los sensores en la parte posterior de tu 4x4 teniendo cuidado de usar sellador de silicona para pro-teger los sensores de la lluvia aguanieve y nieve que puedas encontrar durante tus aventuras para dominar el mundo

A continuacioacuten consultas las instrucciones proporcionadas por ameriDroid con el kit sobre coacutemo controlar y leer los sen-sores desde tu fiel ODROID-C2 y VU7 que montaste en el salpicadero para este propoacutesito

Conectando el cable USBEl cable USB suministrado debe conectarse al microcon-

trolador (la pequentildea placa de circuito con filas de pines que sobresalen) El microcontrolador tiene una fila de 4 o 6 pines

DETECTAR LA PRESEnCIACROnICAS DE un CIEnTIfICO LOCOpor bo lechnowsky

SENSOR ULTRASONICO

ODROID MAGAZINE 30

en un extremo Si tiene 6 pines ceacutentrate en los 4 pines centrales y sigue estas instrucciones

Negro - conectar a GNDrojo - conectar a VccVerde - conectar a rxi

blanco - conectar a txD

Conectando los sensoresultrasoacutenicos

En cada sensor ultrasoacutenico hay cuatro pines marcados Vcc Trig Echo Gnd Para el primer sensor ultrasoacutenico conecta el pin 2 del microcontrolador al pin ldquoTrigrdquo del sensor ultrasoacutenico Conecta el pin 3 del microcontrolador al pin ldquoEchordquo del sensor Conecte el pin ldquoVccrdquo del sensor a DC 5V (el pin ldquoVCCrdquo del microcontrolador suministra 5V) y el pin ldquoGndrdquo del sensor a una conexioacuten a tierra como por ejemplo los pines ldquoGNDrdquo del microcontrolador

Si conectas un segundo sensor de ultrasonidos conecta ldquoTrigrdquo al pin 4 y ldquoEchordquo al pin 5 Continuacutea conectando los siguientes pines a los sensores hasta los pines 12 y 13 si al final optas por conectar los seis sensores ultrasonidos

Conexioacuten del softwareUtilizas un programa terminal como PuTTY Screen o tu

lenguaje de script o programacioacuten favorito para conectarte al puerto serie que aparece cuando te conectas el sensor ultrasoacuteni-co Esto variaraacute en funcioacuten del sistema operativo que utilizas para conectarte al microcontrolador En Windows consultar el ldquoAdministrador de dispositivosrdquo es la forma maacutes comuacuten de averiguarlo En Linux ldquodmesgrdquo o ldquolsusbrdquo son las formas de de-tectar a queacute puerto estaacute conectado Deberiacuteas ver algo denomi-nado ldquoPL2303rdquo que es la conexioacuten del microcontrolador Si recibes informacioacuten basura en tu terminal cuando te conectes aseguacuterate de que los ajustes en serie son 9600 baudios 8 bits ninguno (paridad) y 1 bit de parada Aquiacute tienes una lista de los comandos que puede aceptar el microcontrolador

bull debug on Activa la retroalimentacioacuten detallada Estaacute deshabilitada por defecto nos proporcionaraacute aclaracio-nes sobre los errores de entrada

bull debug off desactiva la retroalimentacioacuten detalladabull init x y activa un HC-SR04 en los pines especificados

X es trigger Y es echo Estos deben ser pines digitales El dispositivo 0 estaacute preestablecido en los pines 2 y 3 de modo que no es necesario especificar estos pines La seleccioacuten de pines no vaacutelidos devolveraacute un signo de ex-clamacioacuten ()

bull ping enviacutea una sola lectura del HCSR04 previamente utilizado Si no se ha utilizado todaviacutea se usaraacute el dis-positivo 0 Si al comando le sigue un espacio y un nuacutemero entre 0-100 (exclusivo) se realizaraacute ese nuacutemero de lecturas emitiendo primero el promedio de esas lec-

SENSOR ULTRASONICO

turas despueacutes el nuacutemero de lecturas fallidas (que no cuentan para el promedio) y luego los valores miacutenimo y maacuteximo de lectura separados por espacios En cual-quier caso si una sentildeal se desconecta automaacuteticamente devolveraacute -1

bull start Hace ping constantemente a todos los dispositivos conectados en secuencia Debido a que los dispositivos se utilizan uno a uno el flujo de datos de este comando seraacute maacutes raacutepido si los dispositivos miden distancias cor-tas Si este comando le sigue un espacio y un nuacutemero mayor que 0 la placa esperaraacute estos milisegundos entre la lectura del uacuteltimo dispositivo y la lectura del primer dispositivo El resultado de este comando seraacute la lectura de cada dispositivo (con un uacutenico espacio despueacutes de cada uno) y una vuelta tras el uacuteltimo dispositivo

bull stop detiene la operacioacuten ldquostartrdquo soacutelo es efectivo tras haber iniciado ldquostartrdquo

bull mode emite el modo de medicioacuten del flujo M para meacutetrico (miliacutemetros) I para Imperial (deacutecimas de pul-gada) o R para Raw (la longitud de pulso en microse-gundos devuelta por el HC-SR04) El valor predeter-minado es M

bull timeout emite el tiempo de espera actual para lecturas de la sentildeal El tiempo de espera es la mayor cantidad de microsegundos que la placa esperaraacute antes de declarar que el HC-SR04 ha realizado una mala lectura lo cual no es necesariamente lo mismo que el pulso maacutes largo que la placa aceptaraacute del HC-SR04 Cuando la placa mide el pulso del HC-SR04 primero espera a que el HC-SR04 comience a enviar un pulso Este tiempo cuenta para el tiempo de espera Cuando este comando le sigue un espacio y un nuacutemero el tiempo de espera se ajusta a ese nuacutemero El valor predeterminado es 1 segundo (1000000 microsegundos)

bull ver emite informacioacuten de versioacuten y creacuteditos

Si cualquier comando (o ninguacuten comando) estaacute precedido por un uacutenico diacutegito de 0-5 (inclusive) seguido de un espacio el dispositivo que corresponde a ese diacutegito se seleccionaraacute para ser usado con el siguiente comando ldquopingrdquo Cada vez que la placa esteacute lista para un comando emitiraacute ldquogtrdquo para la serie La uacutenica excepcioacuten estaacute tras el comando ldquostartrdquo que no solicitaraacute entrada hasta que sea reconocido ldquostoprdquo

ODROID MAGAZINE 31

iquestCoacutemo empezaste con los ordenadoresCuando empeceacute mi negocio tuve que decidir queacute plat-

aforma de hardware iba a utilizar para la recogida de datos del traacutefico Simplemente para que no pienses mal de miacute mis caacutemaras de traacutefico no son las que se usan para multar por exceso de velocidad o algo asiacute Mi sistema estaba desti-nado suavizar el flujo de traacutefico fijando los controles oacutepti-mos de las sentildeales de traacutefico Anteriormente usaba un PC industrial para ejecutar mi software de reconocimiento de imaacutegenes Ahora uso la familia de dispositivos ODROID para esta cuestioacuten

iquestQueacute te atrajo de la plataforma ODROID En 2012 useacute Google para buscar una plataforma que

fuera muy compacta y al mismo tiempo potente para que cubriera mis necesidades que resultoacute ser la placa

Por favor haacuteblanos un poco sobre tiSoy ingeniero de electroacutenica y software en Rusia desde

hace 47 antildeos Naciacute en Siberia y tras terminar la escuela me mudeacute a Moscuacute para estudiar en la universidad Ser estudi-ante en el Instituto de Aviacioacuten de Moscuacute (MAI) fue una experiencia increiacuteble probablemente la mejor de mi vida A principios de los 90 llegoacute a Rusia la era de los microordena-dores soliacutea jugar a un juego de saltos en una CPU z80 y el i486 Tras finalizar mis estudios universitarios y de posgrado me convertiacute en ingeniero Trabajeacute en unos cuantos puestos de trabajo para diferentes empresas y finalmente decidiacute em-prender mi propio negocio En 2006 puse en marcha una iniciativa para crear sistemas de recuento del traacutefico de au-tomoacuteviles Estoy casado y tengo una hija de 21 antildeos llamada Lena que trabaja como enfermera Mi esposa Nadezhda es disentildeadora de vestuario de produccioacuten pero ahora trabaja como disentildeadora web Ella es aficionada a la fotografiacutea digi-tal y le encanta su caacutemara reacuteflex digital

COnOCIEnDO un ODROIDIAnvIACHESLAv ALEKSEEveditado por rob roy (robroy)

CONOCIENDO UN ODROIDIAN

Viacheslav disfruta tocando la guitarra y escuchando muacutesica

1995 en el campus MAi probando uno de los primeros equipos Vr comerciales del mundo que funcionaba a 640x480 a 30fps Utiliz-aba un sensor magneacutetico en la nuca para la posicioacuten de la cabeza la mejor broma que se podiacutea gastar a alguien era colocar un imaacuten cerca de la espalda y sacudirlo iexcllos gritos estaban garantizados cuando el mundo en 3D daba vueltas sin cesar

ODROID MAGAZINE 32

ODROID-X2 Con sus cuatro nuacutecleos funcionando a 17 GHz calculaba con facilidad los algoritmos de reconteo del traacutefico de automoacuteviles Maacutes tarde cambieacute al U3 y el XU4

iquestCuaacutel es tu ODROID favorito y por queacuteDe momento mi favorito es el XU4 Mi sistema estaacute

basado en el tratamiento de fotogramas de video en tiempo real por lo que el bus USB 30 del XU4 es bastante bueno para una caacutemara con una interfaz de captura de viacutedeo Para mi sistema es muy importante tener una buena conexioacuten entre la caacutemara de viacutedeo y la CPU Probablemente tendreacute que echar un vistazo a las interfaces de nivel inferior como MIPI CSI-2 que por desgracia estaacuten ausente en el XU4 Recientemente he estado aprendiendo como usar la caacute-mara oCam GS BW La caacutemara es buena en siacute misma pero para un uso industrial al aire libre tengo que implementar un software de control de exposicioacuten automaacutetica y posible-mente de control de apertura de la lente que todaviacutea estaacute en estudio

MEET AN ODROIDIAN

Una vieja joya el mini ordenador Nixdorf

An old gem the Nixdorf mini computer

CONOCIENDO UN ODROIDIAN

iquestQueacute aficiones e intereses tienes aparte de los ordenadoresDisfruto conduciendo y leyendo sobre coches y viendo

los campeonatos de carreras de F1 Tambieacuten me gusta via-jar pescar escuchar muacutesica y tocar la guitarra Tengo un gato siberiano llamado Leia y soy fan de Star Wars

iquestQueacute consejo le dariacuteas a alguien que quiere aprender maacutes sobre la programacioacuten

Hacer software es algo increiacuteble y miacutestico Es una fusioacuten de arte y tecnologiacutea Nada te inspira maacutes que tu aplicacioacuten cuando empieza a cobrar vida Sin embargo siempre estaacute ahiacute el otro lado de la Fuerza Estar listo para instruirte inc-esantemente El desarrollo de software es una de las activi-dades que cambia maacutes raacutepido Si tienes pensado dejar de hacer software en uno o dos antildeos puede dejar de aprender ahora El conocimiento se volveraacute anticuado en un par de antildeos maacutes o menos Para estar en lo maacutes alto siempre tienes que correr Es similar a la cancioacutenrdquoRun like Hellrdquo de Pink Floyd Si estaacutes listo para vivir de esta forma seguro que tendraacutes eacutexito

ODROID MAGAZINE 33

Page 22: Estación ARCADE · gias de marketing, administración de medios sociales y producción multimedia impresa, web, vídeo y cine. Ges-tionando múltiples cuentas con agencias y productores

ldquo2222rdquo es tu puerto externo

$ ssh192168122222~deploygitduckdnsgit

En el directorio principal de tu entorno remoto crea una carpeta llamada ldquo~deployrdquo con dos subcarpetas ldquo~deployapprdquo y ldquo~deploygitrdquo Los subdirectorios de ldquo~deploygitrdquo seraacuten los puntos finales de nuestros desarrollos y con un hook ejecutaraacuten comandos de implementacioacuten en los subdirectorios de ldquo~ deployapprdquo

Primero navega hasta el directorio principal del entorno re-moto y a continuacioacuten escribe los siguientes comandos

$ mkdir -p ~deployapp

$ mkdir -p ~deploygit

$ mkdir -p ~deploygitduckdnsgit

$ mkdir -p ~deployappduckdns

Ahora en ldquo~ deploygitduckdnsgithooksrdquo crea un archi-vo ejecutable llamado ldquopost-receiverdquo que se activaraacute con cada accioacuten hacia el punto final

$ cd ~deployappgitduckdnsgithooks

$ touch post-receive ampamp chmod u+x post-receive

$ vim post-receive

Rellena el ejecutable con lo siguiente en el directorio ldquo~deploygitduckdnsgithooksrdquo del entorno remoto

usrbinenv bash

set -eou pipefail

user=$(whoami)

dir=rdquohome$userdeployapprdquo

app=$(basename $(pwd) | sed -e lsquosgitrsquo)

deploy_dir=rdquo$dir$apprdquo

cron_dir=rdquoetccrondrdquo

GIT_WORK_TREE=rdquo$deploy_dirrdquo git checkout -f

cd ldquo$deploy_dirrdquo

build steps here

case ldquo$userrdquo in

(skilbjo) sudo cp deploytaskscrontab ldquo$cron_

dir$apprdquo

esac

you can also do project-specific build steps in

this section like install

dependencies (ie npm install) compile source

code (ie lein uberjar)

as well as if a long-lived app run commands as

well (ie java -jar my_jarjar)

echo ldquoall donerdquo

exit 0

ImplementacioacutenAhora estamos listos para implementar ya que nuestro en-

torno local estaacute configurado para alcanzar el punto final del servidor de implementacioacuten nuestro entorno remoto estaacute con-figurado para recibir la notificacioacuten y revisar el coacutedigo fuente ejecutar cualquier paso de compilacioacuten y colocar una tarea en el directorio cron del sistema para su lanzamiento Ponto todo en praacutectica con el siguiente comando en el directorio del proyecto del entorno local

$ git push odroid

Ademaacutes para ver coacutemo se ha implementado todo esto en un proyecto de ejemplo visita httpbitly2lthYKW

Pasos finalesSe puede antildeadir al flujo anterior algunas caracteriacutesticas

como son muacuteltiples entornos ya sea con muacuteltiples ODROIDs o con un solo ODROID trataacutendolo como un servidor de ser-vicio Esto se puede hacer con subdirectorios bajo ldquo~deployrdquo como ldquo~deploystagingappmy_apprdquo o ldquo~ deployproduc-tionappmy_apprdquo

Ademaacutes podriacuteas antildeadir un servicio de integracioacuten conti-nua como CircleCI que ejecutariacutea una suite de testeo desde cada desarrollo a GitHub y si tiene eacutexito compila una imagen Docker No podriacuteas entonces tener un archivo en el entorno remoto que verificariacutea una imagen de un repositorio Docker y la ejecutariacutea en un intervalo especificado Esto es lo que hacen muchos de los softwares DevOps distribuidos como Mesos y Kubernetes pero en un entorno mucho maacutes rico que BASH y Linux

Referencias

Artiacuteculo Wikipedia de Arch linux httpbitly2l71ADKWebsite Arch linux ArM httpsarchlinuxarmorgArtiacuteculo que leiacute hace unos tres antildeos y que me inspiroacute para escribir mi propio artiacuteculo httpbitly2m5JAct

HOME DATA CENTER

ODROID MAGAZINE 22

odroid ARCADE BOXLA EXPERIEnCIA PERfECTA COn TuS JuEGOS ARCADE fAvORITOSpor brian Kim charles park y John lee

ARCADE BOX

Los ODROIDs tienen mejor rendimiento que las placas de la competencia especialmente en lo que respecta al renderizado de video lo que significa que

las placas ODROID son ideales para jugar lo cual hacen muchos usuarios de ODROID Ya hay disponibles varios sistemas operativos de plataforma de juegos como Lakka (httpbitly1NO8BBC) y ODROID GameStation Tur-bo (httpbitly1ASFO5O) Para disfrutar auacuten maacutes de nuestras sesiones de juegos creamos nuestra propia consola arcade con simples botones GPIO y joysticks y la llama-mos la ODROID Arcade Box Elegimos un ODROID-XU4 para este proyecto porque es el que tiene mejor rendimiento GPU de todos los dispositivos ODROID actuales En este artiacuteculo vamos a describir como hemos creado la ODROID Arcade Box

Requisitos( Figura 3 ndash )Decidimos hacer la ODROID Arcade Box usando

un MDF (tablero de fibra de densidad media) El Shifter Shield del XU4 tambieacuten es uacutetil para utilizar los pines de expansioacuten del ODROID-XU4 Los Joysticks los botones y los cables eran los componentes de entrada y se utilizoacute

Nuestro primer y simple prototipo

ODROID MAGAZINE 23

panel MDf 12t2eA 600x2202eA 600x752eA 220x75taladroplegadoraDesmontadorcinta meacutetricaNavaja multiusoAlicates de punta largaoDroiD-xU4xU4 Shifter shieldSMpS (fuete Alimentacioacuten)

extendedores hDMi USb ethernetenchufe de alimentacioacuten y Switchbisagras 2eAreceptor de puertacaucho 4eAtornillospulsadores 19eAJoystick 2eAcablesterminales

una SMPS (Fuente de alimentacioacuten conmutada) como fuente de alimentacioacuten Las herramientas y las piezas utilizadas las tienes en esta paacutegina

La ODROID Arcade Box necesita un total de 27 entradas (19 entradas para botones y 8 entra-das para joysticks) Las 24 entradas GPIO digi-tales del ODROID-XU4 no son suficientes para las 27 entradas de modo que creamos dos puertos ADC adicionales para los tres botones que nos fal-taban Los valores de entrada ADC se basan en el voltaje de entrada y los valores de entrada digital y analoacutegica se procesan en el demonio GPIO que se describe a continuacioacuten

Disentildeo y montajeLos paneles de la ODROID Arcade Box deben

ser disentildeados y fabricados para que los botones y joysticks esteacuten bien colocados Elegimos MDF 12T teniendo en cuenta el precio y la durabilidad El dise-ntildeo se puede hacer con cualquier herramienta CAD como Google Sketch o SolidWorks Aunque existen muchas plantillas de disentildeo para los paneles de joypad decidimos elegir un disentildeo arcade estaacutendar japoneacutes

El primer paso del montaje es unir la placa al panel MDF Este paso fue faacutecil aunque nos llevo maacutes tiempo que el resto Despueacutes insertamos los joysticks la toma de corri-ente el interruptor y los botones en el panel MDF superior Los conectores HDMI Ethernet y USB se colocaron en la parte trasera del panel MDF El siguiente paso fue montar cada panel MDF usando un taladro para hacer los agujeros luego con tornillos los sujetamos

El uacuteltimo paso del montaje de la ODROID Arcade Box es conectar por cable los pines de expansioacuten del ODROID-XU4 a los componentes de entrada En este proyecto dise-ntildeamos las entradas GPIO externas tal y como se muestra en la paacutegina 26 Los botones Select y Temp estaacuten conecta-dos a puertos de expansioacuten ADC

Configuracion del softwareDesarrollamos un nuevo demonio GPIO llamado gpio_

keyd (httpbitly2ljOZKg) Este demonio es capaz de asignar entradas GPIO y eventos claves usando uinput y wiringPi una libreriacutea de acceso GPIO basada en pines Estaacute disentildeada para que le sea familiar a quiene ya ha utilizado el sistema de cableado Arduino Aunque la blibreriacutea wiring-Pi upstream soacutelo admite Raspberry Pi Hardkernel ofrece una versioacuten de wiringPi para ODROIDs en su repositorio GitHub (httpbitly1Eq3UpF) El moacutedulo uinput es un moacutedulo del kernel de Linux que gestiona el subsistema de entrada del usuario Se puede utilizar para crear y manejar dispositivos de entrada desde una aplicacioacuten

ARCADE BOX

herramientas compentes y lo que hay justamente debajo

esquema de los puertos de expansioacuten

ODROID MAGAZINE 24

Elegimos ODROID GameStation Turbo (httpbitly1ASFO5O) como plataforma de software para nuestra ODROID Arcade Box que tiene integrado uinput Debes asegurarte de que el archivo de dispositivo uinput existe en el sistema operativo elegido porque algunos no tienen dispositivos uinput

$ ls devuinput

Si tu sistema operativo no tiene un archivo de disposi-tivo devuinput entonces seraacute necesario recompilar e in-stalar un nuevo kernel con la opcioacuten de configuracioacuten IN-PUT_UINPUT habilitada La paacutegina Wiki en httpbitly1YIToBI describe coacutemo compilar e instalar la imagen del kernel a partir del coacutedigo fuente

$ make menuconfig

Device Drivers

-gt Input device support

-gt Generic input layer

-gt Miscellaneous device

-gt User level driver support ltgt

Ten en cuenta que wiringPi debe instalarse antes de in-stalar gpio_keyd En la imagen GameStation de ODROID los comandos sudo deben ejecutarse como root porque la cuenta ldquoodroidrdquo no estaacute designada como usuario sudo

$ git clone httpsgithubcomhardkernelwiringPi

git

$ cd wiringPi

$ sudo build

Descarga el coacutedigo fuente gpio_keyd el cual estaacute dis-ponible en nuestro repositorio GitHub El procedimiento para compilar e instalar gpio_keyd es muy simple

$ git clone httpsgithubcombkrepogpio_keydgit

$ cd gpio_keyd

$ make

$ sudo make install

El script gpio_keyd hace referencia a etcgpio_keydconf como el predeterminado para la informacioacuten de los botones y GPIO El archivo de configuracioacuten fue modi-ficado para las 27 entradas de la ODROID Arcade Box Algunas botones ya se utilizaban en el emulador de juego de modo que tuvimos que cambiar la configuracioacuten del emulador para evitar conflictos entre los botones de en-trada GPIO y el emulador Ten en cuenta que el campo ltGPIO pingt en el archivo de configuracioacuten hace referen-

ARCADE BOX

plano del disentildeo de joypad

la oDroiD Arcade box montada

ODROID MAGAZINE 25

cia al nuacutemero wiringPi no al GPIO y al nuacutemero de pin (httpbitly2lbzPIB)

Ejemplo de configuracioacuten para las 27 entradas etcgpio_keydconf

Digital input ltKey codegt ltGPIO typegt ltGPIO pingt ltActive valuegt User 1KEY_LEFT digital 15 0KEY_RIGHT digital 1 0KEY_UP digital 4 0KEY_DOWN digital 16 0KEY_A digital 2 0KEY_S digital 3 0KEY_D digital 30 0KEY_F digital 21 0KEY_Z digital 8 0KEY_X digital 9 0KEY_C digital 7 0KEY_V digital 0 0 User 2KEY_BACKSLASH digital 12 0KEY_SLASH digital 13 0KEY_SEMICOLON digital 14 0KEY_LEFTBRACE digital 5 0KEY_Y digital 26 0KEY_U digital 27 0KEY_I digital 22 0KEY_O digital 23 0KEY_H digital 6 0KEY_J digital 10 0KEY_K digital 11 0KEY_L digital 31 0

Analog input ltKey codegt ltGPIO typegt ltADC portgt ltADC ac-tive valuegtKEY_B analog 0 0KEY_N analog 0 2045KEY_M analog 1 2045

To run gpio_keyd daemon at every startup is conve-nient for ODROID Arcade Box

etcinitdgpio_keyd binsh BEGIN INIT INFO

ARCADE BOX

Mapeo Gpio externo para los botones y Joysticks

cableado de la oDroiD Arcade box

ODROID MAGAZINE 26

Provides gpio_keyd Required-Start $all Required-Stop Default-Start 2 3 4 5 Default-Stop Short-Description Run usrbingpio_keyd if it ex-ist END INIT INFO

PATH=sbinusrsbinbinusrbin

libinitvarssh

liblsbinit-functions

do_start() if [ -x usrbingpio_keyd ] then usrbingpio_keyd -d ES=$ [ ldquo$VERBOSErdquo = no ] ampamp log_end_msg $ES return $ES fi

case ldquo$1rdquo in start) do_start restart|reload|force-reload) echo ldquoError argument lsquo$1rsquo not supportedrdquo gtamp2 exit 3 stop) killall gpio_keyd exit 0 ) echo ldquoUsage $0 start|stoprdquo gtamp2 exit 3 Esac

$ sudo chmod +x etcinitdgpio_keyd$ sudo update-rcd gpio_keyd defaults$ sudo reboot

En los comandos anteriores el script gpio_keyd se ejecuta como un demonio uti-lizando la opcioacuten ldquo-drdquo El uso de gpio_keyd se puede comprobar con la opcioacuten ldquo-hrdquo Comprue-ba de nuevo las teclas usadas por el juego o el emulador despueacutes fija la configuracioacuten del gpio_ keyd correctamente Es ahora cuando estaacutes listo para jugar y disfrutar de tus juegos con tu nueva ODROID Arcade Box

ARCADE BOX

the King of fighters 98 John vs brian

ODROID MAGAZINE 27

En este artiacuteculo analizaremos las diferentes formas que existen para ob-tener los datos del uso de la red

ConfiguracioacutenLa forma normal de analizar los datos

de traacutefico de la red es mediante el uso de datos a traveacutes de las aplicaciones de configuracioacuten del sistema tal y como se muestra en la figura 1

El uso de datos muestra la cantidad total de traacutefico de datos entrante y sa-liente que ha sido utilizada por una apli-cacioacuten Si seleccionas la aplicacioacuten veraacute una pantalla como la que aparece en la Figura 2 que muestra informacioacuten detal-lada sobre el uso de la aplicacioacuten tanto en primer plano como de fondo

La informacioacuten que se muestra den-tro de la aplicacioacuten de Configuracioacuten se almacena en data systemnetstats que requiere acceso root Al eliminar todo lo que hay dentro de esta carpeta se resta-

Como desarrolladores queremos que nuestras aplicaciones sean eficientes y a menudo nos gus-

tariacutea saber cuaacutento ancho de banda de red estaacute utilizando nuestra aplicacioacuten Esto es muy uacutetil por varias razones

bull Para monitorizar y asegurarnos de que la aplicacioacuten es realmente la nuestra y no una aplicacioacuten que ha sido pirateada y publi-cada con diferentes nombres en Play Store

bull Para asegurarnos de que no es-tamos cogiendo ancho de banda innecesario del plan de datos del usuario

bull Para comprobar que el disposi-tivo que estamos usando no estaacute accediendo a Internet sin nuestro consentimiento

blecen las estadiacutesticas de red mostradas en esta aplicacioacuten

Estadiacutesticas de la redLa aplicacioacuten de configuracioacuten nos

puede dar una informacioacuten general so-bre las estadiacutesticas de la red de datos que es un buen comienzo pero a veces necesitamos un anaacutelisis maacutes detallado que puede hacerse a traveacutes del coman-do dumpsys Android cuenta con una poderosa herramienta llamada dumpsys que nos permite obtener una instan-taacutenea o volcado del sistema que pu-ede incluir informacioacuten sobre la red la memoria y otros componentes Lee la documentacioacuten de Android en httpbitly2kK9dep para obtener maacutes infor-macioacuten del sistema Para conseguir maacutes informacioacuten relacionada con la red nos interesa el comando

$ dumpsys netstats detail

La Figura 3 muestra un pantallazo de lo que puedes ver desde una tablet Nexus 7 que ejecuta Lollipop 511

Hay algunas cuestiones importantes para entender las estadiacutesticas

bull Las estadiacutesticas UID muestran el desglose de las aplicaciones de primer plano y de fondo

bull Uid muestra el ID de usuario de la aplicacioacuten que se puede utili-zar para relacionar eacutesta con la in-

DESARROLLO AnDROID AnALIzAnDO EL uSO DE RED DE LAS APLICACIOnESpor Nanik tolaram

DESARROLLO ANDROID

figura 1 - Uso de datos en la configuracioacuten

figura 2 - Desglose del uso de datos de la app

ODROID MAGAZINE 28

$ dumpsys package detail

Este comando te proporcionaraacute una larga lista de informacioacuten sobre los pa-quetes que estaacuten instalados en tu dis-positivo Para las estadiacutesticas de red nos interesa la seccioacuten que se muestra en la Figura 5

La seccioacuten resaltada muestra el userId que se relaciona con el uid que se mues-tra en las estadiacutesticas de red Al relacio-nar este nuacutemero sabemos el nombre del paquete de la aplicacioacuten sobre el que es-tamos leyendo las estadiacutesticas de red

Aplicacioacuten de ejemplo

La aplicacioacuten de ejemplo de este artiacute-culo se puede descargar desde httpbitly2m8WenA que muestra coacutemo etiqu-etar la conexioacuten de red desde distintas

secciones de la aplicacioacuten lo cual puede ayudar a analizar el volumen de traacutefico de datos de la aplicacioacuten La Figura 6 muestra un ejemplo de coacutemo lo vemos si utilizamos Android Device Monitor (dentro de Studio diriacutegete a Tools -gt Android -gt Android Device Monitor)

Tal y como se puede ver en el graacutefico la simple aplicacioacuten tiene 3 conexiones dife-rentes y cada una de ellas estaacute accediendo a un sitio web diferente Al etiquetarlas con

formacioacuten del paquete (que ver-emos en la seccioacuten de detalles del paquete dumpsys) con el objeto de conocer queacute aplicacioacuten utiliza estas estadiacutesticas de red

bull Las etiquetas son uacutetiles si de-sea ver la cantidad de datos que utiliza cada conexioacuten de tu apli-cacioacuten Puedes ver un ejemplo de esto en la Figura 4 que muestra que el uid 10007 tiene las siguien-tes etiquetas 0x30000401 0x30003201 0x30002804 0x10000401 y 0x30000407 Es-tas etiquetas ayudan al desarrol-lador a saber cuaacutentos datos uti-liza cada parte de la aplicacioacuten Estas estadiacutesticas de red en par-ticular estaacuten vinculada al paquete Google Framework que forma parte de Google Play Store

En el siguiente apartado veremos coacutemo escribir una aplicacioacuten etiquetando el hilo que hace la conexioacuten de red para determi-nar la cantidad de datos que se utilizan

Estadiacutesticas de paquetes

En la seccioacuten anterior analizamos el uid que aparece al ejecutar el comando dumpsys netstats Ahora necesitamos sa-ber queacute uid corresponde a la aplicacioacuten en el dispositivo y esto se hace mediante el siguiente comando

DESARROLLO ANDROID

figura 3 ndash estadiacutesticas de red con Dumpsys

figura 4 - estadiacutesticas de etiquetas UiD

figura 5 - Detalles del paquete dumpsys

figura 6 - etiquetas de red

coacutedigos diferentes podemos ver la cantidad de traacutefico que consume cada conexioacuten y esto nos ayudaraacute a ver si nuestra aplicacioacuten utiliza el ancho de banda de un modo eficiente

El coacutedigo del siguiente fragmento muestra el uso de la API TrafficStats interna Esta etiqueta API muestra el subproceso que utiliza actualmente un socket con un identificador y todo el traacute-fico que pasa por la misma conexioacuten se grabaraacute junto Asiacute es como la aplicacioacuten es capaz de agrupar las 3 conexiones diferentes Internamente Android utili-za el moacutedulo xt_qtaguid del kernel para realizar este tipo de etiquetado Tienes disponible maacutes informacioacuten en httpbitly2kU8KXB

public void getUsingNormalURLC

onnection(String urlText int

threadTag)

throws IOException

URL url = null

TrafficStats

setThreadStatsTag(threadTag)

HttpURLConnection urlConnec-

tion = getConnection(url)

try

finally

TrafficStatsclearThread-

StatsTag()

ODROID MAGAZINE 29

Disgustado te subes a tu 4x4 de dominacioacuten del mun-do un vehiacuteculo que desde fuera parece maacutes bien un viejo camioacuten de granja pero por dentro se parece maacutes

al sistema de control de un transbordador espacial porque el conductor del restaurante oriental que realiza las entrega a do-micilio estaacute enfermo Ahora tienes que ir a recoger tu propia comida ldquoQueacute rudimentariordquo piensas cuando sales de tu garaje secreto Justamente cuando vas a parar el vehiacuteculo en un stop oyes un fuerte ruido Sales y te diriges raacutepidamente a la parte posterior del 4x4 donde observas un cubo de basura Te tiras de los pelos y piensas ldquoiexclEsos basureros Neanderthales dejaron otra vez el cubo en mediordquo Ahora te toca recoger los restos de tu cena y la basura de otros

Conforme te vas alejando para hacer tus recados empiezas a pensar en coacutemo evitar este inconveniente en el futuro Varias ideas te vienen a la mente

Un sistema lidar para escanear en 3D el entorno en tiempo real y alarmas sonoras cuando sea necesarioUn brazo ciberneacutetico colocado en la parte posterior del 4x4 que procese video para detectar objetos agarrarlos y moverlosUna simple camara trasera

Empiezas a considerar la viabilidad de cada una

Muy bueno pero demasiado complicado y costosoAuacuten mejor y un proyecto propio de un cientiacutefico loco pero demasi-ado complicado y costosoya tengo dos iexclpero estaba demasiado preocupado en mis pensa-mientos para prestarles atencioacuten

Lo que necesitas es algo simple sin complicaciones y barato que haga sonar una alarma para alertarte incluso cuando estar absorto en tus pensamientos ldquoAhardquo Recuerdas haber visto un nuevo producto en ameriDroid que puede hacer precisamente esto Se trata de un microcontrolador conectado al USB que soporta hasta 6 sensores ultrasoacutenicos con simples comandos en serie (httpbitly2l26ptV) ldquoiexclPerfectordquo Piensas

Regresas a tu laboratorio subterraacuteneo con el pollo Kung Pao en la mano te apresurar a encender tus monitores entras en el sitio web ameriDroid y pides un kit ldquoUSB Ultrasonic Ranging Sensorrdquo con 6 sensores y carcasas

Vas sintiendo una sensacioacuten de alivio a medida que regresas a los 12 proyectos en lo que ya estabas trabajando a la espera de que pasen un par de diacuteas hasta que llegue tu nuevo pedido Mientras te comes tu Kung Pao dibujas un diagrama de coacutemo quieres colocar los sensores en la parte posterior de tu vehiacuteculo

Un par de diacuteas maacutes tarde el kit llega Inmediatamente em-piezas a montar el kit y los sensores en la parte posterior de tu 4x4 teniendo cuidado de usar sellador de silicona para pro-teger los sensores de la lluvia aguanieve y nieve que puedas encontrar durante tus aventuras para dominar el mundo

A continuacioacuten consultas las instrucciones proporcionadas por ameriDroid con el kit sobre coacutemo controlar y leer los sen-sores desde tu fiel ODROID-C2 y VU7 que montaste en el salpicadero para este propoacutesito

Conectando el cable USBEl cable USB suministrado debe conectarse al microcon-

trolador (la pequentildea placa de circuito con filas de pines que sobresalen) El microcontrolador tiene una fila de 4 o 6 pines

DETECTAR LA PRESEnCIACROnICAS DE un CIEnTIfICO LOCOpor bo lechnowsky

SENSOR ULTRASONICO

ODROID MAGAZINE 30

en un extremo Si tiene 6 pines ceacutentrate en los 4 pines centrales y sigue estas instrucciones

Negro - conectar a GNDrojo - conectar a VccVerde - conectar a rxi

blanco - conectar a txD

Conectando los sensoresultrasoacutenicos

En cada sensor ultrasoacutenico hay cuatro pines marcados Vcc Trig Echo Gnd Para el primer sensor ultrasoacutenico conecta el pin 2 del microcontrolador al pin ldquoTrigrdquo del sensor ultrasoacutenico Conecta el pin 3 del microcontrolador al pin ldquoEchordquo del sensor Conecte el pin ldquoVccrdquo del sensor a DC 5V (el pin ldquoVCCrdquo del microcontrolador suministra 5V) y el pin ldquoGndrdquo del sensor a una conexioacuten a tierra como por ejemplo los pines ldquoGNDrdquo del microcontrolador

Si conectas un segundo sensor de ultrasonidos conecta ldquoTrigrdquo al pin 4 y ldquoEchordquo al pin 5 Continuacutea conectando los siguientes pines a los sensores hasta los pines 12 y 13 si al final optas por conectar los seis sensores ultrasonidos

Conexioacuten del softwareUtilizas un programa terminal como PuTTY Screen o tu

lenguaje de script o programacioacuten favorito para conectarte al puerto serie que aparece cuando te conectas el sensor ultrasoacuteni-co Esto variaraacute en funcioacuten del sistema operativo que utilizas para conectarte al microcontrolador En Windows consultar el ldquoAdministrador de dispositivosrdquo es la forma maacutes comuacuten de averiguarlo En Linux ldquodmesgrdquo o ldquolsusbrdquo son las formas de de-tectar a queacute puerto estaacute conectado Deberiacuteas ver algo denomi-nado ldquoPL2303rdquo que es la conexioacuten del microcontrolador Si recibes informacioacuten basura en tu terminal cuando te conectes aseguacuterate de que los ajustes en serie son 9600 baudios 8 bits ninguno (paridad) y 1 bit de parada Aquiacute tienes una lista de los comandos que puede aceptar el microcontrolador

bull debug on Activa la retroalimentacioacuten detallada Estaacute deshabilitada por defecto nos proporcionaraacute aclaracio-nes sobre los errores de entrada

bull debug off desactiva la retroalimentacioacuten detalladabull init x y activa un HC-SR04 en los pines especificados

X es trigger Y es echo Estos deben ser pines digitales El dispositivo 0 estaacute preestablecido en los pines 2 y 3 de modo que no es necesario especificar estos pines La seleccioacuten de pines no vaacutelidos devolveraacute un signo de ex-clamacioacuten ()

bull ping enviacutea una sola lectura del HCSR04 previamente utilizado Si no se ha utilizado todaviacutea se usaraacute el dis-positivo 0 Si al comando le sigue un espacio y un nuacutemero entre 0-100 (exclusivo) se realizaraacute ese nuacutemero de lecturas emitiendo primero el promedio de esas lec-

SENSOR ULTRASONICO

turas despueacutes el nuacutemero de lecturas fallidas (que no cuentan para el promedio) y luego los valores miacutenimo y maacuteximo de lectura separados por espacios En cual-quier caso si una sentildeal se desconecta automaacuteticamente devolveraacute -1

bull start Hace ping constantemente a todos los dispositivos conectados en secuencia Debido a que los dispositivos se utilizan uno a uno el flujo de datos de este comando seraacute maacutes raacutepido si los dispositivos miden distancias cor-tas Si este comando le sigue un espacio y un nuacutemero mayor que 0 la placa esperaraacute estos milisegundos entre la lectura del uacuteltimo dispositivo y la lectura del primer dispositivo El resultado de este comando seraacute la lectura de cada dispositivo (con un uacutenico espacio despueacutes de cada uno) y una vuelta tras el uacuteltimo dispositivo

bull stop detiene la operacioacuten ldquostartrdquo soacutelo es efectivo tras haber iniciado ldquostartrdquo

bull mode emite el modo de medicioacuten del flujo M para meacutetrico (miliacutemetros) I para Imperial (deacutecimas de pul-gada) o R para Raw (la longitud de pulso en microse-gundos devuelta por el HC-SR04) El valor predeter-minado es M

bull timeout emite el tiempo de espera actual para lecturas de la sentildeal El tiempo de espera es la mayor cantidad de microsegundos que la placa esperaraacute antes de declarar que el HC-SR04 ha realizado una mala lectura lo cual no es necesariamente lo mismo que el pulso maacutes largo que la placa aceptaraacute del HC-SR04 Cuando la placa mide el pulso del HC-SR04 primero espera a que el HC-SR04 comience a enviar un pulso Este tiempo cuenta para el tiempo de espera Cuando este comando le sigue un espacio y un nuacutemero el tiempo de espera se ajusta a ese nuacutemero El valor predeterminado es 1 segundo (1000000 microsegundos)

bull ver emite informacioacuten de versioacuten y creacuteditos

Si cualquier comando (o ninguacuten comando) estaacute precedido por un uacutenico diacutegito de 0-5 (inclusive) seguido de un espacio el dispositivo que corresponde a ese diacutegito se seleccionaraacute para ser usado con el siguiente comando ldquopingrdquo Cada vez que la placa esteacute lista para un comando emitiraacute ldquogtrdquo para la serie La uacutenica excepcioacuten estaacute tras el comando ldquostartrdquo que no solicitaraacute entrada hasta que sea reconocido ldquostoprdquo

ODROID MAGAZINE 31

iquestCoacutemo empezaste con los ordenadoresCuando empeceacute mi negocio tuve que decidir queacute plat-

aforma de hardware iba a utilizar para la recogida de datos del traacutefico Simplemente para que no pienses mal de miacute mis caacutemaras de traacutefico no son las que se usan para multar por exceso de velocidad o algo asiacute Mi sistema estaba desti-nado suavizar el flujo de traacutefico fijando los controles oacutepti-mos de las sentildeales de traacutefico Anteriormente usaba un PC industrial para ejecutar mi software de reconocimiento de imaacutegenes Ahora uso la familia de dispositivos ODROID para esta cuestioacuten

iquestQueacute te atrajo de la plataforma ODROID En 2012 useacute Google para buscar una plataforma que

fuera muy compacta y al mismo tiempo potente para que cubriera mis necesidades que resultoacute ser la placa

Por favor haacuteblanos un poco sobre tiSoy ingeniero de electroacutenica y software en Rusia desde

hace 47 antildeos Naciacute en Siberia y tras terminar la escuela me mudeacute a Moscuacute para estudiar en la universidad Ser estudi-ante en el Instituto de Aviacioacuten de Moscuacute (MAI) fue una experiencia increiacuteble probablemente la mejor de mi vida A principios de los 90 llegoacute a Rusia la era de los microordena-dores soliacutea jugar a un juego de saltos en una CPU z80 y el i486 Tras finalizar mis estudios universitarios y de posgrado me convertiacute en ingeniero Trabajeacute en unos cuantos puestos de trabajo para diferentes empresas y finalmente decidiacute em-prender mi propio negocio En 2006 puse en marcha una iniciativa para crear sistemas de recuento del traacutefico de au-tomoacuteviles Estoy casado y tengo una hija de 21 antildeos llamada Lena que trabaja como enfermera Mi esposa Nadezhda es disentildeadora de vestuario de produccioacuten pero ahora trabaja como disentildeadora web Ella es aficionada a la fotografiacutea digi-tal y le encanta su caacutemara reacuteflex digital

COnOCIEnDO un ODROIDIAnvIACHESLAv ALEKSEEveditado por rob roy (robroy)

CONOCIENDO UN ODROIDIAN

Viacheslav disfruta tocando la guitarra y escuchando muacutesica

1995 en el campus MAi probando uno de los primeros equipos Vr comerciales del mundo que funcionaba a 640x480 a 30fps Utiliz-aba un sensor magneacutetico en la nuca para la posicioacuten de la cabeza la mejor broma que se podiacutea gastar a alguien era colocar un imaacuten cerca de la espalda y sacudirlo iexcllos gritos estaban garantizados cuando el mundo en 3D daba vueltas sin cesar

ODROID MAGAZINE 32

ODROID-X2 Con sus cuatro nuacutecleos funcionando a 17 GHz calculaba con facilidad los algoritmos de reconteo del traacutefico de automoacuteviles Maacutes tarde cambieacute al U3 y el XU4

iquestCuaacutel es tu ODROID favorito y por queacuteDe momento mi favorito es el XU4 Mi sistema estaacute

basado en el tratamiento de fotogramas de video en tiempo real por lo que el bus USB 30 del XU4 es bastante bueno para una caacutemara con una interfaz de captura de viacutedeo Para mi sistema es muy importante tener una buena conexioacuten entre la caacutemara de viacutedeo y la CPU Probablemente tendreacute que echar un vistazo a las interfaces de nivel inferior como MIPI CSI-2 que por desgracia estaacuten ausente en el XU4 Recientemente he estado aprendiendo como usar la caacute-mara oCam GS BW La caacutemara es buena en siacute misma pero para un uso industrial al aire libre tengo que implementar un software de control de exposicioacuten automaacutetica y posible-mente de control de apertura de la lente que todaviacutea estaacute en estudio

MEET AN ODROIDIAN

Una vieja joya el mini ordenador Nixdorf

An old gem the Nixdorf mini computer

CONOCIENDO UN ODROIDIAN

iquestQueacute aficiones e intereses tienes aparte de los ordenadoresDisfruto conduciendo y leyendo sobre coches y viendo

los campeonatos de carreras de F1 Tambieacuten me gusta via-jar pescar escuchar muacutesica y tocar la guitarra Tengo un gato siberiano llamado Leia y soy fan de Star Wars

iquestQueacute consejo le dariacuteas a alguien que quiere aprender maacutes sobre la programacioacuten

Hacer software es algo increiacuteble y miacutestico Es una fusioacuten de arte y tecnologiacutea Nada te inspira maacutes que tu aplicacioacuten cuando empieza a cobrar vida Sin embargo siempre estaacute ahiacute el otro lado de la Fuerza Estar listo para instruirte inc-esantemente El desarrollo de software es una de las activi-dades que cambia maacutes raacutepido Si tienes pensado dejar de hacer software en uno o dos antildeos puede dejar de aprender ahora El conocimiento se volveraacute anticuado en un par de antildeos maacutes o menos Para estar en lo maacutes alto siempre tienes que correr Es similar a la cancioacutenrdquoRun like Hellrdquo de Pink Floyd Si estaacutes listo para vivir de esta forma seguro que tendraacutes eacutexito

ODROID MAGAZINE 33

Page 23: Estación ARCADE · gias de marketing, administración de medios sociales y producción multimedia impresa, web, vídeo y cine. Ges-tionando múltiples cuentas con agencias y productores

odroid ARCADE BOXLA EXPERIEnCIA PERfECTA COn TuS JuEGOS ARCADE fAvORITOSpor brian Kim charles park y John lee

ARCADE BOX

Los ODROIDs tienen mejor rendimiento que las placas de la competencia especialmente en lo que respecta al renderizado de video lo que significa que

las placas ODROID son ideales para jugar lo cual hacen muchos usuarios de ODROID Ya hay disponibles varios sistemas operativos de plataforma de juegos como Lakka (httpbitly1NO8BBC) y ODROID GameStation Tur-bo (httpbitly1ASFO5O) Para disfrutar auacuten maacutes de nuestras sesiones de juegos creamos nuestra propia consola arcade con simples botones GPIO y joysticks y la llama-mos la ODROID Arcade Box Elegimos un ODROID-XU4 para este proyecto porque es el que tiene mejor rendimiento GPU de todos los dispositivos ODROID actuales En este artiacuteculo vamos a describir como hemos creado la ODROID Arcade Box

Requisitos( Figura 3 ndash )Decidimos hacer la ODROID Arcade Box usando

un MDF (tablero de fibra de densidad media) El Shifter Shield del XU4 tambieacuten es uacutetil para utilizar los pines de expansioacuten del ODROID-XU4 Los Joysticks los botones y los cables eran los componentes de entrada y se utilizoacute

Nuestro primer y simple prototipo

ODROID MAGAZINE 23

panel MDf 12t2eA 600x2202eA 600x752eA 220x75taladroplegadoraDesmontadorcinta meacutetricaNavaja multiusoAlicates de punta largaoDroiD-xU4xU4 Shifter shieldSMpS (fuete Alimentacioacuten)

extendedores hDMi USb ethernetenchufe de alimentacioacuten y Switchbisagras 2eAreceptor de puertacaucho 4eAtornillospulsadores 19eAJoystick 2eAcablesterminales

una SMPS (Fuente de alimentacioacuten conmutada) como fuente de alimentacioacuten Las herramientas y las piezas utilizadas las tienes en esta paacutegina

La ODROID Arcade Box necesita un total de 27 entradas (19 entradas para botones y 8 entra-das para joysticks) Las 24 entradas GPIO digi-tales del ODROID-XU4 no son suficientes para las 27 entradas de modo que creamos dos puertos ADC adicionales para los tres botones que nos fal-taban Los valores de entrada ADC se basan en el voltaje de entrada y los valores de entrada digital y analoacutegica se procesan en el demonio GPIO que se describe a continuacioacuten

Disentildeo y montajeLos paneles de la ODROID Arcade Box deben

ser disentildeados y fabricados para que los botones y joysticks esteacuten bien colocados Elegimos MDF 12T teniendo en cuenta el precio y la durabilidad El dise-ntildeo se puede hacer con cualquier herramienta CAD como Google Sketch o SolidWorks Aunque existen muchas plantillas de disentildeo para los paneles de joypad decidimos elegir un disentildeo arcade estaacutendar japoneacutes

El primer paso del montaje es unir la placa al panel MDF Este paso fue faacutecil aunque nos llevo maacutes tiempo que el resto Despueacutes insertamos los joysticks la toma de corri-ente el interruptor y los botones en el panel MDF superior Los conectores HDMI Ethernet y USB se colocaron en la parte trasera del panel MDF El siguiente paso fue montar cada panel MDF usando un taladro para hacer los agujeros luego con tornillos los sujetamos

El uacuteltimo paso del montaje de la ODROID Arcade Box es conectar por cable los pines de expansioacuten del ODROID-XU4 a los componentes de entrada En este proyecto dise-ntildeamos las entradas GPIO externas tal y como se muestra en la paacutegina 26 Los botones Select y Temp estaacuten conecta-dos a puertos de expansioacuten ADC

Configuracion del softwareDesarrollamos un nuevo demonio GPIO llamado gpio_

keyd (httpbitly2ljOZKg) Este demonio es capaz de asignar entradas GPIO y eventos claves usando uinput y wiringPi una libreriacutea de acceso GPIO basada en pines Estaacute disentildeada para que le sea familiar a quiene ya ha utilizado el sistema de cableado Arduino Aunque la blibreriacutea wiring-Pi upstream soacutelo admite Raspberry Pi Hardkernel ofrece una versioacuten de wiringPi para ODROIDs en su repositorio GitHub (httpbitly1Eq3UpF) El moacutedulo uinput es un moacutedulo del kernel de Linux que gestiona el subsistema de entrada del usuario Se puede utilizar para crear y manejar dispositivos de entrada desde una aplicacioacuten

ARCADE BOX

herramientas compentes y lo que hay justamente debajo

esquema de los puertos de expansioacuten

ODROID MAGAZINE 24

Elegimos ODROID GameStation Turbo (httpbitly1ASFO5O) como plataforma de software para nuestra ODROID Arcade Box que tiene integrado uinput Debes asegurarte de que el archivo de dispositivo uinput existe en el sistema operativo elegido porque algunos no tienen dispositivos uinput

$ ls devuinput

Si tu sistema operativo no tiene un archivo de disposi-tivo devuinput entonces seraacute necesario recompilar e in-stalar un nuevo kernel con la opcioacuten de configuracioacuten IN-PUT_UINPUT habilitada La paacutegina Wiki en httpbitly1YIToBI describe coacutemo compilar e instalar la imagen del kernel a partir del coacutedigo fuente

$ make menuconfig

Device Drivers

-gt Input device support

-gt Generic input layer

-gt Miscellaneous device

-gt User level driver support ltgt

Ten en cuenta que wiringPi debe instalarse antes de in-stalar gpio_keyd En la imagen GameStation de ODROID los comandos sudo deben ejecutarse como root porque la cuenta ldquoodroidrdquo no estaacute designada como usuario sudo

$ git clone httpsgithubcomhardkernelwiringPi

git

$ cd wiringPi

$ sudo build

Descarga el coacutedigo fuente gpio_keyd el cual estaacute dis-ponible en nuestro repositorio GitHub El procedimiento para compilar e instalar gpio_keyd es muy simple

$ git clone httpsgithubcombkrepogpio_keydgit

$ cd gpio_keyd

$ make

$ sudo make install

El script gpio_keyd hace referencia a etcgpio_keydconf como el predeterminado para la informacioacuten de los botones y GPIO El archivo de configuracioacuten fue modi-ficado para las 27 entradas de la ODROID Arcade Box Algunas botones ya se utilizaban en el emulador de juego de modo que tuvimos que cambiar la configuracioacuten del emulador para evitar conflictos entre los botones de en-trada GPIO y el emulador Ten en cuenta que el campo ltGPIO pingt en el archivo de configuracioacuten hace referen-

ARCADE BOX

plano del disentildeo de joypad

la oDroiD Arcade box montada

ODROID MAGAZINE 25

cia al nuacutemero wiringPi no al GPIO y al nuacutemero de pin (httpbitly2lbzPIB)

Ejemplo de configuracioacuten para las 27 entradas etcgpio_keydconf

Digital input ltKey codegt ltGPIO typegt ltGPIO pingt ltActive valuegt User 1KEY_LEFT digital 15 0KEY_RIGHT digital 1 0KEY_UP digital 4 0KEY_DOWN digital 16 0KEY_A digital 2 0KEY_S digital 3 0KEY_D digital 30 0KEY_F digital 21 0KEY_Z digital 8 0KEY_X digital 9 0KEY_C digital 7 0KEY_V digital 0 0 User 2KEY_BACKSLASH digital 12 0KEY_SLASH digital 13 0KEY_SEMICOLON digital 14 0KEY_LEFTBRACE digital 5 0KEY_Y digital 26 0KEY_U digital 27 0KEY_I digital 22 0KEY_O digital 23 0KEY_H digital 6 0KEY_J digital 10 0KEY_K digital 11 0KEY_L digital 31 0

Analog input ltKey codegt ltGPIO typegt ltADC portgt ltADC ac-tive valuegtKEY_B analog 0 0KEY_N analog 0 2045KEY_M analog 1 2045

To run gpio_keyd daemon at every startup is conve-nient for ODROID Arcade Box

etcinitdgpio_keyd binsh BEGIN INIT INFO

ARCADE BOX

Mapeo Gpio externo para los botones y Joysticks

cableado de la oDroiD Arcade box

ODROID MAGAZINE 26

Provides gpio_keyd Required-Start $all Required-Stop Default-Start 2 3 4 5 Default-Stop Short-Description Run usrbingpio_keyd if it ex-ist END INIT INFO

PATH=sbinusrsbinbinusrbin

libinitvarssh

liblsbinit-functions

do_start() if [ -x usrbingpio_keyd ] then usrbingpio_keyd -d ES=$ [ ldquo$VERBOSErdquo = no ] ampamp log_end_msg $ES return $ES fi

case ldquo$1rdquo in start) do_start restart|reload|force-reload) echo ldquoError argument lsquo$1rsquo not supportedrdquo gtamp2 exit 3 stop) killall gpio_keyd exit 0 ) echo ldquoUsage $0 start|stoprdquo gtamp2 exit 3 Esac

$ sudo chmod +x etcinitdgpio_keyd$ sudo update-rcd gpio_keyd defaults$ sudo reboot

En los comandos anteriores el script gpio_keyd se ejecuta como un demonio uti-lizando la opcioacuten ldquo-drdquo El uso de gpio_keyd se puede comprobar con la opcioacuten ldquo-hrdquo Comprue-ba de nuevo las teclas usadas por el juego o el emulador despueacutes fija la configuracioacuten del gpio_ keyd correctamente Es ahora cuando estaacutes listo para jugar y disfrutar de tus juegos con tu nueva ODROID Arcade Box

ARCADE BOX

the King of fighters 98 John vs brian

ODROID MAGAZINE 27

En este artiacuteculo analizaremos las diferentes formas que existen para ob-tener los datos del uso de la red

ConfiguracioacutenLa forma normal de analizar los datos

de traacutefico de la red es mediante el uso de datos a traveacutes de las aplicaciones de configuracioacuten del sistema tal y como se muestra en la figura 1

El uso de datos muestra la cantidad total de traacutefico de datos entrante y sa-liente que ha sido utilizada por una apli-cacioacuten Si seleccionas la aplicacioacuten veraacute una pantalla como la que aparece en la Figura 2 que muestra informacioacuten detal-lada sobre el uso de la aplicacioacuten tanto en primer plano como de fondo

La informacioacuten que se muestra den-tro de la aplicacioacuten de Configuracioacuten se almacena en data systemnetstats que requiere acceso root Al eliminar todo lo que hay dentro de esta carpeta se resta-

Como desarrolladores queremos que nuestras aplicaciones sean eficientes y a menudo nos gus-

tariacutea saber cuaacutento ancho de banda de red estaacute utilizando nuestra aplicacioacuten Esto es muy uacutetil por varias razones

bull Para monitorizar y asegurarnos de que la aplicacioacuten es realmente la nuestra y no una aplicacioacuten que ha sido pirateada y publi-cada con diferentes nombres en Play Store

bull Para asegurarnos de que no es-tamos cogiendo ancho de banda innecesario del plan de datos del usuario

bull Para comprobar que el disposi-tivo que estamos usando no estaacute accediendo a Internet sin nuestro consentimiento

blecen las estadiacutesticas de red mostradas en esta aplicacioacuten

Estadiacutesticas de la redLa aplicacioacuten de configuracioacuten nos

puede dar una informacioacuten general so-bre las estadiacutesticas de la red de datos que es un buen comienzo pero a veces necesitamos un anaacutelisis maacutes detallado que puede hacerse a traveacutes del coman-do dumpsys Android cuenta con una poderosa herramienta llamada dumpsys que nos permite obtener una instan-taacutenea o volcado del sistema que pu-ede incluir informacioacuten sobre la red la memoria y otros componentes Lee la documentacioacuten de Android en httpbitly2kK9dep para obtener maacutes infor-macioacuten del sistema Para conseguir maacutes informacioacuten relacionada con la red nos interesa el comando

$ dumpsys netstats detail

La Figura 3 muestra un pantallazo de lo que puedes ver desde una tablet Nexus 7 que ejecuta Lollipop 511

Hay algunas cuestiones importantes para entender las estadiacutesticas

bull Las estadiacutesticas UID muestran el desglose de las aplicaciones de primer plano y de fondo

bull Uid muestra el ID de usuario de la aplicacioacuten que se puede utili-zar para relacionar eacutesta con la in-

DESARROLLO AnDROID AnALIzAnDO EL uSO DE RED DE LAS APLICACIOnESpor Nanik tolaram

DESARROLLO ANDROID

figura 1 - Uso de datos en la configuracioacuten

figura 2 - Desglose del uso de datos de la app

ODROID MAGAZINE 28

$ dumpsys package detail

Este comando te proporcionaraacute una larga lista de informacioacuten sobre los pa-quetes que estaacuten instalados en tu dis-positivo Para las estadiacutesticas de red nos interesa la seccioacuten que se muestra en la Figura 5

La seccioacuten resaltada muestra el userId que se relaciona con el uid que se mues-tra en las estadiacutesticas de red Al relacio-nar este nuacutemero sabemos el nombre del paquete de la aplicacioacuten sobre el que es-tamos leyendo las estadiacutesticas de red

Aplicacioacuten de ejemplo

La aplicacioacuten de ejemplo de este artiacute-culo se puede descargar desde httpbitly2m8WenA que muestra coacutemo etiqu-etar la conexioacuten de red desde distintas

secciones de la aplicacioacuten lo cual puede ayudar a analizar el volumen de traacutefico de datos de la aplicacioacuten La Figura 6 muestra un ejemplo de coacutemo lo vemos si utilizamos Android Device Monitor (dentro de Studio diriacutegete a Tools -gt Android -gt Android Device Monitor)

Tal y como se puede ver en el graacutefico la simple aplicacioacuten tiene 3 conexiones dife-rentes y cada una de ellas estaacute accediendo a un sitio web diferente Al etiquetarlas con

formacioacuten del paquete (que ver-emos en la seccioacuten de detalles del paquete dumpsys) con el objeto de conocer queacute aplicacioacuten utiliza estas estadiacutesticas de red

bull Las etiquetas son uacutetiles si de-sea ver la cantidad de datos que utiliza cada conexioacuten de tu apli-cacioacuten Puedes ver un ejemplo de esto en la Figura 4 que muestra que el uid 10007 tiene las siguien-tes etiquetas 0x30000401 0x30003201 0x30002804 0x10000401 y 0x30000407 Es-tas etiquetas ayudan al desarrol-lador a saber cuaacutentos datos uti-liza cada parte de la aplicacioacuten Estas estadiacutesticas de red en par-ticular estaacuten vinculada al paquete Google Framework que forma parte de Google Play Store

En el siguiente apartado veremos coacutemo escribir una aplicacioacuten etiquetando el hilo que hace la conexioacuten de red para determi-nar la cantidad de datos que se utilizan

Estadiacutesticas de paquetes

En la seccioacuten anterior analizamos el uid que aparece al ejecutar el comando dumpsys netstats Ahora necesitamos sa-ber queacute uid corresponde a la aplicacioacuten en el dispositivo y esto se hace mediante el siguiente comando

DESARROLLO ANDROID

figura 3 ndash estadiacutesticas de red con Dumpsys

figura 4 - estadiacutesticas de etiquetas UiD

figura 5 - Detalles del paquete dumpsys

figura 6 - etiquetas de red

coacutedigos diferentes podemos ver la cantidad de traacutefico que consume cada conexioacuten y esto nos ayudaraacute a ver si nuestra aplicacioacuten utiliza el ancho de banda de un modo eficiente

El coacutedigo del siguiente fragmento muestra el uso de la API TrafficStats interna Esta etiqueta API muestra el subproceso que utiliza actualmente un socket con un identificador y todo el traacute-fico que pasa por la misma conexioacuten se grabaraacute junto Asiacute es como la aplicacioacuten es capaz de agrupar las 3 conexiones diferentes Internamente Android utili-za el moacutedulo xt_qtaguid del kernel para realizar este tipo de etiquetado Tienes disponible maacutes informacioacuten en httpbitly2kU8KXB

public void getUsingNormalURLC

onnection(String urlText int

threadTag)

throws IOException

URL url = null

TrafficStats

setThreadStatsTag(threadTag)

HttpURLConnection urlConnec-

tion = getConnection(url)

try

finally

TrafficStatsclearThread-

StatsTag()

ODROID MAGAZINE 29

Disgustado te subes a tu 4x4 de dominacioacuten del mun-do un vehiacuteculo que desde fuera parece maacutes bien un viejo camioacuten de granja pero por dentro se parece maacutes

al sistema de control de un transbordador espacial porque el conductor del restaurante oriental que realiza las entrega a do-micilio estaacute enfermo Ahora tienes que ir a recoger tu propia comida ldquoQueacute rudimentariordquo piensas cuando sales de tu garaje secreto Justamente cuando vas a parar el vehiacuteculo en un stop oyes un fuerte ruido Sales y te diriges raacutepidamente a la parte posterior del 4x4 donde observas un cubo de basura Te tiras de los pelos y piensas ldquoiexclEsos basureros Neanderthales dejaron otra vez el cubo en mediordquo Ahora te toca recoger los restos de tu cena y la basura de otros

Conforme te vas alejando para hacer tus recados empiezas a pensar en coacutemo evitar este inconveniente en el futuro Varias ideas te vienen a la mente

Un sistema lidar para escanear en 3D el entorno en tiempo real y alarmas sonoras cuando sea necesarioUn brazo ciberneacutetico colocado en la parte posterior del 4x4 que procese video para detectar objetos agarrarlos y moverlosUna simple camara trasera

Empiezas a considerar la viabilidad de cada una

Muy bueno pero demasiado complicado y costosoAuacuten mejor y un proyecto propio de un cientiacutefico loco pero demasi-ado complicado y costosoya tengo dos iexclpero estaba demasiado preocupado en mis pensa-mientos para prestarles atencioacuten

Lo que necesitas es algo simple sin complicaciones y barato que haga sonar una alarma para alertarte incluso cuando estar absorto en tus pensamientos ldquoAhardquo Recuerdas haber visto un nuevo producto en ameriDroid que puede hacer precisamente esto Se trata de un microcontrolador conectado al USB que soporta hasta 6 sensores ultrasoacutenicos con simples comandos en serie (httpbitly2l26ptV) ldquoiexclPerfectordquo Piensas

Regresas a tu laboratorio subterraacuteneo con el pollo Kung Pao en la mano te apresurar a encender tus monitores entras en el sitio web ameriDroid y pides un kit ldquoUSB Ultrasonic Ranging Sensorrdquo con 6 sensores y carcasas

Vas sintiendo una sensacioacuten de alivio a medida que regresas a los 12 proyectos en lo que ya estabas trabajando a la espera de que pasen un par de diacuteas hasta que llegue tu nuevo pedido Mientras te comes tu Kung Pao dibujas un diagrama de coacutemo quieres colocar los sensores en la parte posterior de tu vehiacuteculo

Un par de diacuteas maacutes tarde el kit llega Inmediatamente em-piezas a montar el kit y los sensores en la parte posterior de tu 4x4 teniendo cuidado de usar sellador de silicona para pro-teger los sensores de la lluvia aguanieve y nieve que puedas encontrar durante tus aventuras para dominar el mundo

A continuacioacuten consultas las instrucciones proporcionadas por ameriDroid con el kit sobre coacutemo controlar y leer los sen-sores desde tu fiel ODROID-C2 y VU7 que montaste en el salpicadero para este propoacutesito

Conectando el cable USBEl cable USB suministrado debe conectarse al microcon-

trolador (la pequentildea placa de circuito con filas de pines que sobresalen) El microcontrolador tiene una fila de 4 o 6 pines

DETECTAR LA PRESEnCIACROnICAS DE un CIEnTIfICO LOCOpor bo lechnowsky

SENSOR ULTRASONICO

ODROID MAGAZINE 30

en un extremo Si tiene 6 pines ceacutentrate en los 4 pines centrales y sigue estas instrucciones

Negro - conectar a GNDrojo - conectar a VccVerde - conectar a rxi

blanco - conectar a txD

Conectando los sensoresultrasoacutenicos

En cada sensor ultrasoacutenico hay cuatro pines marcados Vcc Trig Echo Gnd Para el primer sensor ultrasoacutenico conecta el pin 2 del microcontrolador al pin ldquoTrigrdquo del sensor ultrasoacutenico Conecta el pin 3 del microcontrolador al pin ldquoEchordquo del sensor Conecte el pin ldquoVccrdquo del sensor a DC 5V (el pin ldquoVCCrdquo del microcontrolador suministra 5V) y el pin ldquoGndrdquo del sensor a una conexioacuten a tierra como por ejemplo los pines ldquoGNDrdquo del microcontrolador

Si conectas un segundo sensor de ultrasonidos conecta ldquoTrigrdquo al pin 4 y ldquoEchordquo al pin 5 Continuacutea conectando los siguientes pines a los sensores hasta los pines 12 y 13 si al final optas por conectar los seis sensores ultrasonidos

Conexioacuten del softwareUtilizas un programa terminal como PuTTY Screen o tu

lenguaje de script o programacioacuten favorito para conectarte al puerto serie que aparece cuando te conectas el sensor ultrasoacuteni-co Esto variaraacute en funcioacuten del sistema operativo que utilizas para conectarte al microcontrolador En Windows consultar el ldquoAdministrador de dispositivosrdquo es la forma maacutes comuacuten de averiguarlo En Linux ldquodmesgrdquo o ldquolsusbrdquo son las formas de de-tectar a queacute puerto estaacute conectado Deberiacuteas ver algo denomi-nado ldquoPL2303rdquo que es la conexioacuten del microcontrolador Si recibes informacioacuten basura en tu terminal cuando te conectes aseguacuterate de que los ajustes en serie son 9600 baudios 8 bits ninguno (paridad) y 1 bit de parada Aquiacute tienes una lista de los comandos que puede aceptar el microcontrolador

bull debug on Activa la retroalimentacioacuten detallada Estaacute deshabilitada por defecto nos proporcionaraacute aclaracio-nes sobre los errores de entrada

bull debug off desactiva la retroalimentacioacuten detalladabull init x y activa un HC-SR04 en los pines especificados

X es trigger Y es echo Estos deben ser pines digitales El dispositivo 0 estaacute preestablecido en los pines 2 y 3 de modo que no es necesario especificar estos pines La seleccioacuten de pines no vaacutelidos devolveraacute un signo de ex-clamacioacuten ()

bull ping enviacutea una sola lectura del HCSR04 previamente utilizado Si no se ha utilizado todaviacutea se usaraacute el dis-positivo 0 Si al comando le sigue un espacio y un nuacutemero entre 0-100 (exclusivo) se realizaraacute ese nuacutemero de lecturas emitiendo primero el promedio de esas lec-

SENSOR ULTRASONICO

turas despueacutes el nuacutemero de lecturas fallidas (que no cuentan para el promedio) y luego los valores miacutenimo y maacuteximo de lectura separados por espacios En cual-quier caso si una sentildeal se desconecta automaacuteticamente devolveraacute -1

bull start Hace ping constantemente a todos los dispositivos conectados en secuencia Debido a que los dispositivos se utilizan uno a uno el flujo de datos de este comando seraacute maacutes raacutepido si los dispositivos miden distancias cor-tas Si este comando le sigue un espacio y un nuacutemero mayor que 0 la placa esperaraacute estos milisegundos entre la lectura del uacuteltimo dispositivo y la lectura del primer dispositivo El resultado de este comando seraacute la lectura de cada dispositivo (con un uacutenico espacio despueacutes de cada uno) y una vuelta tras el uacuteltimo dispositivo

bull stop detiene la operacioacuten ldquostartrdquo soacutelo es efectivo tras haber iniciado ldquostartrdquo

bull mode emite el modo de medicioacuten del flujo M para meacutetrico (miliacutemetros) I para Imperial (deacutecimas de pul-gada) o R para Raw (la longitud de pulso en microse-gundos devuelta por el HC-SR04) El valor predeter-minado es M

bull timeout emite el tiempo de espera actual para lecturas de la sentildeal El tiempo de espera es la mayor cantidad de microsegundos que la placa esperaraacute antes de declarar que el HC-SR04 ha realizado una mala lectura lo cual no es necesariamente lo mismo que el pulso maacutes largo que la placa aceptaraacute del HC-SR04 Cuando la placa mide el pulso del HC-SR04 primero espera a que el HC-SR04 comience a enviar un pulso Este tiempo cuenta para el tiempo de espera Cuando este comando le sigue un espacio y un nuacutemero el tiempo de espera se ajusta a ese nuacutemero El valor predeterminado es 1 segundo (1000000 microsegundos)

bull ver emite informacioacuten de versioacuten y creacuteditos

Si cualquier comando (o ninguacuten comando) estaacute precedido por un uacutenico diacutegito de 0-5 (inclusive) seguido de un espacio el dispositivo que corresponde a ese diacutegito se seleccionaraacute para ser usado con el siguiente comando ldquopingrdquo Cada vez que la placa esteacute lista para un comando emitiraacute ldquogtrdquo para la serie La uacutenica excepcioacuten estaacute tras el comando ldquostartrdquo que no solicitaraacute entrada hasta que sea reconocido ldquostoprdquo

ODROID MAGAZINE 31

iquestCoacutemo empezaste con los ordenadoresCuando empeceacute mi negocio tuve que decidir queacute plat-

aforma de hardware iba a utilizar para la recogida de datos del traacutefico Simplemente para que no pienses mal de miacute mis caacutemaras de traacutefico no son las que se usan para multar por exceso de velocidad o algo asiacute Mi sistema estaba desti-nado suavizar el flujo de traacutefico fijando los controles oacutepti-mos de las sentildeales de traacutefico Anteriormente usaba un PC industrial para ejecutar mi software de reconocimiento de imaacutegenes Ahora uso la familia de dispositivos ODROID para esta cuestioacuten

iquestQueacute te atrajo de la plataforma ODROID En 2012 useacute Google para buscar una plataforma que

fuera muy compacta y al mismo tiempo potente para que cubriera mis necesidades que resultoacute ser la placa

Por favor haacuteblanos un poco sobre tiSoy ingeniero de electroacutenica y software en Rusia desde

hace 47 antildeos Naciacute en Siberia y tras terminar la escuela me mudeacute a Moscuacute para estudiar en la universidad Ser estudi-ante en el Instituto de Aviacioacuten de Moscuacute (MAI) fue una experiencia increiacuteble probablemente la mejor de mi vida A principios de los 90 llegoacute a Rusia la era de los microordena-dores soliacutea jugar a un juego de saltos en una CPU z80 y el i486 Tras finalizar mis estudios universitarios y de posgrado me convertiacute en ingeniero Trabajeacute en unos cuantos puestos de trabajo para diferentes empresas y finalmente decidiacute em-prender mi propio negocio En 2006 puse en marcha una iniciativa para crear sistemas de recuento del traacutefico de au-tomoacuteviles Estoy casado y tengo una hija de 21 antildeos llamada Lena que trabaja como enfermera Mi esposa Nadezhda es disentildeadora de vestuario de produccioacuten pero ahora trabaja como disentildeadora web Ella es aficionada a la fotografiacutea digi-tal y le encanta su caacutemara reacuteflex digital

COnOCIEnDO un ODROIDIAnvIACHESLAv ALEKSEEveditado por rob roy (robroy)

CONOCIENDO UN ODROIDIAN

Viacheslav disfruta tocando la guitarra y escuchando muacutesica

1995 en el campus MAi probando uno de los primeros equipos Vr comerciales del mundo que funcionaba a 640x480 a 30fps Utiliz-aba un sensor magneacutetico en la nuca para la posicioacuten de la cabeza la mejor broma que se podiacutea gastar a alguien era colocar un imaacuten cerca de la espalda y sacudirlo iexcllos gritos estaban garantizados cuando el mundo en 3D daba vueltas sin cesar

ODROID MAGAZINE 32

ODROID-X2 Con sus cuatro nuacutecleos funcionando a 17 GHz calculaba con facilidad los algoritmos de reconteo del traacutefico de automoacuteviles Maacutes tarde cambieacute al U3 y el XU4

iquestCuaacutel es tu ODROID favorito y por queacuteDe momento mi favorito es el XU4 Mi sistema estaacute

basado en el tratamiento de fotogramas de video en tiempo real por lo que el bus USB 30 del XU4 es bastante bueno para una caacutemara con una interfaz de captura de viacutedeo Para mi sistema es muy importante tener una buena conexioacuten entre la caacutemara de viacutedeo y la CPU Probablemente tendreacute que echar un vistazo a las interfaces de nivel inferior como MIPI CSI-2 que por desgracia estaacuten ausente en el XU4 Recientemente he estado aprendiendo como usar la caacute-mara oCam GS BW La caacutemara es buena en siacute misma pero para un uso industrial al aire libre tengo que implementar un software de control de exposicioacuten automaacutetica y posible-mente de control de apertura de la lente que todaviacutea estaacute en estudio

MEET AN ODROIDIAN

Una vieja joya el mini ordenador Nixdorf

An old gem the Nixdorf mini computer

CONOCIENDO UN ODROIDIAN

iquestQueacute aficiones e intereses tienes aparte de los ordenadoresDisfruto conduciendo y leyendo sobre coches y viendo

los campeonatos de carreras de F1 Tambieacuten me gusta via-jar pescar escuchar muacutesica y tocar la guitarra Tengo un gato siberiano llamado Leia y soy fan de Star Wars

iquestQueacute consejo le dariacuteas a alguien que quiere aprender maacutes sobre la programacioacuten

Hacer software es algo increiacuteble y miacutestico Es una fusioacuten de arte y tecnologiacutea Nada te inspira maacutes que tu aplicacioacuten cuando empieza a cobrar vida Sin embargo siempre estaacute ahiacute el otro lado de la Fuerza Estar listo para instruirte inc-esantemente El desarrollo de software es una de las activi-dades que cambia maacutes raacutepido Si tienes pensado dejar de hacer software en uno o dos antildeos puede dejar de aprender ahora El conocimiento se volveraacute anticuado en un par de antildeos maacutes o menos Para estar en lo maacutes alto siempre tienes que correr Es similar a la cancioacutenrdquoRun like Hellrdquo de Pink Floyd Si estaacutes listo para vivir de esta forma seguro que tendraacutes eacutexito

ODROID MAGAZINE 33

Page 24: Estación ARCADE · gias de marketing, administración de medios sociales y producción multimedia impresa, web, vídeo y cine. Ges-tionando múltiples cuentas con agencias y productores

panel MDf 12t2eA 600x2202eA 600x752eA 220x75taladroplegadoraDesmontadorcinta meacutetricaNavaja multiusoAlicates de punta largaoDroiD-xU4xU4 Shifter shieldSMpS (fuete Alimentacioacuten)

extendedores hDMi USb ethernetenchufe de alimentacioacuten y Switchbisagras 2eAreceptor de puertacaucho 4eAtornillospulsadores 19eAJoystick 2eAcablesterminales

una SMPS (Fuente de alimentacioacuten conmutada) como fuente de alimentacioacuten Las herramientas y las piezas utilizadas las tienes en esta paacutegina

La ODROID Arcade Box necesita un total de 27 entradas (19 entradas para botones y 8 entra-das para joysticks) Las 24 entradas GPIO digi-tales del ODROID-XU4 no son suficientes para las 27 entradas de modo que creamos dos puertos ADC adicionales para los tres botones que nos fal-taban Los valores de entrada ADC se basan en el voltaje de entrada y los valores de entrada digital y analoacutegica se procesan en el demonio GPIO que se describe a continuacioacuten

Disentildeo y montajeLos paneles de la ODROID Arcade Box deben

ser disentildeados y fabricados para que los botones y joysticks esteacuten bien colocados Elegimos MDF 12T teniendo en cuenta el precio y la durabilidad El dise-ntildeo se puede hacer con cualquier herramienta CAD como Google Sketch o SolidWorks Aunque existen muchas plantillas de disentildeo para los paneles de joypad decidimos elegir un disentildeo arcade estaacutendar japoneacutes

El primer paso del montaje es unir la placa al panel MDF Este paso fue faacutecil aunque nos llevo maacutes tiempo que el resto Despueacutes insertamos los joysticks la toma de corri-ente el interruptor y los botones en el panel MDF superior Los conectores HDMI Ethernet y USB se colocaron en la parte trasera del panel MDF El siguiente paso fue montar cada panel MDF usando un taladro para hacer los agujeros luego con tornillos los sujetamos

El uacuteltimo paso del montaje de la ODROID Arcade Box es conectar por cable los pines de expansioacuten del ODROID-XU4 a los componentes de entrada En este proyecto dise-ntildeamos las entradas GPIO externas tal y como se muestra en la paacutegina 26 Los botones Select y Temp estaacuten conecta-dos a puertos de expansioacuten ADC

Configuracion del softwareDesarrollamos un nuevo demonio GPIO llamado gpio_

keyd (httpbitly2ljOZKg) Este demonio es capaz de asignar entradas GPIO y eventos claves usando uinput y wiringPi una libreriacutea de acceso GPIO basada en pines Estaacute disentildeada para que le sea familiar a quiene ya ha utilizado el sistema de cableado Arduino Aunque la blibreriacutea wiring-Pi upstream soacutelo admite Raspberry Pi Hardkernel ofrece una versioacuten de wiringPi para ODROIDs en su repositorio GitHub (httpbitly1Eq3UpF) El moacutedulo uinput es un moacutedulo del kernel de Linux que gestiona el subsistema de entrada del usuario Se puede utilizar para crear y manejar dispositivos de entrada desde una aplicacioacuten

ARCADE BOX

herramientas compentes y lo que hay justamente debajo

esquema de los puertos de expansioacuten

ODROID MAGAZINE 24

Elegimos ODROID GameStation Turbo (httpbitly1ASFO5O) como plataforma de software para nuestra ODROID Arcade Box que tiene integrado uinput Debes asegurarte de que el archivo de dispositivo uinput existe en el sistema operativo elegido porque algunos no tienen dispositivos uinput

$ ls devuinput

Si tu sistema operativo no tiene un archivo de disposi-tivo devuinput entonces seraacute necesario recompilar e in-stalar un nuevo kernel con la opcioacuten de configuracioacuten IN-PUT_UINPUT habilitada La paacutegina Wiki en httpbitly1YIToBI describe coacutemo compilar e instalar la imagen del kernel a partir del coacutedigo fuente

$ make menuconfig

Device Drivers

-gt Input device support

-gt Generic input layer

-gt Miscellaneous device

-gt User level driver support ltgt

Ten en cuenta que wiringPi debe instalarse antes de in-stalar gpio_keyd En la imagen GameStation de ODROID los comandos sudo deben ejecutarse como root porque la cuenta ldquoodroidrdquo no estaacute designada como usuario sudo

$ git clone httpsgithubcomhardkernelwiringPi

git

$ cd wiringPi

$ sudo build

Descarga el coacutedigo fuente gpio_keyd el cual estaacute dis-ponible en nuestro repositorio GitHub El procedimiento para compilar e instalar gpio_keyd es muy simple

$ git clone httpsgithubcombkrepogpio_keydgit

$ cd gpio_keyd

$ make

$ sudo make install

El script gpio_keyd hace referencia a etcgpio_keydconf como el predeterminado para la informacioacuten de los botones y GPIO El archivo de configuracioacuten fue modi-ficado para las 27 entradas de la ODROID Arcade Box Algunas botones ya se utilizaban en el emulador de juego de modo que tuvimos que cambiar la configuracioacuten del emulador para evitar conflictos entre los botones de en-trada GPIO y el emulador Ten en cuenta que el campo ltGPIO pingt en el archivo de configuracioacuten hace referen-

ARCADE BOX

plano del disentildeo de joypad

la oDroiD Arcade box montada

ODROID MAGAZINE 25

cia al nuacutemero wiringPi no al GPIO y al nuacutemero de pin (httpbitly2lbzPIB)

Ejemplo de configuracioacuten para las 27 entradas etcgpio_keydconf

Digital input ltKey codegt ltGPIO typegt ltGPIO pingt ltActive valuegt User 1KEY_LEFT digital 15 0KEY_RIGHT digital 1 0KEY_UP digital 4 0KEY_DOWN digital 16 0KEY_A digital 2 0KEY_S digital 3 0KEY_D digital 30 0KEY_F digital 21 0KEY_Z digital 8 0KEY_X digital 9 0KEY_C digital 7 0KEY_V digital 0 0 User 2KEY_BACKSLASH digital 12 0KEY_SLASH digital 13 0KEY_SEMICOLON digital 14 0KEY_LEFTBRACE digital 5 0KEY_Y digital 26 0KEY_U digital 27 0KEY_I digital 22 0KEY_O digital 23 0KEY_H digital 6 0KEY_J digital 10 0KEY_K digital 11 0KEY_L digital 31 0

Analog input ltKey codegt ltGPIO typegt ltADC portgt ltADC ac-tive valuegtKEY_B analog 0 0KEY_N analog 0 2045KEY_M analog 1 2045

To run gpio_keyd daemon at every startup is conve-nient for ODROID Arcade Box

etcinitdgpio_keyd binsh BEGIN INIT INFO

ARCADE BOX

Mapeo Gpio externo para los botones y Joysticks

cableado de la oDroiD Arcade box

ODROID MAGAZINE 26

Provides gpio_keyd Required-Start $all Required-Stop Default-Start 2 3 4 5 Default-Stop Short-Description Run usrbingpio_keyd if it ex-ist END INIT INFO

PATH=sbinusrsbinbinusrbin

libinitvarssh

liblsbinit-functions

do_start() if [ -x usrbingpio_keyd ] then usrbingpio_keyd -d ES=$ [ ldquo$VERBOSErdquo = no ] ampamp log_end_msg $ES return $ES fi

case ldquo$1rdquo in start) do_start restart|reload|force-reload) echo ldquoError argument lsquo$1rsquo not supportedrdquo gtamp2 exit 3 stop) killall gpio_keyd exit 0 ) echo ldquoUsage $0 start|stoprdquo gtamp2 exit 3 Esac

$ sudo chmod +x etcinitdgpio_keyd$ sudo update-rcd gpio_keyd defaults$ sudo reboot

En los comandos anteriores el script gpio_keyd se ejecuta como un demonio uti-lizando la opcioacuten ldquo-drdquo El uso de gpio_keyd se puede comprobar con la opcioacuten ldquo-hrdquo Comprue-ba de nuevo las teclas usadas por el juego o el emulador despueacutes fija la configuracioacuten del gpio_ keyd correctamente Es ahora cuando estaacutes listo para jugar y disfrutar de tus juegos con tu nueva ODROID Arcade Box

ARCADE BOX

the King of fighters 98 John vs brian

ODROID MAGAZINE 27

En este artiacuteculo analizaremos las diferentes formas que existen para ob-tener los datos del uso de la red

ConfiguracioacutenLa forma normal de analizar los datos

de traacutefico de la red es mediante el uso de datos a traveacutes de las aplicaciones de configuracioacuten del sistema tal y como se muestra en la figura 1

El uso de datos muestra la cantidad total de traacutefico de datos entrante y sa-liente que ha sido utilizada por una apli-cacioacuten Si seleccionas la aplicacioacuten veraacute una pantalla como la que aparece en la Figura 2 que muestra informacioacuten detal-lada sobre el uso de la aplicacioacuten tanto en primer plano como de fondo

La informacioacuten que se muestra den-tro de la aplicacioacuten de Configuracioacuten se almacena en data systemnetstats que requiere acceso root Al eliminar todo lo que hay dentro de esta carpeta se resta-

Como desarrolladores queremos que nuestras aplicaciones sean eficientes y a menudo nos gus-

tariacutea saber cuaacutento ancho de banda de red estaacute utilizando nuestra aplicacioacuten Esto es muy uacutetil por varias razones

bull Para monitorizar y asegurarnos de que la aplicacioacuten es realmente la nuestra y no una aplicacioacuten que ha sido pirateada y publi-cada con diferentes nombres en Play Store

bull Para asegurarnos de que no es-tamos cogiendo ancho de banda innecesario del plan de datos del usuario

bull Para comprobar que el disposi-tivo que estamos usando no estaacute accediendo a Internet sin nuestro consentimiento

blecen las estadiacutesticas de red mostradas en esta aplicacioacuten

Estadiacutesticas de la redLa aplicacioacuten de configuracioacuten nos

puede dar una informacioacuten general so-bre las estadiacutesticas de la red de datos que es un buen comienzo pero a veces necesitamos un anaacutelisis maacutes detallado que puede hacerse a traveacutes del coman-do dumpsys Android cuenta con una poderosa herramienta llamada dumpsys que nos permite obtener una instan-taacutenea o volcado del sistema que pu-ede incluir informacioacuten sobre la red la memoria y otros componentes Lee la documentacioacuten de Android en httpbitly2kK9dep para obtener maacutes infor-macioacuten del sistema Para conseguir maacutes informacioacuten relacionada con la red nos interesa el comando

$ dumpsys netstats detail

La Figura 3 muestra un pantallazo de lo que puedes ver desde una tablet Nexus 7 que ejecuta Lollipop 511

Hay algunas cuestiones importantes para entender las estadiacutesticas

bull Las estadiacutesticas UID muestran el desglose de las aplicaciones de primer plano y de fondo

bull Uid muestra el ID de usuario de la aplicacioacuten que se puede utili-zar para relacionar eacutesta con la in-

DESARROLLO AnDROID AnALIzAnDO EL uSO DE RED DE LAS APLICACIOnESpor Nanik tolaram

DESARROLLO ANDROID

figura 1 - Uso de datos en la configuracioacuten

figura 2 - Desglose del uso de datos de la app

ODROID MAGAZINE 28

$ dumpsys package detail

Este comando te proporcionaraacute una larga lista de informacioacuten sobre los pa-quetes que estaacuten instalados en tu dis-positivo Para las estadiacutesticas de red nos interesa la seccioacuten que se muestra en la Figura 5

La seccioacuten resaltada muestra el userId que se relaciona con el uid que se mues-tra en las estadiacutesticas de red Al relacio-nar este nuacutemero sabemos el nombre del paquete de la aplicacioacuten sobre el que es-tamos leyendo las estadiacutesticas de red

Aplicacioacuten de ejemplo

La aplicacioacuten de ejemplo de este artiacute-culo se puede descargar desde httpbitly2m8WenA que muestra coacutemo etiqu-etar la conexioacuten de red desde distintas

secciones de la aplicacioacuten lo cual puede ayudar a analizar el volumen de traacutefico de datos de la aplicacioacuten La Figura 6 muestra un ejemplo de coacutemo lo vemos si utilizamos Android Device Monitor (dentro de Studio diriacutegete a Tools -gt Android -gt Android Device Monitor)

Tal y como se puede ver en el graacutefico la simple aplicacioacuten tiene 3 conexiones dife-rentes y cada una de ellas estaacute accediendo a un sitio web diferente Al etiquetarlas con

formacioacuten del paquete (que ver-emos en la seccioacuten de detalles del paquete dumpsys) con el objeto de conocer queacute aplicacioacuten utiliza estas estadiacutesticas de red

bull Las etiquetas son uacutetiles si de-sea ver la cantidad de datos que utiliza cada conexioacuten de tu apli-cacioacuten Puedes ver un ejemplo de esto en la Figura 4 que muestra que el uid 10007 tiene las siguien-tes etiquetas 0x30000401 0x30003201 0x30002804 0x10000401 y 0x30000407 Es-tas etiquetas ayudan al desarrol-lador a saber cuaacutentos datos uti-liza cada parte de la aplicacioacuten Estas estadiacutesticas de red en par-ticular estaacuten vinculada al paquete Google Framework que forma parte de Google Play Store

En el siguiente apartado veremos coacutemo escribir una aplicacioacuten etiquetando el hilo que hace la conexioacuten de red para determi-nar la cantidad de datos que se utilizan

Estadiacutesticas de paquetes

En la seccioacuten anterior analizamos el uid que aparece al ejecutar el comando dumpsys netstats Ahora necesitamos sa-ber queacute uid corresponde a la aplicacioacuten en el dispositivo y esto se hace mediante el siguiente comando

DESARROLLO ANDROID

figura 3 ndash estadiacutesticas de red con Dumpsys

figura 4 - estadiacutesticas de etiquetas UiD

figura 5 - Detalles del paquete dumpsys

figura 6 - etiquetas de red

coacutedigos diferentes podemos ver la cantidad de traacutefico que consume cada conexioacuten y esto nos ayudaraacute a ver si nuestra aplicacioacuten utiliza el ancho de banda de un modo eficiente

El coacutedigo del siguiente fragmento muestra el uso de la API TrafficStats interna Esta etiqueta API muestra el subproceso que utiliza actualmente un socket con un identificador y todo el traacute-fico que pasa por la misma conexioacuten se grabaraacute junto Asiacute es como la aplicacioacuten es capaz de agrupar las 3 conexiones diferentes Internamente Android utili-za el moacutedulo xt_qtaguid del kernel para realizar este tipo de etiquetado Tienes disponible maacutes informacioacuten en httpbitly2kU8KXB

public void getUsingNormalURLC

onnection(String urlText int

threadTag)

throws IOException

URL url = null

TrafficStats

setThreadStatsTag(threadTag)

HttpURLConnection urlConnec-

tion = getConnection(url)

try

finally

TrafficStatsclearThread-

StatsTag()

ODROID MAGAZINE 29

Disgustado te subes a tu 4x4 de dominacioacuten del mun-do un vehiacuteculo que desde fuera parece maacutes bien un viejo camioacuten de granja pero por dentro se parece maacutes

al sistema de control de un transbordador espacial porque el conductor del restaurante oriental que realiza las entrega a do-micilio estaacute enfermo Ahora tienes que ir a recoger tu propia comida ldquoQueacute rudimentariordquo piensas cuando sales de tu garaje secreto Justamente cuando vas a parar el vehiacuteculo en un stop oyes un fuerte ruido Sales y te diriges raacutepidamente a la parte posterior del 4x4 donde observas un cubo de basura Te tiras de los pelos y piensas ldquoiexclEsos basureros Neanderthales dejaron otra vez el cubo en mediordquo Ahora te toca recoger los restos de tu cena y la basura de otros

Conforme te vas alejando para hacer tus recados empiezas a pensar en coacutemo evitar este inconveniente en el futuro Varias ideas te vienen a la mente

Un sistema lidar para escanear en 3D el entorno en tiempo real y alarmas sonoras cuando sea necesarioUn brazo ciberneacutetico colocado en la parte posterior del 4x4 que procese video para detectar objetos agarrarlos y moverlosUna simple camara trasera

Empiezas a considerar la viabilidad de cada una

Muy bueno pero demasiado complicado y costosoAuacuten mejor y un proyecto propio de un cientiacutefico loco pero demasi-ado complicado y costosoya tengo dos iexclpero estaba demasiado preocupado en mis pensa-mientos para prestarles atencioacuten

Lo que necesitas es algo simple sin complicaciones y barato que haga sonar una alarma para alertarte incluso cuando estar absorto en tus pensamientos ldquoAhardquo Recuerdas haber visto un nuevo producto en ameriDroid que puede hacer precisamente esto Se trata de un microcontrolador conectado al USB que soporta hasta 6 sensores ultrasoacutenicos con simples comandos en serie (httpbitly2l26ptV) ldquoiexclPerfectordquo Piensas

Regresas a tu laboratorio subterraacuteneo con el pollo Kung Pao en la mano te apresurar a encender tus monitores entras en el sitio web ameriDroid y pides un kit ldquoUSB Ultrasonic Ranging Sensorrdquo con 6 sensores y carcasas

Vas sintiendo una sensacioacuten de alivio a medida que regresas a los 12 proyectos en lo que ya estabas trabajando a la espera de que pasen un par de diacuteas hasta que llegue tu nuevo pedido Mientras te comes tu Kung Pao dibujas un diagrama de coacutemo quieres colocar los sensores en la parte posterior de tu vehiacuteculo

Un par de diacuteas maacutes tarde el kit llega Inmediatamente em-piezas a montar el kit y los sensores en la parte posterior de tu 4x4 teniendo cuidado de usar sellador de silicona para pro-teger los sensores de la lluvia aguanieve y nieve que puedas encontrar durante tus aventuras para dominar el mundo

A continuacioacuten consultas las instrucciones proporcionadas por ameriDroid con el kit sobre coacutemo controlar y leer los sen-sores desde tu fiel ODROID-C2 y VU7 que montaste en el salpicadero para este propoacutesito

Conectando el cable USBEl cable USB suministrado debe conectarse al microcon-

trolador (la pequentildea placa de circuito con filas de pines que sobresalen) El microcontrolador tiene una fila de 4 o 6 pines

DETECTAR LA PRESEnCIACROnICAS DE un CIEnTIfICO LOCOpor bo lechnowsky

SENSOR ULTRASONICO

ODROID MAGAZINE 30

en un extremo Si tiene 6 pines ceacutentrate en los 4 pines centrales y sigue estas instrucciones

Negro - conectar a GNDrojo - conectar a VccVerde - conectar a rxi

blanco - conectar a txD

Conectando los sensoresultrasoacutenicos

En cada sensor ultrasoacutenico hay cuatro pines marcados Vcc Trig Echo Gnd Para el primer sensor ultrasoacutenico conecta el pin 2 del microcontrolador al pin ldquoTrigrdquo del sensor ultrasoacutenico Conecta el pin 3 del microcontrolador al pin ldquoEchordquo del sensor Conecte el pin ldquoVccrdquo del sensor a DC 5V (el pin ldquoVCCrdquo del microcontrolador suministra 5V) y el pin ldquoGndrdquo del sensor a una conexioacuten a tierra como por ejemplo los pines ldquoGNDrdquo del microcontrolador

Si conectas un segundo sensor de ultrasonidos conecta ldquoTrigrdquo al pin 4 y ldquoEchordquo al pin 5 Continuacutea conectando los siguientes pines a los sensores hasta los pines 12 y 13 si al final optas por conectar los seis sensores ultrasonidos

Conexioacuten del softwareUtilizas un programa terminal como PuTTY Screen o tu

lenguaje de script o programacioacuten favorito para conectarte al puerto serie que aparece cuando te conectas el sensor ultrasoacuteni-co Esto variaraacute en funcioacuten del sistema operativo que utilizas para conectarte al microcontrolador En Windows consultar el ldquoAdministrador de dispositivosrdquo es la forma maacutes comuacuten de averiguarlo En Linux ldquodmesgrdquo o ldquolsusbrdquo son las formas de de-tectar a queacute puerto estaacute conectado Deberiacuteas ver algo denomi-nado ldquoPL2303rdquo que es la conexioacuten del microcontrolador Si recibes informacioacuten basura en tu terminal cuando te conectes aseguacuterate de que los ajustes en serie son 9600 baudios 8 bits ninguno (paridad) y 1 bit de parada Aquiacute tienes una lista de los comandos que puede aceptar el microcontrolador

bull debug on Activa la retroalimentacioacuten detallada Estaacute deshabilitada por defecto nos proporcionaraacute aclaracio-nes sobre los errores de entrada

bull debug off desactiva la retroalimentacioacuten detalladabull init x y activa un HC-SR04 en los pines especificados

X es trigger Y es echo Estos deben ser pines digitales El dispositivo 0 estaacute preestablecido en los pines 2 y 3 de modo que no es necesario especificar estos pines La seleccioacuten de pines no vaacutelidos devolveraacute un signo de ex-clamacioacuten ()

bull ping enviacutea una sola lectura del HCSR04 previamente utilizado Si no se ha utilizado todaviacutea se usaraacute el dis-positivo 0 Si al comando le sigue un espacio y un nuacutemero entre 0-100 (exclusivo) se realizaraacute ese nuacutemero de lecturas emitiendo primero el promedio de esas lec-

SENSOR ULTRASONICO

turas despueacutes el nuacutemero de lecturas fallidas (que no cuentan para el promedio) y luego los valores miacutenimo y maacuteximo de lectura separados por espacios En cual-quier caso si una sentildeal se desconecta automaacuteticamente devolveraacute -1

bull start Hace ping constantemente a todos los dispositivos conectados en secuencia Debido a que los dispositivos se utilizan uno a uno el flujo de datos de este comando seraacute maacutes raacutepido si los dispositivos miden distancias cor-tas Si este comando le sigue un espacio y un nuacutemero mayor que 0 la placa esperaraacute estos milisegundos entre la lectura del uacuteltimo dispositivo y la lectura del primer dispositivo El resultado de este comando seraacute la lectura de cada dispositivo (con un uacutenico espacio despueacutes de cada uno) y una vuelta tras el uacuteltimo dispositivo

bull stop detiene la operacioacuten ldquostartrdquo soacutelo es efectivo tras haber iniciado ldquostartrdquo

bull mode emite el modo de medicioacuten del flujo M para meacutetrico (miliacutemetros) I para Imperial (deacutecimas de pul-gada) o R para Raw (la longitud de pulso en microse-gundos devuelta por el HC-SR04) El valor predeter-minado es M

bull timeout emite el tiempo de espera actual para lecturas de la sentildeal El tiempo de espera es la mayor cantidad de microsegundos que la placa esperaraacute antes de declarar que el HC-SR04 ha realizado una mala lectura lo cual no es necesariamente lo mismo que el pulso maacutes largo que la placa aceptaraacute del HC-SR04 Cuando la placa mide el pulso del HC-SR04 primero espera a que el HC-SR04 comience a enviar un pulso Este tiempo cuenta para el tiempo de espera Cuando este comando le sigue un espacio y un nuacutemero el tiempo de espera se ajusta a ese nuacutemero El valor predeterminado es 1 segundo (1000000 microsegundos)

bull ver emite informacioacuten de versioacuten y creacuteditos

Si cualquier comando (o ninguacuten comando) estaacute precedido por un uacutenico diacutegito de 0-5 (inclusive) seguido de un espacio el dispositivo que corresponde a ese diacutegito se seleccionaraacute para ser usado con el siguiente comando ldquopingrdquo Cada vez que la placa esteacute lista para un comando emitiraacute ldquogtrdquo para la serie La uacutenica excepcioacuten estaacute tras el comando ldquostartrdquo que no solicitaraacute entrada hasta que sea reconocido ldquostoprdquo

ODROID MAGAZINE 31

iquestCoacutemo empezaste con los ordenadoresCuando empeceacute mi negocio tuve que decidir queacute plat-

aforma de hardware iba a utilizar para la recogida de datos del traacutefico Simplemente para que no pienses mal de miacute mis caacutemaras de traacutefico no son las que se usan para multar por exceso de velocidad o algo asiacute Mi sistema estaba desti-nado suavizar el flujo de traacutefico fijando los controles oacutepti-mos de las sentildeales de traacutefico Anteriormente usaba un PC industrial para ejecutar mi software de reconocimiento de imaacutegenes Ahora uso la familia de dispositivos ODROID para esta cuestioacuten

iquestQueacute te atrajo de la plataforma ODROID En 2012 useacute Google para buscar una plataforma que

fuera muy compacta y al mismo tiempo potente para que cubriera mis necesidades que resultoacute ser la placa

Por favor haacuteblanos un poco sobre tiSoy ingeniero de electroacutenica y software en Rusia desde

hace 47 antildeos Naciacute en Siberia y tras terminar la escuela me mudeacute a Moscuacute para estudiar en la universidad Ser estudi-ante en el Instituto de Aviacioacuten de Moscuacute (MAI) fue una experiencia increiacuteble probablemente la mejor de mi vida A principios de los 90 llegoacute a Rusia la era de los microordena-dores soliacutea jugar a un juego de saltos en una CPU z80 y el i486 Tras finalizar mis estudios universitarios y de posgrado me convertiacute en ingeniero Trabajeacute en unos cuantos puestos de trabajo para diferentes empresas y finalmente decidiacute em-prender mi propio negocio En 2006 puse en marcha una iniciativa para crear sistemas de recuento del traacutefico de au-tomoacuteviles Estoy casado y tengo una hija de 21 antildeos llamada Lena que trabaja como enfermera Mi esposa Nadezhda es disentildeadora de vestuario de produccioacuten pero ahora trabaja como disentildeadora web Ella es aficionada a la fotografiacutea digi-tal y le encanta su caacutemara reacuteflex digital

COnOCIEnDO un ODROIDIAnvIACHESLAv ALEKSEEveditado por rob roy (robroy)

CONOCIENDO UN ODROIDIAN

Viacheslav disfruta tocando la guitarra y escuchando muacutesica

1995 en el campus MAi probando uno de los primeros equipos Vr comerciales del mundo que funcionaba a 640x480 a 30fps Utiliz-aba un sensor magneacutetico en la nuca para la posicioacuten de la cabeza la mejor broma que se podiacutea gastar a alguien era colocar un imaacuten cerca de la espalda y sacudirlo iexcllos gritos estaban garantizados cuando el mundo en 3D daba vueltas sin cesar

ODROID MAGAZINE 32

ODROID-X2 Con sus cuatro nuacutecleos funcionando a 17 GHz calculaba con facilidad los algoritmos de reconteo del traacutefico de automoacuteviles Maacutes tarde cambieacute al U3 y el XU4

iquestCuaacutel es tu ODROID favorito y por queacuteDe momento mi favorito es el XU4 Mi sistema estaacute

basado en el tratamiento de fotogramas de video en tiempo real por lo que el bus USB 30 del XU4 es bastante bueno para una caacutemara con una interfaz de captura de viacutedeo Para mi sistema es muy importante tener una buena conexioacuten entre la caacutemara de viacutedeo y la CPU Probablemente tendreacute que echar un vistazo a las interfaces de nivel inferior como MIPI CSI-2 que por desgracia estaacuten ausente en el XU4 Recientemente he estado aprendiendo como usar la caacute-mara oCam GS BW La caacutemara es buena en siacute misma pero para un uso industrial al aire libre tengo que implementar un software de control de exposicioacuten automaacutetica y posible-mente de control de apertura de la lente que todaviacutea estaacute en estudio

MEET AN ODROIDIAN

Una vieja joya el mini ordenador Nixdorf

An old gem the Nixdorf mini computer

CONOCIENDO UN ODROIDIAN

iquestQueacute aficiones e intereses tienes aparte de los ordenadoresDisfruto conduciendo y leyendo sobre coches y viendo

los campeonatos de carreras de F1 Tambieacuten me gusta via-jar pescar escuchar muacutesica y tocar la guitarra Tengo un gato siberiano llamado Leia y soy fan de Star Wars

iquestQueacute consejo le dariacuteas a alguien que quiere aprender maacutes sobre la programacioacuten

Hacer software es algo increiacuteble y miacutestico Es una fusioacuten de arte y tecnologiacutea Nada te inspira maacutes que tu aplicacioacuten cuando empieza a cobrar vida Sin embargo siempre estaacute ahiacute el otro lado de la Fuerza Estar listo para instruirte inc-esantemente El desarrollo de software es una de las activi-dades que cambia maacutes raacutepido Si tienes pensado dejar de hacer software en uno o dos antildeos puede dejar de aprender ahora El conocimiento se volveraacute anticuado en un par de antildeos maacutes o menos Para estar en lo maacutes alto siempre tienes que correr Es similar a la cancioacutenrdquoRun like Hellrdquo de Pink Floyd Si estaacutes listo para vivir de esta forma seguro que tendraacutes eacutexito

ODROID MAGAZINE 33

Page 25: Estación ARCADE · gias de marketing, administración de medios sociales y producción multimedia impresa, web, vídeo y cine. Ges-tionando múltiples cuentas con agencias y productores

Elegimos ODROID GameStation Turbo (httpbitly1ASFO5O) como plataforma de software para nuestra ODROID Arcade Box que tiene integrado uinput Debes asegurarte de que el archivo de dispositivo uinput existe en el sistema operativo elegido porque algunos no tienen dispositivos uinput

$ ls devuinput

Si tu sistema operativo no tiene un archivo de disposi-tivo devuinput entonces seraacute necesario recompilar e in-stalar un nuevo kernel con la opcioacuten de configuracioacuten IN-PUT_UINPUT habilitada La paacutegina Wiki en httpbitly1YIToBI describe coacutemo compilar e instalar la imagen del kernel a partir del coacutedigo fuente

$ make menuconfig

Device Drivers

-gt Input device support

-gt Generic input layer

-gt Miscellaneous device

-gt User level driver support ltgt

Ten en cuenta que wiringPi debe instalarse antes de in-stalar gpio_keyd En la imagen GameStation de ODROID los comandos sudo deben ejecutarse como root porque la cuenta ldquoodroidrdquo no estaacute designada como usuario sudo

$ git clone httpsgithubcomhardkernelwiringPi

git

$ cd wiringPi

$ sudo build

Descarga el coacutedigo fuente gpio_keyd el cual estaacute dis-ponible en nuestro repositorio GitHub El procedimiento para compilar e instalar gpio_keyd es muy simple

$ git clone httpsgithubcombkrepogpio_keydgit

$ cd gpio_keyd

$ make

$ sudo make install

El script gpio_keyd hace referencia a etcgpio_keydconf como el predeterminado para la informacioacuten de los botones y GPIO El archivo de configuracioacuten fue modi-ficado para las 27 entradas de la ODROID Arcade Box Algunas botones ya se utilizaban en el emulador de juego de modo que tuvimos que cambiar la configuracioacuten del emulador para evitar conflictos entre los botones de en-trada GPIO y el emulador Ten en cuenta que el campo ltGPIO pingt en el archivo de configuracioacuten hace referen-

ARCADE BOX

plano del disentildeo de joypad

la oDroiD Arcade box montada

ODROID MAGAZINE 25

cia al nuacutemero wiringPi no al GPIO y al nuacutemero de pin (httpbitly2lbzPIB)

Ejemplo de configuracioacuten para las 27 entradas etcgpio_keydconf

Digital input ltKey codegt ltGPIO typegt ltGPIO pingt ltActive valuegt User 1KEY_LEFT digital 15 0KEY_RIGHT digital 1 0KEY_UP digital 4 0KEY_DOWN digital 16 0KEY_A digital 2 0KEY_S digital 3 0KEY_D digital 30 0KEY_F digital 21 0KEY_Z digital 8 0KEY_X digital 9 0KEY_C digital 7 0KEY_V digital 0 0 User 2KEY_BACKSLASH digital 12 0KEY_SLASH digital 13 0KEY_SEMICOLON digital 14 0KEY_LEFTBRACE digital 5 0KEY_Y digital 26 0KEY_U digital 27 0KEY_I digital 22 0KEY_O digital 23 0KEY_H digital 6 0KEY_J digital 10 0KEY_K digital 11 0KEY_L digital 31 0

Analog input ltKey codegt ltGPIO typegt ltADC portgt ltADC ac-tive valuegtKEY_B analog 0 0KEY_N analog 0 2045KEY_M analog 1 2045

To run gpio_keyd daemon at every startup is conve-nient for ODROID Arcade Box

etcinitdgpio_keyd binsh BEGIN INIT INFO

ARCADE BOX

Mapeo Gpio externo para los botones y Joysticks

cableado de la oDroiD Arcade box

ODROID MAGAZINE 26

Provides gpio_keyd Required-Start $all Required-Stop Default-Start 2 3 4 5 Default-Stop Short-Description Run usrbingpio_keyd if it ex-ist END INIT INFO

PATH=sbinusrsbinbinusrbin

libinitvarssh

liblsbinit-functions

do_start() if [ -x usrbingpio_keyd ] then usrbingpio_keyd -d ES=$ [ ldquo$VERBOSErdquo = no ] ampamp log_end_msg $ES return $ES fi

case ldquo$1rdquo in start) do_start restart|reload|force-reload) echo ldquoError argument lsquo$1rsquo not supportedrdquo gtamp2 exit 3 stop) killall gpio_keyd exit 0 ) echo ldquoUsage $0 start|stoprdquo gtamp2 exit 3 Esac

$ sudo chmod +x etcinitdgpio_keyd$ sudo update-rcd gpio_keyd defaults$ sudo reboot

En los comandos anteriores el script gpio_keyd se ejecuta como un demonio uti-lizando la opcioacuten ldquo-drdquo El uso de gpio_keyd se puede comprobar con la opcioacuten ldquo-hrdquo Comprue-ba de nuevo las teclas usadas por el juego o el emulador despueacutes fija la configuracioacuten del gpio_ keyd correctamente Es ahora cuando estaacutes listo para jugar y disfrutar de tus juegos con tu nueva ODROID Arcade Box

ARCADE BOX

the King of fighters 98 John vs brian

ODROID MAGAZINE 27

En este artiacuteculo analizaremos las diferentes formas que existen para ob-tener los datos del uso de la red

ConfiguracioacutenLa forma normal de analizar los datos

de traacutefico de la red es mediante el uso de datos a traveacutes de las aplicaciones de configuracioacuten del sistema tal y como se muestra en la figura 1

El uso de datos muestra la cantidad total de traacutefico de datos entrante y sa-liente que ha sido utilizada por una apli-cacioacuten Si seleccionas la aplicacioacuten veraacute una pantalla como la que aparece en la Figura 2 que muestra informacioacuten detal-lada sobre el uso de la aplicacioacuten tanto en primer plano como de fondo

La informacioacuten que se muestra den-tro de la aplicacioacuten de Configuracioacuten se almacena en data systemnetstats que requiere acceso root Al eliminar todo lo que hay dentro de esta carpeta se resta-

Como desarrolladores queremos que nuestras aplicaciones sean eficientes y a menudo nos gus-

tariacutea saber cuaacutento ancho de banda de red estaacute utilizando nuestra aplicacioacuten Esto es muy uacutetil por varias razones

bull Para monitorizar y asegurarnos de que la aplicacioacuten es realmente la nuestra y no una aplicacioacuten que ha sido pirateada y publi-cada con diferentes nombres en Play Store

bull Para asegurarnos de que no es-tamos cogiendo ancho de banda innecesario del plan de datos del usuario

bull Para comprobar que el disposi-tivo que estamos usando no estaacute accediendo a Internet sin nuestro consentimiento

blecen las estadiacutesticas de red mostradas en esta aplicacioacuten

Estadiacutesticas de la redLa aplicacioacuten de configuracioacuten nos

puede dar una informacioacuten general so-bre las estadiacutesticas de la red de datos que es un buen comienzo pero a veces necesitamos un anaacutelisis maacutes detallado que puede hacerse a traveacutes del coman-do dumpsys Android cuenta con una poderosa herramienta llamada dumpsys que nos permite obtener una instan-taacutenea o volcado del sistema que pu-ede incluir informacioacuten sobre la red la memoria y otros componentes Lee la documentacioacuten de Android en httpbitly2kK9dep para obtener maacutes infor-macioacuten del sistema Para conseguir maacutes informacioacuten relacionada con la red nos interesa el comando

$ dumpsys netstats detail

La Figura 3 muestra un pantallazo de lo que puedes ver desde una tablet Nexus 7 que ejecuta Lollipop 511

Hay algunas cuestiones importantes para entender las estadiacutesticas

bull Las estadiacutesticas UID muestran el desglose de las aplicaciones de primer plano y de fondo

bull Uid muestra el ID de usuario de la aplicacioacuten que se puede utili-zar para relacionar eacutesta con la in-

DESARROLLO AnDROID AnALIzAnDO EL uSO DE RED DE LAS APLICACIOnESpor Nanik tolaram

DESARROLLO ANDROID

figura 1 - Uso de datos en la configuracioacuten

figura 2 - Desglose del uso de datos de la app

ODROID MAGAZINE 28

$ dumpsys package detail

Este comando te proporcionaraacute una larga lista de informacioacuten sobre los pa-quetes que estaacuten instalados en tu dis-positivo Para las estadiacutesticas de red nos interesa la seccioacuten que se muestra en la Figura 5

La seccioacuten resaltada muestra el userId que se relaciona con el uid que se mues-tra en las estadiacutesticas de red Al relacio-nar este nuacutemero sabemos el nombre del paquete de la aplicacioacuten sobre el que es-tamos leyendo las estadiacutesticas de red

Aplicacioacuten de ejemplo

La aplicacioacuten de ejemplo de este artiacute-culo se puede descargar desde httpbitly2m8WenA que muestra coacutemo etiqu-etar la conexioacuten de red desde distintas

secciones de la aplicacioacuten lo cual puede ayudar a analizar el volumen de traacutefico de datos de la aplicacioacuten La Figura 6 muestra un ejemplo de coacutemo lo vemos si utilizamos Android Device Monitor (dentro de Studio diriacutegete a Tools -gt Android -gt Android Device Monitor)

Tal y como se puede ver en el graacutefico la simple aplicacioacuten tiene 3 conexiones dife-rentes y cada una de ellas estaacute accediendo a un sitio web diferente Al etiquetarlas con

formacioacuten del paquete (que ver-emos en la seccioacuten de detalles del paquete dumpsys) con el objeto de conocer queacute aplicacioacuten utiliza estas estadiacutesticas de red

bull Las etiquetas son uacutetiles si de-sea ver la cantidad de datos que utiliza cada conexioacuten de tu apli-cacioacuten Puedes ver un ejemplo de esto en la Figura 4 que muestra que el uid 10007 tiene las siguien-tes etiquetas 0x30000401 0x30003201 0x30002804 0x10000401 y 0x30000407 Es-tas etiquetas ayudan al desarrol-lador a saber cuaacutentos datos uti-liza cada parte de la aplicacioacuten Estas estadiacutesticas de red en par-ticular estaacuten vinculada al paquete Google Framework que forma parte de Google Play Store

En el siguiente apartado veremos coacutemo escribir una aplicacioacuten etiquetando el hilo que hace la conexioacuten de red para determi-nar la cantidad de datos que se utilizan

Estadiacutesticas de paquetes

En la seccioacuten anterior analizamos el uid que aparece al ejecutar el comando dumpsys netstats Ahora necesitamos sa-ber queacute uid corresponde a la aplicacioacuten en el dispositivo y esto se hace mediante el siguiente comando

DESARROLLO ANDROID

figura 3 ndash estadiacutesticas de red con Dumpsys

figura 4 - estadiacutesticas de etiquetas UiD

figura 5 - Detalles del paquete dumpsys

figura 6 - etiquetas de red

coacutedigos diferentes podemos ver la cantidad de traacutefico que consume cada conexioacuten y esto nos ayudaraacute a ver si nuestra aplicacioacuten utiliza el ancho de banda de un modo eficiente

El coacutedigo del siguiente fragmento muestra el uso de la API TrafficStats interna Esta etiqueta API muestra el subproceso que utiliza actualmente un socket con un identificador y todo el traacute-fico que pasa por la misma conexioacuten se grabaraacute junto Asiacute es como la aplicacioacuten es capaz de agrupar las 3 conexiones diferentes Internamente Android utili-za el moacutedulo xt_qtaguid del kernel para realizar este tipo de etiquetado Tienes disponible maacutes informacioacuten en httpbitly2kU8KXB

public void getUsingNormalURLC

onnection(String urlText int

threadTag)

throws IOException

URL url = null

TrafficStats

setThreadStatsTag(threadTag)

HttpURLConnection urlConnec-

tion = getConnection(url)

try

finally

TrafficStatsclearThread-

StatsTag()

ODROID MAGAZINE 29

Disgustado te subes a tu 4x4 de dominacioacuten del mun-do un vehiacuteculo que desde fuera parece maacutes bien un viejo camioacuten de granja pero por dentro se parece maacutes

al sistema de control de un transbordador espacial porque el conductor del restaurante oriental que realiza las entrega a do-micilio estaacute enfermo Ahora tienes que ir a recoger tu propia comida ldquoQueacute rudimentariordquo piensas cuando sales de tu garaje secreto Justamente cuando vas a parar el vehiacuteculo en un stop oyes un fuerte ruido Sales y te diriges raacutepidamente a la parte posterior del 4x4 donde observas un cubo de basura Te tiras de los pelos y piensas ldquoiexclEsos basureros Neanderthales dejaron otra vez el cubo en mediordquo Ahora te toca recoger los restos de tu cena y la basura de otros

Conforme te vas alejando para hacer tus recados empiezas a pensar en coacutemo evitar este inconveniente en el futuro Varias ideas te vienen a la mente

Un sistema lidar para escanear en 3D el entorno en tiempo real y alarmas sonoras cuando sea necesarioUn brazo ciberneacutetico colocado en la parte posterior del 4x4 que procese video para detectar objetos agarrarlos y moverlosUna simple camara trasera

Empiezas a considerar la viabilidad de cada una

Muy bueno pero demasiado complicado y costosoAuacuten mejor y un proyecto propio de un cientiacutefico loco pero demasi-ado complicado y costosoya tengo dos iexclpero estaba demasiado preocupado en mis pensa-mientos para prestarles atencioacuten

Lo que necesitas es algo simple sin complicaciones y barato que haga sonar una alarma para alertarte incluso cuando estar absorto en tus pensamientos ldquoAhardquo Recuerdas haber visto un nuevo producto en ameriDroid que puede hacer precisamente esto Se trata de un microcontrolador conectado al USB que soporta hasta 6 sensores ultrasoacutenicos con simples comandos en serie (httpbitly2l26ptV) ldquoiexclPerfectordquo Piensas

Regresas a tu laboratorio subterraacuteneo con el pollo Kung Pao en la mano te apresurar a encender tus monitores entras en el sitio web ameriDroid y pides un kit ldquoUSB Ultrasonic Ranging Sensorrdquo con 6 sensores y carcasas

Vas sintiendo una sensacioacuten de alivio a medida que regresas a los 12 proyectos en lo que ya estabas trabajando a la espera de que pasen un par de diacuteas hasta que llegue tu nuevo pedido Mientras te comes tu Kung Pao dibujas un diagrama de coacutemo quieres colocar los sensores en la parte posterior de tu vehiacuteculo

Un par de diacuteas maacutes tarde el kit llega Inmediatamente em-piezas a montar el kit y los sensores en la parte posterior de tu 4x4 teniendo cuidado de usar sellador de silicona para pro-teger los sensores de la lluvia aguanieve y nieve que puedas encontrar durante tus aventuras para dominar el mundo

A continuacioacuten consultas las instrucciones proporcionadas por ameriDroid con el kit sobre coacutemo controlar y leer los sen-sores desde tu fiel ODROID-C2 y VU7 que montaste en el salpicadero para este propoacutesito

Conectando el cable USBEl cable USB suministrado debe conectarse al microcon-

trolador (la pequentildea placa de circuito con filas de pines que sobresalen) El microcontrolador tiene una fila de 4 o 6 pines

DETECTAR LA PRESEnCIACROnICAS DE un CIEnTIfICO LOCOpor bo lechnowsky

SENSOR ULTRASONICO

ODROID MAGAZINE 30

en un extremo Si tiene 6 pines ceacutentrate en los 4 pines centrales y sigue estas instrucciones

Negro - conectar a GNDrojo - conectar a VccVerde - conectar a rxi

blanco - conectar a txD

Conectando los sensoresultrasoacutenicos

En cada sensor ultrasoacutenico hay cuatro pines marcados Vcc Trig Echo Gnd Para el primer sensor ultrasoacutenico conecta el pin 2 del microcontrolador al pin ldquoTrigrdquo del sensor ultrasoacutenico Conecta el pin 3 del microcontrolador al pin ldquoEchordquo del sensor Conecte el pin ldquoVccrdquo del sensor a DC 5V (el pin ldquoVCCrdquo del microcontrolador suministra 5V) y el pin ldquoGndrdquo del sensor a una conexioacuten a tierra como por ejemplo los pines ldquoGNDrdquo del microcontrolador

Si conectas un segundo sensor de ultrasonidos conecta ldquoTrigrdquo al pin 4 y ldquoEchordquo al pin 5 Continuacutea conectando los siguientes pines a los sensores hasta los pines 12 y 13 si al final optas por conectar los seis sensores ultrasonidos

Conexioacuten del softwareUtilizas un programa terminal como PuTTY Screen o tu

lenguaje de script o programacioacuten favorito para conectarte al puerto serie que aparece cuando te conectas el sensor ultrasoacuteni-co Esto variaraacute en funcioacuten del sistema operativo que utilizas para conectarte al microcontrolador En Windows consultar el ldquoAdministrador de dispositivosrdquo es la forma maacutes comuacuten de averiguarlo En Linux ldquodmesgrdquo o ldquolsusbrdquo son las formas de de-tectar a queacute puerto estaacute conectado Deberiacuteas ver algo denomi-nado ldquoPL2303rdquo que es la conexioacuten del microcontrolador Si recibes informacioacuten basura en tu terminal cuando te conectes aseguacuterate de que los ajustes en serie son 9600 baudios 8 bits ninguno (paridad) y 1 bit de parada Aquiacute tienes una lista de los comandos que puede aceptar el microcontrolador

bull debug on Activa la retroalimentacioacuten detallada Estaacute deshabilitada por defecto nos proporcionaraacute aclaracio-nes sobre los errores de entrada

bull debug off desactiva la retroalimentacioacuten detalladabull init x y activa un HC-SR04 en los pines especificados

X es trigger Y es echo Estos deben ser pines digitales El dispositivo 0 estaacute preestablecido en los pines 2 y 3 de modo que no es necesario especificar estos pines La seleccioacuten de pines no vaacutelidos devolveraacute un signo de ex-clamacioacuten ()

bull ping enviacutea una sola lectura del HCSR04 previamente utilizado Si no se ha utilizado todaviacutea se usaraacute el dis-positivo 0 Si al comando le sigue un espacio y un nuacutemero entre 0-100 (exclusivo) se realizaraacute ese nuacutemero de lecturas emitiendo primero el promedio de esas lec-

SENSOR ULTRASONICO

turas despueacutes el nuacutemero de lecturas fallidas (que no cuentan para el promedio) y luego los valores miacutenimo y maacuteximo de lectura separados por espacios En cual-quier caso si una sentildeal se desconecta automaacuteticamente devolveraacute -1

bull start Hace ping constantemente a todos los dispositivos conectados en secuencia Debido a que los dispositivos se utilizan uno a uno el flujo de datos de este comando seraacute maacutes raacutepido si los dispositivos miden distancias cor-tas Si este comando le sigue un espacio y un nuacutemero mayor que 0 la placa esperaraacute estos milisegundos entre la lectura del uacuteltimo dispositivo y la lectura del primer dispositivo El resultado de este comando seraacute la lectura de cada dispositivo (con un uacutenico espacio despueacutes de cada uno) y una vuelta tras el uacuteltimo dispositivo

bull stop detiene la operacioacuten ldquostartrdquo soacutelo es efectivo tras haber iniciado ldquostartrdquo

bull mode emite el modo de medicioacuten del flujo M para meacutetrico (miliacutemetros) I para Imperial (deacutecimas de pul-gada) o R para Raw (la longitud de pulso en microse-gundos devuelta por el HC-SR04) El valor predeter-minado es M

bull timeout emite el tiempo de espera actual para lecturas de la sentildeal El tiempo de espera es la mayor cantidad de microsegundos que la placa esperaraacute antes de declarar que el HC-SR04 ha realizado una mala lectura lo cual no es necesariamente lo mismo que el pulso maacutes largo que la placa aceptaraacute del HC-SR04 Cuando la placa mide el pulso del HC-SR04 primero espera a que el HC-SR04 comience a enviar un pulso Este tiempo cuenta para el tiempo de espera Cuando este comando le sigue un espacio y un nuacutemero el tiempo de espera se ajusta a ese nuacutemero El valor predeterminado es 1 segundo (1000000 microsegundos)

bull ver emite informacioacuten de versioacuten y creacuteditos

Si cualquier comando (o ninguacuten comando) estaacute precedido por un uacutenico diacutegito de 0-5 (inclusive) seguido de un espacio el dispositivo que corresponde a ese diacutegito se seleccionaraacute para ser usado con el siguiente comando ldquopingrdquo Cada vez que la placa esteacute lista para un comando emitiraacute ldquogtrdquo para la serie La uacutenica excepcioacuten estaacute tras el comando ldquostartrdquo que no solicitaraacute entrada hasta que sea reconocido ldquostoprdquo

ODROID MAGAZINE 31

iquestCoacutemo empezaste con los ordenadoresCuando empeceacute mi negocio tuve que decidir queacute plat-

aforma de hardware iba a utilizar para la recogida de datos del traacutefico Simplemente para que no pienses mal de miacute mis caacutemaras de traacutefico no son las que se usan para multar por exceso de velocidad o algo asiacute Mi sistema estaba desti-nado suavizar el flujo de traacutefico fijando los controles oacutepti-mos de las sentildeales de traacutefico Anteriormente usaba un PC industrial para ejecutar mi software de reconocimiento de imaacutegenes Ahora uso la familia de dispositivos ODROID para esta cuestioacuten

iquestQueacute te atrajo de la plataforma ODROID En 2012 useacute Google para buscar una plataforma que

fuera muy compacta y al mismo tiempo potente para que cubriera mis necesidades que resultoacute ser la placa

Por favor haacuteblanos un poco sobre tiSoy ingeniero de electroacutenica y software en Rusia desde

hace 47 antildeos Naciacute en Siberia y tras terminar la escuela me mudeacute a Moscuacute para estudiar en la universidad Ser estudi-ante en el Instituto de Aviacioacuten de Moscuacute (MAI) fue una experiencia increiacuteble probablemente la mejor de mi vida A principios de los 90 llegoacute a Rusia la era de los microordena-dores soliacutea jugar a un juego de saltos en una CPU z80 y el i486 Tras finalizar mis estudios universitarios y de posgrado me convertiacute en ingeniero Trabajeacute en unos cuantos puestos de trabajo para diferentes empresas y finalmente decidiacute em-prender mi propio negocio En 2006 puse en marcha una iniciativa para crear sistemas de recuento del traacutefico de au-tomoacuteviles Estoy casado y tengo una hija de 21 antildeos llamada Lena que trabaja como enfermera Mi esposa Nadezhda es disentildeadora de vestuario de produccioacuten pero ahora trabaja como disentildeadora web Ella es aficionada a la fotografiacutea digi-tal y le encanta su caacutemara reacuteflex digital

COnOCIEnDO un ODROIDIAnvIACHESLAv ALEKSEEveditado por rob roy (robroy)

CONOCIENDO UN ODROIDIAN

Viacheslav disfruta tocando la guitarra y escuchando muacutesica

1995 en el campus MAi probando uno de los primeros equipos Vr comerciales del mundo que funcionaba a 640x480 a 30fps Utiliz-aba un sensor magneacutetico en la nuca para la posicioacuten de la cabeza la mejor broma que se podiacutea gastar a alguien era colocar un imaacuten cerca de la espalda y sacudirlo iexcllos gritos estaban garantizados cuando el mundo en 3D daba vueltas sin cesar

ODROID MAGAZINE 32

ODROID-X2 Con sus cuatro nuacutecleos funcionando a 17 GHz calculaba con facilidad los algoritmos de reconteo del traacutefico de automoacuteviles Maacutes tarde cambieacute al U3 y el XU4

iquestCuaacutel es tu ODROID favorito y por queacuteDe momento mi favorito es el XU4 Mi sistema estaacute

basado en el tratamiento de fotogramas de video en tiempo real por lo que el bus USB 30 del XU4 es bastante bueno para una caacutemara con una interfaz de captura de viacutedeo Para mi sistema es muy importante tener una buena conexioacuten entre la caacutemara de viacutedeo y la CPU Probablemente tendreacute que echar un vistazo a las interfaces de nivel inferior como MIPI CSI-2 que por desgracia estaacuten ausente en el XU4 Recientemente he estado aprendiendo como usar la caacute-mara oCam GS BW La caacutemara es buena en siacute misma pero para un uso industrial al aire libre tengo que implementar un software de control de exposicioacuten automaacutetica y posible-mente de control de apertura de la lente que todaviacutea estaacute en estudio

MEET AN ODROIDIAN

Una vieja joya el mini ordenador Nixdorf

An old gem the Nixdorf mini computer

CONOCIENDO UN ODROIDIAN

iquestQueacute aficiones e intereses tienes aparte de los ordenadoresDisfruto conduciendo y leyendo sobre coches y viendo

los campeonatos de carreras de F1 Tambieacuten me gusta via-jar pescar escuchar muacutesica y tocar la guitarra Tengo un gato siberiano llamado Leia y soy fan de Star Wars

iquestQueacute consejo le dariacuteas a alguien que quiere aprender maacutes sobre la programacioacuten

Hacer software es algo increiacuteble y miacutestico Es una fusioacuten de arte y tecnologiacutea Nada te inspira maacutes que tu aplicacioacuten cuando empieza a cobrar vida Sin embargo siempre estaacute ahiacute el otro lado de la Fuerza Estar listo para instruirte inc-esantemente El desarrollo de software es una de las activi-dades que cambia maacutes raacutepido Si tienes pensado dejar de hacer software en uno o dos antildeos puede dejar de aprender ahora El conocimiento se volveraacute anticuado en un par de antildeos maacutes o menos Para estar en lo maacutes alto siempre tienes que correr Es similar a la cancioacutenrdquoRun like Hellrdquo de Pink Floyd Si estaacutes listo para vivir de esta forma seguro que tendraacutes eacutexito

ODROID MAGAZINE 33

Page 26: Estación ARCADE · gias de marketing, administración de medios sociales y producción multimedia impresa, web, vídeo y cine. Ges-tionando múltiples cuentas con agencias y productores

cia al nuacutemero wiringPi no al GPIO y al nuacutemero de pin (httpbitly2lbzPIB)

Ejemplo de configuracioacuten para las 27 entradas etcgpio_keydconf

Digital input ltKey codegt ltGPIO typegt ltGPIO pingt ltActive valuegt User 1KEY_LEFT digital 15 0KEY_RIGHT digital 1 0KEY_UP digital 4 0KEY_DOWN digital 16 0KEY_A digital 2 0KEY_S digital 3 0KEY_D digital 30 0KEY_F digital 21 0KEY_Z digital 8 0KEY_X digital 9 0KEY_C digital 7 0KEY_V digital 0 0 User 2KEY_BACKSLASH digital 12 0KEY_SLASH digital 13 0KEY_SEMICOLON digital 14 0KEY_LEFTBRACE digital 5 0KEY_Y digital 26 0KEY_U digital 27 0KEY_I digital 22 0KEY_O digital 23 0KEY_H digital 6 0KEY_J digital 10 0KEY_K digital 11 0KEY_L digital 31 0

Analog input ltKey codegt ltGPIO typegt ltADC portgt ltADC ac-tive valuegtKEY_B analog 0 0KEY_N analog 0 2045KEY_M analog 1 2045

To run gpio_keyd daemon at every startup is conve-nient for ODROID Arcade Box

etcinitdgpio_keyd binsh BEGIN INIT INFO

ARCADE BOX

Mapeo Gpio externo para los botones y Joysticks

cableado de la oDroiD Arcade box

ODROID MAGAZINE 26

Provides gpio_keyd Required-Start $all Required-Stop Default-Start 2 3 4 5 Default-Stop Short-Description Run usrbingpio_keyd if it ex-ist END INIT INFO

PATH=sbinusrsbinbinusrbin

libinitvarssh

liblsbinit-functions

do_start() if [ -x usrbingpio_keyd ] then usrbingpio_keyd -d ES=$ [ ldquo$VERBOSErdquo = no ] ampamp log_end_msg $ES return $ES fi

case ldquo$1rdquo in start) do_start restart|reload|force-reload) echo ldquoError argument lsquo$1rsquo not supportedrdquo gtamp2 exit 3 stop) killall gpio_keyd exit 0 ) echo ldquoUsage $0 start|stoprdquo gtamp2 exit 3 Esac

$ sudo chmod +x etcinitdgpio_keyd$ sudo update-rcd gpio_keyd defaults$ sudo reboot

En los comandos anteriores el script gpio_keyd se ejecuta como un demonio uti-lizando la opcioacuten ldquo-drdquo El uso de gpio_keyd se puede comprobar con la opcioacuten ldquo-hrdquo Comprue-ba de nuevo las teclas usadas por el juego o el emulador despueacutes fija la configuracioacuten del gpio_ keyd correctamente Es ahora cuando estaacutes listo para jugar y disfrutar de tus juegos con tu nueva ODROID Arcade Box

ARCADE BOX

the King of fighters 98 John vs brian

ODROID MAGAZINE 27

En este artiacuteculo analizaremos las diferentes formas que existen para ob-tener los datos del uso de la red

ConfiguracioacutenLa forma normal de analizar los datos

de traacutefico de la red es mediante el uso de datos a traveacutes de las aplicaciones de configuracioacuten del sistema tal y como se muestra en la figura 1

El uso de datos muestra la cantidad total de traacutefico de datos entrante y sa-liente que ha sido utilizada por una apli-cacioacuten Si seleccionas la aplicacioacuten veraacute una pantalla como la que aparece en la Figura 2 que muestra informacioacuten detal-lada sobre el uso de la aplicacioacuten tanto en primer plano como de fondo

La informacioacuten que se muestra den-tro de la aplicacioacuten de Configuracioacuten se almacena en data systemnetstats que requiere acceso root Al eliminar todo lo que hay dentro de esta carpeta se resta-

Como desarrolladores queremos que nuestras aplicaciones sean eficientes y a menudo nos gus-

tariacutea saber cuaacutento ancho de banda de red estaacute utilizando nuestra aplicacioacuten Esto es muy uacutetil por varias razones

bull Para monitorizar y asegurarnos de que la aplicacioacuten es realmente la nuestra y no una aplicacioacuten que ha sido pirateada y publi-cada con diferentes nombres en Play Store

bull Para asegurarnos de que no es-tamos cogiendo ancho de banda innecesario del plan de datos del usuario

bull Para comprobar que el disposi-tivo que estamos usando no estaacute accediendo a Internet sin nuestro consentimiento

blecen las estadiacutesticas de red mostradas en esta aplicacioacuten

Estadiacutesticas de la redLa aplicacioacuten de configuracioacuten nos

puede dar una informacioacuten general so-bre las estadiacutesticas de la red de datos que es un buen comienzo pero a veces necesitamos un anaacutelisis maacutes detallado que puede hacerse a traveacutes del coman-do dumpsys Android cuenta con una poderosa herramienta llamada dumpsys que nos permite obtener una instan-taacutenea o volcado del sistema que pu-ede incluir informacioacuten sobre la red la memoria y otros componentes Lee la documentacioacuten de Android en httpbitly2kK9dep para obtener maacutes infor-macioacuten del sistema Para conseguir maacutes informacioacuten relacionada con la red nos interesa el comando

$ dumpsys netstats detail

La Figura 3 muestra un pantallazo de lo que puedes ver desde una tablet Nexus 7 que ejecuta Lollipop 511

Hay algunas cuestiones importantes para entender las estadiacutesticas

bull Las estadiacutesticas UID muestran el desglose de las aplicaciones de primer plano y de fondo

bull Uid muestra el ID de usuario de la aplicacioacuten que se puede utili-zar para relacionar eacutesta con la in-

DESARROLLO AnDROID AnALIzAnDO EL uSO DE RED DE LAS APLICACIOnESpor Nanik tolaram

DESARROLLO ANDROID

figura 1 - Uso de datos en la configuracioacuten

figura 2 - Desglose del uso de datos de la app

ODROID MAGAZINE 28

$ dumpsys package detail

Este comando te proporcionaraacute una larga lista de informacioacuten sobre los pa-quetes que estaacuten instalados en tu dis-positivo Para las estadiacutesticas de red nos interesa la seccioacuten que se muestra en la Figura 5

La seccioacuten resaltada muestra el userId que se relaciona con el uid que se mues-tra en las estadiacutesticas de red Al relacio-nar este nuacutemero sabemos el nombre del paquete de la aplicacioacuten sobre el que es-tamos leyendo las estadiacutesticas de red

Aplicacioacuten de ejemplo

La aplicacioacuten de ejemplo de este artiacute-culo se puede descargar desde httpbitly2m8WenA que muestra coacutemo etiqu-etar la conexioacuten de red desde distintas

secciones de la aplicacioacuten lo cual puede ayudar a analizar el volumen de traacutefico de datos de la aplicacioacuten La Figura 6 muestra un ejemplo de coacutemo lo vemos si utilizamos Android Device Monitor (dentro de Studio diriacutegete a Tools -gt Android -gt Android Device Monitor)

Tal y como se puede ver en el graacutefico la simple aplicacioacuten tiene 3 conexiones dife-rentes y cada una de ellas estaacute accediendo a un sitio web diferente Al etiquetarlas con

formacioacuten del paquete (que ver-emos en la seccioacuten de detalles del paquete dumpsys) con el objeto de conocer queacute aplicacioacuten utiliza estas estadiacutesticas de red

bull Las etiquetas son uacutetiles si de-sea ver la cantidad de datos que utiliza cada conexioacuten de tu apli-cacioacuten Puedes ver un ejemplo de esto en la Figura 4 que muestra que el uid 10007 tiene las siguien-tes etiquetas 0x30000401 0x30003201 0x30002804 0x10000401 y 0x30000407 Es-tas etiquetas ayudan al desarrol-lador a saber cuaacutentos datos uti-liza cada parte de la aplicacioacuten Estas estadiacutesticas de red en par-ticular estaacuten vinculada al paquete Google Framework que forma parte de Google Play Store

En el siguiente apartado veremos coacutemo escribir una aplicacioacuten etiquetando el hilo que hace la conexioacuten de red para determi-nar la cantidad de datos que se utilizan

Estadiacutesticas de paquetes

En la seccioacuten anterior analizamos el uid que aparece al ejecutar el comando dumpsys netstats Ahora necesitamos sa-ber queacute uid corresponde a la aplicacioacuten en el dispositivo y esto se hace mediante el siguiente comando

DESARROLLO ANDROID

figura 3 ndash estadiacutesticas de red con Dumpsys

figura 4 - estadiacutesticas de etiquetas UiD

figura 5 - Detalles del paquete dumpsys

figura 6 - etiquetas de red

coacutedigos diferentes podemos ver la cantidad de traacutefico que consume cada conexioacuten y esto nos ayudaraacute a ver si nuestra aplicacioacuten utiliza el ancho de banda de un modo eficiente

El coacutedigo del siguiente fragmento muestra el uso de la API TrafficStats interna Esta etiqueta API muestra el subproceso que utiliza actualmente un socket con un identificador y todo el traacute-fico que pasa por la misma conexioacuten se grabaraacute junto Asiacute es como la aplicacioacuten es capaz de agrupar las 3 conexiones diferentes Internamente Android utili-za el moacutedulo xt_qtaguid del kernel para realizar este tipo de etiquetado Tienes disponible maacutes informacioacuten en httpbitly2kU8KXB

public void getUsingNormalURLC

onnection(String urlText int

threadTag)

throws IOException

URL url = null

TrafficStats

setThreadStatsTag(threadTag)

HttpURLConnection urlConnec-

tion = getConnection(url)

try

finally

TrafficStatsclearThread-

StatsTag()

ODROID MAGAZINE 29

Disgustado te subes a tu 4x4 de dominacioacuten del mun-do un vehiacuteculo que desde fuera parece maacutes bien un viejo camioacuten de granja pero por dentro se parece maacutes

al sistema de control de un transbordador espacial porque el conductor del restaurante oriental que realiza las entrega a do-micilio estaacute enfermo Ahora tienes que ir a recoger tu propia comida ldquoQueacute rudimentariordquo piensas cuando sales de tu garaje secreto Justamente cuando vas a parar el vehiacuteculo en un stop oyes un fuerte ruido Sales y te diriges raacutepidamente a la parte posterior del 4x4 donde observas un cubo de basura Te tiras de los pelos y piensas ldquoiexclEsos basureros Neanderthales dejaron otra vez el cubo en mediordquo Ahora te toca recoger los restos de tu cena y la basura de otros

Conforme te vas alejando para hacer tus recados empiezas a pensar en coacutemo evitar este inconveniente en el futuro Varias ideas te vienen a la mente

Un sistema lidar para escanear en 3D el entorno en tiempo real y alarmas sonoras cuando sea necesarioUn brazo ciberneacutetico colocado en la parte posterior del 4x4 que procese video para detectar objetos agarrarlos y moverlosUna simple camara trasera

Empiezas a considerar la viabilidad de cada una

Muy bueno pero demasiado complicado y costosoAuacuten mejor y un proyecto propio de un cientiacutefico loco pero demasi-ado complicado y costosoya tengo dos iexclpero estaba demasiado preocupado en mis pensa-mientos para prestarles atencioacuten

Lo que necesitas es algo simple sin complicaciones y barato que haga sonar una alarma para alertarte incluso cuando estar absorto en tus pensamientos ldquoAhardquo Recuerdas haber visto un nuevo producto en ameriDroid que puede hacer precisamente esto Se trata de un microcontrolador conectado al USB que soporta hasta 6 sensores ultrasoacutenicos con simples comandos en serie (httpbitly2l26ptV) ldquoiexclPerfectordquo Piensas

Regresas a tu laboratorio subterraacuteneo con el pollo Kung Pao en la mano te apresurar a encender tus monitores entras en el sitio web ameriDroid y pides un kit ldquoUSB Ultrasonic Ranging Sensorrdquo con 6 sensores y carcasas

Vas sintiendo una sensacioacuten de alivio a medida que regresas a los 12 proyectos en lo que ya estabas trabajando a la espera de que pasen un par de diacuteas hasta que llegue tu nuevo pedido Mientras te comes tu Kung Pao dibujas un diagrama de coacutemo quieres colocar los sensores en la parte posterior de tu vehiacuteculo

Un par de diacuteas maacutes tarde el kit llega Inmediatamente em-piezas a montar el kit y los sensores en la parte posterior de tu 4x4 teniendo cuidado de usar sellador de silicona para pro-teger los sensores de la lluvia aguanieve y nieve que puedas encontrar durante tus aventuras para dominar el mundo

A continuacioacuten consultas las instrucciones proporcionadas por ameriDroid con el kit sobre coacutemo controlar y leer los sen-sores desde tu fiel ODROID-C2 y VU7 que montaste en el salpicadero para este propoacutesito

Conectando el cable USBEl cable USB suministrado debe conectarse al microcon-

trolador (la pequentildea placa de circuito con filas de pines que sobresalen) El microcontrolador tiene una fila de 4 o 6 pines

DETECTAR LA PRESEnCIACROnICAS DE un CIEnTIfICO LOCOpor bo lechnowsky

SENSOR ULTRASONICO

ODROID MAGAZINE 30

en un extremo Si tiene 6 pines ceacutentrate en los 4 pines centrales y sigue estas instrucciones

Negro - conectar a GNDrojo - conectar a VccVerde - conectar a rxi

blanco - conectar a txD

Conectando los sensoresultrasoacutenicos

En cada sensor ultrasoacutenico hay cuatro pines marcados Vcc Trig Echo Gnd Para el primer sensor ultrasoacutenico conecta el pin 2 del microcontrolador al pin ldquoTrigrdquo del sensor ultrasoacutenico Conecta el pin 3 del microcontrolador al pin ldquoEchordquo del sensor Conecte el pin ldquoVccrdquo del sensor a DC 5V (el pin ldquoVCCrdquo del microcontrolador suministra 5V) y el pin ldquoGndrdquo del sensor a una conexioacuten a tierra como por ejemplo los pines ldquoGNDrdquo del microcontrolador

Si conectas un segundo sensor de ultrasonidos conecta ldquoTrigrdquo al pin 4 y ldquoEchordquo al pin 5 Continuacutea conectando los siguientes pines a los sensores hasta los pines 12 y 13 si al final optas por conectar los seis sensores ultrasonidos

Conexioacuten del softwareUtilizas un programa terminal como PuTTY Screen o tu

lenguaje de script o programacioacuten favorito para conectarte al puerto serie que aparece cuando te conectas el sensor ultrasoacuteni-co Esto variaraacute en funcioacuten del sistema operativo que utilizas para conectarte al microcontrolador En Windows consultar el ldquoAdministrador de dispositivosrdquo es la forma maacutes comuacuten de averiguarlo En Linux ldquodmesgrdquo o ldquolsusbrdquo son las formas de de-tectar a queacute puerto estaacute conectado Deberiacuteas ver algo denomi-nado ldquoPL2303rdquo que es la conexioacuten del microcontrolador Si recibes informacioacuten basura en tu terminal cuando te conectes aseguacuterate de que los ajustes en serie son 9600 baudios 8 bits ninguno (paridad) y 1 bit de parada Aquiacute tienes una lista de los comandos que puede aceptar el microcontrolador

bull debug on Activa la retroalimentacioacuten detallada Estaacute deshabilitada por defecto nos proporcionaraacute aclaracio-nes sobre los errores de entrada

bull debug off desactiva la retroalimentacioacuten detalladabull init x y activa un HC-SR04 en los pines especificados

X es trigger Y es echo Estos deben ser pines digitales El dispositivo 0 estaacute preestablecido en los pines 2 y 3 de modo que no es necesario especificar estos pines La seleccioacuten de pines no vaacutelidos devolveraacute un signo de ex-clamacioacuten ()

bull ping enviacutea una sola lectura del HCSR04 previamente utilizado Si no se ha utilizado todaviacutea se usaraacute el dis-positivo 0 Si al comando le sigue un espacio y un nuacutemero entre 0-100 (exclusivo) se realizaraacute ese nuacutemero de lecturas emitiendo primero el promedio de esas lec-

SENSOR ULTRASONICO

turas despueacutes el nuacutemero de lecturas fallidas (que no cuentan para el promedio) y luego los valores miacutenimo y maacuteximo de lectura separados por espacios En cual-quier caso si una sentildeal se desconecta automaacuteticamente devolveraacute -1

bull start Hace ping constantemente a todos los dispositivos conectados en secuencia Debido a que los dispositivos se utilizan uno a uno el flujo de datos de este comando seraacute maacutes raacutepido si los dispositivos miden distancias cor-tas Si este comando le sigue un espacio y un nuacutemero mayor que 0 la placa esperaraacute estos milisegundos entre la lectura del uacuteltimo dispositivo y la lectura del primer dispositivo El resultado de este comando seraacute la lectura de cada dispositivo (con un uacutenico espacio despueacutes de cada uno) y una vuelta tras el uacuteltimo dispositivo

bull stop detiene la operacioacuten ldquostartrdquo soacutelo es efectivo tras haber iniciado ldquostartrdquo

bull mode emite el modo de medicioacuten del flujo M para meacutetrico (miliacutemetros) I para Imperial (deacutecimas de pul-gada) o R para Raw (la longitud de pulso en microse-gundos devuelta por el HC-SR04) El valor predeter-minado es M

bull timeout emite el tiempo de espera actual para lecturas de la sentildeal El tiempo de espera es la mayor cantidad de microsegundos que la placa esperaraacute antes de declarar que el HC-SR04 ha realizado una mala lectura lo cual no es necesariamente lo mismo que el pulso maacutes largo que la placa aceptaraacute del HC-SR04 Cuando la placa mide el pulso del HC-SR04 primero espera a que el HC-SR04 comience a enviar un pulso Este tiempo cuenta para el tiempo de espera Cuando este comando le sigue un espacio y un nuacutemero el tiempo de espera se ajusta a ese nuacutemero El valor predeterminado es 1 segundo (1000000 microsegundos)

bull ver emite informacioacuten de versioacuten y creacuteditos

Si cualquier comando (o ninguacuten comando) estaacute precedido por un uacutenico diacutegito de 0-5 (inclusive) seguido de un espacio el dispositivo que corresponde a ese diacutegito se seleccionaraacute para ser usado con el siguiente comando ldquopingrdquo Cada vez que la placa esteacute lista para un comando emitiraacute ldquogtrdquo para la serie La uacutenica excepcioacuten estaacute tras el comando ldquostartrdquo que no solicitaraacute entrada hasta que sea reconocido ldquostoprdquo

ODROID MAGAZINE 31

iquestCoacutemo empezaste con los ordenadoresCuando empeceacute mi negocio tuve que decidir queacute plat-

aforma de hardware iba a utilizar para la recogida de datos del traacutefico Simplemente para que no pienses mal de miacute mis caacutemaras de traacutefico no son las que se usan para multar por exceso de velocidad o algo asiacute Mi sistema estaba desti-nado suavizar el flujo de traacutefico fijando los controles oacutepti-mos de las sentildeales de traacutefico Anteriormente usaba un PC industrial para ejecutar mi software de reconocimiento de imaacutegenes Ahora uso la familia de dispositivos ODROID para esta cuestioacuten

iquestQueacute te atrajo de la plataforma ODROID En 2012 useacute Google para buscar una plataforma que

fuera muy compacta y al mismo tiempo potente para que cubriera mis necesidades que resultoacute ser la placa

Por favor haacuteblanos un poco sobre tiSoy ingeniero de electroacutenica y software en Rusia desde

hace 47 antildeos Naciacute en Siberia y tras terminar la escuela me mudeacute a Moscuacute para estudiar en la universidad Ser estudi-ante en el Instituto de Aviacioacuten de Moscuacute (MAI) fue una experiencia increiacuteble probablemente la mejor de mi vida A principios de los 90 llegoacute a Rusia la era de los microordena-dores soliacutea jugar a un juego de saltos en una CPU z80 y el i486 Tras finalizar mis estudios universitarios y de posgrado me convertiacute en ingeniero Trabajeacute en unos cuantos puestos de trabajo para diferentes empresas y finalmente decidiacute em-prender mi propio negocio En 2006 puse en marcha una iniciativa para crear sistemas de recuento del traacutefico de au-tomoacuteviles Estoy casado y tengo una hija de 21 antildeos llamada Lena que trabaja como enfermera Mi esposa Nadezhda es disentildeadora de vestuario de produccioacuten pero ahora trabaja como disentildeadora web Ella es aficionada a la fotografiacutea digi-tal y le encanta su caacutemara reacuteflex digital

COnOCIEnDO un ODROIDIAnvIACHESLAv ALEKSEEveditado por rob roy (robroy)

CONOCIENDO UN ODROIDIAN

Viacheslav disfruta tocando la guitarra y escuchando muacutesica

1995 en el campus MAi probando uno de los primeros equipos Vr comerciales del mundo que funcionaba a 640x480 a 30fps Utiliz-aba un sensor magneacutetico en la nuca para la posicioacuten de la cabeza la mejor broma que se podiacutea gastar a alguien era colocar un imaacuten cerca de la espalda y sacudirlo iexcllos gritos estaban garantizados cuando el mundo en 3D daba vueltas sin cesar

ODROID MAGAZINE 32

ODROID-X2 Con sus cuatro nuacutecleos funcionando a 17 GHz calculaba con facilidad los algoritmos de reconteo del traacutefico de automoacuteviles Maacutes tarde cambieacute al U3 y el XU4

iquestCuaacutel es tu ODROID favorito y por queacuteDe momento mi favorito es el XU4 Mi sistema estaacute

basado en el tratamiento de fotogramas de video en tiempo real por lo que el bus USB 30 del XU4 es bastante bueno para una caacutemara con una interfaz de captura de viacutedeo Para mi sistema es muy importante tener una buena conexioacuten entre la caacutemara de viacutedeo y la CPU Probablemente tendreacute que echar un vistazo a las interfaces de nivel inferior como MIPI CSI-2 que por desgracia estaacuten ausente en el XU4 Recientemente he estado aprendiendo como usar la caacute-mara oCam GS BW La caacutemara es buena en siacute misma pero para un uso industrial al aire libre tengo que implementar un software de control de exposicioacuten automaacutetica y posible-mente de control de apertura de la lente que todaviacutea estaacute en estudio

MEET AN ODROIDIAN

Una vieja joya el mini ordenador Nixdorf

An old gem the Nixdorf mini computer

CONOCIENDO UN ODROIDIAN

iquestQueacute aficiones e intereses tienes aparte de los ordenadoresDisfruto conduciendo y leyendo sobre coches y viendo

los campeonatos de carreras de F1 Tambieacuten me gusta via-jar pescar escuchar muacutesica y tocar la guitarra Tengo un gato siberiano llamado Leia y soy fan de Star Wars

iquestQueacute consejo le dariacuteas a alguien que quiere aprender maacutes sobre la programacioacuten

Hacer software es algo increiacuteble y miacutestico Es una fusioacuten de arte y tecnologiacutea Nada te inspira maacutes que tu aplicacioacuten cuando empieza a cobrar vida Sin embargo siempre estaacute ahiacute el otro lado de la Fuerza Estar listo para instruirte inc-esantemente El desarrollo de software es una de las activi-dades que cambia maacutes raacutepido Si tienes pensado dejar de hacer software en uno o dos antildeos puede dejar de aprender ahora El conocimiento se volveraacute anticuado en un par de antildeos maacutes o menos Para estar en lo maacutes alto siempre tienes que correr Es similar a la cancioacutenrdquoRun like Hellrdquo de Pink Floyd Si estaacutes listo para vivir de esta forma seguro que tendraacutes eacutexito

ODROID MAGAZINE 33

Page 27: Estación ARCADE · gias de marketing, administración de medios sociales y producción multimedia impresa, web, vídeo y cine. Ges-tionando múltiples cuentas con agencias y productores

Provides gpio_keyd Required-Start $all Required-Stop Default-Start 2 3 4 5 Default-Stop Short-Description Run usrbingpio_keyd if it ex-ist END INIT INFO

PATH=sbinusrsbinbinusrbin

libinitvarssh

liblsbinit-functions

do_start() if [ -x usrbingpio_keyd ] then usrbingpio_keyd -d ES=$ [ ldquo$VERBOSErdquo = no ] ampamp log_end_msg $ES return $ES fi

case ldquo$1rdquo in start) do_start restart|reload|force-reload) echo ldquoError argument lsquo$1rsquo not supportedrdquo gtamp2 exit 3 stop) killall gpio_keyd exit 0 ) echo ldquoUsage $0 start|stoprdquo gtamp2 exit 3 Esac

$ sudo chmod +x etcinitdgpio_keyd$ sudo update-rcd gpio_keyd defaults$ sudo reboot

En los comandos anteriores el script gpio_keyd se ejecuta como un demonio uti-lizando la opcioacuten ldquo-drdquo El uso de gpio_keyd se puede comprobar con la opcioacuten ldquo-hrdquo Comprue-ba de nuevo las teclas usadas por el juego o el emulador despueacutes fija la configuracioacuten del gpio_ keyd correctamente Es ahora cuando estaacutes listo para jugar y disfrutar de tus juegos con tu nueva ODROID Arcade Box

ARCADE BOX

the King of fighters 98 John vs brian

ODROID MAGAZINE 27

En este artiacuteculo analizaremos las diferentes formas que existen para ob-tener los datos del uso de la red

ConfiguracioacutenLa forma normal de analizar los datos

de traacutefico de la red es mediante el uso de datos a traveacutes de las aplicaciones de configuracioacuten del sistema tal y como se muestra en la figura 1

El uso de datos muestra la cantidad total de traacutefico de datos entrante y sa-liente que ha sido utilizada por una apli-cacioacuten Si seleccionas la aplicacioacuten veraacute una pantalla como la que aparece en la Figura 2 que muestra informacioacuten detal-lada sobre el uso de la aplicacioacuten tanto en primer plano como de fondo

La informacioacuten que se muestra den-tro de la aplicacioacuten de Configuracioacuten se almacena en data systemnetstats que requiere acceso root Al eliminar todo lo que hay dentro de esta carpeta se resta-

Como desarrolladores queremos que nuestras aplicaciones sean eficientes y a menudo nos gus-

tariacutea saber cuaacutento ancho de banda de red estaacute utilizando nuestra aplicacioacuten Esto es muy uacutetil por varias razones

bull Para monitorizar y asegurarnos de que la aplicacioacuten es realmente la nuestra y no una aplicacioacuten que ha sido pirateada y publi-cada con diferentes nombres en Play Store

bull Para asegurarnos de que no es-tamos cogiendo ancho de banda innecesario del plan de datos del usuario

bull Para comprobar que el disposi-tivo que estamos usando no estaacute accediendo a Internet sin nuestro consentimiento

blecen las estadiacutesticas de red mostradas en esta aplicacioacuten

Estadiacutesticas de la redLa aplicacioacuten de configuracioacuten nos

puede dar una informacioacuten general so-bre las estadiacutesticas de la red de datos que es un buen comienzo pero a veces necesitamos un anaacutelisis maacutes detallado que puede hacerse a traveacutes del coman-do dumpsys Android cuenta con una poderosa herramienta llamada dumpsys que nos permite obtener una instan-taacutenea o volcado del sistema que pu-ede incluir informacioacuten sobre la red la memoria y otros componentes Lee la documentacioacuten de Android en httpbitly2kK9dep para obtener maacutes infor-macioacuten del sistema Para conseguir maacutes informacioacuten relacionada con la red nos interesa el comando

$ dumpsys netstats detail

La Figura 3 muestra un pantallazo de lo que puedes ver desde una tablet Nexus 7 que ejecuta Lollipop 511

Hay algunas cuestiones importantes para entender las estadiacutesticas

bull Las estadiacutesticas UID muestran el desglose de las aplicaciones de primer plano y de fondo

bull Uid muestra el ID de usuario de la aplicacioacuten que se puede utili-zar para relacionar eacutesta con la in-

DESARROLLO AnDROID AnALIzAnDO EL uSO DE RED DE LAS APLICACIOnESpor Nanik tolaram

DESARROLLO ANDROID

figura 1 - Uso de datos en la configuracioacuten

figura 2 - Desglose del uso de datos de la app

ODROID MAGAZINE 28

$ dumpsys package detail

Este comando te proporcionaraacute una larga lista de informacioacuten sobre los pa-quetes que estaacuten instalados en tu dis-positivo Para las estadiacutesticas de red nos interesa la seccioacuten que se muestra en la Figura 5

La seccioacuten resaltada muestra el userId que se relaciona con el uid que se mues-tra en las estadiacutesticas de red Al relacio-nar este nuacutemero sabemos el nombre del paquete de la aplicacioacuten sobre el que es-tamos leyendo las estadiacutesticas de red

Aplicacioacuten de ejemplo

La aplicacioacuten de ejemplo de este artiacute-culo se puede descargar desde httpbitly2m8WenA que muestra coacutemo etiqu-etar la conexioacuten de red desde distintas

secciones de la aplicacioacuten lo cual puede ayudar a analizar el volumen de traacutefico de datos de la aplicacioacuten La Figura 6 muestra un ejemplo de coacutemo lo vemos si utilizamos Android Device Monitor (dentro de Studio diriacutegete a Tools -gt Android -gt Android Device Monitor)

Tal y como se puede ver en el graacutefico la simple aplicacioacuten tiene 3 conexiones dife-rentes y cada una de ellas estaacute accediendo a un sitio web diferente Al etiquetarlas con

formacioacuten del paquete (que ver-emos en la seccioacuten de detalles del paquete dumpsys) con el objeto de conocer queacute aplicacioacuten utiliza estas estadiacutesticas de red

bull Las etiquetas son uacutetiles si de-sea ver la cantidad de datos que utiliza cada conexioacuten de tu apli-cacioacuten Puedes ver un ejemplo de esto en la Figura 4 que muestra que el uid 10007 tiene las siguien-tes etiquetas 0x30000401 0x30003201 0x30002804 0x10000401 y 0x30000407 Es-tas etiquetas ayudan al desarrol-lador a saber cuaacutentos datos uti-liza cada parte de la aplicacioacuten Estas estadiacutesticas de red en par-ticular estaacuten vinculada al paquete Google Framework que forma parte de Google Play Store

En el siguiente apartado veremos coacutemo escribir una aplicacioacuten etiquetando el hilo que hace la conexioacuten de red para determi-nar la cantidad de datos que se utilizan

Estadiacutesticas de paquetes

En la seccioacuten anterior analizamos el uid que aparece al ejecutar el comando dumpsys netstats Ahora necesitamos sa-ber queacute uid corresponde a la aplicacioacuten en el dispositivo y esto se hace mediante el siguiente comando

DESARROLLO ANDROID

figura 3 ndash estadiacutesticas de red con Dumpsys

figura 4 - estadiacutesticas de etiquetas UiD

figura 5 - Detalles del paquete dumpsys

figura 6 - etiquetas de red

coacutedigos diferentes podemos ver la cantidad de traacutefico que consume cada conexioacuten y esto nos ayudaraacute a ver si nuestra aplicacioacuten utiliza el ancho de banda de un modo eficiente

El coacutedigo del siguiente fragmento muestra el uso de la API TrafficStats interna Esta etiqueta API muestra el subproceso que utiliza actualmente un socket con un identificador y todo el traacute-fico que pasa por la misma conexioacuten se grabaraacute junto Asiacute es como la aplicacioacuten es capaz de agrupar las 3 conexiones diferentes Internamente Android utili-za el moacutedulo xt_qtaguid del kernel para realizar este tipo de etiquetado Tienes disponible maacutes informacioacuten en httpbitly2kU8KXB

public void getUsingNormalURLC

onnection(String urlText int

threadTag)

throws IOException

URL url = null

TrafficStats

setThreadStatsTag(threadTag)

HttpURLConnection urlConnec-

tion = getConnection(url)

try

finally

TrafficStatsclearThread-

StatsTag()

ODROID MAGAZINE 29

Disgustado te subes a tu 4x4 de dominacioacuten del mun-do un vehiacuteculo que desde fuera parece maacutes bien un viejo camioacuten de granja pero por dentro se parece maacutes

al sistema de control de un transbordador espacial porque el conductor del restaurante oriental que realiza las entrega a do-micilio estaacute enfermo Ahora tienes que ir a recoger tu propia comida ldquoQueacute rudimentariordquo piensas cuando sales de tu garaje secreto Justamente cuando vas a parar el vehiacuteculo en un stop oyes un fuerte ruido Sales y te diriges raacutepidamente a la parte posterior del 4x4 donde observas un cubo de basura Te tiras de los pelos y piensas ldquoiexclEsos basureros Neanderthales dejaron otra vez el cubo en mediordquo Ahora te toca recoger los restos de tu cena y la basura de otros

Conforme te vas alejando para hacer tus recados empiezas a pensar en coacutemo evitar este inconveniente en el futuro Varias ideas te vienen a la mente

Un sistema lidar para escanear en 3D el entorno en tiempo real y alarmas sonoras cuando sea necesarioUn brazo ciberneacutetico colocado en la parte posterior del 4x4 que procese video para detectar objetos agarrarlos y moverlosUna simple camara trasera

Empiezas a considerar la viabilidad de cada una

Muy bueno pero demasiado complicado y costosoAuacuten mejor y un proyecto propio de un cientiacutefico loco pero demasi-ado complicado y costosoya tengo dos iexclpero estaba demasiado preocupado en mis pensa-mientos para prestarles atencioacuten

Lo que necesitas es algo simple sin complicaciones y barato que haga sonar una alarma para alertarte incluso cuando estar absorto en tus pensamientos ldquoAhardquo Recuerdas haber visto un nuevo producto en ameriDroid que puede hacer precisamente esto Se trata de un microcontrolador conectado al USB que soporta hasta 6 sensores ultrasoacutenicos con simples comandos en serie (httpbitly2l26ptV) ldquoiexclPerfectordquo Piensas

Regresas a tu laboratorio subterraacuteneo con el pollo Kung Pao en la mano te apresurar a encender tus monitores entras en el sitio web ameriDroid y pides un kit ldquoUSB Ultrasonic Ranging Sensorrdquo con 6 sensores y carcasas

Vas sintiendo una sensacioacuten de alivio a medida que regresas a los 12 proyectos en lo que ya estabas trabajando a la espera de que pasen un par de diacuteas hasta que llegue tu nuevo pedido Mientras te comes tu Kung Pao dibujas un diagrama de coacutemo quieres colocar los sensores en la parte posterior de tu vehiacuteculo

Un par de diacuteas maacutes tarde el kit llega Inmediatamente em-piezas a montar el kit y los sensores en la parte posterior de tu 4x4 teniendo cuidado de usar sellador de silicona para pro-teger los sensores de la lluvia aguanieve y nieve que puedas encontrar durante tus aventuras para dominar el mundo

A continuacioacuten consultas las instrucciones proporcionadas por ameriDroid con el kit sobre coacutemo controlar y leer los sen-sores desde tu fiel ODROID-C2 y VU7 que montaste en el salpicadero para este propoacutesito

Conectando el cable USBEl cable USB suministrado debe conectarse al microcon-

trolador (la pequentildea placa de circuito con filas de pines que sobresalen) El microcontrolador tiene una fila de 4 o 6 pines

DETECTAR LA PRESEnCIACROnICAS DE un CIEnTIfICO LOCOpor bo lechnowsky

SENSOR ULTRASONICO

ODROID MAGAZINE 30

en un extremo Si tiene 6 pines ceacutentrate en los 4 pines centrales y sigue estas instrucciones

Negro - conectar a GNDrojo - conectar a VccVerde - conectar a rxi

blanco - conectar a txD

Conectando los sensoresultrasoacutenicos

En cada sensor ultrasoacutenico hay cuatro pines marcados Vcc Trig Echo Gnd Para el primer sensor ultrasoacutenico conecta el pin 2 del microcontrolador al pin ldquoTrigrdquo del sensor ultrasoacutenico Conecta el pin 3 del microcontrolador al pin ldquoEchordquo del sensor Conecte el pin ldquoVccrdquo del sensor a DC 5V (el pin ldquoVCCrdquo del microcontrolador suministra 5V) y el pin ldquoGndrdquo del sensor a una conexioacuten a tierra como por ejemplo los pines ldquoGNDrdquo del microcontrolador

Si conectas un segundo sensor de ultrasonidos conecta ldquoTrigrdquo al pin 4 y ldquoEchordquo al pin 5 Continuacutea conectando los siguientes pines a los sensores hasta los pines 12 y 13 si al final optas por conectar los seis sensores ultrasonidos

Conexioacuten del softwareUtilizas un programa terminal como PuTTY Screen o tu

lenguaje de script o programacioacuten favorito para conectarte al puerto serie que aparece cuando te conectas el sensor ultrasoacuteni-co Esto variaraacute en funcioacuten del sistema operativo que utilizas para conectarte al microcontrolador En Windows consultar el ldquoAdministrador de dispositivosrdquo es la forma maacutes comuacuten de averiguarlo En Linux ldquodmesgrdquo o ldquolsusbrdquo son las formas de de-tectar a queacute puerto estaacute conectado Deberiacuteas ver algo denomi-nado ldquoPL2303rdquo que es la conexioacuten del microcontrolador Si recibes informacioacuten basura en tu terminal cuando te conectes aseguacuterate de que los ajustes en serie son 9600 baudios 8 bits ninguno (paridad) y 1 bit de parada Aquiacute tienes una lista de los comandos que puede aceptar el microcontrolador

bull debug on Activa la retroalimentacioacuten detallada Estaacute deshabilitada por defecto nos proporcionaraacute aclaracio-nes sobre los errores de entrada

bull debug off desactiva la retroalimentacioacuten detalladabull init x y activa un HC-SR04 en los pines especificados

X es trigger Y es echo Estos deben ser pines digitales El dispositivo 0 estaacute preestablecido en los pines 2 y 3 de modo que no es necesario especificar estos pines La seleccioacuten de pines no vaacutelidos devolveraacute un signo de ex-clamacioacuten ()

bull ping enviacutea una sola lectura del HCSR04 previamente utilizado Si no se ha utilizado todaviacutea se usaraacute el dis-positivo 0 Si al comando le sigue un espacio y un nuacutemero entre 0-100 (exclusivo) se realizaraacute ese nuacutemero de lecturas emitiendo primero el promedio de esas lec-

SENSOR ULTRASONICO

turas despueacutes el nuacutemero de lecturas fallidas (que no cuentan para el promedio) y luego los valores miacutenimo y maacuteximo de lectura separados por espacios En cual-quier caso si una sentildeal se desconecta automaacuteticamente devolveraacute -1

bull start Hace ping constantemente a todos los dispositivos conectados en secuencia Debido a que los dispositivos se utilizan uno a uno el flujo de datos de este comando seraacute maacutes raacutepido si los dispositivos miden distancias cor-tas Si este comando le sigue un espacio y un nuacutemero mayor que 0 la placa esperaraacute estos milisegundos entre la lectura del uacuteltimo dispositivo y la lectura del primer dispositivo El resultado de este comando seraacute la lectura de cada dispositivo (con un uacutenico espacio despueacutes de cada uno) y una vuelta tras el uacuteltimo dispositivo

bull stop detiene la operacioacuten ldquostartrdquo soacutelo es efectivo tras haber iniciado ldquostartrdquo

bull mode emite el modo de medicioacuten del flujo M para meacutetrico (miliacutemetros) I para Imperial (deacutecimas de pul-gada) o R para Raw (la longitud de pulso en microse-gundos devuelta por el HC-SR04) El valor predeter-minado es M

bull timeout emite el tiempo de espera actual para lecturas de la sentildeal El tiempo de espera es la mayor cantidad de microsegundos que la placa esperaraacute antes de declarar que el HC-SR04 ha realizado una mala lectura lo cual no es necesariamente lo mismo que el pulso maacutes largo que la placa aceptaraacute del HC-SR04 Cuando la placa mide el pulso del HC-SR04 primero espera a que el HC-SR04 comience a enviar un pulso Este tiempo cuenta para el tiempo de espera Cuando este comando le sigue un espacio y un nuacutemero el tiempo de espera se ajusta a ese nuacutemero El valor predeterminado es 1 segundo (1000000 microsegundos)

bull ver emite informacioacuten de versioacuten y creacuteditos

Si cualquier comando (o ninguacuten comando) estaacute precedido por un uacutenico diacutegito de 0-5 (inclusive) seguido de un espacio el dispositivo que corresponde a ese diacutegito se seleccionaraacute para ser usado con el siguiente comando ldquopingrdquo Cada vez que la placa esteacute lista para un comando emitiraacute ldquogtrdquo para la serie La uacutenica excepcioacuten estaacute tras el comando ldquostartrdquo que no solicitaraacute entrada hasta que sea reconocido ldquostoprdquo

ODROID MAGAZINE 31

iquestCoacutemo empezaste con los ordenadoresCuando empeceacute mi negocio tuve que decidir queacute plat-

aforma de hardware iba a utilizar para la recogida de datos del traacutefico Simplemente para que no pienses mal de miacute mis caacutemaras de traacutefico no son las que se usan para multar por exceso de velocidad o algo asiacute Mi sistema estaba desti-nado suavizar el flujo de traacutefico fijando los controles oacutepti-mos de las sentildeales de traacutefico Anteriormente usaba un PC industrial para ejecutar mi software de reconocimiento de imaacutegenes Ahora uso la familia de dispositivos ODROID para esta cuestioacuten

iquestQueacute te atrajo de la plataforma ODROID En 2012 useacute Google para buscar una plataforma que

fuera muy compacta y al mismo tiempo potente para que cubriera mis necesidades que resultoacute ser la placa

Por favor haacuteblanos un poco sobre tiSoy ingeniero de electroacutenica y software en Rusia desde

hace 47 antildeos Naciacute en Siberia y tras terminar la escuela me mudeacute a Moscuacute para estudiar en la universidad Ser estudi-ante en el Instituto de Aviacioacuten de Moscuacute (MAI) fue una experiencia increiacuteble probablemente la mejor de mi vida A principios de los 90 llegoacute a Rusia la era de los microordena-dores soliacutea jugar a un juego de saltos en una CPU z80 y el i486 Tras finalizar mis estudios universitarios y de posgrado me convertiacute en ingeniero Trabajeacute en unos cuantos puestos de trabajo para diferentes empresas y finalmente decidiacute em-prender mi propio negocio En 2006 puse en marcha una iniciativa para crear sistemas de recuento del traacutefico de au-tomoacuteviles Estoy casado y tengo una hija de 21 antildeos llamada Lena que trabaja como enfermera Mi esposa Nadezhda es disentildeadora de vestuario de produccioacuten pero ahora trabaja como disentildeadora web Ella es aficionada a la fotografiacutea digi-tal y le encanta su caacutemara reacuteflex digital

COnOCIEnDO un ODROIDIAnvIACHESLAv ALEKSEEveditado por rob roy (robroy)

CONOCIENDO UN ODROIDIAN

Viacheslav disfruta tocando la guitarra y escuchando muacutesica

1995 en el campus MAi probando uno de los primeros equipos Vr comerciales del mundo que funcionaba a 640x480 a 30fps Utiliz-aba un sensor magneacutetico en la nuca para la posicioacuten de la cabeza la mejor broma que se podiacutea gastar a alguien era colocar un imaacuten cerca de la espalda y sacudirlo iexcllos gritos estaban garantizados cuando el mundo en 3D daba vueltas sin cesar

ODROID MAGAZINE 32

ODROID-X2 Con sus cuatro nuacutecleos funcionando a 17 GHz calculaba con facilidad los algoritmos de reconteo del traacutefico de automoacuteviles Maacutes tarde cambieacute al U3 y el XU4

iquestCuaacutel es tu ODROID favorito y por queacuteDe momento mi favorito es el XU4 Mi sistema estaacute

basado en el tratamiento de fotogramas de video en tiempo real por lo que el bus USB 30 del XU4 es bastante bueno para una caacutemara con una interfaz de captura de viacutedeo Para mi sistema es muy importante tener una buena conexioacuten entre la caacutemara de viacutedeo y la CPU Probablemente tendreacute que echar un vistazo a las interfaces de nivel inferior como MIPI CSI-2 que por desgracia estaacuten ausente en el XU4 Recientemente he estado aprendiendo como usar la caacute-mara oCam GS BW La caacutemara es buena en siacute misma pero para un uso industrial al aire libre tengo que implementar un software de control de exposicioacuten automaacutetica y posible-mente de control de apertura de la lente que todaviacutea estaacute en estudio

MEET AN ODROIDIAN

Una vieja joya el mini ordenador Nixdorf

An old gem the Nixdorf mini computer

CONOCIENDO UN ODROIDIAN

iquestQueacute aficiones e intereses tienes aparte de los ordenadoresDisfruto conduciendo y leyendo sobre coches y viendo

los campeonatos de carreras de F1 Tambieacuten me gusta via-jar pescar escuchar muacutesica y tocar la guitarra Tengo un gato siberiano llamado Leia y soy fan de Star Wars

iquestQueacute consejo le dariacuteas a alguien que quiere aprender maacutes sobre la programacioacuten

Hacer software es algo increiacuteble y miacutestico Es una fusioacuten de arte y tecnologiacutea Nada te inspira maacutes que tu aplicacioacuten cuando empieza a cobrar vida Sin embargo siempre estaacute ahiacute el otro lado de la Fuerza Estar listo para instruirte inc-esantemente El desarrollo de software es una de las activi-dades que cambia maacutes raacutepido Si tienes pensado dejar de hacer software en uno o dos antildeos puede dejar de aprender ahora El conocimiento se volveraacute anticuado en un par de antildeos maacutes o menos Para estar en lo maacutes alto siempre tienes que correr Es similar a la cancioacutenrdquoRun like Hellrdquo de Pink Floyd Si estaacutes listo para vivir de esta forma seguro que tendraacutes eacutexito

ODROID MAGAZINE 33

Page 28: Estación ARCADE · gias de marketing, administración de medios sociales y producción multimedia impresa, web, vídeo y cine. Ges-tionando múltiples cuentas con agencias y productores

En este artiacuteculo analizaremos las diferentes formas que existen para ob-tener los datos del uso de la red

ConfiguracioacutenLa forma normal de analizar los datos

de traacutefico de la red es mediante el uso de datos a traveacutes de las aplicaciones de configuracioacuten del sistema tal y como se muestra en la figura 1

El uso de datos muestra la cantidad total de traacutefico de datos entrante y sa-liente que ha sido utilizada por una apli-cacioacuten Si seleccionas la aplicacioacuten veraacute una pantalla como la que aparece en la Figura 2 que muestra informacioacuten detal-lada sobre el uso de la aplicacioacuten tanto en primer plano como de fondo

La informacioacuten que se muestra den-tro de la aplicacioacuten de Configuracioacuten se almacena en data systemnetstats que requiere acceso root Al eliminar todo lo que hay dentro de esta carpeta se resta-

Como desarrolladores queremos que nuestras aplicaciones sean eficientes y a menudo nos gus-

tariacutea saber cuaacutento ancho de banda de red estaacute utilizando nuestra aplicacioacuten Esto es muy uacutetil por varias razones

bull Para monitorizar y asegurarnos de que la aplicacioacuten es realmente la nuestra y no una aplicacioacuten que ha sido pirateada y publi-cada con diferentes nombres en Play Store

bull Para asegurarnos de que no es-tamos cogiendo ancho de banda innecesario del plan de datos del usuario

bull Para comprobar que el disposi-tivo que estamos usando no estaacute accediendo a Internet sin nuestro consentimiento

blecen las estadiacutesticas de red mostradas en esta aplicacioacuten

Estadiacutesticas de la redLa aplicacioacuten de configuracioacuten nos

puede dar una informacioacuten general so-bre las estadiacutesticas de la red de datos que es un buen comienzo pero a veces necesitamos un anaacutelisis maacutes detallado que puede hacerse a traveacutes del coman-do dumpsys Android cuenta con una poderosa herramienta llamada dumpsys que nos permite obtener una instan-taacutenea o volcado del sistema que pu-ede incluir informacioacuten sobre la red la memoria y otros componentes Lee la documentacioacuten de Android en httpbitly2kK9dep para obtener maacutes infor-macioacuten del sistema Para conseguir maacutes informacioacuten relacionada con la red nos interesa el comando

$ dumpsys netstats detail

La Figura 3 muestra un pantallazo de lo que puedes ver desde una tablet Nexus 7 que ejecuta Lollipop 511

Hay algunas cuestiones importantes para entender las estadiacutesticas

bull Las estadiacutesticas UID muestran el desglose de las aplicaciones de primer plano y de fondo

bull Uid muestra el ID de usuario de la aplicacioacuten que se puede utili-zar para relacionar eacutesta con la in-

DESARROLLO AnDROID AnALIzAnDO EL uSO DE RED DE LAS APLICACIOnESpor Nanik tolaram

DESARROLLO ANDROID

figura 1 - Uso de datos en la configuracioacuten

figura 2 - Desglose del uso de datos de la app

ODROID MAGAZINE 28

$ dumpsys package detail

Este comando te proporcionaraacute una larga lista de informacioacuten sobre los pa-quetes que estaacuten instalados en tu dis-positivo Para las estadiacutesticas de red nos interesa la seccioacuten que se muestra en la Figura 5

La seccioacuten resaltada muestra el userId que se relaciona con el uid que se mues-tra en las estadiacutesticas de red Al relacio-nar este nuacutemero sabemos el nombre del paquete de la aplicacioacuten sobre el que es-tamos leyendo las estadiacutesticas de red

Aplicacioacuten de ejemplo

La aplicacioacuten de ejemplo de este artiacute-culo se puede descargar desde httpbitly2m8WenA que muestra coacutemo etiqu-etar la conexioacuten de red desde distintas

secciones de la aplicacioacuten lo cual puede ayudar a analizar el volumen de traacutefico de datos de la aplicacioacuten La Figura 6 muestra un ejemplo de coacutemo lo vemos si utilizamos Android Device Monitor (dentro de Studio diriacutegete a Tools -gt Android -gt Android Device Monitor)

Tal y como se puede ver en el graacutefico la simple aplicacioacuten tiene 3 conexiones dife-rentes y cada una de ellas estaacute accediendo a un sitio web diferente Al etiquetarlas con

formacioacuten del paquete (que ver-emos en la seccioacuten de detalles del paquete dumpsys) con el objeto de conocer queacute aplicacioacuten utiliza estas estadiacutesticas de red

bull Las etiquetas son uacutetiles si de-sea ver la cantidad de datos que utiliza cada conexioacuten de tu apli-cacioacuten Puedes ver un ejemplo de esto en la Figura 4 que muestra que el uid 10007 tiene las siguien-tes etiquetas 0x30000401 0x30003201 0x30002804 0x10000401 y 0x30000407 Es-tas etiquetas ayudan al desarrol-lador a saber cuaacutentos datos uti-liza cada parte de la aplicacioacuten Estas estadiacutesticas de red en par-ticular estaacuten vinculada al paquete Google Framework que forma parte de Google Play Store

En el siguiente apartado veremos coacutemo escribir una aplicacioacuten etiquetando el hilo que hace la conexioacuten de red para determi-nar la cantidad de datos que se utilizan

Estadiacutesticas de paquetes

En la seccioacuten anterior analizamos el uid que aparece al ejecutar el comando dumpsys netstats Ahora necesitamos sa-ber queacute uid corresponde a la aplicacioacuten en el dispositivo y esto se hace mediante el siguiente comando

DESARROLLO ANDROID

figura 3 ndash estadiacutesticas de red con Dumpsys

figura 4 - estadiacutesticas de etiquetas UiD

figura 5 - Detalles del paquete dumpsys

figura 6 - etiquetas de red

coacutedigos diferentes podemos ver la cantidad de traacutefico que consume cada conexioacuten y esto nos ayudaraacute a ver si nuestra aplicacioacuten utiliza el ancho de banda de un modo eficiente

El coacutedigo del siguiente fragmento muestra el uso de la API TrafficStats interna Esta etiqueta API muestra el subproceso que utiliza actualmente un socket con un identificador y todo el traacute-fico que pasa por la misma conexioacuten se grabaraacute junto Asiacute es como la aplicacioacuten es capaz de agrupar las 3 conexiones diferentes Internamente Android utili-za el moacutedulo xt_qtaguid del kernel para realizar este tipo de etiquetado Tienes disponible maacutes informacioacuten en httpbitly2kU8KXB

public void getUsingNormalURLC

onnection(String urlText int

threadTag)

throws IOException

URL url = null

TrafficStats

setThreadStatsTag(threadTag)

HttpURLConnection urlConnec-

tion = getConnection(url)

try

finally

TrafficStatsclearThread-

StatsTag()

ODROID MAGAZINE 29

Disgustado te subes a tu 4x4 de dominacioacuten del mun-do un vehiacuteculo que desde fuera parece maacutes bien un viejo camioacuten de granja pero por dentro se parece maacutes

al sistema de control de un transbordador espacial porque el conductor del restaurante oriental que realiza las entrega a do-micilio estaacute enfermo Ahora tienes que ir a recoger tu propia comida ldquoQueacute rudimentariordquo piensas cuando sales de tu garaje secreto Justamente cuando vas a parar el vehiacuteculo en un stop oyes un fuerte ruido Sales y te diriges raacutepidamente a la parte posterior del 4x4 donde observas un cubo de basura Te tiras de los pelos y piensas ldquoiexclEsos basureros Neanderthales dejaron otra vez el cubo en mediordquo Ahora te toca recoger los restos de tu cena y la basura de otros

Conforme te vas alejando para hacer tus recados empiezas a pensar en coacutemo evitar este inconveniente en el futuro Varias ideas te vienen a la mente

Un sistema lidar para escanear en 3D el entorno en tiempo real y alarmas sonoras cuando sea necesarioUn brazo ciberneacutetico colocado en la parte posterior del 4x4 que procese video para detectar objetos agarrarlos y moverlosUna simple camara trasera

Empiezas a considerar la viabilidad de cada una

Muy bueno pero demasiado complicado y costosoAuacuten mejor y un proyecto propio de un cientiacutefico loco pero demasi-ado complicado y costosoya tengo dos iexclpero estaba demasiado preocupado en mis pensa-mientos para prestarles atencioacuten

Lo que necesitas es algo simple sin complicaciones y barato que haga sonar una alarma para alertarte incluso cuando estar absorto en tus pensamientos ldquoAhardquo Recuerdas haber visto un nuevo producto en ameriDroid que puede hacer precisamente esto Se trata de un microcontrolador conectado al USB que soporta hasta 6 sensores ultrasoacutenicos con simples comandos en serie (httpbitly2l26ptV) ldquoiexclPerfectordquo Piensas

Regresas a tu laboratorio subterraacuteneo con el pollo Kung Pao en la mano te apresurar a encender tus monitores entras en el sitio web ameriDroid y pides un kit ldquoUSB Ultrasonic Ranging Sensorrdquo con 6 sensores y carcasas

Vas sintiendo una sensacioacuten de alivio a medida que regresas a los 12 proyectos en lo que ya estabas trabajando a la espera de que pasen un par de diacuteas hasta que llegue tu nuevo pedido Mientras te comes tu Kung Pao dibujas un diagrama de coacutemo quieres colocar los sensores en la parte posterior de tu vehiacuteculo

Un par de diacuteas maacutes tarde el kit llega Inmediatamente em-piezas a montar el kit y los sensores en la parte posterior de tu 4x4 teniendo cuidado de usar sellador de silicona para pro-teger los sensores de la lluvia aguanieve y nieve que puedas encontrar durante tus aventuras para dominar el mundo

A continuacioacuten consultas las instrucciones proporcionadas por ameriDroid con el kit sobre coacutemo controlar y leer los sen-sores desde tu fiel ODROID-C2 y VU7 que montaste en el salpicadero para este propoacutesito

Conectando el cable USBEl cable USB suministrado debe conectarse al microcon-

trolador (la pequentildea placa de circuito con filas de pines que sobresalen) El microcontrolador tiene una fila de 4 o 6 pines

DETECTAR LA PRESEnCIACROnICAS DE un CIEnTIfICO LOCOpor bo lechnowsky

SENSOR ULTRASONICO

ODROID MAGAZINE 30

en un extremo Si tiene 6 pines ceacutentrate en los 4 pines centrales y sigue estas instrucciones

Negro - conectar a GNDrojo - conectar a VccVerde - conectar a rxi

blanco - conectar a txD

Conectando los sensoresultrasoacutenicos

En cada sensor ultrasoacutenico hay cuatro pines marcados Vcc Trig Echo Gnd Para el primer sensor ultrasoacutenico conecta el pin 2 del microcontrolador al pin ldquoTrigrdquo del sensor ultrasoacutenico Conecta el pin 3 del microcontrolador al pin ldquoEchordquo del sensor Conecte el pin ldquoVccrdquo del sensor a DC 5V (el pin ldquoVCCrdquo del microcontrolador suministra 5V) y el pin ldquoGndrdquo del sensor a una conexioacuten a tierra como por ejemplo los pines ldquoGNDrdquo del microcontrolador

Si conectas un segundo sensor de ultrasonidos conecta ldquoTrigrdquo al pin 4 y ldquoEchordquo al pin 5 Continuacutea conectando los siguientes pines a los sensores hasta los pines 12 y 13 si al final optas por conectar los seis sensores ultrasonidos

Conexioacuten del softwareUtilizas un programa terminal como PuTTY Screen o tu

lenguaje de script o programacioacuten favorito para conectarte al puerto serie que aparece cuando te conectas el sensor ultrasoacuteni-co Esto variaraacute en funcioacuten del sistema operativo que utilizas para conectarte al microcontrolador En Windows consultar el ldquoAdministrador de dispositivosrdquo es la forma maacutes comuacuten de averiguarlo En Linux ldquodmesgrdquo o ldquolsusbrdquo son las formas de de-tectar a queacute puerto estaacute conectado Deberiacuteas ver algo denomi-nado ldquoPL2303rdquo que es la conexioacuten del microcontrolador Si recibes informacioacuten basura en tu terminal cuando te conectes aseguacuterate de que los ajustes en serie son 9600 baudios 8 bits ninguno (paridad) y 1 bit de parada Aquiacute tienes una lista de los comandos que puede aceptar el microcontrolador

bull debug on Activa la retroalimentacioacuten detallada Estaacute deshabilitada por defecto nos proporcionaraacute aclaracio-nes sobre los errores de entrada

bull debug off desactiva la retroalimentacioacuten detalladabull init x y activa un HC-SR04 en los pines especificados

X es trigger Y es echo Estos deben ser pines digitales El dispositivo 0 estaacute preestablecido en los pines 2 y 3 de modo que no es necesario especificar estos pines La seleccioacuten de pines no vaacutelidos devolveraacute un signo de ex-clamacioacuten ()

bull ping enviacutea una sola lectura del HCSR04 previamente utilizado Si no se ha utilizado todaviacutea se usaraacute el dis-positivo 0 Si al comando le sigue un espacio y un nuacutemero entre 0-100 (exclusivo) se realizaraacute ese nuacutemero de lecturas emitiendo primero el promedio de esas lec-

SENSOR ULTRASONICO

turas despueacutes el nuacutemero de lecturas fallidas (que no cuentan para el promedio) y luego los valores miacutenimo y maacuteximo de lectura separados por espacios En cual-quier caso si una sentildeal se desconecta automaacuteticamente devolveraacute -1

bull start Hace ping constantemente a todos los dispositivos conectados en secuencia Debido a que los dispositivos se utilizan uno a uno el flujo de datos de este comando seraacute maacutes raacutepido si los dispositivos miden distancias cor-tas Si este comando le sigue un espacio y un nuacutemero mayor que 0 la placa esperaraacute estos milisegundos entre la lectura del uacuteltimo dispositivo y la lectura del primer dispositivo El resultado de este comando seraacute la lectura de cada dispositivo (con un uacutenico espacio despueacutes de cada uno) y una vuelta tras el uacuteltimo dispositivo

bull stop detiene la operacioacuten ldquostartrdquo soacutelo es efectivo tras haber iniciado ldquostartrdquo

bull mode emite el modo de medicioacuten del flujo M para meacutetrico (miliacutemetros) I para Imperial (deacutecimas de pul-gada) o R para Raw (la longitud de pulso en microse-gundos devuelta por el HC-SR04) El valor predeter-minado es M

bull timeout emite el tiempo de espera actual para lecturas de la sentildeal El tiempo de espera es la mayor cantidad de microsegundos que la placa esperaraacute antes de declarar que el HC-SR04 ha realizado una mala lectura lo cual no es necesariamente lo mismo que el pulso maacutes largo que la placa aceptaraacute del HC-SR04 Cuando la placa mide el pulso del HC-SR04 primero espera a que el HC-SR04 comience a enviar un pulso Este tiempo cuenta para el tiempo de espera Cuando este comando le sigue un espacio y un nuacutemero el tiempo de espera se ajusta a ese nuacutemero El valor predeterminado es 1 segundo (1000000 microsegundos)

bull ver emite informacioacuten de versioacuten y creacuteditos

Si cualquier comando (o ninguacuten comando) estaacute precedido por un uacutenico diacutegito de 0-5 (inclusive) seguido de un espacio el dispositivo que corresponde a ese diacutegito se seleccionaraacute para ser usado con el siguiente comando ldquopingrdquo Cada vez que la placa esteacute lista para un comando emitiraacute ldquogtrdquo para la serie La uacutenica excepcioacuten estaacute tras el comando ldquostartrdquo que no solicitaraacute entrada hasta que sea reconocido ldquostoprdquo

ODROID MAGAZINE 31

iquestCoacutemo empezaste con los ordenadoresCuando empeceacute mi negocio tuve que decidir queacute plat-

aforma de hardware iba a utilizar para la recogida de datos del traacutefico Simplemente para que no pienses mal de miacute mis caacutemaras de traacutefico no son las que se usan para multar por exceso de velocidad o algo asiacute Mi sistema estaba desti-nado suavizar el flujo de traacutefico fijando los controles oacutepti-mos de las sentildeales de traacutefico Anteriormente usaba un PC industrial para ejecutar mi software de reconocimiento de imaacutegenes Ahora uso la familia de dispositivos ODROID para esta cuestioacuten

iquestQueacute te atrajo de la plataforma ODROID En 2012 useacute Google para buscar una plataforma que

fuera muy compacta y al mismo tiempo potente para que cubriera mis necesidades que resultoacute ser la placa

Por favor haacuteblanos un poco sobre tiSoy ingeniero de electroacutenica y software en Rusia desde

hace 47 antildeos Naciacute en Siberia y tras terminar la escuela me mudeacute a Moscuacute para estudiar en la universidad Ser estudi-ante en el Instituto de Aviacioacuten de Moscuacute (MAI) fue una experiencia increiacuteble probablemente la mejor de mi vida A principios de los 90 llegoacute a Rusia la era de los microordena-dores soliacutea jugar a un juego de saltos en una CPU z80 y el i486 Tras finalizar mis estudios universitarios y de posgrado me convertiacute en ingeniero Trabajeacute en unos cuantos puestos de trabajo para diferentes empresas y finalmente decidiacute em-prender mi propio negocio En 2006 puse en marcha una iniciativa para crear sistemas de recuento del traacutefico de au-tomoacuteviles Estoy casado y tengo una hija de 21 antildeos llamada Lena que trabaja como enfermera Mi esposa Nadezhda es disentildeadora de vestuario de produccioacuten pero ahora trabaja como disentildeadora web Ella es aficionada a la fotografiacutea digi-tal y le encanta su caacutemara reacuteflex digital

COnOCIEnDO un ODROIDIAnvIACHESLAv ALEKSEEveditado por rob roy (robroy)

CONOCIENDO UN ODROIDIAN

Viacheslav disfruta tocando la guitarra y escuchando muacutesica

1995 en el campus MAi probando uno de los primeros equipos Vr comerciales del mundo que funcionaba a 640x480 a 30fps Utiliz-aba un sensor magneacutetico en la nuca para la posicioacuten de la cabeza la mejor broma que se podiacutea gastar a alguien era colocar un imaacuten cerca de la espalda y sacudirlo iexcllos gritos estaban garantizados cuando el mundo en 3D daba vueltas sin cesar

ODROID MAGAZINE 32

ODROID-X2 Con sus cuatro nuacutecleos funcionando a 17 GHz calculaba con facilidad los algoritmos de reconteo del traacutefico de automoacuteviles Maacutes tarde cambieacute al U3 y el XU4

iquestCuaacutel es tu ODROID favorito y por queacuteDe momento mi favorito es el XU4 Mi sistema estaacute

basado en el tratamiento de fotogramas de video en tiempo real por lo que el bus USB 30 del XU4 es bastante bueno para una caacutemara con una interfaz de captura de viacutedeo Para mi sistema es muy importante tener una buena conexioacuten entre la caacutemara de viacutedeo y la CPU Probablemente tendreacute que echar un vistazo a las interfaces de nivel inferior como MIPI CSI-2 que por desgracia estaacuten ausente en el XU4 Recientemente he estado aprendiendo como usar la caacute-mara oCam GS BW La caacutemara es buena en siacute misma pero para un uso industrial al aire libre tengo que implementar un software de control de exposicioacuten automaacutetica y posible-mente de control de apertura de la lente que todaviacutea estaacute en estudio

MEET AN ODROIDIAN

Una vieja joya el mini ordenador Nixdorf

An old gem the Nixdorf mini computer

CONOCIENDO UN ODROIDIAN

iquestQueacute aficiones e intereses tienes aparte de los ordenadoresDisfruto conduciendo y leyendo sobre coches y viendo

los campeonatos de carreras de F1 Tambieacuten me gusta via-jar pescar escuchar muacutesica y tocar la guitarra Tengo un gato siberiano llamado Leia y soy fan de Star Wars

iquestQueacute consejo le dariacuteas a alguien que quiere aprender maacutes sobre la programacioacuten

Hacer software es algo increiacuteble y miacutestico Es una fusioacuten de arte y tecnologiacutea Nada te inspira maacutes que tu aplicacioacuten cuando empieza a cobrar vida Sin embargo siempre estaacute ahiacute el otro lado de la Fuerza Estar listo para instruirte inc-esantemente El desarrollo de software es una de las activi-dades que cambia maacutes raacutepido Si tienes pensado dejar de hacer software en uno o dos antildeos puede dejar de aprender ahora El conocimiento se volveraacute anticuado en un par de antildeos maacutes o menos Para estar en lo maacutes alto siempre tienes que correr Es similar a la cancioacutenrdquoRun like Hellrdquo de Pink Floyd Si estaacutes listo para vivir de esta forma seguro que tendraacutes eacutexito

ODROID MAGAZINE 33

Page 29: Estación ARCADE · gias de marketing, administración de medios sociales y producción multimedia impresa, web, vídeo y cine. Ges-tionando múltiples cuentas con agencias y productores

$ dumpsys package detail

Este comando te proporcionaraacute una larga lista de informacioacuten sobre los pa-quetes que estaacuten instalados en tu dis-positivo Para las estadiacutesticas de red nos interesa la seccioacuten que se muestra en la Figura 5

La seccioacuten resaltada muestra el userId que se relaciona con el uid que se mues-tra en las estadiacutesticas de red Al relacio-nar este nuacutemero sabemos el nombre del paquete de la aplicacioacuten sobre el que es-tamos leyendo las estadiacutesticas de red

Aplicacioacuten de ejemplo

La aplicacioacuten de ejemplo de este artiacute-culo se puede descargar desde httpbitly2m8WenA que muestra coacutemo etiqu-etar la conexioacuten de red desde distintas

secciones de la aplicacioacuten lo cual puede ayudar a analizar el volumen de traacutefico de datos de la aplicacioacuten La Figura 6 muestra un ejemplo de coacutemo lo vemos si utilizamos Android Device Monitor (dentro de Studio diriacutegete a Tools -gt Android -gt Android Device Monitor)

Tal y como se puede ver en el graacutefico la simple aplicacioacuten tiene 3 conexiones dife-rentes y cada una de ellas estaacute accediendo a un sitio web diferente Al etiquetarlas con

formacioacuten del paquete (que ver-emos en la seccioacuten de detalles del paquete dumpsys) con el objeto de conocer queacute aplicacioacuten utiliza estas estadiacutesticas de red

bull Las etiquetas son uacutetiles si de-sea ver la cantidad de datos que utiliza cada conexioacuten de tu apli-cacioacuten Puedes ver un ejemplo de esto en la Figura 4 que muestra que el uid 10007 tiene las siguien-tes etiquetas 0x30000401 0x30003201 0x30002804 0x10000401 y 0x30000407 Es-tas etiquetas ayudan al desarrol-lador a saber cuaacutentos datos uti-liza cada parte de la aplicacioacuten Estas estadiacutesticas de red en par-ticular estaacuten vinculada al paquete Google Framework que forma parte de Google Play Store

En el siguiente apartado veremos coacutemo escribir una aplicacioacuten etiquetando el hilo que hace la conexioacuten de red para determi-nar la cantidad de datos que se utilizan

Estadiacutesticas de paquetes

En la seccioacuten anterior analizamos el uid que aparece al ejecutar el comando dumpsys netstats Ahora necesitamos sa-ber queacute uid corresponde a la aplicacioacuten en el dispositivo y esto se hace mediante el siguiente comando

DESARROLLO ANDROID

figura 3 ndash estadiacutesticas de red con Dumpsys

figura 4 - estadiacutesticas de etiquetas UiD

figura 5 - Detalles del paquete dumpsys

figura 6 - etiquetas de red

coacutedigos diferentes podemos ver la cantidad de traacutefico que consume cada conexioacuten y esto nos ayudaraacute a ver si nuestra aplicacioacuten utiliza el ancho de banda de un modo eficiente

El coacutedigo del siguiente fragmento muestra el uso de la API TrafficStats interna Esta etiqueta API muestra el subproceso que utiliza actualmente un socket con un identificador y todo el traacute-fico que pasa por la misma conexioacuten se grabaraacute junto Asiacute es como la aplicacioacuten es capaz de agrupar las 3 conexiones diferentes Internamente Android utili-za el moacutedulo xt_qtaguid del kernel para realizar este tipo de etiquetado Tienes disponible maacutes informacioacuten en httpbitly2kU8KXB

public void getUsingNormalURLC

onnection(String urlText int

threadTag)

throws IOException

URL url = null

TrafficStats

setThreadStatsTag(threadTag)

HttpURLConnection urlConnec-

tion = getConnection(url)

try

finally

TrafficStatsclearThread-

StatsTag()

ODROID MAGAZINE 29

Disgustado te subes a tu 4x4 de dominacioacuten del mun-do un vehiacuteculo que desde fuera parece maacutes bien un viejo camioacuten de granja pero por dentro se parece maacutes

al sistema de control de un transbordador espacial porque el conductor del restaurante oriental que realiza las entrega a do-micilio estaacute enfermo Ahora tienes que ir a recoger tu propia comida ldquoQueacute rudimentariordquo piensas cuando sales de tu garaje secreto Justamente cuando vas a parar el vehiacuteculo en un stop oyes un fuerte ruido Sales y te diriges raacutepidamente a la parte posterior del 4x4 donde observas un cubo de basura Te tiras de los pelos y piensas ldquoiexclEsos basureros Neanderthales dejaron otra vez el cubo en mediordquo Ahora te toca recoger los restos de tu cena y la basura de otros

Conforme te vas alejando para hacer tus recados empiezas a pensar en coacutemo evitar este inconveniente en el futuro Varias ideas te vienen a la mente

Un sistema lidar para escanear en 3D el entorno en tiempo real y alarmas sonoras cuando sea necesarioUn brazo ciberneacutetico colocado en la parte posterior del 4x4 que procese video para detectar objetos agarrarlos y moverlosUna simple camara trasera

Empiezas a considerar la viabilidad de cada una

Muy bueno pero demasiado complicado y costosoAuacuten mejor y un proyecto propio de un cientiacutefico loco pero demasi-ado complicado y costosoya tengo dos iexclpero estaba demasiado preocupado en mis pensa-mientos para prestarles atencioacuten

Lo que necesitas es algo simple sin complicaciones y barato que haga sonar una alarma para alertarte incluso cuando estar absorto en tus pensamientos ldquoAhardquo Recuerdas haber visto un nuevo producto en ameriDroid que puede hacer precisamente esto Se trata de un microcontrolador conectado al USB que soporta hasta 6 sensores ultrasoacutenicos con simples comandos en serie (httpbitly2l26ptV) ldquoiexclPerfectordquo Piensas

Regresas a tu laboratorio subterraacuteneo con el pollo Kung Pao en la mano te apresurar a encender tus monitores entras en el sitio web ameriDroid y pides un kit ldquoUSB Ultrasonic Ranging Sensorrdquo con 6 sensores y carcasas

Vas sintiendo una sensacioacuten de alivio a medida que regresas a los 12 proyectos en lo que ya estabas trabajando a la espera de que pasen un par de diacuteas hasta que llegue tu nuevo pedido Mientras te comes tu Kung Pao dibujas un diagrama de coacutemo quieres colocar los sensores en la parte posterior de tu vehiacuteculo

Un par de diacuteas maacutes tarde el kit llega Inmediatamente em-piezas a montar el kit y los sensores en la parte posterior de tu 4x4 teniendo cuidado de usar sellador de silicona para pro-teger los sensores de la lluvia aguanieve y nieve que puedas encontrar durante tus aventuras para dominar el mundo

A continuacioacuten consultas las instrucciones proporcionadas por ameriDroid con el kit sobre coacutemo controlar y leer los sen-sores desde tu fiel ODROID-C2 y VU7 que montaste en el salpicadero para este propoacutesito

Conectando el cable USBEl cable USB suministrado debe conectarse al microcon-

trolador (la pequentildea placa de circuito con filas de pines que sobresalen) El microcontrolador tiene una fila de 4 o 6 pines

DETECTAR LA PRESEnCIACROnICAS DE un CIEnTIfICO LOCOpor bo lechnowsky

SENSOR ULTRASONICO

ODROID MAGAZINE 30

en un extremo Si tiene 6 pines ceacutentrate en los 4 pines centrales y sigue estas instrucciones

Negro - conectar a GNDrojo - conectar a VccVerde - conectar a rxi

blanco - conectar a txD

Conectando los sensoresultrasoacutenicos

En cada sensor ultrasoacutenico hay cuatro pines marcados Vcc Trig Echo Gnd Para el primer sensor ultrasoacutenico conecta el pin 2 del microcontrolador al pin ldquoTrigrdquo del sensor ultrasoacutenico Conecta el pin 3 del microcontrolador al pin ldquoEchordquo del sensor Conecte el pin ldquoVccrdquo del sensor a DC 5V (el pin ldquoVCCrdquo del microcontrolador suministra 5V) y el pin ldquoGndrdquo del sensor a una conexioacuten a tierra como por ejemplo los pines ldquoGNDrdquo del microcontrolador

Si conectas un segundo sensor de ultrasonidos conecta ldquoTrigrdquo al pin 4 y ldquoEchordquo al pin 5 Continuacutea conectando los siguientes pines a los sensores hasta los pines 12 y 13 si al final optas por conectar los seis sensores ultrasonidos

Conexioacuten del softwareUtilizas un programa terminal como PuTTY Screen o tu

lenguaje de script o programacioacuten favorito para conectarte al puerto serie que aparece cuando te conectas el sensor ultrasoacuteni-co Esto variaraacute en funcioacuten del sistema operativo que utilizas para conectarte al microcontrolador En Windows consultar el ldquoAdministrador de dispositivosrdquo es la forma maacutes comuacuten de averiguarlo En Linux ldquodmesgrdquo o ldquolsusbrdquo son las formas de de-tectar a queacute puerto estaacute conectado Deberiacuteas ver algo denomi-nado ldquoPL2303rdquo que es la conexioacuten del microcontrolador Si recibes informacioacuten basura en tu terminal cuando te conectes aseguacuterate de que los ajustes en serie son 9600 baudios 8 bits ninguno (paridad) y 1 bit de parada Aquiacute tienes una lista de los comandos que puede aceptar el microcontrolador

bull debug on Activa la retroalimentacioacuten detallada Estaacute deshabilitada por defecto nos proporcionaraacute aclaracio-nes sobre los errores de entrada

bull debug off desactiva la retroalimentacioacuten detalladabull init x y activa un HC-SR04 en los pines especificados

X es trigger Y es echo Estos deben ser pines digitales El dispositivo 0 estaacute preestablecido en los pines 2 y 3 de modo que no es necesario especificar estos pines La seleccioacuten de pines no vaacutelidos devolveraacute un signo de ex-clamacioacuten ()

bull ping enviacutea una sola lectura del HCSR04 previamente utilizado Si no se ha utilizado todaviacutea se usaraacute el dis-positivo 0 Si al comando le sigue un espacio y un nuacutemero entre 0-100 (exclusivo) se realizaraacute ese nuacutemero de lecturas emitiendo primero el promedio de esas lec-

SENSOR ULTRASONICO

turas despueacutes el nuacutemero de lecturas fallidas (que no cuentan para el promedio) y luego los valores miacutenimo y maacuteximo de lectura separados por espacios En cual-quier caso si una sentildeal se desconecta automaacuteticamente devolveraacute -1

bull start Hace ping constantemente a todos los dispositivos conectados en secuencia Debido a que los dispositivos se utilizan uno a uno el flujo de datos de este comando seraacute maacutes raacutepido si los dispositivos miden distancias cor-tas Si este comando le sigue un espacio y un nuacutemero mayor que 0 la placa esperaraacute estos milisegundos entre la lectura del uacuteltimo dispositivo y la lectura del primer dispositivo El resultado de este comando seraacute la lectura de cada dispositivo (con un uacutenico espacio despueacutes de cada uno) y una vuelta tras el uacuteltimo dispositivo

bull stop detiene la operacioacuten ldquostartrdquo soacutelo es efectivo tras haber iniciado ldquostartrdquo

bull mode emite el modo de medicioacuten del flujo M para meacutetrico (miliacutemetros) I para Imperial (deacutecimas de pul-gada) o R para Raw (la longitud de pulso en microse-gundos devuelta por el HC-SR04) El valor predeter-minado es M

bull timeout emite el tiempo de espera actual para lecturas de la sentildeal El tiempo de espera es la mayor cantidad de microsegundos que la placa esperaraacute antes de declarar que el HC-SR04 ha realizado una mala lectura lo cual no es necesariamente lo mismo que el pulso maacutes largo que la placa aceptaraacute del HC-SR04 Cuando la placa mide el pulso del HC-SR04 primero espera a que el HC-SR04 comience a enviar un pulso Este tiempo cuenta para el tiempo de espera Cuando este comando le sigue un espacio y un nuacutemero el tiempo de espera se ajusta a ese nuacutemero El valor predeterminado es 1 segundo (1000000 microsegundos)

bull ver emite informacioacuten de versioacuten y creacuteditos

Si cualquier comando (o ninguacuten comando) estaacute precedido por un uacutenico diacutegito de 0-5 (inclusive) seguido de un espacio el dispositivo que corresponde a ese diacutegito se seleccionaraacute para ser usado con el siguiente comando ldquopingrdquo Cada vez que la placa esteacute lista para un comando emitiraacute ldquogtrdquo para la serie La uacutenica excepcioacuten estaacute tras el comando ldquostartrdquo que no solicitaraacute entrada hasta que sea reconocido ldquostoprdquo

ODROID MAGAZINE 31

iquestCoacutemo empezaste con los ordenadoresCuando empeceacute mi negocio tuve que decidir queacute plat-

aforma de hardware iba a utilizar para la recogida de datos del traacutefico Simplemente para que no pienses mal de miacute mis caacutemaras de traacutefico no son las que se usan para multar por exceso de velocidad o algo asiacute Mi sistema estaba desti-nado suavizar el flujo de traacutefico fijando los controles oacutepti-mos de las sentildeales de traacutefico Anteriormente usaba un PC industrial para ejecutar mi software de reconocimiento de imaacutegenes Ahora uso la familia de dispositivos ODROID para esta cuestioacuten

iquestQueacute te atrajo de la plataforma ODROID En 2012 useacute Google para buscar una plataforma que

fuera muy compacta y al mismo tiempo potente para que cubriera mis necesidades que resultoacute ser la placa

Por favor haacuteblanos un poco sobre tiSoy ingeniero de electroacutenica y software en Rusia desde

hace 47 antildeos Naciacute en Siberia y tras terminar la escuela me mudeacute a Moscuacute para estudiar en la universidad Ser estudi-ante en el Instituto de Aviacioacuten de Moscuacute (MAI) fue una experiencia increiacuteble probablemente la mejor de mi vida A principios de los 90 llegoacute a Rusia la era de los microordena-dores soliacutea jugar a un juego de saltos en una CPU z80 y el i486 Tras finalizar mis estudios universitarios y de posgrado me convertiacute en ingeniero Trabajeacute en unos cuantos puestos de trabajo para diferentes empresas y finalmente decidiacute em-prender mi propio negocio En 2006 puse en marcha una iniciativa para crear sistemas de recuento del traacutefico de au-tomoacuteviles Estoy casado y tengo una hija de 21 antildeos llamada Lena que trabaja como enfermera Mi esposa Nadezhda es disentildeadora de vestuario de produccioacuten pero ahora trabaja como disentildeadora web Ella es aficionada a la fotografiacutea digi-tal y le encanta su caacutemara reacuteflex digital

COnOCIEnDO un ODROIDIAnvIACHESLAv ALEKSEEveditado por rob roy (robroy)

CONOCIENDO UN ODROIDIAN

Viacheslav disfruta tocando la guitarra y escuchando muacutesica

1995 en el campus MAi probando uno de los primeros equipos Vr comerciales del mundo que funcionaba a 640x480 a 30fps Utiliz-aba un sensor magneacutetico en la nuca para la posicioacuten de la cabeza la mejor broma que se podiacutea gastar a alguien era colocar un imaacuten cerca de la espalda y sacudirlo iexcllos gritos estaban garantizados cuando el mundo en 3D daba vueltas sin cesar

ODROID MAGAZINE 32

ODROID-X2 Con sus cuatro nuacutecleos funcionando a 17 GHz calculaba con facilidad los algoritmos de reconteo del traacutefico de automoacuteviles Maacutes tarde cambieacute al U3 y el XU4

iquestCuaacutel es tu ODROID favorito y por queacuteDe momento mi favorito es el XU4 Mi sistema estaacute

basado en el tratamiento de fotogramas de video en tiempo real por lo que el bus USB 30 del XU4 es bastante bueno para una caacutemara con una interfaz de captura de viacutedeo Para mi sistema es muy importante tener una buena conexioacuten entre la caacutemara de viacutedeo y la CPU Probablemente tendreacute que echar un vistazo a las interfaces de nivel inferior como MIPI CSI-2 que por desgracia estaacuten ausente en el XU4 Recientemente he estado aprendiendo como usar la caacute-mara oCam GS BW La caacutemara es buena en siacute misma pero para un uso industrial al aire libre tengo que implementar un software de control de exposicioacuten automaacutetica y posible-mente de control de apertura de la lente que todaviacutea estaacute en estudio

MEET AN ODROIDIAN

Una vieja joya el mini ordenador Nixdorf

An old gem the Nixdorf mini computer

CONOCIENDO UN ODROIDIAN

iquestQueacute aficiones e intereses tienes aparte de los ordenadoresDisfruto conduciendo y leyendo sobre coches y viendo

los campeonatos de carreras de F1 Tambieacuten me gusta via-jar pescar escuchar muacutesica y tocar la guitarra Tengo un gato siberiano llamado Leia y soy fan de Star Wars

iquestQueacute consejo le dariacuteas a alguien que quiere aprender maacutes sobre la programacioacuten

Hacer software es algo increiacuteble y miacutestico Es una fusioacuten de arte y tecnologiacutea Nada te inspira maacutes que tu aplicacioacuten cuando empieza a cobrar vida Sin embargo siempre estaacute ahiacute el otro lado de la Fuerza Estar listo para instruirte inc-esantemente El desarrollo de software es una de las activi-dades que cambia maacutes raacutepido Si tienes pensado dejar de hacer software en uno o dos antildeos puede dejar de aprender ahora El conocimiento se volveraacute anticuado en un par de antildeos maacutes o menos Para estar en lo maacutes alto siempre tienes que correr Es similar a la cancioacutenrdquoRun like Hellrdquo de Pink Floyd Si estaacutes listo para vivir de esta forma seguro que tendraacutes eacutexito

ODROID MAGAZINE 33

Page 30: Estación ARCADE · gias de marketing, administración de medios sociales y producción multimedia impresa, web, vídeo y cine. Ges-tionando múltiples cuentas con agencias y productores

Disgustado te subes a tu 4x4 de dominacioacuten del mun-do un vehiacuteculo que desde fuera parece maacutes bien un viejo camioacuten de granja pero por dentro se parece maacutes

al sistema de control de un transbordador espacial porque el conductor del restaurante oriental que realiza las entrega a do-micilio estaacute enfermo Ahora tienes que ir a recoger tu propia comida ldquoQueacute rudimentariordquo piensas cuando sales de tu garaje secreto Justamente cuando vas a parar el vehiacuteculo en un stop oyes un fuerte ruido Sales y te diriges raacutepidamente a la parte posterior del 4x4 donde observas un cubo de basura Te tiras de los pelos y piensas ldquoiexclEsos basureros Neanderthales dejaron otra vez el cubo en mediordquo Ahora te toca recoger los restos de tu cena y la basura de otros

Conforme te vas alejando para hacer tus recados empiezas a pensar en coacutemo evitar este inconveniente en el futuro Varias ideas te vienen a la mente

Un sistema lidar para escanear en 3D el entorno en tiempo real y alarmas sonoras cuando sea necesarioUn brazo ciberneacutetico colocado en la parte posterior del 4x4 que procese video para detectar objetos agarrarlos y moverlosUna simple camara trasera

Empiezas a considerar la viabilidad de cada una

Muy bueno pero demasiado complicado y costosoAuacuten mejor y un proyecto propio de un cientiacutefico loco pero demasi-ado complicado y costosoya tengo dos iexclpero estaba demasiado preocupado en mis pensa-mientos para prestarles atencioacuten

Lo que necesitas es algo simple sin complicaciones y barato que haga sonar una alarma para alertarte incluso cuando estar absorto en tus pensamientos ldquoAhardquo Recuerdas haber visto un nuevo producto en ameriDroid que puede hacer precisamente esto Se trata de un microcontrolador conectado al USB que soporta hasta 6 sensores ultrasoacutenicos con simples comandos en serie (httpbitly2l26ptV) ldquoiexclPerfectordquo Piensas

Regresas a tu laboratorio subterraacuteneo con el pollo Kung Pao en la mano te apresurar a encender tus monitores entras en el sitio web ameriDroid y pides un kit ldquoUSB Ultrasonic Ranging Sensorrdquo con 6 sensores y carcasas

Vas sintiendo una sensacioacuten de alivio a medida que regresas a los 12 proyectos en lo que ya estabas trabajando a la espera de que pasen un par de diacuteas hasta que llegue tu nuevo pedido Mientras te comes tu Kung Pao dibujas un diagrama de coacutemo quieres colocar los sensores en la parte posterior de tu vehiacuteculo

Un par de diacuteas maacutes tarde el kit llega Inmediatamente em-piezas a montar el kit y los sensores en la parte posterior de tu 4x4 teniendo cuidado de usar sellador de silicona para pro-teger los sensores de la lluvia aguanieve y nieve que puedas encontrar durante tus aventuras para dominar el mundo

A continuacioacuten consultas las instrucciones proporcionadas por ameriDroid con el kit sobre coacutemo controlar y leer los sen-sores desde tu fiel ODROID-C2 y VU7 que montaste en el salpicadero para este propoacutesito

Conectando el cable USBEl cable USB suministrado debe conectarse al microcon-

trolador (la pequentildea placa de circuito con filas de pines que sobresalen) El microcontrolador tiene una fila de 4 o 6 pines

DETECTAR LA PRESEnCIACROnICAS DE un CIEnTIfICO LOCOpor bo lechnowsky

SENSOR ULTRASONICO

ODROID MAGAZINE 30

en un extremo Si tiene 6 pines ceacutentrate en los 4 pines centrales y sigue estas instrucciones

Negro - conectar a GNDrojo - conectar a VccVerde - conectar a rxi

blanco - conectar a txD

Conectando los sensoresultrasoacutenicos

En cada sensor ultrasoacutenico hay cuatro pines marcados Vcc Trig Echo Gnd Para el primer sensor ultrasoacutenico conecta el pin 2 del microcontrolador al pin ldquoTrigrdquo del sensor ultrasoacutenico Conecta el pin 3 del microcontrolador al pin ldquoEchordquo del sensor Conecte el pin ldquoVccrdquo del sensor a DC 5V (el pin ldquoVCCrdquo del microcontrolador suministra 5V) y el pin ldquoGndrdquo del sensor a una conexioacuten a tierra como por ejemplo los pines ldquoGNDrdquo del microcontrolador

Si conectas un segundo sensor de ultrasonidos conecta ldquoTrigrdquo al pin 4 y ldquoEchordquo al pin 5 Continuacutea conectando los siguientes pines a los sensores hasta los pines 12 y 13 si al final optas por conectar los seis sensores ultrasonidos

Conexioacuten del softwareUtilizas un programa terminal como PuTTY Screen o tu

lenguaje de script o programacioacuten favorito para conectarte al puerto serie que aparece cuando te conectas el sensor ultrasoacuteni-co Esto variaraacute en funcioacuten del sistema operativo que utilizas para conectarte al microcontrolador En Windows consultar el ldquoAdministrador de dispositivosrdquo es la forma maacutes comuacuten de averiguarlo En Linux ldquodmesgrdquo o ldquolsusbrdquo son las formas de de-tectar a queacute puerto estaacute conectado Deberiacuteas ver algo denomi-nado ldquoPL2303rdquo que es la conexioacuten del microcontrolador Si recibes informacioacuten basura en tu terminal cuando te conectes aseguacuterate de que los ajustes en serie son 9600 baudios 8 bits ninguno (paridad) y 1 bit de parada Aquiacute tienes una lista de los comandos que puede aceptar el microcontrolador

bull debug on Activa la retroalimentacioacuten detallada Estaacute deshabilitada por defecto nos proporcionaraacute aclaracio-nes sobre los errores de entrada

bull debug off desactiva la retroalimentacioacuten detalladabull init x y activa un HC-SR04 en los pines especificados

X es trigger Y es echo Estos deben ser pines digitales El dispositivo 0 estaacute preestablecido en los pines 2 y 3 de modo que no es necesario especificar estos pines La seleccioacuten de pines no vaacutelidos devolveraacute un signo de ex-clamacioacuten ()

bull ping enviacutea una sola lectura del HCSR04 previamente utilizado Si no se ha utilizado todaviacutea se usaraacute el dis-positivo 0 Si al comando le sigue un espacio y un nuacutemero entre 0-100 (exclusivo) se realizaraacute ese nuacutemero de lecturas emitiendo primero el promedio de esas lec-

SENSOR ULTRASONICO

turas despueacutes el nuacutemero de lecturas fallidas (que no cuentan para el promedio) y luego los valores miacutenimo y maacuteximo de lectura separados por espacios En cual-quier caso si una sentildeal se desconecta automaacuteticamente devolveraacute -1

bull start Hace ping constantemente a todos los dispositivos conectados en secuencia Debido a que los dispositivos se utilizan uno a uno el flujo de datos de este comando seraacute maacutes raacutepido si los dispositivos miden distancias cor-tas Si este comando le sigue un espacio y un nuacutemero mayor que 0 la placa esperaraacute estos milisegundos entre la lectura del uacuteltimo dispositivo y la lectura del primer dispositivo El resultado de este comando seraacute la lectura de cada dispositivo (con un uacutenico espacio despueacutes de cada uno) y una vuelta tras el uacuteltimo dispositivo

bull stop detiene la operacioacuten ldquostartrdquo soacutelo es efectivo tras haber iniciado ldquostartrdquo

bull mode emite el modo de medicioacuten del flujo M para meacutetrico (miliacutemetros) I para Imperial (deacutecimas de pul-gada) o R para Raw (la longitud de pulso en microse-gundos devuelta por el HC-SR04) El valor predeter-minado es M

bull timeout emite el tiempo de espera actual para lecturas de la sentildeal El tiempo de espera es la mayor cantidad de microsegundos que la placa esperaraacute antes de declarar que el HC-SR04 ha realizado una mala lectura lo cual no es necesariamente lo mismo que el pulso maacutes largo que la placa aceptaraacute del HC-SR04 Cuando la placa mide el pulso del HC-SR04 primero espera a que el HC-SR04 comience a enviar un pulso Este tiempo cuenta para el tiempo de espera Cuando este comando le sigue un espacio y un nuacutemero el tiempo de espera se ajusta a ese nuacutemero El valor predeterminado es 1 segundo (1000000 microsegundos)

bull ver emite informacioacuten de versioacuten y creacuteditos

Si cualquier comando (o ninguacuten comando) estaacute precedido por un uacutenico diacutegito de 0-5 (inclusive) seguido de un espacio el dispositivo que corresponde a ese diacutegito se seleccionaraacute para ser usado con el siguiente comando ldquopingrdquo Cada vez que la placa esteacute lista para un comando emitiraacute ldquogtrdquo para la serie La uacutenica excepcioacuten estaacute tras el comando ldquostartrdquo que no solicitaraacute entrada hasta que sea reconocido ldquostoprdquo

ODROID MAGAZINE 31

iquestCoacutemo empezaste con los ordenadoresCuando empeceacute mi negocio tuve que decidir queacute plat-

aforma de hardware iba a utilizar para la recogida de datos del traacutefico Simplemente para que no pienses mal de miacute mis caacutemaras de traacutefico no son las que se usan para multar por exceso de velocidad o algo asiacute Mi sistema estaba desti-nado suavizar el flujo de traacutefico fijando los controles oacutepti-mos de las sentildeales de traacutefico Anteriormente usaba un PC industrial para ejecutar mi software de reconocimiento de imaacutegenes Ahora uso la familia de dispositivos ODROID para esta cuestioacuten

iquestQueacute te atrajo de la plataforma ODROID En 2012 useacute Google para buscar una plataforma que

fuera muy compacta y al mismo tiempo potente para que cubriera mis necesidades que resultoacute ser la placa

Por favor haacuteblanos un poco sobre tiSoy ingeniero de electroacutenica y software en Rusia desde

hace 47 antildeos Naciacute en Siberia y tras terminar la escuela me mudeacute a Moscuacute para estudiar en la universidad Ser estudi-ante en el Instituto de Aviacioacuten de Moscuacute (MAI) fue una experiencia increiacuteble probablemente la mejor de mi vida A principios de los 90 llegoacute a Rusia la era de los microordena-dores soliacutea jugar a un juego de saltos en una CPU z80 y el i486 Tras finalizar mis estudios universitarios y de posgrado me convertiacute en ingeniero Trabajeacute en unos cuantos puestos de trabajo para diferentes empresas y finalmente decidiacute em-prender mi propio negocio En 2006 puse en marcha una iniciativa para crear sistemas de recuento del traacutefico de au-tomoacuteviles Estoy casado y tengo una hija de 21 antildeos llamada Lena que trabaja como enfermera Mi esposa Nadezhda es disentildeadora de vestuario de produccioacuten pero ahora trabaja como disentildeadora web Ella es aficionada a la fotografiacutea digi-tal y le encanta su caacutemara reacuteflex digital

COnOCIEnDO un ODROIDIAnvIACHESLAv ALEKSEEveditado por rob roy (robroy)

CONOCIENDO UN ODROIDIAN

Viacheslav disfruta tocando la guitarra y escuchando muacutesica

1995 en el campus MAi probando uno de los primeros equipos Vr comerciales del mundo que funcionaba a 640x480 a 30fps Utiliz-aba un sensor magneacutetico en la nuca para la posicioacuten de la cabeza la mejor broma que se podiacutea gastar a alguien era colocar un imaacuten cerca de la espalda y sacudirlo iexcllos gritos estaban garantizados cuando el mundo en 3D daba vueltas sin cesar

ODROID MAGAZINE 32

ODROID-X2 Con sus cuatro nuacutecleos funcionando a 17 GHz calculaba con facilidad los algoritmos de reconteo del traacutefico de automoacuteviles Maacutes tarde cambieacute al U3 y el XU4

iquestCuaacutel es tu ODROID favorito y por queacuteDe momento mi favorito es el XU4 Mi sistema estaacute

basado en el tratamiento de fotogramas de video en tiempo real por lo que el bus USB 30 del XU4 es bastante bueno para una caacutemara con una interfaz de captura de viacutedeo Para mi sistema es muy importante tener una buena conexioacuten entre la caacutemara de viacutedeo y la CPU Probablemente tendreacute que echar un vistazo a las interfaces de nivel inferior como MIPI CSI-2 que por desgracia estaacuten ausente en el XU4 Recientemente he estado aprendiendo como usar la caacute-mara oCam GS BW La caacutemara es buena en siacute misma pero para un uso industrial al aire libre tengo que implementar un software de control de exposicioacuten automaacutetica y posible-mente de control de apertura de la lente que todaviacutea estaacute en estudio

MEET AN ODROIDIAN

Una vieja joya el mini ordenador Nixdorf

An old gem the Nixdorf mini computer

CONOCIENDO UN ODROIDIAN

iquestQueacute aficiones e intereses tienes aparte de los ordenadoresDisfruto conduciendo y leyendo sobre coches y viendo

los campeonatos de carreras de F1 Tambieacuten me gusta via-jar pescar escuchar muacutesica y tocar la guitarra Tengo un gato siberiano llamado Leia y soy fan de Star Wars

iquestQueacute consejo le dariacuteas a alguien que quiere aprender maacutes sobre la programacioacuten

Hacer software es algo increiacuteble y miacutestico Es una fusioacuten de arte y tecnologiacutea Nada te inspira maacutes que tu aplicacioacuten cuando empieza a cobrar vida Sin embargo siempre estaacute ahiacute el otro lado de la Fuerza Estar listo para instruirte inc-esantemente El desarrollo de software es una de las activi-dades que cambia maacutes raacutepido Si tienes pensado dejar de hacer software en uno o dos antildeos puede dejar de aprender ahora El conocimiento se volveraacute anticuado en un par de antildeos maacutes o menos Para estar en lo maacutes alto siempre tienes que correr Es similar a la cancioacutenrdquoRun like Hellrdquo de Pink Floyd Si estaacutes listo para vivir de esta forma seguro que tendraacutes eacutexito

ODROID MAGAZINE 33

Page 31: Estación ARCADE · gias de marketing, administración de medios sociales y producción multimedia impresa, web, vídeo y cine. Ges-tionando múltiples cuentas con agencias y productores

en un extremo Si tiene 6 pines ceacutentrate en los 4 pines centrales y sigue estas instrucciones

Negro - conectar a GNDrojo - conectar a VccVerde - conectar a rxi

blanco - conectar a txD

Conectando los sensoresultrasoacutenicos

En cada sensor ultrasoacutenico hay cuatro pines marcados Vcc Trig Echo Gnd Para el primer sensor ultrasoacutenico conecta el pin 2 del microcontrolador al pin ldquoTrigrdquo del sensor ultrasoacutenico Conecta el pin 3 del microcontrolador al pin ldquoEchordquo del sensor Conecte el pin ldquoVccrdquo del sensor a DC 5V (el pin ldquoVCCrdquo del microcontrolador suministra 5V) y el pin ldquoGndrdquo del sensor a una conexioacuten a tierra como por ejemplo los pines ldquoGNDrdquo del microcontrolador

Si conectas un segundo sensor de ultrasonidos conecta ldquoTrigrdquo al pin 4 y ldquoEchordquo al pin 5 Continuacutea conectando los siguientes pines a los sensores hasta los pines 12 y 13 si al final optas por conectar los seis sensores ultrasonidos

Conexioacuten del softwareUtilizas un programa terminal como PuTTY Screen o tu

lenguaje de script o programacioacuten favorito para conectarte al puerto serie que aparece cuando te conectas el sensor ultrasoacuteni-co Esto variaraacute en funcioacuten del sistema operativo que utilizas para conectarte al microcontrolador En Windows consultar el ldquoAdministrador de dispositivosrdquo es la forma maacutes comuacuten de averiguarlo En Linux ldquodmesgrdquo o ldquolsusbrdquo son las formas de de-tectar a queacute puerto estaacute conectado Deberiacuteas ver algo denomi-nado ldquoPL2303rdquo que es la conexioacuten del microcontrolador Si recibes informacioacuten basura en tu terminal cuando te conectes aseguacuterate de que los ajustes en serie son 9600 baudios 8 bits ninguno (paridad) y 1 bit de parada Aquiacute tienes una lista de los comandos que puede aceptar el microcontrolador

bull debug on Activa la retroalimentacioacuten detallada Estaacute deshabilitada por defecto nos proporcionaraacute aclaracio-nes sobre los errores de entrada

bull debug off desactiva la retroalimentacioacuten detalladabull init x y activa un HC-SR04 en los pines especificados

X es trigger Y es echo Estos deben ser pines digitales El dispositivo 0 estaacute preestablecido en los pines 2 y 3 de modo que no es necesario especificar estos pines La seleccioacuten de pines no vaacutelidos devolveraacute un signo de ex-clamacioacuten ()

bull ping enviacutea una sola lectura del HCSR04 previamente utilizado Si no se ha utilizado todaviacutea se usaraacute el dis-positivo 0 Si al comando le sigue un espacio y un nuacutemero entre 0-100 (exclusivo) se realizaraacute ese nuacutemero de lecturas emitiendo primero el promedio de esas lec-

SENSOR ULTRASONICO

turas despueacutes el nuacutemero de lecturas fallidas (que no cuentan para el promedio) y luego los valores miacutenimo y maacuteximo de lectura separados por espacios En cual-quier caso si una sentildeal se desconecta automaacuteticamente devolveraacute -1

bull start Hace ping constantemente a todos los dispositivos conectados en secuencia Debido a que los dispositivos se utilizan uno a uno el flujo de datos de este comando seraacute maacutes raacutepido si los dispositivos miden distancias cor-tas Si este comando le sigue un espacio y un nuacutemero mayor que 0 la placa esperaraacute estos milisegundos entre la lectura del uacuteltimo dispositivo y la lectura del primer dispositivo El resultado de este comando seraacute la lectura de cada dispositivo (con un uacutenico espacio despueacutes de cada uno) y una vuelta tras el uacuteltimo dispositivo

bull stop detiene la operacioacuten ldquostartrdquo soacutelo es efectivo tras haber iniciado ldquostartrdquo

bull mode emite el modo de medicioacuten del flujo M para meacutetrico (miliacutemetros) I para Imperial (deacutecimas de pul-gada) o R para Raw (la longitud de pulso en microse-gundos devuelta por el HC-SR04) El valor predeter-minado es M

bull timeout emite el tiempo de espera actual para lecturas de la sentildeal El tiempo de espera es la mayor cantidad de microsegundos que la placa esperaraacute antes de declarar que el HC-SR04 ha realizado una mala lectura lo cual no es necesariamente lo mismo que el pulso maacutes largo que la placa aceptaraacute del HC-SR04 Cuando la placa mide el pulso del HC-SR04 primero espera a que el HC-SR04 comience a enviar un pulso Este tiempo cuenta para el tiempo de espera Cuando este comando le sigue un espacio y un nuacutemero el tiempo de espera se ajusta a ese nuacutemero El valor predeterminado es 1 segundo (1000000 microsegundos)

bull ver emite informacioacuten de versioacuten y creacuteditos

Si cualquier comando (o ninguacuten comando) estaacute precedido por un uacutenico diacutegito de 0-5 (inclusive) seguido de un espacio el dispositivo que corresponde a ese diacutegito se seleccionaraacute para ser usado con el siguiente comando ldquopingrdquo Cada vez que la placa esteacute lista para un comando emitiraacute ldquogtrdquo para la serie La uacutenica excepcioacuten estaacute tras el comando ldquostartrdquo que no solicitaraacute entrada hasta que sea reconocido ldquostoprdquo

ODROID MAGAZINE 31

iquestCoacutemo empezaste con los ordenadoresCuando empeceacute mi negocio tuve que decidir queacute plat-

aforma de hardware iba a utilizar para la recogida de datos del traacutefico Simplemente para que no pienses mal de miacute mis caacutemaras de traacutefico no son las que se usan para multar por exceso de velocidad o algo asiacute Mi sistema estaba desti-nado suavizar el flujo de traacutefico fijando los controles oacutepti-mos de las sentildeales de traacutefico Anteriormente usaba un PC industrial para ejecutar mi software de reconocimiento de imaacutegenes Ahora uso la familia de dispositivos ODROID para esta cuestioacuten

iquestQueacute te atrajo de la plataforma ODROID En 2012 useacute Google para buscar una plataforma que

fuera muy compacta y al mismo tiempo potente para que cubriera mis necesidades que resultoacute ser la placa

Por favor haacuteblanos un poco sobre tiSoy ingeniero de electroacutenica y software en Rusia desde

hace 47 antildeos Naciacute en Siberia y tras terminar la escuela me mudeacute a Moscuacute para estudiar en la universidad Ser estudi-ante en el Instituto de Aviacioacuten de Moscuacute (MAI) fue una experiencia increiacuteble probablemente la mejor de mi vida A principios de los 90 llegoacute a Rusia la era de los microordena-dores soliacutea jugar a un juego de saltos en una CPU z80 y el i486 Tras finalizar mis estudios universitarios y de posgrado me convertiacute en ingeniero Trabajeacute en unos cuantos puestos de trabajo para diferentes empresas y finalmente decidiacute em-prender mi propio negocio En 2006 puse en marcha una iniciativa para crear sistemas de recuento del traacutefico de au-tomoacuteviles Estoy casado y tengo una hija de 21 antildeos llamada Lena que trabaja como enfermera Mi esposa Nadezhda es disentildeadora de vestuario de produccioacuten pero ahora trabaja como disentildeadora web Ella es aficionada a la fotografiacutea digi-tal y le encanta su caacutemara reacuteflex digital

COnOCIEnDO un ODROIDIAnvIACHESLAv ALEKSEEveditado por rob roy (robroy)

CONOCIENDO UN ODROIDIAN

Viacheslav disfruta tocando la guitarra y escuchando muacutesica

1995 en el campus MAi probando uno de los primeros equipos Vr comerciales del mundo que funcionaba a 640x480 a 30fps Utiliz-aba un sensor magneacutetico en la nuca para la posicioacuten de la cabeza la mejor broma que se podiacutea gastar a alguien era colocar un imaacuten cerca de la espalda y sacudirlo iexcllos gritos estaban garantizados cuando el mundo en 3D daba vueltas sin cesar

ODROID MAGAZINE 32

ODROID-X2 Con sus cuatro nuacutecleos funcionando a 17 GHz calculaba con facilidad los algoritmos de reconteo del traacutefico de automoacuteviles Maacutes tarde cambieacute al U3 y el XU4

iquestCuaacutel es tu ODROID favorito y por queacuteDe momento mi favorito es el XU4 Mi sistema estaacute

basado en el tratamiento de fotogramas de video en tiempo real por lo que el bus USB 30 del XU4 es bastante bueno para una caacutemara con una interfaz de captura de viacutedeo Para mi sistema es muy importante tener una buena conexioacuten entre la caacutemara de viacutedeo y la CPU Probablemente tendreacute que echar un vistazo a las interfaces de nivel inferior como MIPI CSI-2 que por desgracia estaacuten ausente en el XU4 Recientemente he estado aprendiendo como usar la caacute-mara oCam GS BW La caacutemara es buena en siacute misma pero para un uso industrial al aire libre tengo que implementar un software de control de exposicioacuten automaacutetica y posible-mente de control de apertura de la lente que todaviacutea estaacute en estudio

MEET AN ODROIDIAN

Una vieja joya el mini ordenador Nixdorf

An old gem the Nixdorf mini computer

CONOCIENDO UN ODROIDIAN

iquestQueacute aficiones e intereses tienes aparte de los ordenadoresDisfruto conduciendo y leyendo sobre coches y viendo

los campeonatos de carreras de F1 Tambieacuten me gusta via-jar pescar escuchar muacutesica y tocar la guitarra Tengo un gato siberiano llamado Leia y soy fan de Star Wars

iquestQueacute consejo le dariacuteas a alguien que quiere aprender maacutes sobre la programacioacuten

Hacer software es algo increiacuteble y miacutestico Es una fusioacuten de arte y tecnologiacutea Nada te inspira maacutes que tu aplicacioacuten cuando empieza a cobrar vida Sin embargo siempre estaacute ahiacute el otro lado de la Fuerza Estar listo para instruirte inc-esantemente El desarrollo de software es una de las activi-dades que cambia maacutes raacutepido Si tienes pensado dejar de hacer software en uno o dos antildeos puede dejar de aprender ahora El conocimiento se volveraacute anticuado en un par de antildeos maacutes o menos Para estar en lo maacutes alto siempre tienes que correr Es similar a la cancioacutenrdquoRun like Hellrdquo de Pink Floyd Si estaacutes listo para vivir de esta forma seguro que tendraacutes eacutexito

ODROID MAGAZINE 33

Page 32: Estación ARCADE · gias de marketing, administración de medios sociales y producción multimedia impresa, web, vídeo y cine. Ges-tionando múltiples cuentas con agencias y productores

iquestCoacutemo empezaste con los ordenadoresCuando empeceacute mi negocio tuve que decidir queacute plat-

aforma de hardware iba a utilizar para la recogida de datos del traacutefico Simplemente para que no pienses mal de miacute mis caacutemaras de traacutefico no son las que se usan para multar por exceso de velocidad o algo asiacute Mi sistema estaba desti-nado suavizar el flujo de traacutefico fijando los controles oacutepti-mos de las sentildeales de traacutefico Anteriormente usaba un PC industrial para ejecutar mi software de reconocimiento de imaacutegenes Ahora uso la familia de dispositivos ODROID para esta cuestioacuten

iquestQueacute te atrajo de la plataforma ODROID En 2012 useacute Google para buscar una plataforma que

fuera muy compacta y al mismo tiempo potente para que cubriera mis necesidades que resultoacute ser la placa

Por favor haacuteblanos un poco sobre tiSoy ingeniero de electroacutenica y software en Rusia desde

hace 47 antildeos Naciacute en Siberia y tras terminar la escuela me mudeacute a Moscuacute para estudiar en la universidad Ser estudi-ante en el Instituto de Aviacioacuten de Moscuacute (MAI) fue una experiencia increiacuteble probablemente la mejor de mi vida A principios de los 90 llegoacute a Rusia la era de los microordena-dores soliacutea jugar a un juego de saltos en una CPU z80 y el i486 Tras finalizar mis estudios universitarios y de posgrado me convertiacute en ingeniero Trabajeacute en unos cuantos puestos de trabajo para diferentes empresas y finalmente decidiacute em-prender mi propio negocio En 2006 puse en marcha una iniciativa para crear sistemas de recuento del traacutefico de au-tomoacuteviles Estoy casado y tengo una hija de 21 antildeos llamada Lena que trabaja como enfermera Mi esposa Nadezhda es disentildeadora de vestuario de produccioacuten pero ahora trabaja como disentildeadora web Ella es aficionada a la fotografiacutea digi-tal y le encanta su caacutemara reacuteflex digital

COnOCIEnDO un ODROIDIAnvIACHESLAv ALEKSEEveditado por rob roy (robroy)

CONOCIENDO UN ODROIDIAN

Viacheslav disfruta tocando la guitarra y escuchando muacutesica

1995 en el campus MAi probando uno de los primeros equipos Vr comerciales del mundo que funcionaba a 640x480 a 30fps Utiliz-aba un sensor magneacutetico en la nuca para la posicioacuten de la cabeza la mejor broma que se podiacutea gastar a alguien era colocar un imaacuten cerca de la espalda y sacudirlo iexcllos gritos estaban garantizados cuando el mundo en 3D daba vueltas sin cesar

ODROID MAGAZINE 32

ODROID-X2 Con sus cuatro nuacutecleos funcionando a 17 GHz calculaba con facilidad los algoritmos de reconteo del traacutefico de automoacuteviles Maacutes tarde cambieacute al U3 y el XU4

iquestCuaacutel es tu ODROID favorito y por queacuteDe momento mi favorito es el XU4 Mi sistema estaacute

basado en el tratamiento de fotogramas de video en tiempo real por lo que el bus USB 30 del XU4 es bastante bueno para una caacutemara con una interfaz de captura de viacutedeo Para mi sistema es muy importante tener una buena conexioacuten entre la caacutemara de viacutedeo y la CPU Probablemente tendreacute que echar un vistazo a las interfaces de nivel inferior como MIPI CSI-2 que por desgracia estaacuten ausente en el XU4 Recientemente he estado aprendiendo como usar la caacute-mara oCam GS BW La caacutemara es buena en siacute misma pero para un uso industrial al aire libre tengo que implementar un software de control de exposicioacuten automaacutetica y posible-mente de control de apertura de la lente que todaviacutea estaacute en estudio

MEET AN ODROIDIAN

Una vieja joya el mini ordenador Nixdorf

An old gem the Nixdorf mini computer

CONOCIENDO UN ODROIDIAN

iquestQueacute aficiones e intereses tienes aparte de los ordenadoresDisfruto conduciendo y leyendo sobre coches y viendo

los campeonatos de carreras de F1 Tambieacuten me gusta via-jar pescar escuchar muacutesica y tocar la guitarra Tengo un gato siberiano llamado Leia y soy fan de Star Wars

iquestQueacute consejo le dariacuteas a alguien que quiere aprender maacutes sobre la programacioacuten

Hacer software es algo increiacuteble y miacutestico Es una fusioacuten de arte y tecnologiacutea Nada te inspira maacutes que tu aplicacioacuten cuando empieza a cobrar vida Sin embargo siempre estaacute ahiacute el otro lado de la Fuerza Estar listo para instruirte inc-esantemente El desarrollo de software es una de las activi-dades que cambia maacutes raacutepido Si tienes pensado dejar de hacer software en uno o dos antildeos puede dejar de aprender ahora El conocimiento se volveraacute anticuado en un par de antildeos maacutes o menos Para estar en lo maacutes alto siempre tienes que correr Es similar a la cancioacutenrdquoRun like Hellrdquo de Pink Floyd Si estaacutes listo para vivir de esta forma seguro que tendraacutes eacutexito

ODROID MAGAZINE 33

Page 33: Estación ARCADE · gias de marketing, administración de medios sociales y producción multimedia impresa, web, vídeo y cine. Ges-tionando múltiples cuentas con agencias y productores

ODROID-X2 Con sus cuatro nuacutecleos funcionando a 17 GHz calculaba con facilidad los algoritmos de reconteo del traacutefico de automoacuteviles Maacutes tarde cambieacute al U3 y el XU4

iquestCuaacutel es tu ODROID favorito y por queacuteDe momento mi favorito es el XU4 Mi sistema estaacute

basado en el tratamiento de fotogramas de video en tiempo real por lo que el bus USB 30 del XU4 es bastante bueno para una caacutemara con una interfaz de captura de viacutedeo Para mi sistema es muy importante tener una buena conexioacuten entre la caacutemara de viacutedeo y la CPU Probablemente tendreacute que echar un vistazo a las interfaces de nivel inferior como MIPI CSI-2 que por desgracia estaacuten ausente en el XU4 Recientemente he estado aprendiendo como usar la caacute-mara oCam GS BW La caacutemara es buena en siacute misma pero para un uso industrial al aire libre tengo que implementar un software de control de exposicioacuten automaacutetica y posible-mente de control de apertura de la lente que todaviacutea estaacute en estudio

MEET AN ODROIDIAN

Una vieja joya el mini ordenador Nixdorf

An old gem the Nixdorf mini computer

CONOCIENDO UN ODROIDIAN

iquestQueacute aficiones e intereses tienes aparte de los ordenadoresDisfruto conduciendo y leyendo sobre coches y viendo

los campeonatos de carreras de F1 Tambieacuten me gusta via-jar pescar escuchar muacutesica y tocar la guitarra Tengo un gato siberiano llamado Leia y soy fan de Star Wars

iquestQueacute consejo le dariacuteas a alguien que quiere aprender maacutes sobre la programacioacuten

Hacer software es algo increiacuteble y miacutestico Es una fusioacuten de arte y tecnologiacutea Nada te inspira maacutes que tu aplicacioacuten cuando empieza a cobrar vida Sin embargo siempre estaacute ahiacute el otro lado de la Fuerza Estar listo para instruirte inc-esantemente El desarrollo de software es una de las activi-dades que cambia maacutes raacutepido Si tienes pensado dejar de hacer software en uno o dos antildeos puede dejar de aprender ahora El conocimiento se volveraacute anticuado en un par de antildeos maacutes o menos Para estar en lo maacutes alto siempre tienes que correr Es similar a la cancioacutenrdquoRun like Hellrdquo de Pink Floyd Si estaacutes listo para vivir de esta forma seguro que tendraacutes eacutexito

ODROID MAGAZINE 33