Estación ARCADE · gias de marketing, administración de medios sociales y producción multimedia...
Transcript of Estación ARCADE · gias de marketing, administración de medios sociales y producción multimedia...
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
$ 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
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
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
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
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