escuela universitaria de ingenierÍa tÉcnica de...

99
UNIVERSIDAD POLITÉCNICA DE MADRID ESCUELA UNIVERSITARIA DE INGENIERÍA TÉCNICA DE TELECOMUNICACIÓN PROYECTO DE FIN DE CARRERA PROGRAMACIÓN CONCURRENTE ORIENTADA A EVENTOS EN ARDUINO PARA EL INTERNET DE LAS COSAS AITOR CANTERO ROMERO SEPTIEMBRE 2017

Upload: vuongliem

Post on 01-Oct-2018

218 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: ESCUELA UNIVERSITARIA DE INGENIERÍA TÉCNICA DE ...oa.upm.es/49224/1/PFC_AITOR_CANTERO_ROMERO.pdf · Para!concluir,!se!documenta!un!ejemplo!de!un!proyecto ... y!bajo!el!control!de!un!programa!

UNIVERSIDAD POLITÉCNICA DE

MADRID

ESCUELA UNIVERSITARIA

DE INGENIERÍA TÉCNICA

DE TELECOMUNICACIÓN

PROYECTO DE FIN DE CARRERA

PROGRAMACIÓN CONCURRENTE

ORIENTADA A EVENTOS EN ARDUINO PARA

EL INTERNET DE LAS COSAS

AITOR CANTERO ROMERO

SEPTIEMBRE 2017!

Page 2: ESCUELA UNIVERSITARIA DE INGENIERÍA TÉCNICA DE ...oa.upm.es/49224/1/PFC_AITOR_CANTERO_ROMERO.pdf · Para!concluir,!se!documenta!un!ejemplo!de!un!proyecto ... y!bajo!el!control!de!un!programa!
Page 3: ESCUELA UNIVERSITARIA DE INGENIERÍA TÉCNICA DE ...oa.upm.es/49224/1/PFC_AITOR_CANTERO_ROMERO.pdf · Para!concluir,!se!documenta!un!ejemplo!de!un!proyecto ... y!bajo!el!control!de!un!programa!

 

 

Resumen  

Este  proyecto  fin  de  carrera  propone  enmarcar  en  un  contexto  tecnológico  

el   desarrollo   de   una   aplicación   para   Internet   de   las   Cosas,   desde   una   línea   de  

trabajo  concreta,  en  la  que  se  incluye  el  paradigma  de  la  programación  dirigida  por  

eventos  y  una  plataforma  hardware  y  software  libre  como  Arduino.  

Para  ello   se   incluye  el  estudio  y   la   comparativa  de   las  diferentes  opciones  

existentes  para  cada  uno  de  los  elementos  constituyentes  del  sistema  completo,  así  

como  la  realización  de  un  caso  práctico,  particularizado  en  un  sistema  de  control  

de  congestión  de  tráfico  mediante  semáforos  inteligentes.  

   

Page 4: ESCUELA UNIVERSITARIA DE INGENIERÍA TÉCNICA DE ...oa.upm.es/49224/1/PFC_AITOR_CANTERO_ROMERO.pdf · Para!concluir,!se!documenta!un!ejemplo!de!un!proyecto ... y!bajo!el!control!de!un!programa!

 

 

Abstract  

This   final   project   aims   to   frame   an   Internet   of   Things  

application  development  in  a   technological   context,   from  a   concrete   line  of  work,  

which  includes  event-­‐driven  programming  paradigm  and  free  hardware-­‐software  

platform  as  Arduino.  

This   includes   the   study   and   comparison   of   the   different  available  options  

for  each  constituent  element  of  the  entire  system.  

It  wraps  up  with  the  realization  of  a  practical  case,  particularized  in  a  traffic  

congestion  control  system  using  smart  traffic  lights.    

Page 5: ESCUELA UNIVERSITARIA DE INGENIERÍA TÉCNICA DE ...oa.upm.es/49224/1/PFC_AITOR_CANTERO_ROMERO.pdf · Para!concluir,!se!documenta!un!ejemplo!de!un!proyecto ... y!bajo!el!control!de!un!programa!

Aitor&Cantero&Romero&&&&&&&&&&&&&&&&&&&&&&&Programación&concurrente&orientada&a&eventos&en&Arduino&para&el&Internet&de&las&Cosas&&

! 7!

Índice!

Capitulo!1:!Introducción!y!objetivos!.........................................................................................!9!

1.1! Introducción!.........................................................................................................................!9!

1.2! Objetivos!..............................................................................................................................!10!

Capítulo!2:!Definiciones!previas!................................................................................................!11!

2.1!Computadora!.........................................................................................................................!11!

2.2!Procesador!..............................................................................................................................!14!

2.3!Núcleo,!multiprocesador,!multinúcleo!y!computación!distribuida!...............!14!

2.3!Microcontrolador!.................................................................................................................!15!

2.4!Sistema!Operativo!...............................................................................................................!16!

2.6!Procesos!e!hilos!....................................................................................................................!20!

2.7!Programación!concurrente!.............................................................................................!22!

2.8!Programación!dirigida!por!eventos!.............................................................................!24!

2.9!Internet!de!las!cosas!...........................................................................................................!25!

Capítulo!3:!Hardware!.....................................................................................................................!29!

3.1!Arduino!....................................................................................................................................!29!

3.2!Comparativa!frente!a!la!competencia.!Arduino!vs!PIC!........................................!31!

Capitulo!4:!Software!.......................................................................................................................!33!

4.1!Estado!del!arte.!Estudio!de!las!diferentes!opciones!.............................................!33!

4.2!Basadas!en!Sistemas!Operativos!...................................................................................!33!

4.2.1!QPTMWnano!......................................................................................................................!33!

4.2.2!RTuinOS!..........................................................................................................................!36!

4.2.3!Contiki!OS!.......................................................................................................................!40!

4.3!Basadas!en!lenguaje!de!programación!.......................................................................!43!

4.3.1!OccamW!π!.........................................................................................................................!43!

4.3.2!Protothreads!.................................................................................................................!46!

Capitulo!5.!Conectividad!...............................................................................................................!51!

5.1!Consideraciones!previas!...................................................................................................!51!

5.1.1!Modelo!OSI!.....................................................................................................................!51!

5.1.2!Modelo!TCP/IP!.............................................................................................................!53!

5.1.3!Internet.!IPv4!e!IPv6.!.................................................................................................!54!

5.1.4!Conceptos!de!IPv6!......................................................................................................!56!

5.1.5!Autoconfiguración!de!dirección!IPv6.!SLAAC!.................................................!59!

Page 6: ESCUELA UNIVERSITARIA DE INGENIERÍA TÉCNICA DE ...oa.upm.es/49224/1/PFC_AITOR_CANTERO_ROMERO.pdf · Para!concluir,!se!documenta!un!ejemplo!de!un!proyecto ... y!bajo!el!control!de!un!programa!

Aitor&Cantero&Romero&&&&&&&&&&&&&&&&&&&&&&&Programación&concurrente&orientada&a&eventos&en&Arduino&para&el&Internet&de&las&Cosas&&

!8!

5.1.6!Topologías!de!Red!.......................................................................................................!61!

5.2!Tecnologías!de!red!local!inalámbrica!.........................................................................!64!

5.2.1!WiWFi!.................................................................................................................................!64!

5.2.2!Bluetooth!4.0!.................................................................................................................!66!

5.2.3!ZigBee!...............................................................................................................................!67!

5.2.4!ANT!....................................................................................................................................!69!

5.2.5!Comparativa!entre!WiWFi,!Bluetooth!4.0,!ZigBee!y!ANT!.............................!71!

Capitulo!6.!!Caso!práctico.!Aplicación!Semáforo!Conectado!..........................................!75!

6.1!Automaton!framework!......................................................................................................!75!

6.1.1!“Hola!mundo”!en!Automaton!.................................................................................!77!

6.1.2!¿Cómo!funciona?!..........................................................................................................!78!

6.1.2.1!La!clase!Machine!.................................................................................................!78!

6.1.2.2!La!clase!Automaton!...........................................................................................!82!

6.1.2.3!La!comunicación!entre!máquinas!................................................................!82!

6.1.3!Creación!de!componentes!propios!......................................................................!84!

6.2!Microcontrolador!ESP8266!.............................................................................................!87!

6.3!Diseño!.......................................................................................................................................!88!

6.4!Protocolo!de!comunicaciones!de!red.!REST!.............................................................!90!

6.5!Implementación!...................................................................................................................!92!

Capítulo!8.!Conclusiones!............................................................................................................!105!

Capítulo!9.!Bibliografía!...............................................................................................................!107!

!

! !

Page 7: ESCUELA UNIVERSITARIA DE INGENIERÍA TÉCNICA DE ...oa.upm.es/49224/1/PFC_AITOR_CANTERO_ROMERO.pdf · Para!concluir,!se!documenta!un!ejemplo!de!un!proyecto ... y!bajo!el!control!de!un!programa!

Aitor&Cantero&Romero&&&&&&&&&&&&&&&&&&&&&&&Programación&concurrente&orientada&a&eventos&en&Arduino&para&el&Internet&de&las&Cosas&&

! 9!

Capitulo&1:&Introducción&y&objetivos&

1.1 Introducción&

Actualmente!y!debido!al!auge!principalmente!de!Internet!de!las!Cosas!(IoT,!

Internet!of!Things)!el!paradigma!de!la!programación!orientada!a!eventos!es!cada!

vez!más!popular.!La!esencia!de!este!modelo!de!programación!en!lugar!de!tratar!los!

procesos! secuencialmente,! los! formula! como! procesos! aislados,! independientes,!

que!son!lanzados!en!el!momento!en!que!se!requieran.!En!definitiva,!es!un!modelo!

orientado! a! sistemas! reactivos:! sistemas! que! hacen! algo! (reaccionan)! cuando!

ocurre!algo!(un!evento).!Esta!filosofía!se!puede!resumir!en!una!frase:!

!

Esto sucede cuando eso sucede

!

Esto! es! la! reacción! (ubicada! en! el! futuro! inmediato).! Eso! es! el! evento!

(ubicado!en!el! pasado! inmediato).!Cuando! es! la! asociación!evento–reacción.!Esta!

relación!puede!o!no!estar!restringida!a!un!intervalo!de!tiempo!crítico!(como!es!el!

caso!de!los!sistemas!de!tiempo!real).!De!esta!manera!se!forman!redes!de!acción–

reacción! que! regulan! el! comportamiento! del! sistema! (como! es! el! caso! de! las!

máquinas! de! estado! finito)! pero!que! cada!esto! funciona! independientemente!del!

resto.!

En! el! ámbito! de! Internet! de! las! Cosas,! las! cosas, son! heterogéneas! e!

interconectadas.! Una! cosa! es! algo! que! puede! hacer! algo.! Un! sistema! de!

computación! (grande! o! pequeño)! con! capacidad! de! procesar! y! transmitir!

información.!!

En!este!proyecto!se!desarrolla!el!concepto!de!la!programación!orientada!a!

eventos,! las! diferentes! iniciativas! posibles! y! se! implementa,! a!modo! de! ejemplo,!

una!estrategia!particular!de!este!paradigma!basada!en!máquinas!de!estado!sobre!la!

plataforma! de! desarrollo! de! prototipos! Arduino! (un! proyecto! de! software! y!

hardware!de!libre!distribución!barato!y!simple).!

El!desarrollo!final,!es!un!mero!ejemplo!de!las!tecnologías,!métodos!y!vías!de!

programación!que!permiten!conseguir!un!proyecto!de!esta! índole,! con! la! idea!de!

que!pueda!ser!tenida!en!consideración!y/o!aplicada!por!siguientes!desarrolladores.!

! !

Page 8: ESCUELA UNIVERSITARIA DE INGENIERÍA TÉCNICA DE ...oa.upm.es/49224/1/PFC_AITOR_CANTERO_ROMERO.pdf · Para!concluir,!se!documenta!un!ejemplo!de!un!proyecto ... y!bajo!el!control!de!un!programa!

Aitor&Cantero&Romero&&&&&&&&&&&&&&&&&&&&&&&Programación&concurrente&orientada&a&eventos&en&Arduino&para&el&Internet&de&las&Cosas&&

!10!

1.2 Objetivos&

El! objetivo!de! este!proyecto! es! realizar!un! estudio! sobre! las! vías!posibles!

para!programar!de!manera! concurrente! y! orientada! a! eventos! en! general,! en!un!

microcontrolador! Arduino! en! particular,! utilizando! los! protocolos! de!

comunicación!necesarios,!para!el!Internet!de!las!Cosas.!

A! lo! largo! de! este! proyecto! se! presentan! una! serie! de! conceptos! previos!

necesarios!para!enmarcar!el!problema!que!se!afronta.!!También!se!va!a!sondear!el!

estado!actual!de!la!tecnología,!tanto!física!como!lógica,!para!justificar!la!elección!de!

la!propuesta!adoptada.!

Para!concluir,! se!documenta!un!ejemplo!de!un!proyecto!completo!a!modo!

de! demostración,! comprendiendo! en! la! medida! de! lo! posible,! la! modularidad! y!

heterogeneidad!que!el!Internet!de!las!Cosas!admite.!

Dado! el! carácter! abierto! del! estudio! realizado,! se! puede! utilizar! la!

experiencia! documentada! en! esta! memoria! como! guía! para! un! proyecto! donde!

encajen!mejor!otras!vías!no!elegidas!por!su!autor.!

! &

Page 9: ESCUELA UNIVERSITARIA DE INGENIERÍA TÉCNICA DE ...oa.upm.es/49224/1/PFC_AITOR_CANTERO_ROMERO.pdf · Para!concluir,!se!documenta!un!ejemplo!de!un!proyecto ... y!bajo!el!control!de!un!programa!

Aitor&Cantero&Romero&&&&&&&&&&&&&&&&&&&&&&&Programación&concurrente&orientada&a&eventos&en&Arduino&para&el&Internet&de&las&Cosas&&

! 11!

Capítulo&2:&Definiciones&previas&

2.1&Computadora&

“La! computadora! (del! inglés:! computer;! y! este! del! latín:! computare,!

'calcular'),! también! denominada! computador! y! ordenador,! es! una! máquina!

electrónica! que! recibe! y! procesa! datos,! para! convertirlos! en! información!

conveniente!y!útil,!que!pueda!ser!analizada!y!utilizada!por!humanos.!Un!ordenador!

está! formado! físicamente! por! numerosos! circuitos! integrados! y! muchos!

componentes!de!apoyo,! extensión!y!accesorios,!que!en!conjunto!pueden!ejecutar!

tareas!diversas!con!suma!rapidez!y!bajo!el!control!de!un!programa!(software).”!!

Las!partes!que!componen!un!ordenador!apenas!han!variado!desde!que!se!

construyese!la!primera!computadora!digital!en!1946,!llamada!ENIAC.!Estas!partes,!

como!mínimo,!son:!procesador,!memoria!principal,!periféricos!de!entrada/salida!y!

sus!interconexiones.!

!

Figura&2.1!IBM!PC!5150.!El!primer!ordenador!personal!PC,!del!año!1981.&&

!

Un!funcionamiento!básico!completo!de!una!computadora,!se!puede!resumir!

como!sigue:!una!lista!de!instrucciones!colocadas!en!la!memoria!principal!con!cierto!

propósito,! son! interpretadas! y! resueltas! secuencialmente! por! el! procesador,!

colocando! los! resultados! de! dichos! cálculos! en! una! parte! de! la! memoria,! para!

posteriormente!mostrarlos!por!algún!dispositivo!de!salida,!como!un!monitor!o!una!

impresora!o!ser!transmitido!a!través!de!algún!enlace!o!módem.!

Page 10: ESCUELA UNIVERSITARIA DE INGENIERÍA TÉCNICA DE ...oa.upm.es/49224/1/PFC_AITOR_CANTERO_ROMERO.pdf · Para!concluir,!se!documenta!un!ejemplo!de!un!proyecto ... y!bajo!el!control!de!un!programa!

Aitor&Cantero&Romero&&&&&&&&&&&&&&&&&&&&&&&Programación&concurrente&orientada&a&eventos&en&Arduino&para&el&Internet&de&las&Cosas&&

!12!

Este!funcionamiento!es!similar!a!la!preparación!de!una!receta!por!parte!de!

un!cocinero.!La!receta!es!la!lista!de!instrucciones,!a!la!que!llamamos!programa,!que!

hemos! colocado! en! la! memoria.! El! cocinero! es! en! este! caso! el! procesador,!

encargado!de!asimilar!secuencialmente!todos! los!pasos!enumerados!en! la!receta:!

poner!un!litro!de!agua!con!sal!en!una!cacerola!a!fuego!lento,!añadir!300!gramos!de!

pasta!cuando!el!agua!hierva,!remover!durante!12!minutos!el!contenido!de!la!olla,!

para! retirarlo! más! tarde,! escurriéndolo! y! añadiendo! una! salsa! de! tomate,!

finalizando!con!la!colocación!en!el!plato.!El!cocinero!solo!sabe! interpretar!ciertas!

instrucciones! pactadas! previamente.! No! es! posible! pedirle! al! cocinero! que! sepa!

tocar!el!piano.!Para!que!la!receta!(programa)!se!cocine,!se!necesita!hacer!uso!de!los!

fogones,! la! nevera,! un! reloj,! etc.! (dispositivos! o! periféricos),! hasta! obtener,! por!

ejemplo,!un!plato!de!pasta!(resultado!final).!

Cuando! se! construyeron! las! primeras! computadoras,! del! tamaño! de! un!

edificio,! se! programaban! mecánicamente! sus! conexiones! para! poder! variar! el!

comportamiento! de! sus! instrucciones! y! obtener! el! resultado! final,! que! podía! ser!

impreso,!visualmente!mediante!una!serie!de!bombillas!o!emitiendo!ciertos!pitidos.!

Según! se! ha! ido! desarrollando! la! computación,! se! pasó! de! la! programación! tan!

tediosa!por!parte!de!un!operador!mediante!infinidad!de!cables,!a!hacerlo!mediante!

instrucciones! en! tarjetas! perforadas,! para! más! tarde! tomar! esas! órdenes! de!

dispositivos! electromagnéticos.! En! paralelo,! la! evolución! de! los! componentes!

electrónicos,! transistores! basados! en! semiconductores! como! el! silicio,! su!

producción!en!serie,! los!circuitos! impresos!integrados!y! la!miniaturización!de!los!

componentes!dieron!lugar!a!la!computadora!personal!a!principios!de!la!década!de!

los! 80.! Todo! esto! constituye! la! parte! tangible! del! ordenador:! el! hardware.! En!

cuanto!a!la!parte!intangible!de!un!ordenador,!el!software.!En!origen,!el!procesador!

recibía!estímulos!eléctricos!gracias!al!conexionado!de!cables.!Más!tarde!recibía!las!

instrucciones! tras! leer! una! cinta! con! perforaciones! binarias! de! una! longitud! fija!

(siendo! 0! la! región! sin! perforar! y! 1! la! perforada,! por! ejemplo)! con! la! que! se!

formaban!palabras!de!código!binario.!Después,!las!tarjetas!perforadas!dieron!paso!

a! las!cintas!perforadas,!cintas!y!discos!electromagnéticos!y!memorias!basadas!en!

chips!electrónicos!como!en!nuestros!días.!Es! crucial,!que!para! la! composición!de!

las!instrucciones!en!dicha!memoria,!haya!habido!una!evolución!comparable!a!la!de!

la! parte! física! de! la! computadora.! Para! programas! sencillos,! con! unas! cuantas!

Page 11: ESCUELA UNIVERSITARIA DE INGENIERÍA TÉCNICA DE ...oa.upm.es/49224/1/PFC_AITOR_CANTERO_ROMERO.pdf · Para!concluir,!se!documenta!un!ejemplo!de!un!proyecto ... y!bajo!el!control!de!un!programa!

Aitor&Cantero&Romero&&&&&&&&&&&&&&&&&&&&&&&Programación&concurrente&orientada&a&eventos&en&Arduino&para&el&Internet&de&las&Cosas&&

! 13!

instrucciones! de! código! máquina! Wcomo! se! conoce! a! las! instrucciones! que! un!

determinado!procesador!puede!interpretarW!valía.!Tanto!para!el!programador!que!

diseñaba! el! algoritmo! como! para! el! operador! de!máquina,! que! se! encargaba! de!

hacer! funcionar!el! ordenador! con!esas! instrucciones!–y!que!muchas!veces! era! el!

mismo! ingenieroW! estas! programaciones! iban! aumentando! en! complejidad,! y! se!

hacía!tedioso!e! inviable,!por! lo!que!fue!necesario!encontrar! la!manera!de!agilizar!

este!proceso.!Para!ello!se!crearon!los!lenguajes!de!programación.!!

!

c = a + b;

! _asm { MOV AX, a MOV BX, b ADD AX, BX MOV c, AX };

! 0: 66 a1 00 00 00 00 6: 66 8b 1d 00 00 00 00 d: 66 01 d8 10: 66 a3 00 00 00 00

a)!lenguaje!C! ! b)!ensamblador! ! c)!código!máquina!

Figura&2.2&Comparación!entre!lenguaje!de!alto!nivel!C,!lenguaje!ensamblador!

Intel!8086!y!código!máquina!8086.!

!

Un! lenguaje!de!programación!es!un! ! lenguaje! formado!por!un!conjunto!de!

reglas! sintácticas! y! semánticas! precisas,! que! sirve! para! expresar! la! manera! de!

afrontar! un! problema! mediante! una! computadora.! Normalmente,! el! código! de!

programación! escrito! en! un! lenguaje! de! programación! concreto,! debe! ser!

transformado! a! código! máquina! legible! por! un! procesador! o! sistema.! A! esta!

transformación! se! la! conoce! compilación.! A! los! lenguajes! de! programación! más!

primitivos! se! les! conoce! como! lenguaje! ensamblador,! que! apenas! modifican! el!

lenguaje! máquina! por! ciertas! palabras! haciendo! referencia! al! resultado! de! sus!

instrucciones.! Según! el! programador! es! abstraído! y! separado! del! lenguaje!

máquina,! se! dice! que! el! lenguaje! es! de! más! alto! nivel.! El! límite! es! el! lenguaje!

natural!que!utilizamos!las!personas!para!comunicarnos!a!diario.!Se!puede!observar!

la!diferencia!entre!lenguajes!máquina,!ensamblador!y!de!nivel!alto!en!la!Figura!2.2.!!

Tanto!el!lenguaje!de!alto!nivel,!como!el!lenguaje!ensamblador,!son!legibles!para!el!

programador.! En! el! caso! del! código! máquina,! es! el! decodificador! alojado! en! el!

procesador!el!que!debe!interpretar!esta!información.!

Page 12: ESCUELA UNIVERSITARIA DE INGENIERÍA TÉCNICA DE ...oa.upm.es/49224/1/PFC_AITOR_CANTERO_ROMERO.pdf · Para!concluir,!se!documenta!un!ejemplo!de!un!proyecto ... y!bajo!el!control!de!un!programa!

Aitor&Cantero&Romero&&&&&&&&&&&&&&&&&&&&&&&Programación&concurrente&orientada&a&eventos&en&Arduino&para&el&Internet&de&las&Cosas&&

!14!

2.2&Procesador&

Un!procesador!o!unidad!central!de!procesamiento!(CPU,!por!sus!siglas!del!

inglés:!Central,Processing,Unit)!es!la!parte!más!importante!de!una!computadora!o!

sistema!informático.!Es!el!“cerebro”!de!la!máquina.!A!nivel!interno,!se!compone,!en!

base,!de!lo!siguiente:!!

• La! unidad! aritméticoWlógica! o! (ALU,! por! sus! siglas! del! inglés:! Arithmetic:

Logic, Unit)! donde! se! realiza! las! operaciones! matemáticas! y! lógicas.! Esta!

parte!del!procesador!se!encarga!de!sumar,!restar,!la!operación!lógica!AND,!o!

comparar!por!ejemplo.!!

• La! unidad! de! control! (UC)! que! interpreta! las! instrucciones! y! controla! su!

ejecución.!

• Registros.! Son! regiones! de! memoria! de! alta! velocidad! y! poca! capacidad!

donde! se! almacenan! valores! utilizados! a! corto! plazo! por! el! procesador.!

Pueden! encontrarse! registros! de! datos,! memoria,! propósito! general,! de!

coma! flotante! y! propósito! específico.! Estos! últimos! contienen! entre! otra!

información!el!puntero!de!programa,!que!permite!saber!cual!es!la!siguiente!

posición!de!memoria!a!interpretar.!

En!el!procesador!pueden!encontrarse!otras!unidades!como!la!de!cálculo!para!coma!

flotante,!memoria!caché,!controlador!de!memoria!como!en!la!arquitectura!core,i!de!

Intel,!etc.!

Un! microprocesador! es! un! procesador! donde! todas! sus! partes! están!

integradas!en!un!mismo!chip.!En!adelante!en!este!documento!microprocesador!y!

procesador! lo! utilizaré! de! manera! indistinta.! El! primer! microprocesador! fue! el!

4004!desarrollado!por!la!empresa!Intel!en!1971.!

2.3&Núcleo,&multiprocesador,&multinúcleo&y&computación&distribuida&

Un! núcleo! de! procesamiento! es! la! parte! esencial! de! un!microprocesador.!

Por!tanto!un!microprocesador!siempre!tiene!al!menos!un!núcleo.!Desde!mediados!

de! la! década! de! 1980! existen! microprocesadores! con! dos! o! más! núcleos.! Esto!

conlleva!a!una!complicación!en!el!hardware,!que!debe!ser!tenida!en!cuenta!tanto!

por! el! resto! del! hardware! del! ordenador,! como! por! el! sistema! operativo! y! el!

software!que!corra!sobre!el.!La!arquitectura!multinúcleo!puede!contener!dos!o!más!

CPU,!memoria! caché! y/o! unidad! de! coma! flotante! compartida! entre! los! núcleos,!

Page 13: ESCUELA UNIVERSITARIA DE INGENIERÍA TÉCNICA DE ...oa.upm.es/49224/1/PFC_AITOR_CANTERO_ROMERO.pdf · Para!concluir,!se!documenta!un!ejemplo!de!un!proyecto ... y!bajo!el!control!de!un!programa!

Aitor&Cantero&Romero&&&&&&&&&&&&&&&&&&&&&&&Programación&concurrente&orientada&a&eventos&en&Arduino&para&el&Internet&de&las&Cosas&&

! 15!

memoria!caché!individual!para!cada!núcleo,!etc.!Con!estos!procesadores!especiales!

se!pueden!interpretar!instrucciones!de!memoria!de!manera!paralela!y!simultánea.!!

Otra! variante!diferente!para! conseguir!un! resultado! similar,! es!utilizar!un!

sistema!con!dos!o!más!microprocesadores.!Entraña!una!complejidad!parecida!a!la!

introducida! por! un! chip! multinúcleo.! A! esta! disposición! se! la! conoce! como!

multiprocesador.! Estos! pueden! compartir! la! memoria! principal! del! sistema!

(arquitectura!SMP),!o!bien!acceder!únicamente!y!exclusivamente!a!una!parte!de!la!

memoria!asignada!(arquitectura!NUMA).!!

!

!

Figura&2.3&a)!multiprocesador!con!memoria!compartida.!b)!multiprocesador!con!

memoria!dedicada.!c)!sistema!distribuido!con!comunicación!a!través!de!Internet.!

!

Los! mismos! mecanismos! que! hay! que! tener! en! cuenta! para! la! correcta!

sincronización! y! ejecución! de! tareas! de! forma! paralela! en! un! sistema!

multiprocesador,!se!pueden!dar!en!un!sistema!distribuido,!es!decir,!en!el!que! los!

procesadores!tengan!que!comunicarse!a!través!de!una!red!de!datos!(local!o!global).!

!

2.3&Microcontrolador&

Un!microcontrolador,!es!un!circuito!integrado!donde!se!contienen!las!partes!

esenciales!de!un!ordenador.!Esto!es:!!unidad!de!procesamiento,!memoria!primaria,!

memoria! secundaria! (programable).! También! son! conocidos! como! SoC,! por! las!

siglas!en! inglés!de!System,on,a,Chip.! Su!origen!es!brevemente!posterior!al!de! los!

microprocesadores,!en!la!década!de!1970.!

Page 14: ESCUELA UNIVERSITARIA DE INGENIERÍA TÉCNICA DE ...oa.upm.es/49224/1/PFC_AITOR_CANTERO_ROMERO.pdf · Para!concluir,!se!documenta!un!ejemplo!de!un!proyecto ... y!bajo!el!control!de!un!programa!

Aitor&Cantero&Romero&&&&&&&&&&&&&&&&&&&&&&&Programación&concurrente&orientada&a&eventos&en&Arduino&para&el&Internet&de&las&Cosas&&

!16!

Suelen! utilizarse! para! realizar! tareas! predeterminadas,! gobernar!

dispositivos! electrónicos,! electrodomésticos,! o! complementar! partes! de! un!

ordenador! de! propósito! general.! Les! diferencia! de! un! ordenador! completo! su!

arquitectura!simplificada,!su!menor!capacidad!de!proceso!y!sus!recursos!limitados.!

Esto! conlleva! a! un! menor! consumo! energético! y! costo! que! si! utilizásemos! un!

ordenador!para!llevar!a!cabo!la!misma!tarea.!

Suelen! incluir! ciertas! características! adicionales,! conocidas! como!

periféricos,!que!les!otorgan!versatilidad.!Algunos!ejemplos!son:!

• Puertos!de!entrada!y!salida!digital!o!analógica.!

• Conversor!digital–analógico,!o!ADC!por!sus!siglas!en!inglés.!

• Modulación!por!anchura!de!pulso,!para!simular!una!salida!analógica.!

• Comunicación! bidireccional! digital,! para! comunicarse! con! otros!

dispositivos.!

!

La!evolución!de! los!microcontroladores!ha!seguido!un!camino!similar!a! la!de! los!

microprocesadoes! y! ordenadores.! Pero! dado! su! uso! especializado,! algunas!

características!han!permanecido!prácticamente!desde!sus!orígenes.!Por!ejemplo,!el!

desarrollo!de! software! de! los!microcontroladores! suele! llevarse! a! cabo!mediante!

lenguaje! ensamblador.! En! algunos! casos,! los! fabricantes! de! estos! chips!

proporcionan!un!compilador!de!un!lenguaje!de!alto!nivel,!C!o!C++,!dado!el!caso.!!El!

lenguaje!ensamblador!permite!el!máximo!control!sobre!el!flujo!del!programa,!pero!

dificulta! su! comprensión! por! parte! de! otros! programadores,! y! su! posterior!

modificación!y!reutilización!del!código.!En!el!caso!de!C!y!C++,!se!consigue!mejorar!

en!la!velocidad!de!desarrollo!a!costa!de!un!pérdida!mínima!de!eficiencia!de!código.!

2.4&Sistema&Operativo&

Es! un! conjunto! de! programas! que! sirven! de! interfaz! entre! el! usuario! y! el!

hardware.!Sirve!para!ocultar!la!parte!física!del!ordenador!y!su!problemática!de!uso!

a! usuarios! y! programadores! y! es! a! su! vez! un! gestor! de! recursos.! Controla! la!

ejecución!de! los!programas!para!evitar!errores!o!un!uso! impropio!del!hardware.!

Están!diseñados!con!objeto!de!hacerlo!con!eficiencia,!fiabilidad!y!seguridad.!

Está!formado!por!diferentes!partes.!El!núcleo!del!sistema!operativo!o!kernel,!

es!el!programa!que!está!permanentemente!en!memoria!y!controla!la!ejecución!de!

Page 15: ESCUELA UNIVERSITARIA DE INGENIERÍA TÉCNICA DE ...oa.upm.es/49224/1/PFC_AITOR_CANTERO_ROMERO.pdf · Para!concluir,!se!documenta!un!ejemplo!de!un!proyecto ... y!bajo!el!control!de!un!programa!

Aitor&Cantero&Romero&&&&&&&&&&&&&&&&&&&&&&&Programación&concurrente&orientada&a&eventos&en&Arduino&para&el&Internet&de&las&Cosas&&

! 17!

los!demás!programas!y!el!acceso!a!los!recursos!hardware.!Es!habitual!que!incluyan!

herramientas!básicas!para!poder!realizar! tareas!básicas!sin!recurrir!a!programas!

externos,! como! pueda! ser! un! editor! de! texto,! un! calendario,! un! explorador! de!

archivos,!etc.!

Por!motivos!de! seguridad! e! integridad,! los! usuarios! interaccionan! con! los!

programas! del! sistema! y! las! aplicaciones,! con! el! núcleo! y! los! programas! del!

sistema.!Las!personas!interactúan!con!el!sistema!operativo!mediante!la!interfaz!de!

usuario,! que!puede! ser!un! intérprete!de! línea!de! comandos! (CLI/Shell)! en!modo!

texto,!un!sistema!de!ventanas!o!interfaz!gráfico!(GUI)!o!una!combinación!de!ambas.!

En! el! origen! de! la! computación! (1945W1955),! los! sistemas! operativos! no!

existían.! Los! ordenadores! basados! en! válvulas! de! vacío! se! dedicaban! a! procesar!

secuencialmente!un!único!programa!insertado!a!su!dispositivo!de!entrada,!que!era!

escrito! en! lenguaje!máquina,! sin! que! ningún!mecanismo! intermedio!mediara! en!

sus!operaciones!de!entrada/salida!de!datos.!Las!computadoras!de!esta!época!eran!

monousuario! y! monoprograma.! A! finales! de! esta! época! surgen! los! lenguajes! de!

ensamble.!

Más! adelante,! en! la! segunda! generación! (1955W1964),! los! computadores!

gobernados! por! transistores.! Aparecen! los! primeros! lenguajes! de! programación!

FORTRAN!y!Cobol!y!sus!compiladores.!Se!realiza!un!control!de!proceso!por!lotes.!

Un!arcaico!sistema!operativo!llamado!monitor!residente!controla! la! lectura!de!su!

entrada! de! datos! mediante! tarjetas! perforadas! al! principio,! y! cintas! magnéticas!

después.!Básicamente!separa!los!resultados!de!los!diferentes!programas!que!le!son!

entregados!en!serie!o!lote.!

En! la! tercera! generación! (1965W1980),! nacen! los! circuitos! integrados!

posibilitando! la! miniaturización! de! los! ordenadores! y! reduciendo! su! precio! en!

igual! medida.! Aparece! la! multiprogramación,! es! decir,! diferentes! programas!

pueden! correr! sobre! el! sistema! operativo,! y! este! se! encargará! de! planificar! los!

recursos! del! sistema:! CPU,! memoria,! cinta,! etc.! Los! programas! pueden! ser!

interactivos! con! el! usuario,! y! los! sistemas! pueden! ser! utilizados! por! varias!

personas!a!la!vez!sin!mezclar!sus!trabajos,!mediante!tiempo!compartido.!Aparecen!

los!discos!duros,! los!sistemas!de! ficheros,!el!acceso!directo!a!memoria! (DMA)!en!

lugar! del! acceso! secuencial! previo.! Se! desarrolla! la! programación! concurrente.!

Nacen!el!sistema!operativo!UNIX!y!OS360.!

Page 16: ESCUELA UNIVERSITARIA DE INGENIERÍA TÉCNICA DE ...oa.upm.es/49224/1/PFC_AITOR_CANTERO_ROMERO.pdf · Para!concluir,!se!documenta!un!ejemplo!de!un!proyecto ... y!bajo!el!control!de!un!programa!

Aitor&Cantero&Romero&&&&&&&&&&&&&&&&&&&&&&&Programación&concurrente&orientada&a&eventos&en&Arduino&para&el&Internet&de&las&Cosas&&

!18!

En! la! cuarta! generación! (1980Wactualidad).! Se! desarrolla! la! tecnología!LSI!

(Large, Scale, Integration,! Integración! a! gran! escala),! que! permite! que! miles! de!

transistores!puedan!ser!contenidos!en!un!chip!del!tamaño!de!un!sello!de!correos.!

Nace!el!ordenador!personal!(PC),!en!los!que!usuarios!no!especializados!comienzan!

a! interactuar! con! la! computación.! Se! retorna! a! los! orígenes:! monotarea,!

monousuario,! sin! protección,! escasa! potencia! y! capacidad.! Posteriormente!

evolucionan:!multiprogramación,! protección,!memoria! virtual,! trabajos! por! lotes.!

Se!populariza!la!interfaz!gráfica!de!usuario,!las!redes!de!ordenadores!y!hay!mayor!

preocupación!por!la!seguridad.!

Existen!multitud!de!tipos!de!sistemas!operativos!diferentes,!caracterizados!

por!el!hardware!al!que!administran,!o!por!su!finalidad:!

• Mainframe!(z/OS)!.!

• Consola!de!videojuegos:!PlayStation,!Xbox,!Wii.!!

• Supercomputadores!(Unix).!!

• Servidores!(Windows!Server!2008/2012,!Unix).!!

• Personales!(Windows!10,!Mac!OS,!Ubuntu).!!

• Tiempo!real!(VxWorks,!QNX).!!

• Embebidos!(Windows!Mobile,!Symbian,!BlackBerry,!iOS,!Android).!!

!!

2.5&Procesos&

Un!proceso!es!un!programa!en!ejecución!con!un!contexto!que!es!gestionado!

por!el!núcleo!del!sistema!operativo.!!El!contexto!se!constituye!por:!

• CPU:!asignada!por!el!núcleo!y!compartida!con!otros!procesos.!!

• Registros:!los!registros!reales!del!proceso,!su!contador!de!programa.!

• E/S:!el!proceso!puede!solicitar!el!acceso!a!dispositivos!de!E/S.!!

• Memoria:!código,!datos!y!pila.!Exclusiva!para!cada!proceso,!aunque!también!

se!puede!compartir.!!

• Comunicación!con!otros!procesos.!!

• Varios:!identificador,!credenciales,!estadísticas.!

!

Un!programa!ejecutado!dos!veces!a! la!vez!genera!dos!procesos!diferentes.!En!

un!sistema!actual!es!posible!tener!abiertas!dos!instancias!del!programa!Word!a!la!

Page 17: ESCUELA UNIVERSITARIA DE INGENIERÍA TÉCNICA DE ...oa.upm.es/49224/1/PFC_AITOR_CANTERO_ROMERO.pdf · Para!concluir,!se!documenta!un!ejemplo!de!un!proyecto ... y!bajo!el!control!de!un!programa!

Aitor&Cantero&Romero&&&&&&&&&&&&&&&&&&&&&&&Programación&concurrente&orientada&a&eventos&en&Arduino&para&el&Internet&de&las&Cosas&&

! 19!

vez.!El! sistema!operativo! lo!gestiona!como!procesos!diferentes,! los! identifica!con!

un!PID! (Process,ID)!y!sus!pilas!de!datos!son! también!diferentes.!Se!podría!cerrar!

uno!de!estos!procesos!con!independencia!del!otro.!!

!

!

Figura&2.4&Ejemplo!de!administrador!de!procesos!en!sistema!operativo!macOS.!

!

! !A! la! posibilidad! de! poder! ejecutar! varias! aplicaciones! diferentes! en! el!

mismo! ordenador! se! le! llama! multiprogramación.! La! multiprogramación! y! la!

compartición!del!sistema!por!varios!procesos!y!usuarios!obligan!a!la!protección.!La!

protección! evita! que! unos! procesos! o! usuarios! puedan! dañar! a! otros! procesos,!

otros!usuarios!o!al!propio!sistema!operativo.!

Es!imprescindible!contar!con!el!hardware!para!implementar!mecanismos!de!

protección! eficaces.! Por! ello! existen! dos!modos! de! funcionamiento! básicos! en! la!

CPU!de!un!ordenador!moderno:!modo!supervisor!o!kernel,(núcleo)!y!modo!usuario!

(procesos! de! usuario).! El! paso! a! modo! supervisor! se! realiza! mediante!

interrupciones.!Las!interrupciones!pueden!ser:!!

• Hardware:!atención!a!dispositivos!de!entrada/salida.!

• Excepciones:!fallos!de!protección!vía!software.!

• Llamadas!al!sistema.!

!

Page 18: ESCUELA UNIVERSITARIA DE INGENIERÍA TÉCNICA DE ...oa.upm.es/49224/1/PFC_AITOR_CANTERO_ROMERO.pdf · Para!concluir,!se!documenta!un!ejemplo!de!un!proyecto ... y!bajo!el!control!de!un!programa!

Aitor&Cantero&Romero&&&&&&&&&&&&&&&&&&&&&&&Programación&concurrente&orientada&a&eventos&en&Arduino&para&el&Internet&de&las&Cosas&&

!20!

!

Figura&2.5&Ejemplo!de!cambio!de!modo!usuario!a!kernel!y!retorno!a!modo!usuario.!

!

Al! retornar! de! las! interrupciones! se! vuelve! implícitamente! a!modo! usuario.! Las!

interrupciones!son!evaluadas!dada!su!prioridad.!Normalmente! la!prioridad!viene!

establecida!según!la!inmediatez!requerida!para!la!atención!de!esa!interrupción.!!

2.6&Procesos&e&hilos&

Un!proceso!común!solo!tiene!un!hilo!de!ejecución,!es!decir,!su!contador!de!

programa!va!avanzando!secuencialmente!por!las!instrucciones!de!memoria!que!le!

son!propias!para!realizar!su!tarea.!En!ocasiones!esta!solución!no!es!la!más!óptima!

en!términos!de!rendimiento.!Imagine!un!navegador!web!de!múltiples!pestañas.!En!

una! de! las! pestañas! se! quiere! escuchar! un! podcast, sobre! microcontroladores,!

mientras! que! en! otra! pestaña! se! quiere! leer! el! periódico! nacional.! Si! solo! se!

pudiese! tener! un! hilo! de! ejecución! para! cierto! proceso,! sería! inviable! leer! el!

periódico!mientras!sonase!el!audio.!Habría!que!conformarse!con!hacer!una!de!las!

dos!cosas!a!cada!momento.!La!aplicación!podría!abordar!esta!problemática!de!dos!

formas!distintas:!mediante!procesos!o!mediante!hilos.!!

La! solución! multiproceso! consistiría! en! que! cada! vez! que! se! abriese! una!

pestaña! nueva,! el! navegador!web! autogenerase! un! proceso! nuevo! para! atender!

cada! una! de! las! pestañas.! Esto! implicaría! que! cada! proceso! solo! podría! estar! en!!

ejecución!real!en!caso!de!tener!una!sola!CPU.!Lo!ideal!sería!que!el!proceso!principal!

gobernase! a! los! otros! procesos,! uno! por! pestaña,! para! así! poder! administrarles!

según! interese! al! programa.! Dado! que! el! programa! es! el! mismo! no! deberían!

competir!los!procesos!por!utilizar!la!CPU.!El!problema!es!que!el!sistema!operativo,!

que! es! quien! en! realidad! controla! el!hardware! del! ordenador,! entiende! que! son!

procesos! diferentes! y! les! dará! tiempo! de! CPU! y! atenderá! sus! peticiones! de!

Page 19: ESCUELA UNIVERSITARIA DE INGENIERÍA TÉCNICA DE ...oa.upm.es/49224/1/PFC_AITOR_CANTERO_ROMERO.pdf · Para!concluir,!se!documenta!un!ejemplo!de!un!proyecto ... y!bajo!el!control!de!un!programa!

Aitor&Cantero&Romero&&&&&&&&&&&&&&&&&&&&&&&Programación&concurrente&orientada&a&eventos&en&Arduino&para&el&Internet&de&las&Cosas&&

! 21!

entrada/salida!por! separado.!A! su! vez,! cada!proceso! tendrá! sus!propias! pilas! de!

datos,! su! región! de!memoria,! sus! ficheros! abiertos! para! leer! o! escribir,! etc.! Esto!

provoca!que! tendrán!que! realizarse! comunicaciones!entre! ellos,! de! igual!manera!

que!si!fuesen!procesos!con!distinto!origen.!!

!

!

Figura& 2.6& Diferencia! entre! programación! a)! multiproceso! y! b)! programación!

multihilo.!

!

Esto! plantea! otra! manera! conveniente! de! afrontar! el! problema! del! único!

hilo!de!ejecución!de!otra!manera.!Para!ello! existe! el! concepto!de!hilo,! o! también!

llamado!proceso!ligero.!Un!hilo,!a!diferencia!de!un!proceso!nuevo,!garantiza!que!se!

trabaje! sobre! el! mismo! espacio! de! direcciones.! Por! tanto,! un! proceso! que! esté!

compuesto! por! varios! hilos,! tiene! más! fácil! la! tarea! de! compartir! información.!

Además!se! tiene! la!ventaja!de!que!si!un!hilo!necesita!esperar!por!cierto! recurso,!

puede!ceder!de!manera!interna!el!control!a!otro!hilo!del!mismo!proceso!que!pueda!

aprovecha!el! tiempo!de!CPU.!Al! tratarse!de!hilos!del!mismo!proceso,! se!entiende!

que! el! programador! ha! pensado! en! la! mejor! manera! de! cooperación! entre! sus!

distintos!hilos,!dando!lugar!a!una!mejor!eficiencia!de!los!recursos.!Además,!se!evita!

duplicar!contenido!en!memoria,!con!el!consiguiente!ahorro!de!la!misma.!Amén,!la!

creación!y!destrucción!de!hilos,!es!mucho!mas!rápida!que!la!de!los!procesos.!En!el!

ejemplo!anterior,!con!hilos,!el!navegador!web!puede!acceder!a!los!recursos,!como!

el!controlador!de!red!como!una!única!entidad,!evitando!así!tener!que!turnarse!con!

otro!proceso!hermano!para!obtener!datos!de!Internet.!

!

Page 20: ESCUELA UNIVERSITARIA DE INGENIERÍA TÉCNICA DE ...oa.upm.es/49224/1/PFC_AITOR_CANTERO_ROMERO.pdf · Para!concluir,!se!documenta!un!ejemplo!de!un!proyecto ... y!bajo!el!control!de!un!programa!

Aitor&Cantero&Romero&&&&&&&&&&&&&&&&&&&&&&&Programación&concurrente&orientada&a&eventos&en&Arduino&para&el&Internet&de&las&Cosas&&

!22!

!

Figura&2.7&Diferencia!entre!la!gestión!de!hilos!por!parte!del!usuario!a)!y!por!parte!

del!sistema!operativo!b).!

! !

Dependiendo! del! sistema! operativo! y! del! lenguaje! de! programación! los! hilos!

pueden!tratarse!de!manera!interna!al!proceso,!lo!que!se!conoce!a!nivel!de!usuario,!

o!bien!pueden!ser!tenidos!en!cuenta!y!administrados!a!nivel!de!núcleo!de!sistema!

operativo.!

2.7&Programación&concurrente&

En!origen!y!aún!actualmente,!una!unidad!de!proceso!o!CPU!por!sus!siglas!en!

inglés!solo!es!capaz!de!realizar!una!tarea!a!la!vez.!Este!hecho,!daba!lugar!a!que!la!

ejecución! secuencial! de! un! solo! programa,! dejaba! ocioso! al! procesador! en!

intervalos! de! tiempo! elevados..! Dado! los! costes! de! estos! sistemas! y! su! baja!

eficiencia,! ya! que!muchas! tareas! requerían! de! la! intervención! de! un! dispositivo!

periférico,!como!un!lector!de!cinta!o!impresora,!o!bien!la!de!un!humano!–programa!

interactivo–!,!era!necesario!que!el!procesador!pudiese!estar!en!funcionamiento!la!

mayor!parte!del! tiempo!posible.!Los! ingenieros!se!dieron!cuenta!de!que! la!mejor!

manera! de! aprovechar! estos! tiempos! de! espera,! era! dándole! otra! cosa! útil! que!

hacer!al!procesador!mientras!el!primer!programa!quedaba!en!espera.!Es!decir,! la!

computadora! debía! soportar!más! de! un! proceso! a! la! vez.! A! este! fenómeno! se! le!

conoce!como!multiprogramación.!

Page 21: ESCUELA UNIVERSITARIA DE INGENIERÍA TÉCNICA DE ...oa.upm.es/49224/1/PFC_AITOR_CANTERO_ROMERO.pdf · Para!concluir,!se!documenta!un!ejemplo!de!un!proyecto ... y!bajo!el!control!de!un!programa!

Aitor&Cantero&Romero&&&&&&&&&&&&&&&&&&&&&&&Programación&concurrente&orientada&a&eventos&en&Arduino&para&el&Internet&de&las&Cosas&&

! 23!

En!cualquier!sistema!de!multiprogramación,!la!CPU!conmuta!de!un!proceso!

a! otro! con! rapidez,! ejecutando! cada! uno! durante! décimas! o! centésimas! de!

milisegundos:! hablando! en! sentido! estricto,! en! cualquier! instante! la! CPU! está!

ejecutando! sólo! un! proceso,! y! en! el! transcurso! de! 1! segundo! podría! trabajar! en!

varios!de!ellos,!dando!la!apariencia!de!un!paralelismo!(o!pseudoparalelismo,!para!

distinguirlo! del! verdadero! paralelismo! de! hardware! de! los! sistemas!

multiprocesadores! o! multinúcleo! con! dos! o! más! CPUs! que! comparten! la! misma!

memoria!física).!Para!ello,!los!sistemas!operativos!utilizan!diferentes!mecanismos!

para! planificar! el! uso! de! CPU! por! parte! de! los! diferentes! procesos.! Podemos!

diferenciar!los!mecanismos!de!planificación!de!un!sistema!operativo:!

• Multiprogramación! cooperativa:! este!método! de! planificación,! consiste! en!

que!son!los!propios!procesos!los!que!deciden!cuando!ceder!el!uso!de!CPU!a!

otro!proceso.!Esto!suele!darse!cuando!el!proceso!requiere!una!operación!de!

entrada/salida,!o!bien!necesita!sincronizarse!con!otro!proceso,!etc.!

• Multiprogramación! apropiativa:! ! en! este! caso,! el! planificador! es! el!

responsable!de!otorgar!el!uso!de!CPU!a!los!diferentes!procesos!que!quieren!

utilizarla.! Para! ello! asigna! unos! intervalos! de! tiempo,! llamados! quantum,!

donde!cada!proceso!puede!utilizar!la!CPU!cuando!es!su!turno.!Es!similar!a!la!

manera!en!que!dos!jugadores!de!ajedrez!se!turnan!para!mover!sus!piezas.!A!

este!tipo!de!conmutación!temporal!se!le!denomina!round,robin.!

El!primer!mecanismo,!tiene!el!problema!de!que!si!nos!encontramos!con!un!proceso!

egoísta,!o!incurre!en!un!bucle!infinito,!el!resto!de!procesos!no!podrá!acceder!nunca!

a! la! CPU.! A! esto! se! lo! conoce! como! inanición.! Por! tanto,! solo! funciona! si! los!

procesos!son!cooperantes!entre!sí,!lo!que!sería!un!sistema!ideal.!

! Existen! diferentes! implementaciones:! con! adición! de! prioridades,! con!

mecanismos!de!elección!de!procesos!por!su!duración,!con!quantums!dinámicos!en!

función! de! estadísticas,! etc.! En! cualquier! caso,! lo! que! se! pretende! es! la!máxima!

eficiencia!del!sistema!y!de!sus!recursos.!

! La! computación!concurrente!es! la! simultaneidad! (o!pseudosimultaneidad)!

en! la! ejecución! de! múltiples! tareas! interactivas.! Estas! tareas! pueden! ser! un!

conjunto! de! procesos! o! hilos! de! ejecución! creados! por! un! único! programa.! Las!

tareas! se! pueden! ejecutar! en! una! sola! unidad! central! de! proceso,! en! varios!

procesadores! o! en! una! red! de! computadores! distribuidos.! La! programación!

Page 22: ESCUELA UNIVERSITARIA DE INGENIERÍA TÉCNICA DE ...oa.upm.es/49224/1/PFC_AITOR_CANTERO_ROMERO.pdf · Para!concluir,!se!documenta!un!ejemplo!de!un!proyecto ... y!bajo!el!control!de!un!programa!

Aitor&Cantero&Romero&&&&&&&&&&&&&&&&&&&&&&&Programación&concurrente&orientada&a&eventos&en&Arduino&para&el&Internet&de&las&Cosas&&

!24!

concurrente! está! relacionada! con! la! programación!paralela,! pero! enfatiza!más! la!

interacción! entre! tareas.! Así,! la! correcta! secuencia! de! interacciones! o!

comunicaciones! entre! los! procesos! y! el! acceso! coordinado! de! recursos! que! se!

comparten!por!todos!los!procesos!o!tareas!son!las!claves!de!esta!disciplina.!

! En! el! caso! concreto! de! los! microcontroladores,! y! a! diferencia! de! los!

ordenadores! de! propósito! general,! su! programación! esta! orientada! a! una! tarea!

global!concreta;!un!solo!programa.!Además,!los!recursos!de!memoria!y!capacidad!

de!proceso!son!limitados,!por!lo!que,!para!mejorar!la!eficiencia,!se!puede!afrontar!

la! problemática! de! la! programación! concurrente! sin! recurrir! a! algoritmos! de!

planificación!apropiativos.!

!

2.8&Programación&dirigida&por&eventos&

Habitualmente,! los! programas! diseñados! para! microcontroladores! se!

escriben! y! ejecutan! de!manera! secuencial.! Siempre! que! un! programa! escrito! de!

esta! manera! necesita! capturar! algún! evento! externo,! como! pulsar! un! botón,! la!

llegada!de!un!carácter!a!través!del!puerto!serie!o!un!retardo!de!tiempo,!realiza!una!

espera!activa!y!explícita!hasta! la!ocurrencia!del!evento.!La!espera!activa!significa!

que!el!procesador!del!microcontrolador!utiliza!sus!ciclos!de!reloj!constantemente!

evaluando! alguna! condición! en! un! bucle! cerrado,! llamado! bucle! de! sondeo! en!

castellano!o!poolling!en!inglés.!Por!ejemplo,!en!el!siguiente!fragmento!de!código,!en!

la! llamada! a! la! función! delay(),! contienen! un! bucle! de! sondeo! implícitos! en! su!

interior:!

!

void loop () { digitalWrite (13, HIGH); // encender el LED delay (1000); // esperar 1 segundo digitalWrite (13, LOW); // apagar el LED delay (1000); // esperar 1 segundo }

Código&2.1&Ejemplo!de!código!para!microcontrolador!utilizando!un!bucle!de!

sondeo!escrito!en!lenguaje!C.!

!

Aunque!este!enfoque!es!funcional!en!muchas!situaciones,!no!funciona!muy!

bien!cuando!hay!múltiples!fuentes!de!eventos!cuyos!tiempos!de!llegada!y!orden!no!

Page 23: ESCUELA UNIVERSITARIA DE INGENIERÍA TÉCNICA DE ...oa.upm.es/49224/1/PFC_AITOR_CANTERO_ROMERO.pdf · Para!concluir,!se!documenta!un!ejemplo!de!un!proyecto ... y!bajo!el!control!de!un!programa!

Aitor&Cantero&Romero&&&&&&&&&&&&&&&&&&&&&&&Programación&concurrente&orientada&a&eventos&en&Arduino&para&el&Internet&de&las&Cosas&&

! 25!

se! pueden! predecir,! y! donde! es! importante! manejar! los! eventos! de! manera!

oportuna.!El!problema!fundamental!es!que!mientras!un!programa!secuencial!está!

esperando! un! tipo! de! evento! (por! ejemplo,! un! retardo! de! tiempo),! no! está!

realizando! ningún! otro! trabajo! y! no! responde! a! otros! eventos! (por! ejemplo,!

pulsaciones!de!botones).&

A!diferencia!de! la!programación!estructurada!clásica,! en! la!que!el! flujo!de!

programa!se! realiza!de!manera!secuencial,! según!el!objetivo!del!programador,! la!

programación! dirigida! por! eventos! se! basa! en! ceder! la! responsabilidad! de! la!

consecución! de! acciones! o! flujo! del! programa! a! los! eventos! que! el! programa!

maneje.!

Un!ejemplo!de!este!tipo!de!programación,!se!da!en!las!interfaces!gráficas!de!

usuario!(GUI!por!sus!siglas),!donde!la!pulsación!del!ratón!en!un!área!específica!de!

la!pantalla!desencadena!una!serie!de!acciones!por!parte!del!programa.!

Estos!eventos!son!manejados!por!un!llamado!administrador!de!eventos.!Es!

competencia! del! programador! definir,! limitar! y! manejar! lo! que! cada! evento!

produce!en!el!programa.!Esto!suele!venir!condicionado!por!el!sistema!operativo,!el!

lenguaje! de! programación! empleado! y! el! hardware.! Los! eventos! pueden! ser!

acciones! externas! como! la! pulsación! de! una! tecla,! la! activación! de! un! sensor! o!

internas!como!el!desbordamiento!de!un!temporizador!interno.!

Este!paradigma!de!programación!supone!algo!de!complejidad!respecto!a!la!

programación! estructurada! y! la! orientada! a! objetos.! Una! parte! de! esta!

problemática! consiste! en! la! abstracción! que! debe! llevar! a! cabo! el! programador!

para!manejar!el!flujo!del!programa!y!otra!de!ellas!es!acotar!el!comportamiento!del!

código!para!todas!las!situaciones!posibles.!

NOTA:!Los!contenidos!hasta!aquí!expuestos!tienen!como!referencia!de!consulta![L1]!

2.9&Internet&de&las&cosas&

El!Internet!de!las!cosas!o!IoT!por!sus!siglas!en!inglés!!(Internet!of!Things)!es!

un!término!originado!por!Kevin!Ashton,!un!ingeniero!británico!que!trabajaba!en!la!

identificación! por! radiofrecuencia! (RFID)! en! el! Instituto! Tecnológico! de!

Massachusetts,! y! concibió! un! sistema!de! sensores! universales! que! conectaban! el!

mundo!físico!a!Internet!en!1999.!El!RFID!fue!semilla!y!ahora!rama,!del!Internet!de!

las!Cosas.!

Page 24: ESCUELA UNIVERSITARIA DE INGENIERÍA TÉCNICA DE ...oa.upm.es/49224/1/PFC_AITOR_CANTERO_ROMERO.pdf · Para!concluir,!se!documenta!un!ejemplo!de!un!proyecto ... y!bajo!el!control!de!un!programa!

Aitor&Cantero&Romero&&&&&&&&&&&&&&&&&&&&&&&Programación&concurrente&orientada&a&eventos&en&Arduino&para&el&Internet&de&las&Cosas&&

!26!

Es!un!concepto!que!relaciona!la!capacidad!dada!a!objetos!de!uso!común!de!

comunicarse!entre!ellos!y!con!Internet.!También!hace!referencia!al!fenómeno!que!

se!observa!y!se!espera,!de!que!la!información!que!circula!en!Internet!no!tenga!en!

último! término! un! origen! humano.! Es! decir,! que! estos! objetos! conectados! a!

Internet!generen!su!propia!información,!la!reciban!y!la!procesen.!Esto!provocaría!

que! los! usuarios! de! Internet,! humanos,! se! vean! superados! en! número! por! estos!

dispositivos!conectados.!

La!constitución!de!una!red!compleja!que!conecta!billones!de!dispositivos!y!

seres! humanos! en! una! infraestructura! multitecnológica,! multiprotocolo! y!

multiplataforma,! la! visión! principal! de! Internet! de! las! Cosas! es! crear! un!mundo!

inteligente! donde! lo! real! y! lo! virtual! converjan,! gracias! a! lo! digital,! para! crear!

entornos! inteligentes.! La! expectativa! es! la! de! interconectar!millones! de! islas! de!

redes! inteligentes! que! permitan! el! acceso! a! la! información! no! solo! en! cualquier!

momento!y!en!cualquier! lugar,!sino!también!mediante!cualquier!cosa!y!cualquier!

persona! idealmente!a! través!de!cualquier!ruta,! red!y!servicio.!Esto!se!conseguirá!

dotando! a! los! objetos! cotidianos! con! dispositivos! de! detección,! identificación! y!

posicionamiento!y!comunicación!para!convertirse!en!objetos!inteligentes,!capaces!

de!comunicarse!no!sólo!con!otros!objetos!inteligentes,!sino!también!con!los!seres!

humanos.! La! expectativa! es! obtener! información! de! áreas! que! nunca! podríamos!

alcanzar! sin! los! avances! en! las! tecnologías! de! detección,! identificación! y!

posicionamiento.! Al! ser! descubiertos! globalmente! y! consultados,! estos! objetos!

inteligentes! pueden! descubrir! e! interactuar! de! forma! similar! con! entidades!

externas!consultando!a!seres!humanos,!computadoras!y!otros!objetos!inteligentes.!

Los! objetos! inteligentes! también! pueden! obtener! inteligencia! haciendo! o!

permitiendo!decisiones!relacionadas!con!el!contexto!aprovechando!los!canales!de!

comunicación! disponibles! para! proporcionar! información! sobre! sí! mismos! al!

mismo!tiempo!que!acceden!a!información!que!ha!sido!agregada!por!otros!objetos!

inteligentes.!

La! Unión! Internacional! de! Telecomunicaciones! (UIT),! propone! una!

infraestructura!esencial!que!se!construirá!alrededor!de!una!arquitectura!multicapa!

en!la!que!los!objetos!inteligentes!se!utilizarán!para!entregar!diferentes!servicios!a!

través!de!las!cuatro!capas!principales!representadas!en!la!Figura!2.8:!una!capa!de!

dispositivo,!una!capa!de!red,!una!capa!de!soporte!y!la!capa!de!aplicación.!En!la!capa!

Page 25: ESCUELA UNIVERSITARIA DE INGENIERÍA TÉCNICA DE ...oa.upm.es/49224/1/PFC_AITOR_CANTERO_ROMERO.pdf · Para!concluir,!se!documenta!un!ejemplo!de!un!proyecto ... y!bajo!el!control!de!un!programa!

Aitor&Cantero&Romero&&&&&&&&&&&&&&&&&&&&&&&Programación&concurrente&orientada&a&eventos&en&Arduino&para&el&Internet&de&las&Cosas&&

! 27!

del! dispositivo! hay! dispositivos! como! sensores,! actuadores,! RFID! y! puertas! de!

enlace! utilizadas! para! recoger! las! lecturas! del! sensor! para! procesamiento!

adicional.! La! capa! de! red! proporciona! las! capacidades! de! transporte! y! de! red!

necesarias! para! encaminar! los! datos! de! Internet! de! las! Cosas! a! lugares! de!

procesamiento.! La! capa! de! soporte! es! una! capa! de! middleware! que! sirve! para!

ocultar! la! complejidad! de! las! capas! inferiores! a! la! capa! de! aplicación! y!

proporcionar!servicios!específicos!y!genéricos.!

!

Figura&2.8&Esquema!de!arquitectura!de!IoT!propuesto!por!la!Unión!

Internacional!de!Telecomunicaciones.!

Internet! de! las! Cosas! puede! percibirse! como! una! infraestructura! que!

conduce!una!serie!de!servicios!de!aplicaciones!que!están!habilitados!por!una!serie!

de! tecnologías.! Sus! ámbitos! de! aplicación! se! expanden! a! través! de! muchos!

dominios!tales!como!ciudades!inteligentes,!transporte,!edificios,!energía,!industria!

y!salud,!mientras!que!está!habilitado!por!diferentes!tecnologías!como!sensores!(y!

redes! de! sensores),! nanoelectrónica,! actuadores,! RFID,! localización,!

almacenamiento,!etc.!Los!sistemas!y!aplicaciones! IoT!deben!estar!diseñados!para!

proporcionar! seguridad,! privacidad,! integridad,! confianza,! fiabilidad,!

transparencia,!anonimato!y!están!sujetos!a!restricciones!éticas.! !

Page 26: ESCUELA UNIVERSITARIA DE INGENIERÍA TÉCNICA DE ...oa.upm.es/49224/1/PFC_AITOR_CANTERO_ROMERO.pdf · Para!concluir,!se!documenta!un!ejemplo!de!un!proyecto ... y!bajo!el!control!de!un!programa!

Aitor&Cantero&Romero&&&&&&&&&&&&&&&&&&&&&&&Programación&concurrente&orientada&a&eventos&en&Arduino&para&el&Internet&de&las&Cosas&&

!28!

! &

Page 27: ESCUELA UNIVERSITARIA DE INGENIERÍA TÉCNICA DE ...oa.upm.es/49224/1/PFC_AITOR_CANTERO_ROMERO.pdf · Para!concluir,!se!documenta!un!ejemplo!de!un!proyecto ... y!bajo!el!control!de!un!programa!

Aitor&Cantero&Romero&&&&&&&&&&&&&&&&&&&&&&&Programación&concurrente&orientada&a&eventos&en&Arduino&para&el&Internet&de&las&Cosas&&

! 29!

Capítulo&3:&Hardware&

!

Una!de!las!características!principales!de!IoT!es!la!heterogeneidad;!es!decir,!

múltiple! hardware–software! que! cooperan! entre! sí! a! través! de! redes! para! crear!

servicios! complejos.! Se! podría! decir! que! la! colaboración! se! basa! en! un! complejo!

entramado! de!microservicios.! La! interconexión! entre! las! diferentes! cosas! puede!

ser! almábrica! o! inalámbrica! y,! habitualmente! las! redes! se! constituyen! como! un!

complejo! entramado! de! subredes! que! pasan! información! entre! ellas! a! través! de!

cosas! que! actúan! como!pasarelas.! En! particular! esta! investigación! se! basa! en! un!

hardware!simple,!barato!y!ampliamente!soportado:!Arduino.!

&

3.1&Arduino&

Arduino! es! una! plataforma! electrónica! hardwareWsoftware! de! código!

abierto! que! fue! creada! con! el! objetivo! de! acercar,! en! cuanto! a! facilidad! de!

aprendizaje!y!bajo!coste,!a!cualquier!persona!que!desease!crear!proyectos!basados!

en!arte!electrónico.!

!

Figura&3.1&Detalle!de!la!placa!Arduino!UNO!

!

Page 28: ESCUELA UNIVERSITARIA DE INGENIERÍA TÉCNICA DE ...oa.upm.es/49224/1/PFC_AITOR_CANTERO_ROMERO.pdf · Para!concluir,!se!documenta!un!ejemplo!de!un!proyecto ... y!bajo!el!control!de!un!programa!

Aitor&Cantero&Romero&&&&&&&&&&&&&&&&&&&&&&&Programación&concurrente&orientada&a&eventos&en&Arduino&para&el&Internet&de&las&Cosas&&

!30!

Se! trata! de! un! ecosistema! de! desarrollo! donde! el! hardware,! una! placa!

electrónica! gobernada! por! un! microcontrolador,! es! cargada! con! un! software!

llamado!sketch!mediante!un!entorno!de!programación!Arduino!IDE,!escribiendo!el!

código!en!un!lenguaje!de!programación!llamado!Processing,!que!está!basado!en!C!y!

C++.!

!

Microcontrolador&& Atmega328&&

Voltaje!de!operación!! 5V!!

Voltaje! de! entrada!

(Recomendado)!!7!–!12V!!

Voltaje!de!entrada!(Límite)!! 6!–!20V!!

Pines! para! entradaW! salida!

digital.!!

14! (6! pueden! usarse! como!

salida!de!PWM)!!

Pines!de!entrada!analógica.!! 6!!

Corriente!continua!por!pin!IO!! 40!mA!!

Corriente! continua! en! el! pin!

3.3V!!50!mA!!

Memoria!Flash!!32!KB!(0,5!KB!ocupados!por!el!

bootloader)!!

SRAM!! 2!KB!!

EEPROM!! 1!KB!!

Frecuencia!de!reloj!! 16!MHz!!

Microcontrolador!! Atmega328!!

Voltaje!de!operación!! 5V!!

Medidas!(Alto!x!Ancho)! 68,6!mm!x!53,4mm!

Peso! 25!g!

Figura&3.2!Características!de!Arduino!Uno!Rev.!3.!

!

Aunque! existen! infinidad! de! modelos! de! placas! Arduino,! cada! una! con!

ciertas! características! para! adecuarlas! a! la! aplicación! a! desarrollar,! en! general!

están!construidas!en!base!a!un!microcontrolador!firmado!por!la!empresa!AVR.!Es!

un!microcontrolador!que!integra!las!partes!esenciales!de!una!computadora:!unidad!

Page 29: ESCUELA UNIVERSITARIA DE INGENIERÍA TÉCNICA DE ...oa.upm.es/49224/1/PFC_AITOR_CANTERO_ROMERO.pdf · Para!concluir,!se!documenta!un!ejemplo!de!un!proyecto ... y!bajo!el!control!de!un!programa!

Aitor&Cantero&Romero&&&&&&&&&&&&&&&&&&&&&&&Programación&concurrente&orientada&a&eventos&en&Arduino&para&el&Internet&de&las&Cosas&&

! 31!

central!de!procesamiento,!memoria!primaria,!memoria!secundaria!y!periféricos!de!

entrada!y!salida.!

Existen!multitud!de!variantes!de!placas!Arduino.!Además,!al!ser!hardware!

de!código!abierto,!los!planos!de!dichas!placas!son!accesibles,!por!lo!que!es!habitual!

realizar!placas!a!medida!una!vez!un!prototipo!ha!sido!desarrollado!por!completo.!

La!placa!más!representativa!es!la!Arduino!UNO,!la!cual!en!su!versión!actual!(rev!3)!

tiene!las!siguientes!especificaciones.!

Como!complemento!a!estas!placas,!se!les!puede!añadir!una!(o!varias)!tarjeta!

(s)!de!expansión!llamadas!Shields.!Estos!escudos!consisten!en!un!circuito!integrado!

que!conecta!con!los!pines!estándar!de!la!placa!Arduino!y!le!proporciona!diversas!

funcionalidades,!como!son!conectividad!WiFi,!Bluetooth,! localización!GPS,!control!

de!motores!y!relés,!pantallas!LCD,!etc.![W1]!

!

3.2&Comparativa&frente&a&la&competencia.&Arduino&vs&PIC&

&

! !

a)!Atmel!AVR!Atmega!328P! b)!Microchip!PIC!16F877A!

Figura&3.3&Comparación!física!entre!microcontroladores!AVR!y!PIC!en!

formato!DIP.!

!

En! el! mercado,! existen! infinidad! de! fabricantes! de! microcontroladores!

(Intel,! Motorola,! Texas! Instruments,! Zilog,! etc.).! Entre! todos! ellos! destacan! por!

relación!calidadWprecio,!tanto!los!microcontroladores!Atmel!de!AVR,!como!los!PIC!

de!Microchip.! Ambos! coinciden! en! utilizar! un! conjunto! de! instrucciones!RISC!de!

8bits,!memorias!flash!y!SRAM,!periféricos!y!conversores!AD.!Lo!que!les!diferencia!

es:!

• Su! entorno! de! programación,! lenguaje! de! programación! y! compiladores!

disponibles.!En!el!caso!de!AVR,!tanto!el!entorno!de!desarrollo!Atmel!Studio!

como!en!este!caso!Arduino!IDE!son!gratuitos.!Por!el!contrario,!en!el!caso!de!

Page 30: ESCUELA UNIVERSITARIA DE INGENIERÍA TÉCNICA DE ...oa.upm.es/49224/1/PFC_AITOR_CANTERO_ROMERO.pdf · Para!concluir,!se!documenta!un!ejemplo!de!un!proyecto ... y!bajo!el!control!de!un!programa!

Aitor&Cantero&Romero&&&&&&&&&&&&&&&&&&&&&&&Programación&concurrente&orientada&a&eventos&en&Arduino&para&el&Internet&de&las&Cosas&&

!32!

los! PIC! se! desarrolla! en! lenguaje! ensamblador! de!manera! nativa.! Existen!

compiladores!para!C/C++!aunque!no!son!gratuitos.!

• Interfaz!de!programación:!los!micocontroladores!de!Arduino!se!programan!

con!un!ISP!que!siempre!viene!integrado!en!la!propia!placa.!Para!el!resto,!se!

pueden!utilizar!programadores!por!puerto!RSW232,!USB!etc.!En!el! caso!de!

los!PIC,!su! interfaz!de!programación! funciona!en!alto!voltaje!(>5V),!por! lo!

que!hay!que!recurrir!a!periféricos!especiales!para!realizar!dicha!función.!

• La!eficiencia!energética.!Es!un!aspecto!a!tener!muy!en!cuenta!tratándose!de!

dispositivos! que!muy! probablemente! queramos! utilizar! sin! una! fuente! de!

alimentación! ilimitada!para!su!aplicación!en!el! Internet!de! las!Cosas,! tales!

como!baterías!o!placas!fotovoltaicas.!En!este!sentido! los!chips!de!AVR!son!

sensiblemente!superiores!a!los!de!Microchip.!

• En!ambos!casos!su!popularidad!han!hecho!posible!que!exista!una!gran!masa!

social! que! soporte,! ayude! y! comparta! código! para! facilitar! el! empleo! de!

dichos!sistemas.!AvrFreks.net!vs!PIClist.com!

!

Recientemente! la! empresa! Microchip,! fabricante! de! la! gama! de!

microcontroladores! PIC,! ha! comprado! la! empresa! Atmel,! fabricante! de! los! chips!

AVR!Atmega!utilizados!en!Arduino![W3].!!!!

!

Fuente!del!apartado![W2]!

! !

Page 31: ESCUELA UNIVERSITARIA DE INGENIERÍA TÉCNICA DE ...oa.upm.es/49224/1/PFC_AITOR_CANTERO_ROMERO.pdf · Para!concluir,!se!documenta!un!ejemplo!de!un!proyecto ... y!bajo!el!control!de!un!programa!

Aitor&Cantero&Romero&&&&&&&&&&&&&&&&&&&&&&&Programación&concurrente&orientada&a&eventos&en&Arduino&para&el&Internet&de&las&Cosas&&

! 33!

Capitulo&4:&Software&

4.1&Estado&del&arte.&Estudio&de&las&diferentes&opciones&

El! objetivo! de! esta! sección! es! establecer! una! relación! de! ventajas! e!

inconvenientes! de! las! diferentes! maneras! de! afrontar! el! desarrollo! software! del!

proyecto.!Se!diferencian!dos!formas!de!afrontar!la!programación!de!este!proyecto:!

a! través! de! un! sistema! operativo! reducido! o! microkernel,! y! utilizando!

programación!concurrente!sin!recurrir!a!esta!gestión.!Todo!esto!para!el!harware!

seleccionado;! es! decir,! Arduino! (aunque! algunos! de! estos! desarrollos! funcionan!

igualmente!en!otras!plataformas).!

!

4.2&Basadas&en&Sistemas&Operativos&

4.2.1&QPTMWnano&

La!solución!propuesta!por!Quantum!Leaps!se! llama!QPTMWnano! framework!

como!pseudo!sistema!operativo!de!tiempo!real!RTOS!y!QMTM!modeling,tool,como!

herramienta!de!programación!visual.!

QPWnano! es! un! marco! de! trabajo,! o! framework! en! lengua! inglesa,! que!

proporciona!bibliotecas!de!funciones!para!el!desarrollo!de!código!de!programación!

basado! en! maquinas! de! estado! finitas,! dirigidas! por! eventos,! jerarquizados! por!

prioridad.!!

!

Figura&4.1&Diagrama!de!funcionamiento!del!planificador!QVWnano.!!

Page 32: ESCUELA UNIVERSITARIA DE INGENIERÍA TÉCNICA DE ...oa.upm.es/49224/1/PFC_AITOR_CANTERO_ROMERO.pdf · Para!concluir,!se!documenta!un!ejemplo!de!un!proyecto ... y!bajo!el!control!de!un!programa!

Aitor&Cantero&Romero&&&&&&&&&&&&&&&&&&&&&&&Programación&concurrente&orientada&a&eventos&en&Arduino&para&el&Internet&de&las&Cosas&&

!34!

!

Para! la! versión! gratuita! disponible! para! el! entorno! de! desarrollo! de!

Arduino,!el!planificador!utilizado!es!cooperativo,!por!lo!que!es!responsabilidad!del!

programador!cuidar!que!el!código!de!su!programa!ceda!el!control!al!planificador!

para!no!acaparar!el!tiempo!de!CPU.!

El!diagrama!de!la!Figura!4.1!muestra!el!funcionamiento!de!este!planificador!

llamado!QVWnano.!El!planificador!buscará!el! evento!más!prioritario! (prioridad!n)!

utilizando!un!mecanismo!FIFO,!y!lo!despachará!a!la!máquina!de!estado!asociada!a!

dicho!evento.!El!siguiente!evento!a!tratar!lo!buscará!utilizando!el!mismo!método,!

por!lo!que!corremos!el!riesgo!de!no!manejar!nunca!los!eventos!menos!prioritarios.!

En!caso!de!encontrarse!todas! las!colas!de!eventos!vacías,!el!planificador!quedará!

en! estado! IDLE! (ocioso)! y! dormirá! (modo! sleep)! al! procesador! para! ahorro!

energético.!

La!versión!de!pago!implementa!un!planificador!más!sofisticado!llamado!QKW

nano,!proporcionando!un!mecanismo!de!multiprogramación!apropiativa,!como!en!

los!sistemas!operativos!modernos.!

!

!

Figura&4.2&Cambios!de!contexto!en!un!sistema!operativo!apropiativo!con!

prioridades.!

!

QPTMWnano! utiliza! las! interrupciones! hardware! de! Arduino,! para! hacer!

funcionar! el! planificador! en! intervalos! relativamente! cortos! de! tiempo.! Para! ello!

hace!uso!del!Timer2!en!el!caso!de!la!placa!Arduino!UNO,!dejando!el!Timer1!libre!

para!poder!ser!utilizado,!entre!otras,!por!la!función milis().!

Page 33: ESCUELA UNIVERSITARIA DE INGENIERÍA TÉCNICA DE ...oa.upm.es/49224/1/PFC_AITOR_CANTERO_ROMERO.pdf · Para!concluir,!se!documenta!un!ejemplo!de!un!proyecto ... y!bajo!el!control!de!un!programa!

Aitor&Cantero&Romero&&&&&&&&&&&&&&&&&&&&&&&Programación&concurrente&orientada&a&eventos&en&Arduino&para&el&Internet&de&las&Cosas&&

! 35!

El! framework! también! hace! uso! de! aserciones! para! capturar! errores! en!

tiempo!de!ejecución!y!ayudar!al!programador!en!su!depuración.!

&

QMTM&modeling)tool&

La! herramienta! de! modelado! gráfico! QMTM! es! un! entorno! de! desarrollo!

gratuito,! para! diseñar! e! implementar! aplicaciones! embebidas! basadas! en! el!

framework! QPTM.! Está! disponible! para! entornos!Windows! 64Wbit,! Linux! 64Wbit,! y!

macOS.!

Figura&4.3&Herramienta!de!programación!visual!QMTMmodeling!tool.

Esta! herramienta! no! es! imprescindible,! pero! si! altamente! recomendada!

para!la!comprensión,!diseño!y!desarrollo!de!las!aplicaciones!bajo!este!framework.!

La!nula!integración!de!esta!herramienta!con!el!IDE!de!Arduino!hace!que!sustituir!el!

entorno,!en!lugar!de!complementarlo,!para!la!fase!de!desarrollo!sea!inviable.!

!

&

Page 34: ESCUELA UNIVERSITARIA DE INGENIERÍA TÉCNICA DE ...oa.upm.es/49224/1/PFC_AITOR_CANTERO_ROMERO.pdf · Para!concluir,!se!documenta!un!ejemplo!de!un!proyecto ... y!bajo!el!control!de!un!programa!

Aitor&Cantero&Romero&&&&&&&&&&&&&&&&&&&&&&&Programación&concurrente&orientada&a&eventos&en&Arduino&para&el&Internet&de&las&Cosas&&

!36!

&

&

Conclusión&

Es!un!framework!que!contiene!casi!todas!los!requisitos!de!nuestro!proyecto!

y!objetivo.!Cito!a!continuación!los!pros!y!contras!encontrados!en!esta!plataforma.!

PROS:!

• Programación!concurrente!basada!en!eventos.!

• Compatible!con!placas!Arduino.!

• Multiplataforma!

• Coste!cero.!

• Flexibilidad!de!programación.!!

!

CONTRAS:&

• El!desarrollo!sobre!esta!plataforma!es!complejo,!en!oposición!de!uno!de!los!

valores!del!proyecto!Arduino.!!

• No! hay! soporte! nativo,! ni! librerías! para! proporcionar! conectividad,!

requisito!indispensable!para!su!aplicación!para!el!Internet!de!las!Cosas.!

Fuente[W4].!

4.2.2&RTuinOS&

RTuinOS! es! un! Sistema! Operativo! de! Tiempo! Real! (RTOS! en! inglés)! para!

Arduino.!Un!sistema!operativo!de!tiempo!real!es!indicado!para!entornos!en!los!que!

ciertas! actuaciones! deben! ser! realizadas! en! determinado! lapso! de! tiempo! con!

precisión!y!fiabilidad.!Por!ejemplo,!si!queremos!implementar!un!sistema!operativo!

de! tiempo! real! en! la! centralita! de! un! vehículo! para! controlar! la! inyección! de!

combustible,!esta!tarea!tiene!una!condición!crítica!temporal.!Solo!se!puede!dar!con!

un!error!de!nanosegundos.!!

La!ejecución!normal!de!un!programa!o!sketch!de!Arduino!tiene!dos!rutinas!

diferenciadas:!setup()!y loop().!La!primera!de!ellas!consiste!en!la!configuración!

inicial!necesaria!para!ejecutar!el!código!de!programa.!La!segunda!es!un!código!que!

se! ejecuta! indefinidamente! desde! la! ejecución! de! setup()! hasta! que! se! apaga! o!

reinicia!el!hardware.!La!cadencia!con!la!que!el!bucle!se!ejecuta!no!es!determinada!a!

Page 35: ESCUELA UNIVERSITARIA DE INGENIERÍA TÉCNICA DE ...oa.upm.es/49224/1/PFC_AITOR_CANTERO_ROMERO.pdf · Para!concluir,!se!documenta!un!ejemplo!de!un!proyecto ... y!bajo!el!control!de!un!programa!

Aitor&Cantero&Romero&&&&&&&&&&&&&&&&&&&&&&&Programación&concurrente&orientada&a&eventos&en&Arduino&para&el&Internet&de&las&Cosas&&

! 37!

priori,!si!no!que!depende!de!la!duración!de!la!ejecución!del!código!en!dicho!bucle!y!

de!su!flujo!de!programa.!

Usando!RTuinOS,!las!dos!funciones!mencionadas!siguen!existiendo!y!siguen!

teniendo! el! mismo! significado.! Sin! embargo,! como! parte! de! la! configuración! se!

definen! una! serie! de! tareas! que! son! las! que! nuestro! sistema! va! a! ejecutar!

concurrentemente.! Dichas! tareas! se! ejecutan! de! forma! semi! paralela! y! RTuinOS!

brinda! primitivas! de! sincronización! y! exclusión! mutua! para! coordinarlas.! Las!

tareas! se! ejecutan! repetidamente! dentro! del! bucle! de! la! función! principal.! La!

función!loop()!se!convierte!en!la!tarea!ociosa!(IDLE)!de!RTuinOS.!

Una! característica!de!RTuinOS!es!que! el! comportamiento!de!una! tarea!no!

está! totalmente! predeterminada! en! tiempo! de! compilación.! A! su! vez,! soporta!

tareas!comunes,!controladas!por!tiempo,!o!controladas!por!eventos;!y!que!pueden!

tener!diferentes!prioridades.!

RTuinOS!está!organizado!en!un!paquete!que!combina!la!fuente!del!sistema!

operativo!con!algunas!aplicaciones!de!ejemplo.!El!código!fuente!de!cada!aplicación!

están!separados!en!carpetas.!Cualquiera!de!estos!ejemplos!puede!ser!seleccionado!

para!la!compilación.!

Tareas!en!RTuinOS!

En!este!sistema!una! tarea!está!representada!por!un!objeto!task.!Todos! los!

objetos!task!se!asignan!estáticamente,!no!hay!creación!o!eliminación!dinámica!de!

tareas.!Estas! tareas! se!parametrizan!en! la! función!setup()! de!Arduino!y!quedan!

determinadas!en!tiempo!de!compilación.!

RTuinOS!administra!una!lista!que!define!las!tareas!y!sus!prioridades.!Todas!

las! tareas! tienen! una! prioridad! específica! todas! las! tareas! que! tienen! la! misma!

prioridad! forman!una! lista!asociada.!Las!prioridades!de! las! tareas!se!determinan!

en! tiempo!de! compilación!de! la! aplicación.!Una! lista! adicional! contiene! todas! las!

tareas!(de!cualquier!prioridad)!que!se!encuentran!en!estado!de!suspensión!en!ese!

momento! indicado.!El!planificador!puede!ser!cooperativo,!o!utilizando!quantums!

de!tiempo!siguiendo!un!patrón!Round,Robin,o!una!combinación!de!ambos.!

!

Page 36: ESCUELA UNIVERSITARIA DE INGENIERÍA TÉCNICA DE ...oa.upm.es/49224/1/PFC_AITOR_CANTERO_ROMERO.pdf · Para!concluir,!se!documenta!un!ejemplo!de!un!proyecto ... y!bajo!el!control!de!un!programa!

Aitor&Cantero&Romero&&&&&&&&&&&&&&&&&&&&&&&Programación&concurrente&orientada&a&eventos&en&Arduino&para&el&Internet&de&las&Cosas&&

!38!

Figura&4.4&Diagrama!del!planificador!utilizado!por!RTuinOS.

Una! de! los! atributos! que! caracteriza! un! objeto! Tarea! es! la! condición! que!

expresa! bajo! qué! circunstancia! se! reanuda! su! ejecución.! En! el! momento! de!

inicialización!del!sistema!todas!las!tareas!son!puestas!en!estado!de!suspensión.!Es!

por! esto! que! la! condición! inicial! de! ejecución! es! parte! de! la! inicialización! de! la!

tarea.! Habitualmente! las! tareas! se! configuran! para! que! comiencen! su! actividad!

inmediatamente! al! inicio! del! sistema.! Sin! embargo,! pueden! ser! utilizadas!

condiciones! temporales,! eventuales! y! lógicas.! Aplicar! retardos! en! el! inicio! de! las!

tareas!puede!evitar!tener!muchas!tareas!regulares!ejecutándose!al!mismo!tiempo,!

no!favoreciendo!el!retardo!de!actuación!de!dichas!tareas.!

Para!crear!una!aplicación!RTuinOS!se!debe:!

• Crear!una!carpeta!vacía!para!el!nuevo!proyecto.!

• Un! fichero! fichero.c!donde! se!definen! las! funciones!setup( ),!loop( )! las!

tareas!

• Un!fichero!rtos.config.c!con!las!configuraciones!de!RTuinOS.!

• Configuración!de!makefile!teniendo!en!cuenta!la!placa!Arduino!utilizada,!su!

puerto!y!el!compilador!a!utilizar!

!

Es! importante! aclarar! puede!para! realizar! la! aplicación! se! podrán!utilizar!

las!funciones!provistas!por!la!librerías!estándar!de!Arduino,!y!a!su!vez,!utilizar!las!

Page 37: ESCUELA UNIVERSITARIA DE INGENIERÍA TÉCNICA DE ...oa.upm.es/49224/1/PFC_AITOR_CANTERO_ROMERO.pdf · Para!concluir,!se!documenta!un!ejemplo!de!un!proyecto ... y!bajo!el!control!de!un!programa!

Aitor&Cantero&Romero&&&&&&&&&&&&&&&&&&&&&&&Programación&concurrente&orientada&a&eventos&en&Arduino&para&el&Internet&de&las&Cosas&&

! 39!

funciones! que! brinda! RTuinOS! para! garantizar! la! exclusión! mutua! y! la!

sincronización!entre!tareas.!

!

!

Figura&4.5&Placa!Arduino!Mega.

!

El! sistema!operativo!RTuinOS! está!diseñado!para! ser! implementado! en! la!

placa!Arduino!Mega,!basado!en!el!chip!AVR!ATmega2560.!!Se!diferencia!de!la!placa!

UNO!en:!

• La!disposición!de!sus!pines!y!puertos.!

• 256KB!de!memoria!flash!en!lugar!de!32KB!en!Uno.!

• 8!KB!SRAM!vs!2!KB.!

• 4k!EEPROM!vs!1k.!

• 4!Puertos!Serie!Hardware!en!lugar!de!1!en!el!caso!de!la!placa!UNO.!

• Muchos!más!pines!con!capacidad!PWM!(15!en!Mega!y!6!en!UNO). &

Conclusión&

Es! un! sistema! operativo! creado! a! partir! de! cero,! sin! la!madurez! de! otros!

similares!como!FreeRTOS,!pero!que!provee!de!las!herramientas!para!cumplir!con!

casi!todos!los!requisitos!de!este!proyecto.!A!continuación!enumero!sus!ventajas!y!

desventajas:!

&PROS:&

• Permite!programación!concurrente.!

• Compatible!con!placas!Arduino.!

• Compilador!multiplataforma!desde!la!versión!1.0.2.!

Page 38: ESCUELA UNIVERSITARIA DE INGENIERÍA TÉCNICA DE ...oa.upm.es/49224/1/PFC_AITOR_CANTERO_ROMERO.pdf · Para!concluir,!se!documenta!un!ejemplo!de!un!proyecto ... y!bajo!el!control!de!un!programa!

Aitor&Cantero&Romero&&&&&&&&&&&&&&&&&&&&&&&Programación&concurrente&orientada&a&eventos&en&Arduino&para&el&Internet&de&las&Cosas&&

!40!

• Coste!cero.!

• Flexibilidad!de!programación.!!

!

CONTRAS:&

• El!desarrollo!sobre!esta!plataforma!es!complejo,!en!oposición!de!uno!de!los!

valores!del!proyecto!Arduino.!!

• No! hay! soporte! nativo,! ni! librerías! para! proporcionar! conectividad,!

requisito!indispensable!para!su!aplicación!para!el!Internet!de!las!Cosas.!

• Los!recursos!necesarios!para!hacer!correr!el!sistema!operativo!no!han!sido!

optimizados!aún.!

Fuente![W5].!

4.2.3&Contiki&OS&

Contiki! es! un! sistema! operativo! de! código! abierto,! altamente! portátil! y!

multitarea! para! sistemas! embebidos! y! redes! de! sensores! inalámbricos.! Está!

diseñado! para! microcontroladores! con! pequeñas! cantidades! de! memoria.! Una!

configuración!típica!de!Contiki!es!2!kilobytes!de!RAM!y!40!kilobytes!de!ROM.!Está!

escrito!en!el!lenguaje!de!programación!C!y!está!libremente!disponible!como!código!

abierto!bajo!una!licencia!de!tipo!BSD.!Funciona!en!una!variedad!de!la!plataforma!

que!se!extiende!de!microcontroladores!tales!como!el!MSP430!y!el!AVR!a!antiguos!

ordenadores!personales.!

Contiki! se! basa! en! un! kernel! controlado! por! eventos,! pero! proporciona!

soporte! tanto! para! multiWsubprocesos! como! para! una! construcción! ligera! y! sin!

pilas!llamada!protothreads.!

Ofrece! una! comunicación! a! Internet! potente! y! de! bajo! consumo,! es!

completamente! compatible! con! IPv6! e! IPv4! y! con! los! últimos! estándares!

inalámbricos! para! dispositivos! de! bajo! consumo:! 6LoWPAN,! RPL,! COAP.!

Utilizando! ContikiMAC,! incluso! dispositivos! enrutadores! pueden! operar! a!

baja! potencia! y! ser! alimentados! por! baterías.! Contiene! dos! pilas! de!

comunicación:!uIP!y!Rime.:!

• uIP!es!una!pequeña!pila!TCP!/!IP!compatible!con!RFC!que!hace!posible!que!

se!comunique!a!través!de!Internet.!!

Page 39: ESCUELA UNIVERSITARIA DE INGENIERÍA TÉCNICA DE ...oa.upm.es/49224/1/PFC_AITOR_CANTERO_ROMERO.pdf · Para!concluir,!se!documenta!un!ejemplo!de!un!proyecto ... y!bajo!el!control!de!un!programa!

Aitor&Cantero&Romero&&&&&&&&&&&&&&&&&&&&&&&Programación&concurrente&orientada&a&eventos&en&Arduino&para&el&Internet&de&las&Cosas&&

! 41!

• Rime! es! una! pila! de! comunicaciones! ligeras! diseñada! para! radios! de! baja!

potencia.! Rime! proporciona! una! amplia! gama! de! primitivas! de!

comunicación! adecuadas! para! implementar! aplicaciones! vinculadas! a! la!

comunicación!o!protocolos!de!red!

!

El! sistema!de!desarrollo! está!diseñado!para! facilitar! la! compilación!de! las!

aplicaciones! de,! ya! sea! para! una! plataforma! de! hardware! o! una! plataforma! de!

simulación,!simplemente!suministrando!diferentes!parámetros!al!comando!make,!

sin!tener!que!editar!ficheros!makefile!ni!modificar!el!código!de!la!aplicación.!

!

Figura&4.5&Herramienta!de!simulación!Cooja!para!el!sistema!operativo!Contiki.!

!

Para! utilizar! el! sistema,! hay! que! descargar! una! máquina! virtual! con!

distribución!Linux!Ubuntu!y!arrancarla!con!el!programa!VMWare!Player.!Dentro!de!

dicho!sistema!virtualizado!se!encuentra!un!emulador!de!redes!de!sensores!escrito!

en!Java!llamado!Cooja,!y!los!compiladores!base!para!que!compiles!y!subas!el!código!

a!tu!hardware.! !Cuando!deseas!escribir!un!programa!propio!–o!variosW!y!hacerlos!

funcionar! con! este! sistema,! en! realidad! el! compilador! incluye! tanto! el! sistema!

Page 40: ESCUELA UNIVERSITARIA DE INGENIERÍA TÉCNICA DE ...oa.upm.es/49224/1/PFC_AITOR_CANTERO_ROMERO.pdf · Para!concluir,!se!documenta!un!ejemplo!de!un!proyecto ... y!bajo!el!control!de!un!programa!

Aitor&Cantero&Romero&&&&&&&&&&&&&&&&&&&&&&&Programación&concurrente&orientada&a&eventos&en&Arduino&para&el&Internet&de&las&Cosas&&

!42!

operativo!Contiki,!como!tu!código!a!medida!compilado!como!diferentes!programas!

que!corren!bajo!dicho!sistema.!

Para! ofrecer! homogeneidad! al! método! de! programación! bajo! hardware!

heterogéneo! ,! utiliza! el! comando! make! previamente! parametrizado! al! hardware!

deseado.!Esto!tiene!la!contrapartida!de!que!solo!cierta!hardware!es!compatible!de!

manera!nativa.!Además!de!diferentes!propuestas!hardware!de!los!propios!autores,!

encontramos! un! abanico! de! posibilidades! para! utilizar! como! nodos! de! dichas!

redes,!o!motas,! como!se! las!conoce!en!este!ámbito.!La!siguiente! tabla!muestra! la!

compatibilidad! con! estos! microcontroladoresWtransceptores! con! el! sistema!

operativo!y!con!su!herramienta!de!simulación:!

!

MCU/SoC& Radio& Plataforma& Cooja(simulación)&

TI!CC2538! Integrated!/!CC1200! REWMote! ✗!

nRF52832! Integrated! nRF52!DK! ✗!

RL78! ADF7023! EVALWADF7023DB1! ✗!

TI!CC2538! Integrada! cc2538dk! ✗!

TI!MSP430x! TI!CC2420! exp5438,!z1! ✓!TI!MSP430x! TI!CC2520! wismote! ✓!Atmel!AVR! Atmel!RF230! avrWraven,!avrWrcb,!avrWzigbit,!iris! ✗!

Atmel!AVR! TI!CC2420! micaz! ✓!Freescale!MC1322x! Integrada! redbeeWdev,!redbeeWeconotag! ✗!

TI!MSP430! TI!CC2420! sky! ✓!TI!MSP430! TI!CC1020! msb430! ✗!

TI!MSP430! RFM!TR1001! esb! ✓!Atmel!Atmega128!RFA1! Integrado! avrWatmega128rfa! ✗!

Microchip!pic32mx795f512l! Microchip!mrf24j40! seedWeye! ✗!

TI!CC2530! Integrado! cc2530dk! ✗!

6502! ✗! apple2enh,!atari,!c128,!c64! ✗!

Native! ✗! native,!minimalWnet,!cooja! ✓!

Figura&4.6&Tabla!de!compatibilidad!de!hardware!con!Contiki. !

En!la!tabla!no!aparece!información!relativa!al!hardware!propio!de!Arduino,!

ni!con!su!entorno!de!desarrollo.!En!el!momento!actual,!hay!ciertos!proyectos!para!

portar! este! sistema! a! las! placas! de! Arduino,! pero! no! hay! disponible! ninguna!

versión!beta!o!borrador.!Cito!del!repositorio!de!GitHub!de!Contiki!

!

!

Page 41: ESCUELA UNIVERSITARIA DE INGENIERÍA TÉCNICA DE ...oa.upm.es/49224/1/PFC_AITOR_CANTERO_ROMERO.pdf · Para!concluir,!se!documenta!un!ejemplo!de!un!proyecto ... y!bajo!el!control!de!un!programa!

Aitor&Cantero&Romero&&&&&&&&&&&&&&&&&&&&&&&Programación&concurrente&orientada&a&eventos&en&Arduino&para&el&Internet&de&las&Cosas&&

! 43!

“La,familia,Arduino,

Arduino,Uno,con,Atmega328P:PU.,+,placa,Openlabs,Radio,basada,en,AT86RF233.,

(Esto,es,mucho,trabajo,,espero,que,al,final,funcione)”,

christofferholmstedt,!4!Nov!2014!

Conclusión&

Es! un! sistema! operativo! diseñado!para! redes! de! sensores! desplegados! en!

nodos! o! motas,! que! implementa! gran! parte! de! los! requisitos! del! proyecto.! A!

continuación!se!indican!sus!ventajas!y!desventajas:!

&PROS:&

• Permite!programación!concurrente.!

• Se!puede!utilizar!desde!cualquier!plataforma!al!correr!bajo!máquina!virtual.!

• Coste!cero.!

CONTRAS:&

• La! comunidad! tras! este! sistema! operativo,! está! organizada! mediante!

mailing, lists.! Un! sistema! áspero! para! la! difusión! y! el! aprendizaje! a! día! de!

hoy.!!

• No!hay! soporte!nativo,!ni! librerías!de! terceros!para! las!placas!Arduino,!ni!

siquiera!para!las!que!están!basadas!en!conectividad.!

• La!arquitectura!que!mejor!se!adapta!a!este!sistema!operativo!es!la!de!la!red!

de! sensores! inalámbrica! (WSN! por! sus! siglas! en! ingles),! no! a! todo! el!

conjunto!del!Internet!de!las!Cosas.!

Fuente![W6].!

4.3&Basadas&en&lenguaje&de&programación&

4.3.1&OccamW&π&

El! lenguaje! de! programación! Occam! data! del! año! 1983.! Fue! creado! para!

poder! y! desarrollar! y! vender! una! gama! de! procesadores! especializados! de! la!

empresa! Inmos! llamados! transputer.! Estos! procesadores! eran! especiales! porque!

tenían! la! capacidad! de! cambiar! de! contexto!muy! rápidamente! entre!multitud! de!

procesos.!Además,!disponían!de!una!interfaz!física!de!enlace!para!operar!con!otros!

procesadores!semejantes!de!manera!paralela.!De!esa!manera!se!obtenía!un!cluster!

de!procesadores!distribuidos,!lo!que!para!esa!época!era!una!proeza.!

Page 42: ESCUELA UNIVERSITARIA DE INGENIERÍA TÉCNICA DE ...oa.upm.es/49224/1/PFC_AITOR_CANTERO_ROMERO.pdf · Para!concluir,!se!documenta!un!ejemplo!de!un!proyecto ... y!bajo!el!control!de!un!programa!

Aitor&Cantero&Romero&&&&&&&&&&&&&&&&&&&&&&&Programación&concurrente&orientada&a&eventos&en&Arduino&para&el&Internet&de&las&Cosas&&

!44!

A! día! de! hoy,! la!multiprogramación! real,! el!multinúcleo! y! la! concurrencia!

son! habituales! en! los! ordenadores! personales.! No! obstante,! en! los!

microcontroladores!basados!en!procesadores!sencillos!como!Arduino!no!se! tiene!

acceso! a! este! forma! de! programar! de! manera! nativa.! Para! hacerlo! posible,! un!

grupo! de! desarrolladores! ha! portado! el! sistema! de! los! transputers! para! estas!

placas!de!prototipado.!Este!proyecto!recibe!el!nombre!de!concurrency.cc.!

!

!

Figura&4.6&Diagrama!de!funcionamiento!de!OccamWπ!sobre!el!hardware.!

!

Esta! adaptación! se! ha! llevado! a! cabo! mediante! la! realización! de! una!

máquina! virtual,! que! abstrae! a! las! instrucciones! compiladas! por! el! programador!

del!hardware!sobre!el!que!corre!el!programa.!Es!un!concepto!similar!a! Java!y!su!

máquina! virtual.! Esta! máquina! virtual! se! conoce! por! el! nombre! Transterpeter!

[W7].!En!suma,!estos!desarrolladores!han!generado!una!librería!llamada!Plumbing!

para!poder!realizar!con!ella!programaciones!más!complejas![W8].!

Esta! librería! está! escrita! en! occamWπ.! También! han! creado! un! entorno! de!

desarrollo!mediante!un!port!de!JEdit.!

!

Page 43: ESCUELA UNIVERSITARIA DE INGENIERÍA TÉCNICA DE ...oa.upm.es/49224/1/PFC_AITOR_CANTERO_ROMERO.pdf · Para!concluir,!se!documenta!un!ejemplo!de!un!proyecto ... y!bajo!el!control!de!un!programa!

Aitor&Cantero&Romero&&&&&&&&&&&&&&&&&&&&&&&Programación&concurrente&orientada&a&eventos&en&Arduino&para&el&Internet&de&las&Cosas&&

! 45!

!

Figura&4.7&Detalle!de!un!ejemplo!de!código!escrito!en!OccamWπ.!

!

El! lenguaje! está! orientado! particularmente! a! la! programación! paralela.!

Podemos!analizar!sus!características!principales!con!el!fragmento!de!la!figura!(x).!

En! la! línea!1!observamos! la!declaración!de!un!procedimiento!o!un! función.!Para!

ello! se! utiliza! la! palabra! reservada! PROC! en! letras! mayúsculas.! Se! trata! de! una!

función!sin!parámetros.!En!la!línea!2!tras!utilizar!dos!espacios!como!sangría!se!ha!

declarado! un! canal! de! tipo! señal! llamado! s,! utilizando! las! palabras! reservadas!

CHAN!y!SIGNAL.!En!la!línea!3!,!al!mismo!nivel!que!la!línea!que!le!precede,!se!indica!

que!las!sentencias!que!se!invoquen!debajo!se!realizarán!de!manera!paralela.!Para!

ello! utiliza! la! palabra! reservada! PAR.! Otra! opción! podría! ser! utilizar! SEQ! para!

instrucciones!secuenciales,!o!ALT!para!manejar!un!flujo!condicional.!En!la!línea!4!

con!dos!espacios!de!sangría!adicionales!se!realiza!una! llamada!a!una! función.!En!

concreto! es! la! llamada! a! un! botón! colocado! en! el! Pin! 2! de! Arduino,! que! al!

presionarlo! realiza! una! comunicación! por! el! canal! s,! declarado! en! la! línea! 2.! El!

símbolo!de!exclamación!‘!’!indica!que!es!emisor!de!la!información!de!ese!canal.!En!

la! línea!siguiente!5!encontramos!otra! llamada!a! función.!Aquí!el!pin!digital!13!de!

Arduino,! se! apagará.! Esta! operación! se! llevará! a! cabo! cuando! la! señalización!del!

botón! por! el! canal! s! sea! recibida.! Para! indicar! que! esta! acción! es! receptora! del!

canal! se! utiliza! el! carácter! ‘?’.! En! la! línea! número! 6! se! concluye! la! función! main!

mediante! los! dos! puntos! ‘:’! utilizando! la! misma! sangría! que! la! del! inicio! de! su!

procedimiento.!

La!sintaxis!de!este!lenguaje!de!programación!es!altamente!precisa.!Hay!que!

tener! especial! cuidado! con! la! sangría! y! el! formato,! pues! repercute! en! la!

compilación!del!código.!!

Page 44: ESCUELA UNIVERSITARIA DE INGENIERÍA TÉCNICA DE ...oa.upm.es/49224/1/PFC_AITOR_CANTERO_ROMERO.pdf · Para!concluir,!se!documenta!un!ejemplo!de!un!proyecto ... y!bajo!el!control!de!un!programa!

Aitor&Cantero&Romero&&&&&&&&&&&&&&&&&&&&&&&Programación&concurrente&orientada&a&eventos&en&Arduino&para&el&Internet&de&las&Cosas&&

!46!

Existe!una! limitación!de!uso!en!cuanto!al!hardware!compatible,!que!no!se!

actualiza! desde! Junio! de! 2013.! En! el!momento! de! escritura! de! este! proyecto! se!

encuentra!así:!

!

Soportadas&

Placas& MHz& CPU& Tensión&

Duemilanove,!Freeduino,!Nano!3.0,!Pro!Mini! 16! Atmega!328! 5V!

No&soportadas&(en&progreso)&

Placas& MHz& CPU& Tensión&

Uno,!Moteino! 16! Atmega328! 5V!

Mini! 8! Atmega328! 3.3V!

Mega! 16! Atmega2560! 5V!

Leonardo! 16! Atmega32u8! 5V!

&

Conclusión&

Tras!el!estudio!de!las!características!de!esta!vía!de!desarrollo,!se!enumeran!

sus!virtudes!y!defectos!para!la!empresa!de!este!proyecto.!!

&PROS:&

• Permite!programación!concurrente.!

• Coste!cero!

CONTRAS:&

• No! se! puede! utilizar! desde! cualquier! placa! Arduino! al! necesitar! una!

máquina!virtual!específica!para!cada!placa.!!

• No!hay!soporte!nativo,!ni!librerías!basadas!en!conectividad.!

Fuente![W8].!

4.3.2&Protothreads&

Un! Protothread! es! un! hilo! extremadamente! liviano! (solo! dos! bytes),!

diseñados! para! sistemas! con! restricciones! de! memoria,! como! sucede! en!

microcontroladores! y! nodos! de! una! red! de! sensores! inalámbricos! (motas).! Los!

Protothreads!proporcionan!ejecución!de!código!lineal!para!sistemas!dirigidos!por!

eventos! implementados! en! C.! Pueden! utilizarse! con! o! sin! un! sistema! operativo!

subyacente!para!proporcionar!bloqueo!de!y!manejar!de!esta!manera!eventos.!Los!

Page 45: ESCUELA UNIVERSITARIA DE INGENIERÍA TÉCNICA DE ...oa.upm.es/49224/1/PFC_AITOR_CANTERO_ROMERO.pdf · Para!concluir,!se!documenta!un!ejemplo!de!un!proyecto ... y!bajo!el!control!de!un!programa!

Aitor&Cantero&Romero&&&&&&&&&&&&&&&&&&&&&&&Programación&concurrente&orientada&a&eventos&en&Arduino&para&el&Internet&de&las&Cosas&&

! 47!

Protothreads! proporcionan! flujo! secuencial! de! control! sin! máquinas! de! estado!

complejas!o!multihilo!real.!

En!un!fragmento!de!código!escrito!por!Adam!Dunkels!en!2004.!Está!escrito!

en! lenguaje! C! nativo! y! es! una! pieza! de! código! independiente! de! timers,!

interrupciones! y! sistemas! operativos,! lo! que! le! otorga! total! portabilidad.! Aquí!

podemos!ver!un!ejemplo!de!protothread!original!escrito!en!lenguaje!C.!

#include "pt.h" struct pt pt; struct timer timer; PT_THREAD(protothread(struct pt *pt)) { PT_BEGIN(pt); while(1) { if(initiate_io()) { timer_start(&timer); PT_WAIT_UNTIL(pt, io_completed() || timer_expired(&timer)); read_data(); } } PT_END(pt); }

Código&4.1&Ejemplo!de!código!de!protothreads.!

!

Y! la! forma!de! utilizarlos! en! una! función! principal! tiene! que! ser! similar! al!

siguiente!código:!

#include "pt.h" static int counter; static struct pt example_pt; static PT_THREAD(example(struct pt *pt)) { PT_BEGIN(pt); while(1) { PT_WAIT_UNTIL(pt, counter == 1000); printf("Threshold reached\n"); counter = 0; } PT_END(pt); } int main(void) { counter = 0; PT_INIT(&example_pt); while(1) {

Page 46: ESCUELA UNIVERSITARIA DE INGENIERÍA TÉCNICA DE ...oa.upm.es/49224/1/PFC_AITOR_CANTERO_ROMERO.pdf · Para!concluir,!se!documenta!un!ejemplo!de!un!proyecto ... y!bajo!el!control!de!un!programa!

Aitor&Cantero&Romero&&&&&&&&&&&&&&&&&&&&&&&Programación&concurrente&orientada&a&eventos&en&Arduino&para&el&Internet&de&las&Cosas&&

!48!

example(&example_pt); counter++; } return 0; }

Código&4.2&Ejemplo!de!código!de!protothreads!II.!

!

¿Cómo! funciona! realmente?! La! clave! está! en! el! uso! de! macros! en! C.! Se!

utilizan! macros! en! lugar! de! funciones! para! aprovechar! cómo! los! expande! el!

preprocesador!de!C.!Las!MACROS!son!los!segmentos!de!código!que!se!han!utilizado!

para!construir!el!protothread!y!para!implementarlo!en!la!función!principal.!Lo!que!

el! preprocesador! de! C! realiza! es! la! siguiente! transformación! previa! a! la!

compilación.!

# struct pt { unsigned short lc; }; #define PT_THREAD(name_args) char name_args #define PT_BEGIN(pt) switch(pt->lc) { case 0: #define PT_WAIT_UNTIL(pt, c) pt->lc = __LINE__; case __LINE__: \ if(!(c)) return 0 #define PT_END(pt) } pt->lc = 0; return 2 #define PT_INIT(pt) pt->lc = 0

Código&4.3&Macros!de!la!cabecera!en!biblioteca!protothreads.!

!

Vemos! que! la! estructura! pt! consta! de! un! solo! unsigned, short! llamado! lc,!

contracción!de!continuación!local!en!inglés.!Esta!variable!es!el!origen!del!tamaño!

utilizado!por! cada!protothread! ! (de!dos!bytes)! para! almacenar! su! estado,! que! es!

mencionada! con! frecuencia! en! la! literatura! sobre! protothreads.! Trasladado! al!

código!del!protothread!inicial!y!comparándolo!queda!así:!

!

static PT_THREAD(example(struct pt *pt)) { PT_BEGIN(pt); while(1) { PT_WAIT_UNTIL(pt, counter == 1000); printf("Threshold reached\n"); counter = 0; } PT_END(pt); }

!static char example(struct pt *pt) { switch(pt->lc) { case 0: while(1) { pt->lc = 12; case 12: if(!(counter == 1000)) return 0; printf("Threshold reached\n"); counter = 0; } } pt->lc = 0; return 2; }

Código&4.4&Transformación!de!las!Macros!en!biblioteca!protothreads.!

Page 47: ESCUELA UNIVERSITARIA DE INGENIERÍA TÉCNICA DE ...oa.upm.es/49224/1/PFC_AITOR_CANTERO_ROMERO.pdf · Para!concluir,!se!documenta!un!ejemplo!de!un!proyecto ... y!bajo!el!control!de!un!programa!

Aitor&Cantero&Romero&&&&&&&&&&&&&&&&&&&&&&&Programación&concurrente&orientada&a&eventos&en&Arduino&para&el&Internet&de&las&Cosas&&

! 49!

En! la! primera! línea! del! código! vemos! cómo! se! ha! expandido! la! macro!

PT_THREAD!para!que!el!protothread!llamado!example!se!haya!convertido!en!una!

función! C! normal! que! devuelve! un! char.! El! valor! de! retorno! de! la! función!

protothread! se! puede! usar! para! determinar! si! el! protothread! está! bloqueado! en!

espera!o!si!ha!terminado.!

La! macro! PT_BEGIN! se! ha! expandido! a! una! instrucción! switch! donde! se!

evalúa! la! variable! lc! de! la! estructura! pt! y! una! apertura! de! corchete.! Si!miramos!

hacia! abajo! al! final! de! la! función,! vemos! que! la! expansión! de! la! macro! PT_END!

contiene! la! llave! de! cierre! para! el! switch.! Tras! la! llave! de! apertura,! observamos!

cómo! la! traducción! de! PT_BEGIN! es! case, 0:! .! Esto! es! para! asegurarse! de! que! el!

código!posterior!a!la!instrucción!PT_BEGIN!es!el!primero!en!ejecutarse!la!primera!

vez!que!se!ejecuta!el!protothread.!Anteriormente!PT_INIT!estableció!ptW>lc!a!cero.!

Atravesando!el!bucle!while,(1),!la!macro!PT_WAIT_UNTIL!se!ha!expandido!en!algo!

que! contiene! el! número! 12.! A! la! variable! ptW>lc! se! le! asigna! el! valor! 12! y! acto!

seguido!se!añade!la!instrucción!case!12:!.!Después!de!esto,!la!variable!del!contador!

se!comprueba!para!ver!si!es!1000!o!no.!Si!no!es!así,!la!función!example!()!ejecuta!

ahora!un!retorno!explícito.!

¿De!dónde!proviene!el!número!12!y!por!qué!la!función!retorna!en!el!medio!

del! bucle!while, (1)?! Para! entender! es! necesario! ejecutar! el! código! en! la! función!

example!()!una!segunda!vez.!

La!próxima!vez!que!se!llama!a!la!función!example!()!desde!la!función!main!

(),!la!variable!ptW>!lc!no!será!cero!sino!12,!como!se!estableció!en!la!expansión!de!la!

macro!PT_WAIT_UNTIL.!Esto!hace!que!el!switch,(pt:>,lc)!salte!a!la!instrucción!case,

12:! .! Esta! sentencia! está! justo! antes! de! la! instrucción! if! donde! se! comprueba! la!

variable! del! contador! para! ver! si! ha! llegado! a! 1000.! Por! lo! tanto,! la! variable!

contador!se!comprueba!de!nuevo.!Si!no!ha!alcanzado!1000,!la!función!example!()!

regresa!de!nuevo.!La!próxima!vez!que!se!invoque!la!función,!al!evaluar!la!variable!

salta!al!caso!12!de!nuevo!y!reevalúa!el!contador!para!saber!si!es!1000.!El!flujo!del!

programa!continuará!haciéndolo!hasta!que!la!variable!del!contador!llegue!a!1000.!

Cuando!esto!suceda,!saltamos!la!asignación!de!variable!ptW>lc!a!cero,!hasta!que!se!

ejecuta!la!sentencia!printf!y!la!variable!del!contador!se!pone!a!cero,!antes!de!que!el!

bucle!while!(1)!vuelva!a!empezar.!

Page 48: ESCUELA UNIVERSITARIA DE INGENIERÍA TÉCNICA DE ...oa.upm.es/49224/1/PFC_AITOR_CANTERO_ROMERO.pdf · Para!concluir,!se!documenta!un!ejemplo!de!un!proyecto ... y!bajo!el!control!de!un!programa!

Aitor&Cantero&Romero&&&&&&&&&&&&&&&&&&&&&&&Programación&concurrente&orientada&a&eventos&en&Arduino&para&el&Internet&de&las&Cosas&&

!50!

Pero,!¿de!dónde!viene!el!número!12?!Es!el!número!de!línea!de!la!instrucción!

PT_WAIT_UNTIL! como! consta! en! el! código! completo.! Lo! importante! es! que! los!

números! de! línea! aumentan! irrevocablemente! en! la! codificación.! Es! decir,! si!

ponemos!otra!declaración!PT_WAIT_UNTIL!más!adelante!en!nuestro!programa,!el!

número!de!línea!será!diferente!de!la!primera!declaración!PT_WAIT_UNTIL.!Por!lo!

tanto,! el! switch, (pt:>, lc)! sabe! exactamente! a! qué! línea! saltar.! De! esta! forma! el!

control!de!flujo!es!robusto!y!no!hay!ambigüedades.!

Es!infrecuente!en!programación!ver!un!salto!de!línea,!mas!aún!en!el!interior!

de!un!bucle!while.!Este!truco!de!programación!funciona!y!su!descubrimiento!se!le!

atribuye! al! programador! Tom! Duff,! en! su! código! bautizado! Dispositivo! de! Duff.!

Luego!fue!utilizado!por!Simon!Tatham!en!las!corutinas!de!C.!

Este! mecanismo! de! concurrencia! basado! en! una! condición! o! evento! se!

utiliza!en:!

• Sistemas!con!restricción!de!memoria.!

• Pilas!de!protocolo!de!programación!dirigida!por!eventos.!

• Pequeños!sistemas!embebidos.!

• Nodos!de!redes!de!sensores.!

• Aplicaciones!de!C!transportables.!

El! autor! de! este! código! Adam! Dunkels,! ha! empleado! está! técnica! para!

proveer! a! su! sistema! operativo! Contiki! (estudiado! en! este! proyecto),! para! el!

planificador!de!tareas.!

!

Fuente![W19]!

Page 49: ESCUELA UNIVERSITARIA DE INGENIERÍA TÉCNICA DE ...oa.upm.es/49224/1/PFC_AITOR_CANTERO_ROMERO.pdf · Para!concluir,!se!documenta!un!ejemplo!de!un!proyecto ... y!bajo!el!control!de!un!programa!

Aitor&Cantero&Romero&&&&&&&&&&&&&&&&&&&&&&&Programación&concurrente&orientada&a&eventos&en&Arduino&para&el&Internet&de&las&Cosas&&

! 51!

Capitulo&5.&Conectividad&

!

IoT! es! posible! gracias! a! la! conectividad:! la! manera! en! que! las! diferentes!

“cosas”! intercambian! información.! Para! esto! es! muy! importante! la! ruta! física! y!

lógica!que!sigue! la! información!entre!un!punto!y!otro!y! también!el! formato!de! la!

información:!la!manera!en!que!esta!información!es!“empaquetada”.!

&

5.1&Consideraciones&previas&

5.1.1&Modelo&OSI&

El! modelo! OSI! (Open! Systems! Interconnection)! (ISO/IEC! 7498W1)! es! un!

referencia! fruto!de! la!Organización! Internacional!de!Estándares! (ISO),!que!desde!

su! nacimiento! ha! tenido! soporte! por! parte! de! la! Unión! Internacional! de!

Telecomunicaciones! (UIT).!En!esta! especificación! se!detallan! las! funciones!de!un!

sistema! de! comunicaciones! en! términos! de! abstracción! de! capas.! Funciones!

similares!de!comunicación!son!agrupadas!en!capas!lógicas.!Una!capa!sirve!a!la!capa!

superior,!y!!a!su!vez,!esta!es!servida!por!la!capa!debajo!de!ella.!Como!se!observa!en!

la!siguiente!figura,!se!divide!en!7!capas:!

!

Figura&5.1&Comparativa!entre!TCP/IP!y!el!modelo!OSI.

Page 50: ESCUELA UNIVERSITARIA DE INGENIERÍA TÉCNICA DE ...oa.upm.es/49224/1/PFC_AITOR_CANTERO_ROMERO.pdf · Para!concluir,!se!documenta!un!ejemplo!de!un!proyecto ... y!bajo!el!control!de!un!programa!

Aitor&Cantero&Romero&&&&&&&&&&&&&&&&&&&&&&&Programación&concurrente&orientada&a&eventos&en&Arduino&para&el&Internet&de&las&Cosas&&

!52!

El!modelo! la! información!viaja!en! las!capas!verticalmente!(de!arriba!hacia!

abajo!en!el!transmisor!y!de!abajo!hacia!arriba!en!el!receptor).!Cada!capa!incorpora!

información! redundante! para! cumplimentar! determinada! función.! A! nivel!

horizontal! las! capas! añadenWeliminan! información! e! implementan! determinados!

mecanismos! para! asegurar! determinada! funcionalidad.! Funcionan! como! un!

sándwich!donde!cada!capa!es!independiente!del!resto.!

Capa!1.!Física:!La!capa! física!define! las!especificaciones!eléctricas!y! físicas!

de!los!dispositivos.!En!particular,!define!la!relación!entre!un!dispositivo!y!un!medio!

de!transmisión,!como!un!cable!de!cobre!o!de!fibra!óptica.!Esto!incluye!el!layout!de!

los! pins,! voltajes,! impedancia! de! las! líneas,! especificaciones! de! los! cables,!

concentradores,! repetidores,! adaptadores! de! red! y! más.! Incluye! las! técnicas! de!

modulación!o! conversión! entre! la! representación!de!datos!digitales! en! el! equipo!

del! usuario! y! las! señales! correspondientes! transmitidas! a! través! de! un! canal! de!

comunicación.!Éstas!son!señales!operando!a!través!de!un!cable!físico!(cobre!o!fibra!

óptica)!o!sobre!un!enlace!de!radio.!

Capa! 2.! Capa! de! enlace! de! datos:! La! capa! de! enlace! de! datos! provee! los!

medios! funcionales! y! de! procedimiento! para! transferir! información! entre!

entidades! de! red! y! para! detectar! y! posiblemente! corregir! errores! que! puedan!

ocurrir!en! la!capa! física.!Se!especifica!el!entramado,!el!direccionamiento! físico,!el!

control!de!flujo!y!errores,!y!el!acceso!al!medio.!

Capa! 3.! Red:! La! capa! de! red! provee! los! medios! funcionales! y! de!

procedimiento!! para! transferir! secuencias! de! datos! de! diferente! longitud! de! un!

host! origen!en!una! red!a!un!host! destino!en!una! red!diferente! (en! contraste! a! la!

capa!de!enlace!de!datos!que!conecta!host!en!la!misma!red),!mientras!mantiene!la!

calidad! de! servicio! pedida! por! la! capa! de! transporte.! La! capa! de! red! realiza!

funciones!de!ruteo.!Los!routers!trabajan!en!esta!capa,!enviando!datos!a!través!de!la!

red!extendida!y!haciendo!posible!Internet.!

Estas! tres! primeras! capas! forman! lo! que! se! denomina! subred.! La!

información!puede!circular!a!través!de!diversas!subredes!para!llegar!de!un!punto!a!

otro! pero,! desde! un! punto! de! vista! lógico,! la! subred! funciona! como! si! la!

comunicación!fuese!sólo!entre!los!dos!extremos;!es!decir,!punto!a!punto.!

Capa! 4.! Transporte:! La! capa! de! transporte! provee! una! transferencia! de!

datos! transparente!y!confiable!para!el!usuario! final.!Para!ello!utiliza!mecanismos!

Page 51: ESCUELA UNIVERSITARIA DE INGENIERÍA TÉCNICA DE ...oa.upm.es/49224/1/PFC_AITOR_CANTERO_ROMERO.pdf · Para!concluir,!se!documenta!un!ejemplo!de!un!proyecto ... y!bajo!el!control!de!un!programa!

Aitor&Cantero&Romero&&&&&&&&&&&&&&&&&&&&&&&Programación&concurrente&orientada&a&eventos&en&Arduino&para&el&Internet&de&las&Cosas&&

! 53!

de! control! de! flujo,! segmentación,! y! control! de! errores.! Algunos! protocolos! son!

orientados!a!la!conexión.!Esto!significa!que!la!capa!de!transporte!puede!mantener!

un! seguimiento! de! los! datos! enviados! con! éxito! y! retransmitir! los! que! fallan,!

garantizando!la!entrega!ordenada.!

Capa! 5.! Sesión:! Este! nivel! controla! los! diálogos! (conexiones)! entre!

computadoras.! Establece,! administra! y! termina! las! conexiones! entre! las!

aplicaciones!locales!y!remotas.!La!capa!de!sesión!es!implementada!comúnmente!en!

aplicaciones!con!que!utilizan!llamadas!a!procedimientos!remotos.!

Capa! 6.! Presentación:! La! capa! de! presentación! establece! contexto! entre!

entidades! de! la! capa! de! aplicación,! en! los! cuales! las! entidades! de! capas! de!más!

arriba! pueden! usar! una! sintaxis! y! semántica! diferente! si! el! servicio! de!

presentación!provee!traducción!entre!ellas!

Esta! capa! provee! independencia! de! representación! de! datos,! como! el!

cifrado,!ente!los!formatos!de!aplicación!y!red.!La!capa!de!presentación!transforma!

los!datos!en!la!forma!que!la!aplicación!acepta!

Capa!7.!Aplicación:!La!capa!de!aplicación!es!la!más!cercana!al!usuario!final,!

lo!que!significa!que!la!capa!de!aplicación!del!modelo!OSI!y!el!usuario!interactúan!

directamente!con!la!aplicación!de!software.!

!

5.1.2&Modelo&TCP/IP&

Normalmente,! los! tres! niveles! superiores! del! modelo! OSI! (Aplicación,!

Presentación!y!Sesión)!son!considerados!simplemente!como!el!nivel!de!aplicación!

en!el!conjunto!TCP/IP.!Como!TCP/IP!no!tiene!un!nivel!de!sesión!unificado!sobre!el!

que! los! niveles! superiores! se! sostengan,! estas! funciones! son! típicamente!

desempeñadas!(o!ignoradas)!por!las!aplicaciones!de!usuario.!Este!modelo!“reposa”!

sobre!los!dos!primeros!niveles!del!modelo!OSI.!Por!lo!que!sus!dos!primeras!capas!

son!representadas!por!la!capa!1!del!modelo!TCP/IP:!

Capa!1.!Interfaz!de!red:!Corresponde!con!las!dos!primeras!capas!del!modelo!

OSI,!aunque!en!origen!se!pretende!desvincular!el!modelo!TCP/IP!del!medio!físico!

dando!independencia!sobre!el!hardware.,

Capa!2.!Internet:!Como!fue!definido!originalmente,!el!nivel!de!red!soluciona!

el! problema! de! conseguir! transportar! paquetes! a! través! de! una! red! sencilla.!

Page 52: ESCUELA UNIVERSITARIA DE INGENIERÍA TÉCNICA DE ...oa.upm.es/49224/1/PFC_AITOR_CANTERO_ROMERO.pdf · Para!concluir,!se!documenta!un!ejemplo!de!un!proyecto ... y!bajo!el!control!de!un!programa!

Aitor&Cantero&Romero&&&&&&&&&&&&&&&&&&&&&&&Programación&concurrente&orientada&a&eventos&en&Arduino&para&el&Internet&de&las&Cosas&&

!54!

Ejemplos!de!protocolos!son!X.25,!Host/IMP!Protocol!de!ARPANET!o! IPv4.!Con! la!

llegada! del! concepto! de! Internet,! nuevas! funcionalidades! fueron! añadidas! a! este!

nivel,!basadas!en!el!intercambio!de!datos!entre!una!red!origen!y!una!red!destino,!

con! independencia! de! su! escala.! Engloba!desde!dos! redes! situadas! en!un!mismo!

edificio!o!a!través!de!una!red!de!redes,!conocida!como!Internet.!

Capa! 3.! Transporte:! Corresponde! con! la! misma! utilidad! del! nivel! 4! del!

modelo!OSI!pero!particularizando!en!dos!protocolos!de!transporte.!Uno!orientado!

a!la!conexión,!y!con!gran!control!de!flujo,!errores!y!orden!de!llegada,!como!es!TCP!

(Transmission,Control,Protocol),!!y!otro!más!sencillo!y!anárquico!,!como!UDP!(User,

Datagram,Protocol).!

Capa!4.!Aplicación:!El!nivel!de!aplicación!es!el!nivel!que!los!programas!más!

comunes!utilizan!para!comunicarse!a!través!de!una!red!con!otros!programas.!Los!

procesos! que! acontecen! en! este! nivel! son! aplicaciones! específicas! que! pasan! los!

datos!al!nivel!de!aplicación!en!el! formato!que!internamente!use!el!programa!y!es!

codificado! de! acuerdo! con! un! protocolo! estándar.! Estos! programas! y! sus!

correspondientes!protocolos! incluyen!a!HTTP! (HyperText,Transfer,Protocol),!FTP!

(Transferencia! de! archivos),! SMTP! (correo! electrónico),! SSH! (intérprete! de!

comandos!remoto!y!seguro),!DNS!(Resolución!de!nombres!de!dominio)!y!a!otros.!

!

5.1.3&Internet.&IPv4&e&IPv6.&

A! principios! de! los! años! 80,! surge! ARPANET! como! primer! intento! del!

Departamento! de! Defensa! de! Estados! Unidos! (DoD)! para! diseñar! una! red! de!

ordenadores!capaz!de!interconectar!completamente!diferentes!sistemas.!El!primer!

protocolo! de! uso! amplio! para! este! propósito! se! llamó! IPv4! (Internet, Protocol!

versión!4),!que!dio!lugar!a!la!Internet!civil.!Inicialmente!sólo!se!conectaron!centros!

de! investigación!y!universidades,!apoyados!por! la!NSF!(Fundación!Nacional!de! la!

Ciencia).! Las! aplicaciones! comerciales! no! eran! permitidas,! pero! cuando! la! red!

empezó! a! crecer! exponencialmente,! la! NSF! decidió! transferir! su! control! a!

operadores! privados! con! fines! comerciales.! Mientras! que! las! principales!

aplicaciones!eran!el!correo!electrónico!y!las!transferencias!de!archivos,!fue!con!el!

desarrollo! de! la! World! Wide! Web! (WWW)! HTML! y! específicamente! con! el!

navegador! de! Internet!MOSAIC! con! interfaz! gráfica,! que! Internet! comenzó! a! ser!

utilizado!por!las!masas!y!el!tráfico!creció!exponencialmente.!

Page 53: ESCUELA UNIVERSITARIA DE INGENIERÍA TÉCNICA DE ...oa.upm.es/49224/1/PFC_AITOR_CANTERO_ROMERO.pdf · Para!concluir,!se!documenta!un!ejemplo!de!un!proyecto ... y!bajo!el!control!de!un!programa!

Aitor&Cantero&Romero&&&&&&&&&&&&&&&&&&&&&&&Programación&concurrente&orientada&a&eventos&en&Arduino&para&el&Internet&de&las&Cosas&&

! 55!

!

Figura&5.2&Mapa!lógico!de!ARPANET,!marzo!de!1977.!

!

Dado!que!el!protocolo!IPv4!fue!desarrollado!para!direccionar!una!escala!no!

mundial! de! equipos,! tiene! una! limitación! clave.! El! formato! de! cabecera! de! IPv4,!

contiene!direcciones!de!red!de!32!bits.!Esto!permite!direccionar!como!máximo!232!

destinos!de!red.!Esta!cifra!en!origen!suficiente,!rápidamente!dejó!de!serlo.!Con!el!

auge!de!Internet!y!del!ordenador!personal,!el!crecimiento!de!la!población!mundial!

(que!ya!en!la!década!de!1980!supero!los!4.500!millones!de!personas,!por!las!cerca!

de!4.300!millones!de!direcciones!asignables!en!IPv4)!si!todas!las!personas!tuvieran!

su!propio!dispositivo!y!quisieran!conectado!a!Internet,!simplemente!no!podrían.!

Para! ello! se!han! ido! realizando!parches! al! sistema,! como! la! traducción!de!

direcciones! de! red! (NAT),! que! se! utiliza! para! enmascarar! direcciones! de! red! de!

ámbito! local! mediante! una! (o! varias)! direcciones! reales! (públicas).! Incluso! es!

habitual! recurrir! a! un! NAT! doble! en! ciertos! escenarios,! o! NAT! realizado! por! el!

operador! (Carrier:grade, NAT)! siendo! transparente! para! el! usuario! final! (o!

intentando!serlo).!

Dada! la! inflexibilidad! de! un! protocolo! como! IPv4! con! cabecera! de!

dimensiones!fijas!para!el!campo!de!dirección,!con!el!consiguiente!problema!de!falta!

Page 54: ESCUELA UNIVERSITARIA DE INGENIERÍA TÉCNICA DE ...oa.upm.es/49224/1/PFC_AITOR_CANTERO_ROMERO.pdf · Para!concluir,!se!documenta!un!ejemplo!de!un!proyecto ... y!bajo!el!control!de!un!programa!

Aitor&Cantero&Romero&&&&&&&&&&&&&&&&&&&&&&&Programación&concurrente&orientada&a&eventos&en&Arduino&para&el&Internet&de&las&Cosas&&

!56!

de! direcciones,! y! con! objeto! de! modernizar! un! protocolo! de! red! invariable! (ni!

mucho! menos! comparable! al! desarrollo! de! su! ámbito! de! aplicación),! en! el! año!

1992!comenzó!a!desarrollarse!en!la!ITF!(Internet!Engineering!Task!Force)!el!que!

hoy!se!conoce!como!protocolo!IPv6.!

Para! tener!más!direcciones!de! red!se!necesitan!más!bits,!una!dirección! IP!

más! larga,! lo! que! significa! un! nuevo! protocolo! y! arquitectura,! lo! que! implica!

cambios!en!todos!los!routers!y!el!software!de!la!red.!Después!de!examinar!una!serie!

de!propuestas,! la! IETF!estableció!el!borrador!del!precursor!de! IPv6,!en!enero!de!

1995!en! la!RFC!1752,! llamado!Internet!Protocol!Next!Generation,!o! IPng.!El! IETF!

actualizó!el!estándar!IPv6!en!1998!con!la!definición!actual! incluida!en!RFC!2460.!

En!2004,!IPv6!estaba!ampliamente!disponible!en!la!industria!y!en!la!mayoría!de!los!

nuevos!equipos!de!red.!Hoy!en!día,!IPv6!coexiste!con!IPv4!en!Internet!y!la!cantidad!

de! tráfico! IPv6! está! creciendo! rápidamente! a! medida! que! más! proveedores! de!

servicios!y!de!contenidos!se!unen!al!nuevo!estándar.!

!

5.1.4&Conceptos&de&IPv6&

���IPv6!opera!en! la!capa!3!del!modelo!OSI,! también! llamada!capa!de!red.!Las!

unidades! de! datos! manejadas! por! el! nivel! de! red! se! llaman! paquetes.! Los!

dispositivos!conectados!a!Internet!pueden!ser!hosts!o!enrutadores.!Un!host!puede!

ser!un!PC,!un!ordenador!smartphone!o!un!sensor!IoT.!Los!hosts!serán!la!fuente!o!el!

destino!de!los!paquetes.!En!su!lugar,!los!enrutadores!están!a!cargo!del!reenvío!de!

paquetes!y!son!responsables!de!elegir!el!próximo!enrutador!que!los!reenvíe!hacia!

el! destino! final.! Internet! se! compone! de! una! gran! cantidad! de! enrutadores!

interconectados,!que!reciben!paquetes!de!datos!en!una! interfaz!y!deben!enviar!a!

continuación,! tan! rápido! como! sea! posible! utilizando! otra! interfaz! hacia! otro!

enrutador!de!reenvío.!En!la!siguiente!figura!se!compara!el!formato!de!cabecera!de!

IPv4!e!IPv6.!

Dada!la!Figura!5.3,!se!puede!observar!que:!

•!El!número!de!campos!se!ha!reducido!de!12!a!8.!

•!El!encabezado!básico!IPv6!se!puede!alinear!con!64!bits,!lo!que!permite!un!

reenvío!de!paquetes!basado!en!hardware!más!rápido!en!routers.!

•!El!tamaño!de!las!direcciones!ha!aumentado!de!32!a!128!bits.!

Page 55: ESCUELA UNIVERSITARIA DE INGENIERÍA TÉCNICA DE ...oa.upm.es/49224/1/PFC_AITOR_CANTERO_ROMERO.pdf · Para!concluir,!se!documenta!un!ejemplo!de!un!proyecto ... y!bajo!el!control!de!un!programa!

Aitor&Cantero&Romero&&&&&&&&&&&&&&&&&&&&&&&Programación&concurrente&orientada&a&eventos&en&Arduino&para&el&Internet&de&las&Cosas&&

! 57!

!

!

Figura&5.3&Comparación!entre!formato!de!cabecera!IPv4!e!IPv6.!

!

Los! campos!más! importantes! son! las! direcciones! de! origen! y! de! destino.!

Como!se!sabe,!cada!dispositivo!IP!tiene!una!dirección!IP!única!que!lo!identifica!en!

Internet.!Esta!dirección!IP!es!utilizada!por!los!routers!para!tomar!sus!decisiones!de!

reenvío.! Ahora! se! pueden! direccionar! 2128! direcciones! (aproximadamente! 2,4!

seguido!de!38!ceros).!A!esta!cabecera!básica!se!le!puede!añadir!extensiones.!

La!notación!de!las!direcciones!IPv6,!de!128!bits!de!longitud,!se!realiza!como!

ocho!grupos!de!cuatro!dígitos!hexadecimales!separados!por!dos!puntos!‘:’.!Si!en!la!

dirección,!uno!o!más!grupos!consecutivos!son!nulos,!también!pueden!comprimirse!

mediante! “::”.! ! Lo! ceros! iniciales! de! cada! grupo! también! se! pueden! omitir.! Esta!

serie!de!direcciones!son!análogas.!

2001:0DB8:0000:0000:0000:0000:1428:57ab 2001:0DB8:0000:0000:0000::1428:57ab 2001:0DB8:0:0:0:0:1428:57ab 2001:0DB8:0::0:1428:57ab 2001:0DB8::1428:57ab 2001:DB8::1428:57ab

!

Existen!ciertas!direcciones!especiales!reservadas:!

::/128

Page 56: ESCUELA UNIVERSITARIA DE INGENIERÍA TÉCNICA DE ...oa.upm.es/49224/1/PFC_AITOR_CANTERO_ROMERO.pdf · Para!concluir,!se!documenta!un!ejemplo!de!un!proyecto ... y!bajo!el!control!de!un!programa!

Aitor&Cantero&Romero&&&&&&&&&&&&&&&&&&&&&&&Programación&concurrente&orientada&a&eventos&en&Arduino&para&el&Internet&de&las&Cosas&&

!58!

La!dirección!con!todo!ceros!se!utiliza!para!indicar!la!ausencia!de!dirección,!y!

no!se!asigna!ningún!nodo.!

::1/128

La! dirección! de! loopback! es! una! dirección! que! puede! usar! un! nodo! para!

enviarse! paquetes! a! sí! mismo! (corresponde! con! 127.0.0.1! de! IPv4).! No!

puede!asignarse!a!ninguna!interfaz!física.!

::1.2.3.4/96

La!dirección!IPv4!compatible!se!usa!como!mecanismo!de!transición!en! las!

redes!duales!IPv4/IPv6.!Es!un!mecanismo!que!no!se!usa.!

::ffff:0:0/96

La! dirección! IPv4! mapeada! se! usa! como! mecanismo! de! transición! en!

terminales!duales!IPv4WIPv6.!

fe80::/10

El!prefijo!de!enlace!local!específica!que!la!dirección!solamente!es!válida!en!

el!enlace!físico!local.!

fec0::

El!prefijo!de!emplazamiento!local!específica!que!la!dirección!únicamente!es!

válida!dentro!de!una!organización! local.! La!RFC!3879! lo!declaró!obsoleto,!

estableciendo! que! los! sistemas! futuros! no! deben! implementar! ningún!

soporte! para! este! tipo! de! dirección! especial.! Se! deben! sustituir! por!

direcciones!Local!IPv6!Unicast.!

fc00::/7

El!prefijo!de!dirección!local!única!está!definido!por!la!RFC!4193.!Se!usa!en!

sustitución!de!las!direcciones!con!prefijo!de!emplazamiento!local.!

ff00::/8

El!prefijo!de!multicast.!Se!usa!para!las!direcciones!multicast.!

En!función!de!los!destinatarios!de!un!paquete!IPv6,!se!puede!diferenciar!entre!tres!

tipos:!!

Page 57: ESCUELA UNIVERSITARIA DE INGENIERÍA TÉCNICA DE ...oa.upm.es/49224/1/PFC_AITOR_CANTERO_ROMERO.pdf · Para!concluir,!se!documenta!un!ejemplo!de!un!proyecto ... y!bajo!el!control!de!un!programa!

Aitor&Cantero&Romero&&&&&&&&&&&&&&&&&&&&&&&Programación&concurrente&orientada&a&eventos&en&Arduino&para&el&Internet&de&las&Cosas&&

! 59!

• Unicast&(una!a!una):!usada!para!el!envío!y!recepción!desde!un!host!origen!a!un!único!host!destino.!!!

• Multicast&(una!a!varias):!usada!para!el!envío!desde!un!host!con!destino!varios!host!destino.!!!

• Anycast)(una!a!la!más!cercana):!usada!para!el!envío!desde!un!host!al!host!más!cercano!en!términos!temporales.!

5.1.5&Autoconfiguración&de&dirección&IPv6.&SLAAC&

Las!direcciones!IPv6!están!compuestas!por!dos!partes!lógicas:!un!prefijo!de!

red!y!el!resto!que!corresponde!a!la!identificación!de!host.!El!valor!decimal!tras!la!

barra!en!las!direcciones!indicadas!en!las!direcciones!especiales,!indican!qué!parte!

corresponde! a! cada! cual.! Existe! un!método! de! autoconfiguración! de! direcciones!

IPv6!llamado!SLAAC!por!las!siglas!en!inglés!de!Stateless,Address,Autoconfiguration.!

Este!método!utiliza!direcciones!/64,!donde!los!primeros!64!bits!identifican!la!red!y!

otra!parte!de!64!bits!que!corresponde!al! identificador!de! interfaz,!que!se!genera!

automáticamente!a!partir!de!la!dirección!física!de!la!interfaz!a!la!que!está!asignada!

la!dirección.!

!

!Figura&5.4&Dirección!IPv6!con!64!bits!como!id!de!red!y!otros!64!bits!para!el!host.!

!

La! dirección! física! o!MAC! de! una! interfaz! de! red! consta! de! 48! bits.! Para!

hacerla! de! 64! bits! mediante! un! método! simple! sin! carga! computacional,! se!

intercala!en!mitad!de!la!dirección!la!cadena!0xFFFE,!como!se!puede!advertir!en!la!

siguiente!figura:!

!

Figura&5.4&Transformación!de!dirección!48!bits!en!dirección!de!64!bits.!

!

Page 58: ESCUELA UNIVERSITARIA DE INGENIERÍA TÉCNICA DE ...oa.upm.es/49224/1/PFC_AITOR_CANTERO_ROMERO.pdf · Para!concluir,!se!documenta!un!ejemplo!de!un!proyecto ... y!bajo!el!control!de!un!programa!

Aitor&Cantero&Romero&&&&&&&&&&&&&&&&&&&&&&&Programación&concurrente&orientada&a&eventos&en&Arduino&para&el&Internet&de&las&Cosas&&

!60!

Una!vez!realizado!este!proceso,!se!invierte!el!7º!bit!de!la!nueva!dirección!de!

64! bits.! La! razón! por! la! cuál! se! hace! esto! ! es! porque! en! la! arquitectura! de!

direcciones!MAC,!el!bit!7!significa!si!la!dirección!MAC!se!asignó!universalmente!o!

localmente.!Un!valor!de!0!indica!que!la!dirección!es!universalmente!administrada.!!

Cuando! IANA! asigna! un! Identificador! Único! de! Organización! (OUI)! a! un!

proveedor!de!tarjetas!de!interfaz!de!red!(NIC),!el!bit!7!es!0,!indicando!que!la!OUI!se!

asignó!universalmente.!Si!un!usuario!cambia!manualmente!su!dirección!MAC,!este!

7º!bit! se!establecería!en!1,! indicando!que! la!dirección!Ethernet! fue!administrada!

localmente.!Se!puede!observar!en!la!siguiente!Figura!este!cambio.!

!

Figura&5.5&Transformación!de!dirección!MAC!48!bits!en!dirección!EUIW64.!

!

El!mecanismo!SLAAC!consigue!asignar!la!dirección!mediante!estos!pasos:!

!

1)!R1!es!el!router!que!da!conectividad!al!host!en! la!LAN!y!periódicamente!

publica!su!servicio!mediante!mensajes!RA!(Router,Advertisement).!

!

Figura&5.6&Dialogo!tipo!del!mecanismo!de!autoconfiguración!de!red!SLAAC!IPv6.!

Page 59: ESCUELA UNIVERSITARIA DE INGENIERÍA TÉCNICA DE ...oa.upm.es/49224/1/PFC_AITOR_CANTERO_ROMERO.pdf · Para!concluir,!se!documenta!un!ejemplo!de!un!proyecto ... y!bajo!el!control!de!un!programa!

Aitor&Cantero&Romero&&&&&&&&&&&&&&&&&&&&&&&Programación&concurrente&orientada&a&eventos&en&Arduino&para&el&Internet&de&las&Cosas&&

! 61!

2)! Tanto! R1! como! el! Host! tienen! una! dirección! local! de! enlace! en! sus!

interfaces! conectadas! a! la! LAN,! esta! dirección! se! configura! automáticamente!

cuando! la! interfaz! está! lista.! Nuestro! host! crea! su! dirección! de! enlace! local!

combinando!los!64!bits!de!la!izquierda!del!prefijo!del!enlace!local!(fe80!::!/!64)!y!

los!64!bits!de!la!derecha!de!un!IID!generado!localmente!(:!3432:!7ff1:!c001:!c2a1).!

Estas!direcciones!de!enlace! local! se!pueden!utilizar! en! la!LAN!para! intercambiar!

paquetes!locales,!pero!no!para!enviar!paquetes!fuera!de!la!LAN.!

3)!Los!hosts!necesitan!dos!cosas!básicas!para!poder!enviar!paquetes!a!otras!

redes:!una!dirección!IPv6!global!y!la!dirección!de!una!puerta!de!enlace,!es!decir,!un!

enrutador!al!que!enviar!los!paquetes!que!desea!que!sean!encaminados!fuera!de!su!

red.!

4)!Aunque!R1!está!enviando!RAs!periódicamente!(generalmente!cada!varios!

segundos)!cuando!el!host!está!conectado!y!ha!configurado!su!dirección!de!enlace!

local,! envía!un!mensaje!RS! (Router,Solicitation),!que!R1!responde!con!un!RA!que!

contiene! dos! cosas:! 4.1)! Un! prefijo! global! de! longitud! 64! que! está! destinada! a!

SLAAC.! El! host! toma! el! prefijo! recibido! y! le! agrega! un! IDI! generado! localmente,!

usualmente! el! mismo! que! el! utilizado! para! la! dirección! local! de! enlace.! De! esta!

manera! se! configura! una! dirección! IPv6! global! en! el! host! y! ahora! se! puede!

comunicar! con! Internet.! 4.2)! La! dirección! de! la! puerta! de! enlace! es! la! dirección!

local! de! enlace! de! R1,! porque! es! la! dirección! de! origen! de! la! RA.! Nuestro! host!

puede!usar!esta!dirección!para!configurar! la!puerta!de!enlace!predeterminada,!el!

lugar!al!que!enviar! los!paquetes!por!defecto,!para! llegar!a!un!host! IPv6!en!algún!

lugar!de!Internet.!

5)!Una!vez!configurada!la!dirección!IPv6!global!y!la!puerta!de!enlace,!el!host!

puede!recibir!o!enviar!información.!

!

5.1.6&Topologías&de&Red&

Por! la! estructura! física,! lógica! y! posibilidades! de! comunicación,! se! pueden!

diferencias!varias!tipologías!de!red!local:!

Page 60: ESCUELA UNIVERSITARIA DE INGENIERÍA TÉCNICA DE ...oa.upm.es/49224/1/PFC_AITOR_CANTERO_ROMERO.pdf · Para!concluir,!se!documenta!un!ejemplo!de!un!proyecto ... y!bajo!el!control!de!un!programa!

Aitor&Cantero&Romero&&&&&&&&&&&&&&&&&&&&&&&Programación&concurrente&orientada&a&eventos&en&Arduino&para&el&Internet&de&las&Cosas&&

!62!

!

Figura&5.5&Topologías!de!red!típicas.!

• Punto a punto!: Es!la!topología!más!sencilla.!Define!la!comunicación!entre!

dos!dispositivos.!

• Estrella!: Todos!los!dispositivos!de!la!red!se!interconectan!a!través!de!un!

nodo!central.!Este!puede!ser!un!concentrador!(hub)!o!un!conmutador!(switch).!!Si!

el!nodo!central!cae,!no!se!podrá!comunicar!un!dispositivo!de!un!extremo!con!otro.

• Malla !: Se! trata! de! una! comunicación! total! de! los! nodos! de! la! red.

Cualquier!dispositivo!puede! comunicarse! con!otro.! Suele!darse!una! red!en!malla!

donde!no!todos!los!dispositivos!tienen!conexión!con!el!resto!(pero!mantiene!varios!

caminos!para!llegar!a!otro!nodo!de!la!red.!En!este!tipo!de!redes,!si!cae!un!nodo,!la!

red!se!recupera!eligiendo!otro!camino!disponible.

• Árbol:!La!topología!en!árbol!es!una!variante!de!la!de!estrella.!Como!en!la!

estrella,! los! nodos! del! árbol! están! conectados! a! un! concentrador! central! que!

controla! el! tráfico! de! la! red.! Sin! embargo,! no! todos! los! dispositivos! se! conectan!

directamente!al!concentrador!central.!La!mayoría!de!los!dispositivos!se!conectan!a!

un! concentrador! secundario!que,! a! su!vez,! se! conecta! al! concentrador! central.!El!

Page 61: ESCUELA UNIVERSITARIA DE INGENIERÍA TÉCNICA DE ...oa.upm.es/49224/1/PFC_AITOR_CANTERO_ROMERO.pdf · Para!concluir,!se!documenta!un!ejemplo!de!un!proyecto ... y!bajo!el!control!de!un!programa!

Aitor&Cantero&Romero&&&&&&&&&&&&&&&&&&&&&&&Programación&concurrente&orientada&a&eventos&en&Arduino&para&el&Internet&de&las&Cosas&&

! 63!

controlador! central! del! árbol! es! un! concentrador! activo.! Un! concentrador! activo!

contiene!un!repetidor,!es!decir,!un!dispositivo!hardware!que!regenera!los!patrones!

de!bits!recibidos!antes!de!retransmitidos.!

Internet!es!un!tipo!de!red!libre!de!escala!(sacleWfree!network);!es!decir,!una!

red!compuesta!de!nodos!y!enlaces!distribuidos!de!forma!muy!dispareja!similar!a!la!

malla!de! la!Figura!5.5.!Las!redes! libres!de!escala!son!un! tipo!de! redes!en!que! los!

nodos! no! están! igualmente! conectados! sino! que! presentan! grandes! diferencias!

entre!unos!y!otros.!La!distribución!del!número!de!conexiones!se!modela!por!la!ley!

potencial:!

! ! ~!!!!donde!k,es!un!número!de!conexiones,!p(k)!la!probabilidad!de!que!un!nodo!

tenga!k,conexiones.,g!varía!entre!2!y!3.!

Este! tipo!de!conectividad!sigue!una! ley!de!potencias! (power:law)!y!es!una!

distribución! estadística! muy! frecuente.! Esto! tiene! consecuencias! a! la! hora! de!

entender! la! robustez! y! resistencia! ante! fallos! o! ataques!de! Internet.! Según! se!ha!

podido! comprobar! en!modelos! teóricos,! las!redes! libres! de! escala!presentan! una!

alta!robustez;! es! decir,! aunque! se! eliminen! nodos! o! conexiones,! la! red,! como!

conjunto.!sigue!funcionando.!Y!esto!sucede!incluso!eliminando!un!elevado!número!

de!nodos.!Incluso!ciertas!redes!son!casi!inmunes!a!los!fallos.!

Si! la! arquitectura! de! Internet! y! su! desarrollo! casi! espontáneo! según! un!

modelo!de!red!libre!de!escala!le!dota!de!una!altísima!robustez!ante!fallos,!también!

es! cierto! que! tiene! su! talón! de! Aquiles.! En! Internet,! como! en! toda! red! libre! de!

escala,! los! nodos! no! son! iguales.! En! concreto,! existen! unos! relativamente! pocos!

nodos! con! un! nivel! de! interconexión! mucho! más! alto! que! el! resto.! Son! los!

denominados!hubs,y! la! conectividad!masiva! y! el! funcionamiento! global! de! la! red!

depende!mucho!de!su!existencia.!Todo!el!sistema!es!muy!dependiente!de!ellos.!Es!

virtualmente!imposible!que!errores!espontáneos!o!aleatorios!consigan!ese!efecto!y,!

en! ese! sentido,! Internet! parece! casi! indestructible,! pero! un! ataque! dirigido! y!

ordenado! contra! los! nodos! principales! de! Internet! podrían! llegar! a! provocar! el!

colapso.!No!es!fácil!sin!embargo!que!un!ataque!malicioso!consiga!sus!objetivos.!Por!

suerte! no! es! suficiente! dañar! un! hub! sino! que! varios! de! ellos! deben! ser!

desactivados!a!un!tiempo!y!eso!no!es!fácil,!nada!fácil.!

!

Page 62: ESCUELA UNIVERSITARIA DE INGENIERÍA TÉCNICA DE ...oa.upm.es/49224/1/PFC_AITOR_CANTERO_ROMERO.pdf · Para!concluir,!se!documenta!un!ejemplo!de!un!proyecto ... y!bajo!el!control!de!un!programa!

Aitor&Cantero&Romero&&&&&&&&&&&&&&&&&&&&&&&Programación&concurrente&orientada&a&eventos&en&Arduino&para&el&Internet&de&las&Cosas&&

!64!

Fuente![L2].!

5.2&Tecnologías&de&red&local&inalámbrica&

5.2.1&WiWFi&

WiWFi! es! una! marca! comercial,! que! se! ha! convertido! popularmente! en!

sinónimo!de! red! de! área! local! inalámbrica! (WLAN).! Esta!marca,! propiedad! de! la!

Wi:Fi,Alliance!prueba!y!certifica!a!los!equipos!que!cumplen!con!los!estándares!IEEE!

802.11! para! asegurar! interoperabilidad! entre! dispositivos! y! fomentar! su! uso! y!

distribución.!

!

!

Figura&5.6&Logotipo!de!certificación!WiWFi.!

!

El! estándar! IEEE! 802.11! define! los! niveles! inferiores! del! modelo! OSI!

correspondientes! a! la! capa! de! nivel! física! y! la! de! nivel! de! enlace! de! datos,! para!

estas!redes!inalámbricas.!El!diseño!de!esta!norma!hace!que!los!niveles!superiores!

del! modelo! OSI,! del! nivel! de! red! en! adelante! (y! TCP/IP)! pueden! operar! sin!

distinción! a! una! red! LAN! que! siga! el!modelo! IEEE! 802.3! Ethernet.! Por! tanto! las!

WLAN! y! LAN! son! totalmente! compatibles! entre! sí.! Existen! varios! estándares!

finales.!Los!más!utilizados!son!el!802.11a,b,g,n!y!ac.!

A!nivel!práctico,!IEEE!802.11b!y!g!utilizan!enlaces!por!radiofrecuencia!en!la!

banda! ISM! de! 2,4! GHz.! Como! operan! en! una! banda! de! frecuencia! ampliamente!

usada! por! otros! dispositivos! radio,! deben! controlar! dicha! susceptibilidad! a! las!

interferencias! mediante! métodos! de! señalización! de! espectro! ensanchado! por!

secuencia!directa!(DSSS)!y!de!multiplexación!por!división!de!frecuencia!ortogonal!

(OFDM),! respectivamente.!Todas! las! tecnologías!802.11!dividen!el! espectro!en!el!

que!pueden!operar!en!canales.!En!el!caso!de!802.11b!y!g.!!

Page 63: ESCUELA UNIVERSITARIA DE INGENIERÍA TÉCNICA DE ...oa.upm.es/49224/1/PFC_AITOR_CANTERO_ROMERO.pdf · Para!concluir,!se!documenta!un!ejemplo!de!un!proyecto ... y!bajo!el!control!de!un!programa!

Aitor&Cantero&Romero&&&&&&&&&&&&&&&&&&&&&&&Programación&concurrente&orientada&a&eventos&en&Arduino&para&el&Internet&de&las&Cosas&&

! 65!

Por!otro! lado!la!versión!802.11a!utiliza! la!banda!UWNII!de!5!GHz!que,!para!

gran!parte!del!mundo,!ofrece!al!menos!23!canales!que!no!se!superponen!en!lugar!

de! la!banda!de! frecuencia! ISM!de!2,4!GHz!que!ofrece!sólo! tres!canales!que!no!se!

superponen.!802.11n!puede!utilizar!la!banda!de!2,4!GHz!o!la!de!5!GHz.!El!segmento!

del!espectro!de!radiofrecuencia!utilizado!por!la!802.11!varía!de!un!país!a!otro.!Las!

frecuencias!utilizadas!por!los!canales!uno!a!seis!de!802.11b!y!802.11g!caen!dentro!

de!la!banda!de!radioaficionados!de!2,4!GHz.!La!norma!802.11ac!opera!dentro!de!la!

banda! de! 5!GHz! e! incluye! modulación! de! alta! densidad! (256!QAM).! Para!

comprender!sus!diferencias,!se!sugiere!consultar!la!Figura!5.2.!

!

802.11!

protocolo!Fecha! Frecuencia!

Ancho!

de!

banda!

Tasa!de!

transferencia!

Transmisiones!

MIMO!

permitidas!

Tecnología!

de!

modulación!

Alcance!

máximo!

! ! (GHz)! (MHz)!MinWMax!

(Mbit/s)!! !

In!

(m)!

Out!

(m)!

802.11!Jun!

1997!2.4! 22! 1W2! 1! DSSS,!FHSS! 20! 100!

a!Sep!

1999!

5!20! 6W54! 1! OFDM!(SISO)!

35! 120!

3.7! —! 5K!

b!Sep!

1999!2.4! 22! 1W11! 1! DSSS!(SISO)! 35! 140!

g!Jun!

2003!2.4! 20! 6W54! 1!

OFDM,!DSSS!

(SISO)!38! 140!

n!Oct!

2009!2.4/5!

20!7.2!W72.2!

(6.5W!65)!4!

OFDM!

(MIMO)!

70! 250!

40!15!W!150!

(13.5!W!135)!70! 250!

ac!Dic!

2013!5!

20!7.2!W!96.3!

(6.5!W!86.7)!

8!OFDM!(MUW

MIMO)!

35! !

40!15!W!200!

(13.5!W!180)!35! !

80!32.5!W!433.3!

(29.2!W!390)!35! !

160!65!W!866.7!

(58.5!W!780)!35! !

Figura&5.7&Comparativa!entre!IEEE!802.11a,b,g,n!y!ac!

&

Este! tipo! de! redes! de! área! local! inalámbrica! permite! operar! bajo! las!

topologías! de! red! punto! a! punto! y! estrella! de!manera! nativa,! pero! se! realizan! a!

Page 64: ESCUELA UNIVERSITARIA DE INGENIERÍA TÉCNICA DE ...oa.upm.es/49224/1/PFC_AITOR_CANTERO_ROMERO.pdf · Para!concluir,!se!documenta!un!ejemplo!de!un!proyecto ... y!bajo!el!control!de!un!programa!

Aitor&Cantero&Romero&&&&&&&&&&&&&&&&&&&&&&&Programación&concurrente&orientada&a&eventos&en&Arduino&para&el&Internet&de&las&Cosas&&

!66!

menudo!implementaciones!en!malla,!para!mejorar!la!resistencia!a!fallos!completos!

de!red,!por!el!fallo!de!un!solo!nodo.&

!

5.2.2&Bluetooth&4.0&

Bluetooth!es!un!estándar!de!tecnología!inalámbrica!para!el!intercambio!de!

datos! a! cortas! distancias! desarrollado! en! 1998! por! Bluetooth! SIG! (Bluetooth!

Special!Interest!Group),!alianza!de!los!grandes!grupos!industriales!Intel,!Ericsson,!

IBM,!Nokia!y!Toshiba.!Fue!creado!por!Ericsson!en!1994.!A!nivel!técnico!emplea!un!

enlace! por! radiofrecuencia! en! la! banda! ISM! de! 2,4! GHz,! pudiendo! utilizar! 79!

canales!de!1MHz!de!ancho!de!banda!cada!uno!en!el!estándar!original.!En!el!caso!de!

la! versión!Bluetooth!4.0! se!utilizan!40! canales!de!2!MHz!de! ancho!de!banda, sin

bandas de guarda entre canales. !

La!distancia!nominal!del!enlace!está!comprendida!entre!10!cm!y!10!m,!pero!

aumentando!la!potencia!de!transmisión!se!puede!llegar!a!100!m.!!

La!modulación!empleada!por!Bluetooth!es!GFSK!(Gaussian,Frequency,Shift,

Keying),!es!decir,!modulación!por!cambio!de!frecuencia!gaussiana.!Lo!que!se!hace!

es!modular! una! señal! portadora,! atrasando! o! adelantando! cambio! de! flanco! del!

pulso!en!función!de!si!queremos!transmitir!un!1!o!un!0!respectivamente.!!

Respecto!al!estándar!Bluetooth!original,!se!ha!considerado!como!objetivo!el!

bajo!consumo!energético!y! la!baja! latencia,!en!detrimento!de! la!alta!velocidad!de!

transferencia!de!datos!y!asumir!distancias!más!grandes.!Las!topologías!de!red!que!

puede!adoptar!este!protocolo!son:!punto!a!punto,!estrella!y!malla.!

Para!conectar!dos!aparatos!con!esta!tecnología,!es!necesario!un!proceso!de!

"emparejamiento".! Ambos! aparatos! se! reconocen! en! respuesta! a! una! llamada!de!

uno!hacia!el!otro!y!en!respuesta!a!un!envío!de!un!código!común.!Existen!dos!casos!

posibles:!el!código!es!enviado!por!ambos!aparatos,!el!código!es!enviado!por!uno!de!

ellos,!especialmente!cuando!el!segundo!no!tiene!teclado.!!Luego!de!que!el!primer!

contacto! se! efectúa,! los! códigos! son! memorizados! y! la! conexión! se! realiza!

automáticamente.!

!

!

Page 65: ESCUELA UNIVERSITARIA DE INGENIERÍA TÉCNICA DE ...oa.upm.es/49224/1/PFC_AITOR_CANTERO_ROMERO.pdf · Para!concluir,!se!documenta!un!ejemplo!de!un!proyecto ... y!bajo!el!control!de!un!programa!

Aitor&Cantero&Romero&&&&&&&&&&&&&&&&&&&&&&&Programación&concurrente&orientada&a&eventos&en&Arduino&para&el&Internet&de&las&Cosas&&

! 67!

5.2.3&ZigBee

ZigBee!surge!en!2003!como!respuesta!a!la!necesidad!de!complementar!los!

estándares! WiWFi! y! Bluetooth.! Se! establece! con! el! principal! objetivo! el! de!

comunicar!aplicaciones!que!requieren!una!comunicación!segura,!con!baja!tasa!de!

envío!y!bajo!consumo.!Se!basa!en!dispositivos!inalámbricos!operando!en!la!banda!

ISM!para!usos! industriales,! científicos!y!médicos! (868!MHz,!915!MHz!y!2.4!GHz)!

con!una!modulación!en!espectro!ensanchado!por!secuencia!directa!(DSSS)!también!

conocida! como! acceso!múltiple! por! división! de! código! en! secuencia! directa! (DSW

CDMA).!En!el!rango!de!frecuencias!de!2.4!GHz!(banda!más!extendida)!se!definen!16!

canales!con!un!ancho!de!banda!de!5!MHz.!!

Figura 5.8 Topologías de red ZigBee.

ZigBee!define!diferentes!roles!para!los!dispositivos!que!conforman!a!red:!

• Coordinador:! Controla! el! encaminamiento! y! la! administración! de! la! red.!

Existe!uno!por!red.!!

• Router:! Interconecta! diferentes! nodos! mediante! direccionamiento.! Todos!

los! dispositivos! que! no! sean! extremos! de! la! red! serán! router! (y! uno!

coordinador).!

Page 66: ESCUELA UNIVERSITARIA DE INGENIERÍA TÉCNICA DE ...oa.upm.es/49224/1/PFC_AITOR_CANTERO_ROMERO.pdf · Para!concluir,!se!documenta!un!ejemplo!de!un!proyecto ... y!bajo!el!control!de!un!programa!

Aitor&Cantero&Romero&&&&&&&&&&&&&&&&&&&&&&&Programación&concurrente&orientada&a&eventos&en&Arduino&para&el&Internet&de&las&Cosas&&

!68!

• Dispositivo! final:! Elemento! pasivo! que! responde! ante! peticiones! de! otros!

dispositivos.!Se!pasa!la!mayor!parte!del!tiempo!inactivo.!!

!

ZigBee! sigue! el! modelo! OSI! (Interconexión! de! Sistemas! Abiertos)!

reduciendo! las! 7! capas! de! la! pila! de! protocolos! a! únicamente! 4.! El! estándar!

802.15.4!define!las!dos!primeras!capas,!la!capa!física!y!de!enlace!de!datos,!mientras!

que!ZigBee!define!la!capa!de!red!y!la!capa!de!aplicación.!

Figura 5.9 Pila de protocolos ZigBee.

WCapa!Física:!Define!las!funciones!con!la!capa!de!enlace!de!datos,!los!niveles!

de!potencia!del! transmisor! y! la! sensibilidad!del! receptor,! transfiriendo! los!datos!

por! medio! de! un! entero! de! 8! bits.! Sus! funciones! son:! canales,! numeración! de!

canales,! detección! de! energía,! medición! de! portadora,! indicador! de! calidad! del!

enlace,! evaluación!de! canal! libre,! cliente,! servidor! entre! capas! e! interfaz/área!de!

datos!capa!física,!enlace!de!datos.!!!

WCapa!de!enlace!de!datos:!Provee!la!interfaz!entre!la!capa!física!y!la!capa!de!

red.!Maneja!los!servicios!y!los!datos.!Sus!funciones!son:!operación!de!la!red!usando!

balizas,!espaciado!entre! tramas,!CSMAWCA,!nodo!oculto!y!nodo!expuesto,! formato!

de!la!trama.!!!

Page 67: ESCUELA UNIVERSITARIA DE INGENIERÍA TÉCNICA DE ...oa.upm.es/49224/1/PFC_AITOR_CANTERO_ROMERO.pdf · Para!concluir,!se!documenta!un!ejemplo!de!un!proyecto ... y!bajo!el!control!de!un!programa!

Aitor&Cantero&Romero&&&&&&&&&&&&&&&&&&&&&&&Programación&concurrente&orientada&a&eventos&en&Arduino&para&el&Internet&de&las&Cosas&&

! 69!

WCapa!de!red!ZigBee:!Otorga!las!funcionalidades!para!el!armado!y!manejo!de!

redes! y! una! interfaz! simple! para! las! aplicaciones! de! usuarios.! Se! encarga! de:!

establece!la!red,!configuración!de!dispositivos,!encaminamiento,!y!seguridad.!!!

WCapa! de! aplicación:! Nivel! más! alto! de! la! especificación.! Es! la! interfaz!

efectiva! entre! el! nodo! y! el! usuario.! En! él! se! ubican! la! mayor! parte! de! los!

componentes!definidos!por! la!especificación.!El! estándar!ZigBee!ofrece! la!opción!

de! emplear! perfiles! en! el! desarrollo! de! aplicaciones.! Un! perfil! de! aplicación!

permite! la! interoperabilidad! entre! productos! de! diferentes! fabricantes! como! si!

fuesen!del!mismo.!!

!

ZigBee!es!sencillo!y!de!bajo!coste.!Mucho!más!sencillo!que!Bluetooth!por!ejemplo.!

De! hecho,! según! datos,! se! requiere! un!10%! del! hardware! total! necesario! para!

producir!un!dispositivo!con!Bluetooth.!ZigBee!es!una!alternativa!interesante!para!

la! comunicación! entre! distintos! dispositivos! que! necesiten! de! un! consumo!

energético!reducido.!Al!contrario!que!el!Bluetooth!o!el!WiFi,!ZigBee!es!una!opción!a!

tener! en! cuenta! a! la! hora! de!domotizar& una! casa.! Además,! el!Internet! de! las!Cosas!puede! recurrir! a! esta! tecnología! en! lugar!de! a!dispositivos! conectados!por!

WiFi.!

!

5.2.4&ANT&

ANT!es!una!tecnología!propietaria!de!libre!consulta!para!redes!inalámbricas!

de! difusión! múltiple! o! multicast,! que! ofrece! una! pila! de! protocolos! de!

comunicación!inalámbrica!para!dispositivos!que!operan!en!la!banda!ISM!2,4!GHz.!

Proporciona! reglas! estándar! de! coexistencia,! representación! de! datos,!

señalización,!autentificación!y!detección!de!errores.!

Esta! tecnología! está! pensada! para! la! interconexión! de! dispositivos! que!

requieran! transferencias! periódicas! y! constantes! de! pequeñas! cantidades! de!

información.! Las! topologías! de! red! que! permite! ANT! son:! de! punto! a! punto,! en!

estrella,!en!malla!o!en!árbol.!

Las! aplicaciones!más! conocidas! y! difundidas! de! ANT! se! encuentran! en! el!

sector!del!deporte,!en!concreto!en!fitness!y!ciclismo.!En!estas,!los!transceptores!se!

integran! en! elementos! como! relojes! o! cinturones! que! miden! parámetros! tales!

como! velocidad! y! distancia! permitiendo! al! usuario! una! monitorización! de! su!

rendimiento.!También!se!utiliza!en!aplicaciones!industriales,!científicas!y!médicas.!

Page 68: ESCUELA UNIVERSITARIA DE INGENIERÍA TÉCNICA DE ...oa.upm.es/49224/1/PFC_AITOR_CANTERO_ROMERO.pdf · Para!concluir,!se!documenta!un!ejemplo!de!un!proyecto ... y!bajo!el!control!de!un!programa!

Aitor&Cantero&Romero&&&&&&&&&&&&&&&&&&&&&&&Programación&concurrente&orientada&a&eventos&en&Arduino&para&el&Internet&de&las&Cosas&&

!70!

! !

Page 69: ESCUELA UNIVERSITARIA DE INGENIERÍA TÉCNICA DE ...oa.upm.es/49224/1/PFC_AITOR_CANTERO_ROMERO.pdf · Para!concluir,!se!documenta!un!ejemplo!de!un!proyecto ... y!bajo!el!control!de!un!programa!

Aitor&Cantero&Romero&&&&&&&&&&&&&&&&&&&&&&&Programación&concurrente&orientada&a&eventos&en&Arduino&para&el&Internet&de&las&Cosas&&

! 71!

5.2.5&Comparativa&entre&WiWFi,&Bluetooth&4.0,&ZigBee&y&ANT&

En! una! comparativa! sobre! estas! tecnologías! inalámbricas,! no! se! puede!

asegurar! que! una! opción! sea! mejor! que! las! demás! y! viceversa.! Cada! tecnología!

puede!ser!apropiada!para!ciertos!casos!de!uso.!Es!necesario!observar!que!siempre!

que! se! analiza! una! tecnología,! o! un! conjunto! de! ellas,! se! realiza! en! función! del!

estado!presente!de!la!misma!(o!mismas).!En!este!campo!todo!tiende!a!bajar!el!coste!

y! el! tamaño,! aumentar! la! velocidad! de! transferencia! y! reducir! el! consumo.! Para!

realizar! la!comparativa!se!divide!entre!diferentes!aspectos!tales!como!el!coste,!el!

tamaño,!el!consumo!energético,!el!alcance,!la!velocidad!y!la!latencia:!

!

! Coste! Antena! PCB!tamaño! Consumo! Alcance! Velocidad! Latencia!

WiFi! $3! 8!mm! 60!mm2! 0,21W! 150m! 6!Mbps! 1,5!ms!

BT! $2.95! 8mm! 20!mm2! 0,147mW! 10W100m! 305!kbps! 2,5!ms!

ZigBee! $3.20! (F)15!mm! 305!mm2! 0,035W! 100m! 100!kbps! 20!ms!

ANT! $3.95! (F)!15!mm! 125!mm2! 0,183mW! 30m! 20!kbps! <1!ms!

Figura&5.10&Comparativa!entre!las!diferentes!tecnologías!de!red!inalámbricas!de!

área!local.!

!

En!la!tabla!anterior,!se!puede!observar!que!el!coste!de!implementación!de!

estas! tecnologías! es! parejo,! siendo! ANT! la! tecnología!más! costosa.! Además,! esta!

tecnología!se!encuentra!bajo!patente!no!libre!de!implementación.!

Las! dimensiones! de! las! antenas,! son! todas! integradas! en! el! plano! del!

circuito!impreso,!por!lo!que!aunque!ZigBee!y!ANT!necesitan!el!doble!de!espacio!en!

este!apartado,!lo!que!realmente!les!diferencia!es!el!tamaño!de!su!circuito!impreso.!

No! podemos! utilizar! el! mismo! espacio! para! un! chaleco! salvavidas! que! para! un!

marcapasos!cardiaco.!

En!el!apartado!de!consumo,!la!tecnología!WiWFi!es!la!que!menos!cuida!este!

aspecto.! Su! origen! y! propósito! inicial! no! ha! contemplado! su! implementación! en!

Internet!de!las!Cosas.!No!obstante,!a!continuación!se!matiza!este!resultado.!

La! velocidad,! aunque! dispar,! no! será! determinante! en! la! elección! de! la!

tecnología!a!usar!para!la!mayoría!de!los!casos.!Internet!de!las!Cosas!está!pensado!

para!ráfagas!cortas!de!datos,!separadas!en!el!tiempo!y!de!poca!carga.!

Page 70: ESCUELA UNIVERSITARIA DE INGENIERÍA TÉCNICA DE ...oa.upm.es/49224/1/PFC_AITOR_CANTERO_ROMERO.pdf · Para!concluir,!se!documenta!un!ejemplo!de!un!proyecto ... y!bajo!el!control!de!un!programa!

Aitor&Cantero&Romero&&&&&&&&&&&&&&&&&&&&&&&Programación&concurrente&orientada&a&eventos&en&Arduino&para&el&Internet&de&las&Cosas&&

!72!

Con!la!latencia!se!tiene!el!mismo!caso.!Solo!para!su!uso!en!ámbito!específico!

será! determinante.! Por! ejemplo,! si! necesitásemos! reactividad! en! tiempo! real! y!

precisión,!como!el!que!podría!ser!utilizado!en!la!telemetría!de!un!automóvil.!

Independientemente! de! los! números! ! que! se! muestran! en! tabla,! es!

necesario!que!se!matice!que:!

• Las!velocidades!son!tenidas!en!cuenta!para!la!carga!útil!de!la!comunicación.!

En! función! del! protocolo! que! se! utilice,! esta! velocidad! podrá! verse!

modificada.!!

• El! alcance! de! las! tecnologías! es! variable,! y! función! de! factores! como! la!

humedad,!la!temperatura,!los!obstáculos,!etc.!

• El! consumo! que! se! muestra! en! la! tabla,! corresponde! con! el! desempeño!

eléctrico!en!fase!de!transmisión!y!recepción.!El!estándar!WiWFi!permanece!

activo!en!todo!momento,!por!lo!que!ese!consumo!se!entiende!absoluto.!En!el!

caso! del! resto! de! tecnologías,! los! transceptores! descansan! entre!

transmisiones! para! lograr! ahorrar! preciada! energía.! Es! importante! sobre!

todo!para!aplicaciones!donde!la!fuente!de!energía!es!una!batería,!una!placa!

solar,!etc.!

!

!

Figura&5.11&Espectro!de!WiWFi!y!Bluetooth!4.0.!

!

Se! debe! tener! en! cuenta,! que! las! tecnologías! de! red! inalámbrica! son!

susceptibles!de!interferir!tanto!con!el!entorno,!como!con!ellas!mismas,!como!con!

sus! transmisiones! circundantes.! En! la! Figura! 5.11! y! 5.12! se! puede! observar! la!

Page 71: ESCUELA UNIVERSITARIA DE INGENIERÍA TÉCNICA DE ...oa.upm.es/49224/1/PFC_AITOR_CANTERO_ROMERO.pdf · Para!concluir,!se!documenta!un!ejemplo!de!un!proyecto ... y!bajo!el!control!de!un!programa!

Aitor&Cantero&Romero&&&&&&&&&&&&&&&&&&&&&&&Programación&concurrente&orientada&a&eventos&en&Arduino&para&el&Internet&de&las&Cosas&&

! 73!

compartición!de!canales!entre!tecnologías.!Esto!da!lugar!a!interferencias!cocanal.!

&

!

Figura&5.12&Espectro!de!WiWFi!y!ZigBee.!

!

Estas!tecnologías!de!comunicación!inalámbrica!son!empleadas!en!redes!de!

área! local.! Para! conectar! estas! redes! con! el! mundo,! es! decir,! para! aplicarlo! a!

Internet! de! las! Cosas,! se! necesita! un! dispositivo! que!medie! entre! los! protocolos!

locales! y! de! área! extensa.! En! el! caso! de!WiWFi! y! las! normas! IEEE! 802.11,! al! ser!

compatibles! con! la! pila! de! protocolos! TCP/IP! para! IEEE! 802.3! Ethernet,! no! es!

necesario! este! equipamiento! extra.! Por! tanto,! para! redes! de! sensores! puede!

interesar! ZigBee! por! sus! características,! pero! para! un! objeto! aislado,! o! para! un!

pequeño! conjunto! de! objetos! puede! no! tener! sentido! según! que! tecnologías! si!

tenemos!que!contar!con!estas!puertas!de!enlace.!

!

Fuente![W11]!

! !

Page 72: ESCUELA UNIVERSITARIA DE INGENIERÍA TÉCNICA DE ...oa.upm.es/49224/1/PFC_AITOR_CANTERO_ROMERO.pdf · Para!concluir,!se!documenta!un!ejemplo!de!un!proyecto ... y!bajo!el!control!de!un!programa!

Aitor&Cantero&Romero&&&&&&&&&&&&&&&&&&&&&&&Programación&concurrente&orientada&a&eventos&en&Arduino&para&el&Internet&de&las&Cosas&&

!74!

! &

Page 73: ESCUELA UNIVERSITARIA DE INGENIERÍA TÉCNICA DE ...oa.upm.es/49224/1/PFC_AITOR_CANTERO_ROMERO.pdf · Para!concluir,!se!documenta!un!ejemplo!de!un!proyecto ... y!bajo!el!control!de!un!programa!

Aitor&Cantero&Romero&&&&&&&&&&&&&&&&&&&&&&&Programación&concurrente&orientada&a&eventos&en&Arduino&para&el&Internet&de&las&Cosas&&

! 75!

Capitulo&6.&&Caso&práctico.&Aplicación&Semáforo&Conectado&

!

El! proyecto! culmina! con! el! desarrollo! de! una! aplicación! que! sea!

representativa!para!el! contexto!de! Internet!de! las!Cosas.!Para!ello! se!presenta!el!

marco!de!trabajo!elegido,!el!diseño!de!la!aplicación!y!su!implementación.!

&

6.1&Automaton&framework)

Automaton!framework!es!un!entorno!de!trabajo!para!la!plataforma!Arduino,!

que! consiste! en! utilizar! máquinas! de! estado! finitas! reactivas! ejecutándose!

concurrentemente!(pseudoparalelismo),!que!interactúan!entre!sí.!Su!autor!es!Peter!

van!der!Landen.!

Es!un! framework,!dado!que!no!solo!consta!de!una!biblioteca,!sino!también!

de!una!herramienta!de!edición!de!máquinas!de!estado,! llamadas!componentes,! a!

modo!de!entorno!de!desarrollo!simple,!y!además!porque!modifica!en!cierto!grado!

la!forma!de!programar!el!código!para!las!placas!Arduino.!

!

Las!características!principales!son:!

• Máquinas!de!estado!con!mecanismo!de!multitarea!cooperativa.!

• Reactividad.!

• Planificador!ligero.!

• Temporizadores!y!contadores!integrados.!

• Comunicación!entre!componentes!a!través!de!disparadores!de!eventos!y!

conectores!push.!

• Posibilidad!de!poner!en!reposo!un!componente!para!cuida!el!uso!de!CPU.!

• Sistema!de!depuración.!

• Utiliza!un!diseño!modular.!

• Cualquier!componente!creado!funcionará!en!otro!contexto!con!la!única!

dependencia!de!la!biblioteca!Automaton.!

• Compatibilidad!completa!con!Arduino;!tanto!con!el!entorno!de!desarrollo!como!con!sus!placas.!

La!biblioteca!de!Automaton!está! escrita! en!C++.!Utiliza! la!programación!a!

objetos!y!en!este!caso,!la!programación!dirigida!por!eventos.!El!flujo!de!programa!y!

las! estructuras! de! control! hay! que! llevarlas! a! cabo! teniendo! en! cuenta! este!

Page 74: ESCUELA UNIVERSITARIA DE INGENIERÍA TÉCNICA DE ...oa.upm.es/49224/1/PFC_AITOR_CANTERO_ROMERO.pdf · Para!concluir,!se!documenta!un!ejemplo!de!un!proyecto ... y!bajo!el!control!de!un!programa!

Aitor&Cantero&Romero&&&&&&&&&&&&&&&&&&&&&&&Programación&concurrente&orientada&a&eventos&en&Arduino&para&el&Internet&de&las&Cosas&&

!76!

paradigma.! Asimismo,! se! ponen! a! disposición! del! programador! una! serie! de!

máquinas!de!estado!sencillas,!para!su!uso!o!su!modificación:!

• Atm_analog:!monitoriza!los!valores!de!un!pin!analógico!con!posibilidad!de!utilizar!un!filtro!paso!bajo.!

• Atm_bit:!es!un!conmutador!binario!que!puede!disparar!eventos!en!sus!cambios!de!estado.!

• Atm_button:!para!gestionar!las!acciones!de!un!botón,!incluyendo!pulsaciones!largas,!rebotes,!repeticiones,!etc.!

• Atm_command:!monitor!serie!con!parser!incluido,!capaz!de!disparar!eventos!en!función!de!la!entrada.!

• Atm_comparator:!es!un!monitor!de!tensión!analógico!más!avanzado!que!Atm_analog,!que!permite!capturar!patrones!en!base!a!límites.!También!puede!hacer!uso!de!un!filtro!paso!bajo.!

• Atm_controller:!es!un!componente!que!almacena!un!bit!de!estado,!que!es!modificable!por!el!estado!o!llamada!de!otro!componente!y!de!una!operación!lógica!AND,!OR!o!XOR.!

• Atm_digital:!es!un!monitor!de!un!pin!digital.!Útil!cuando!quieres!notificar!el!cambio!de!estado!de!una!entrada!digital.!

• Atm_encoder:!Sirve!para!utilizar!un!codificador!rotativo!como!entrada.!Como!el!usado!en!una!rueda!para!regular!el!volumen!de!un!equipo!de!

sonido.!

• Atm_fade:!controla!mediante!modulación!de!ancho!de!pulso!la!iluminación!de!un!LED,!sus!tiempos!de!parpadeo,!atenuación!degradada,!

etc.!

• Atm_fan:!sirve!para!a!partir!de!un!evento!dado,!generar!múltiples!eventos!de!salida.!!

• Atm_LED:!se!utiliza!para!administrar!un!LED!a!través!de!un!pin!digital.!Velocidad!de!parpadeo,!tiempo!de!pausa!y!número!de!repeticiones.!

Puede!ser!empleado!para!cualquier!dispositivo!que!espere!una!entrada!similar,!como!un!relé.!!

• Atm_player:!es!un!reproductor!de!patrones!musicales!sencillos!para!generar!sonido!a!través!de!un!altavoz!piezoeléctrico.!Como!en!los!otros!componentes,!se!puede!utilizar!para!cualquier!otro!uso!basado!en!el!

mismo!funcionamiento.!

• Atm_servo:!puede!controlar!uno!o!más!servomotores.!Un!servomotor!es!un!motor!capaz!de!orientarse.!Ampliamente!utilizado!en!robótica.!

• Atm_step:!es!un!secuenciador!de!pasos.!Puede!manejar!hasta!8!pasos!diferentes,!y!puede!recorrerse!hacia!delante!o!hacia!atrás.!Es!el!concepto!

mismo!de!máquina!de!estado!finito!personalizable.!

• Atm_timer:!Es!un!temporizador!programable!en!tiempo!y!repetición.!Cuando!el!temporizador!llegue!a!cero,!se!puede!disparar!el!evento!a!

cualquier!componente.!

Page 75: ESCUELA UNIVERSITARIA DE INGENIERÍA TÉCNICA DE ...oa.upm.es/49224/1/PFC_AITOR_CANTERO_ROMERO.pdf · Para!concluir,!se!documenta!un!ejemplo!de!un!proyecto ... y!bajo!el!control!de!un!programa!

Aitor&Cantero&Romero&&&&&&&&&&&&&&&&&&&&&&&Programación&concurrente&orientada&a&eventos&en&Arduino&para&el&Internet&de&las&Cosas&&

! 77!

6.1.1&“Hola&mundo”&en&Automaton&

Para! analizar! el! funcionamiento! de! Automaton,! se! puede! recurrir! a! un!

ejemplo! de! código.! El! “hola! mundo”! de! la! programación! de! microcontroladores!

suele! ser! hacer!parpadear!un!LED.!En! este! caso,! y! para! ver! alguna! capacidad!de!

este!marco!de!trabajo,!se!va!a!recurrir!a!un!botón!para!la!activación!y!desactivación!

del!LED.!

#include <Automaton.h> // Conmutar un LED que parpadea mediante un boton int LEDPin = 5; int buttonPin = 2; Atm_LED LED; Atm_button button; void setup() { LED.begin( LEDPin ) .blink( 200, 200 ); // Configura el LED para que parpadee cada 200 ms button.begin( buttonPin ) .onPress( LED, LED.EVT_TOGGLE_BLINK ); // Conmutar el LED cuando se presiona el boton } void loop() { automaton.run(); }

Código&6.1&“Hola!mundo”!en!el!framework!automaton.!

!

Como!se!puede!observar!en!el!código!anterior,!lo!primero!que!hay!que!hacer!

para!poder!utilizar! estas! funciones! es! referenciar! a! la!biblioteca!de! funciones!de!

Automaton! mediante! la! directiva! #include <Automaton.h>.! Esto! le! indica! al!

compilador!que! además!de! la! librería! estándar!de!C/C++,!debe!buscar! aquí!para!

encontrar!las!clases!contenidas!en!el!código.!Una!vez!hecho,!ya!podemos!llamar!a!

los!componentes!de!Automaton!con!total!libertad.!

Se!declaran!previo!a!la!función!setup()!dos!valores!enteros!conforme!a!los!

números!de!los!pines!digitales!elegidos!para!el!LED!y!para!el!botón.!Además!vamos!

a!reservar!espacio!a!los!componentes!(objetos)!LED!y!botón.!

Ya!en!la!función!setup() llamamos!al!método!begin() de!cada!objeto!para!

inicializarlo.!!En!ambos!casos!se!indica!como!parámetro!en!este!método!el!número!

de!pin!asociado!al!componente.!

Page 76: ESCUELA UNIVERSITARIA DE INGENIERÍA TÉCNICA DE ...oa.upm.es/49224/1/PFC_AITOR_CANTERO_ROMERO.pdf · Para!concluir,!se!documenta!un!ejemplo!de!un!proyecto ... y!bajo!el!control!de!un!programa!

Aitor&Cantero&Romero&&&&&&&&&&&&&&&&&&&&&&&Programación&concurrente&orientada&a&eventos&en&Arduino&para&el&Internet&de&las&Cosas&&

!78!

Ahora! se! puede! caracterizar! cada! componente.! En! el! caso! del! LED,! una!

configuración! básico! es! declarar! que! parpadee! en! intervalos! ! (200! ms! en! el!

ejemplo).! Se! realiza! con!el! fragmento!.blink(200,200).! En!el! caso!del!botón,! lo!

que!se!va!a!utilizar!es!un!disparador,!para!que!cuando!sea!pulsado,!actúe!sobre!el!

LED,! activando! o! desactivando! su! rutina.! En! el! ejemplo! lo! indica! el! código!

.onPress(LED,! LED.EVT_TOGGLE_BLINK).! ! Como! parámetros! se! indican! el!

componente!destino!en!primer! lugar,! y! en! segundo! lugar! se! referencia! el! evento!

que!queremos!que!sea!dado.!Con!esto!se!termina!el!cuerpo!de!la!función!setup(),!

que!se!ejecutara!solo!una!vez!con!cada!inicio!del!microcontrolador.!

Por!último,!en!la!función!loop()!propia!de!Arduino,!solamente!se!llama!a!la!

función!automaton.run(),! que!es! lo!que! se! ejecutará! tras! la! configuración! inicial!

hasta!que!se!apague!el!microcontrolador.!!

Para!hacer!un!desarrollo!sencillo,!conocer!el!funcionamiento!del!ecosistema!

a! este! nivel! podría! ser! suficiente.! En! cambio,! para! conocer! de! verdad! cómo! se!

consigue!que!estas!pocas!líneas!hagan!lo!esperado,!se!debe!analizar!la!clase!madre!

de!los!componentes!llamada!Machine!y!el!método!automaton.run().!

!

6.1.2&¿Cómo&funciona?&

Para!entender!el!funcionamiento!del!sistema,!se!tiene!que!analizar!la!clase!

Machine!y!el!método!automaton.run().!

!

6.1.2.1&La&clase&Machine&

La!clase!Machine!es!una!clase!abstracta,!lo!que!en!lenguaje!C++!quiere!decir!

que!para!poder!instanciarla,!se!debe!crear!una!subclase!que!herede!de!ella.!Todos!

los!componentes!que!se!han!documentado!en!el!inicio!de!este!capítulo,!son!clases!

que! heredan! de! Machine.! Esto! garantiza! que! los! métodos! (funciones),! atributos!

(variables)!y!dependencias!básicos!son!respetados.!!Además,!mediante!herencia!se!

puede!crear!un!componente!a!partir!de!otro!con!facilidad.!Solo!se!debe!heredar!de!

la!clase!que!más!se!aproxime!a!lo!que!se!quiere!tener,!y!luego!sobrescribir!o!añadir!

los!métodos!que!necesitemos.!

Esta! clase! (o! la! que! herede! de! ella)! representa! una! máquina! de! estados!

finita.!Lo!hace,!mediante!la!declaración!de!estados,!eventos!y!su!interacción!en!una!

Page 77: ESCUELA UNIVERSITARIA DE INGENIERÍA TÉCNICA DE ...oa.upm.es/49224/1/PFC_AITOR_CANTERO_ROMERO.pdf · Para!concluir,!se!documenta!un!ejemplo!de!un!proyecto ... y!bajo!el!control!de!un!programa!

Aitor&Cantero&Romero&&&&&&&&&&&&&&&&&&&&&&&Programación&concurrente&orientada&a&eventos&en&Arduino&para&el&Internet&de&las&Cosas&&

! 79!

tabla! estática.! En! las! siguientes! figuras! se! observa! el! código! y! su! diagrama! de!

estados!correspondiente:!

const static state_t state_table[] PROGMEM = { /* ON_ENTER ON_LOOP ON_EXIT EVT_INPUT EVT_EOL ELSE */ /* IDLE */ -1, -1, -1, READCHAR, -1, -1, /* READCHAR */ ENT_READCHAR, -1, -1, READCHAR, SEND, -1, /* SEND */ ENT_SEND, -1, -1, -1, -1, IDLE, }; Machine::begin( state_table, ELSE );

Código&6.2&Tabla!de!estados!de!un!componente!Automaton.!

!

Figura&6.1&Diagrama!de!estados!a!partir!de!la!tabla!anterior.!

Como!se!advierte!en! las! figuras!anteriores.!Los!estados! corresponden!a! la!

columna!de!la!izquierda,! los!eventos!a!la!primera!fila!y!las!acciones!y!cambios!de!

estado!son!el!contenido!de!la!tabla.!Una!acción!vacía!se!define!con!“W1”.!En!realidad,!

todas!los!estados,!eventos!y!acciones,!serán!reemplazados!por!los!números!0,!1,!2,!

3,!etc.!Los!eventos!ON_ENTER,!ON_LOOP!y!ON_EXIT!son!predefinidos!y!corresponden!

con!0,!1!y!2! respectivamente.!Mediante!esas!macros! se!mapea! cada!estado,! cada!

evento!y!cada!acción.!Por!eso!se!utiliza!el!evento!ELSE,!para!delimitar!la!fila.!

!

El&manejador&de&eventos&int event( int id ) &

El!manejador! de! eventos! debe! ser! implementado! por! cada! sublcase! de! la!

clase!Machine,!dado!que!es!un!método!abstracto!Por!cada!evento,!se!llamará!a!este!

método!en!informarse!si!ese!evento!ha!ocurrido!o!no.!Primero,!comprobara!si!para!

el!estado!en!el!que!se!encuentra!la!máquina,!se!maneja!dicho!evento!(valor!>W1),!si!

es!así!entrará!en!el!bloque!de!código!correspondiente,!consultando!si!ese!evento!a!

Page 78: ESCUELA UNIVERSITARIA DE INGENIERÍA TÉCNICA DE ...oa.upm.es/49224/1/PFC_AITOR_CANTERO_ROMERO.pdf · Para!concluir,!se!documenta!un!ejemplo!de!un!proyecto ... y!bajo!el!control!de!un!programa!

Aitor&Cantero&Romero&&&&&&&&&&&&&&&&&&&&&&&Programación&concurrente&orientada&a&eventos&en&Arduino&para&el&Internet&de&las&Cosas&&

!80!

ocurrido,! devolviendo! 0! si! no! ha! ocurrido! y! 1! si! sí.! Estos! eventos! se! recorren!

secuencialmente.!

int Atm_command::event( int id ) { switch ( id ) { case EVT_INPUT : return _stream->available(); case EVT_EOL : return _buffer[_bufptr-1] == _eol || _bufptr >= _bufsize; } return 0; }

Código&6.3&Manejador!de!eventos!de!un!componente!Automaton.!

&

El&manejador&de&acciones&&void action( int id )

Como!en!el!caso!anterior,!el!manejador!de!acciones!debe!ser!implementado!

por!cada!máquina!que!hereda!de!la!clase!Machine.!Su!funcionamiento!es!igual!que!

en! el! caso! del! manejador! de! eventos! explicado! anteriormente! a! su! entrada.! La!

diferencia!es!que!no!devuelve!ningún!valor,!ya!que!aquí!es!donde!se! realizan! las!

acciones.!En!el!siguiente!código!se!puede!comprender!el!comportamiento!de!este!

método:!

void Atm_LED::action( int id ) { switch ( id ) { case ENT_INIT : counter.set( repeat_count ); digitalWrite( pin, LOW ); return; case ENT_ON : decrement( counter ); digitalWrite( pin, HIGH ); return; case ENT_OFF : digitalWrite( pin, LOW ); return; } }

Código&6.4&Manejador!de!acciones!de!un!componente!Automaton.!

&

Los&disparadores&&int trigger( int event )

Cuando! se! llama! al! disparador! de! un! componente,! lo! que! hacemos!

realmente! es! utilizar! forzar!un! evento!de! esa!máquina!para!que! se! ejecute! en! la!

siguiente! iteración,!es!decir,!cuando!el!manejador!de!eventos!recorra! los!eventos!

de!dicha!máquina,!aparecerá!este!evento!a!realizar.!

Page 79: ESCUELA UNIVERSITARIA DE INGENIERÍA TÉCNICA DE ...oa.upm.es/49224/1/PFC_AITOR_CANTERO_ROMERO.pdf · Para!concluir,!se!documenta!un!ejemplo!de!un!proyecto ... y!bajo!el!control!de!un!programa!

Aitor&Cantero&Romero&&&&&&&&&&&&&&&&&&&&&&&Programación&concurrente&orientada&a&eventos&en&Arduino&para&el&Internet&de&las&Cosas&&

! 81!

!

La&depuración&trace() &

El!método!setTrace()!toma!tres!argumentos.!El!tercero!es!una!cadena!que!

comienza!con!el!nombre!de!la!clase!y!luego!contiene!los!nombres!(separados!por!

null o “\0”)!de!los!eventos!y!estados!tal!como!se!definen!en!la!máquina.!Luego,!

cuando! se! quiere! monitorizar! una! máquina! de! estados,! llamamos! al! método!

trace().!Típicamente!el!argumento!para!la!salida!tipo!stream!será!trace(Serial).!

La! definición! del!método! y! un! ejemplo! de! salida! se! puede! ver! en! las! siguientes!

figuras:

!!

Atm_blink & Atm_blink::trace( Stream & stream ) { Machine::setTrace( &stream, atm_serial_debug::trace, "BLINK\0EVT_TIMER\0EVT_ON\0EVT_OFF\0ELSE\0IDLE\0LED_ON\0LED_OFF" ); return *this; }

Código&6.5&Método!trace!de!un!componente!Automaton.!

&

0 Switch BLINK@52E from *NONE* to IDLE on *NONE* (1 cycles in 0 ms) 1 Switch BLINK@52E from IDLE to LED_ON on EVT_ON (2 cycles in 0 ms) 26 Switch BLINK@52E from LED_ON to LED_OFF on EVT_TIMER (44 cycles in 200 ms) 47 Switch BLINK@52E from LED_OFF to LED_ON on EVT_TIMER (98 cycles in 200 ms)

Código&6.6&Salida!de!depuración!de!un!componente!Automaton!por!puerto!Serie.!

!

El&método&cycle&cycle(time)

Este!método!es!vital!para!el!funcionamiento!del!sistema.!Básicamente!lo!que!

hace!es!realizar!un!ciclo!de!la!máquina!de!estado.!

El!parámetro!de!tiempo!por!defecto!es!0!en!su!llamada.!Si!fuese!mayor!que!

cero,!antes!de!hacer!nada,!se!evalúa!si!ha!cumplido!ese!tiempo!utilizando!la!función!

millis() nativa! de! Arduino.! Si! no,! retorna! inmediatamente.! Si! es! cero! o! se! ha!

cumplido,!realiza!lo!siguiente.!

• Si!cambia!de!estado!en!este!ciclo:!

!W!Llama!a!la!acción!de!ON_SWITCH!

!W!Llama!a!la!función!de!depuración!(si!estuviese!activa)!

!W!Llama!a!la!acción!del!estado!anterior!colocada!en!el!estado!ON_EXIT!

!W!Cambia!el!estado!actual!por!el!nuevo!estado!

!W!Llama!a!la!acción!que!haya!en!la!casilla!ON_ENTER!!de!este!nuevo!estado!

Page 80: ESCUELA UNIVERSITARIA DE INGENIERÍA TÉCNICA DE ...oa.upm.es/49224/1/PFC_AITOR_CANTERO_ROMERO.pdf · Para!concluir,!se!documenta!un!ejemplo!de!un!proyecto ... y!bajo!el!control!de!un!programa!

Aitor&Cantero&Romero&&&&&&&&&&&&&&&&&&&&&&&Programación&concurrente&orientada&a&eventos&en&Arduino&para&el&Internet&de&las&Cosas&&

!82!

• Si!se!trata!de!un!ciclo!normal!(sin!cambio!de!estado):!

!W!Realiza!la!acción!contenida!en!la!casilla!ON_LOOP!del!estado!actual!

!W!Revisa!los!eventos!usando!el!método!event()!del!estado!actual!y!los!trata!!

!

6.1.2.2&La&clase&Automaton&

La! clase! Automaton! apenas! tiene! contenido! en! comparación! con! la! clase!

Machine.!Mantiene!una!lista!enlazada!de!las!máquinas!de!estado!del!programa.!A!

parte,!posee!tres!métodos!que!lo!que!hacen!es:!

• add():añade!una!máquina!a!la!lista!enlazada!de!máquinas.!Es!llamada!

por!el!método!add()de!la!clase!Machine!y!también!por!el!begin().!Solo!

se!inserta!una!vez.!

• delay(time):para! el! planificador! hasta! que! se! cumpla! el! tiempo.!

Similar!a! la! función!add()!de! la! clase!Machine.!Hasta!que!se!cumple!el!

tiempo!time!no!se!ejecuta!ninguna!máquina!de!estado.!

• run():es!al!que!se! llama!en!el!método!loop() del!sketch!Arduino.!Lo!

que!hace!es! recorrer! la! lista!de!máquinas! inventariadas!y! llamar!a! sus!

métodos!cycle()!una!por!una.!

!

6.1.2.3&La&comunicación&entre&máquinas&

Cuando!se!quiere!publicar!un!cambio!a!otro!componente!o!componentes,!se!

tiene!que!añadir!un!método!para!en!la!clase!de!la!nueva!máquina!que!contenga!en!

su!interior!una!llamada!al!método!onPush().!Aquí!un!ejemplo:!

/* onStart() push connector variants ( slots 1, autostore 0, broadcast 0 ) * * Usage in action() handler: push( connectors, ON_START, 0, v, up) */ Atm_ejemplo& Atm_ejemplo::onStart( Machine& machine, int event ) { onPush( connectors, ON_START, 0, 1, 1, machine, event ); return *this; } Atm_ejemplo& Atm_ejemplo::onStart( atm_cb_push_t callback, int idx ) { onPush( connectors, ON_START, 0, 1, 1, callback, idx ); return *this; }

Código&6.7&Ejemplo!de!conector!push!en!componente!Automaton.!

!

Para!que!funcione,!se!tiene!que!conectar!desde!el!método!action(id):

void Atm_smarttrafficlight::action( int id ) { switch ( id ) {

Page 81: ESCUELA UNIVERSITARIA DE INGENIERÍA TÉCNICA DE ...oa.upm.es/49224/1/PFC_AITOR_CANTERO_ROMERO.pdf · Para!concluir,!se!documenta!un!ejemplo!de!un!proyecto ... y!bajo!el!control!de!un!programa!

Aitor&Cantero&Romero&&&&&&&&&&&&&&&&&&&&&&&Programación&concurrente&orientada&a&eventos&en&Arduino&para&el&Internet&de&las&Cosas&&

! 83!

case ENT_ESTADO1: digitalWrite( 8, HIGH ); push( connectors, ON_START, 0, 0, 0); push( connectors, ON_CHANGE, 0, 0, 0 ); return; case EXT_ESTADO1: digitalWrite( 8, LOW ); return; case ENT_ESTADO2: digitalWrite( 9, HIGH ); push( connectors, ON_CHANGE, 0, 1, 0 ); return; case EXT_ESTADO2: digitalWrite( 9, LOW ); return; } }

Código&6.8&Enlace!de!conector!push!desde!el!método!de!acciones.!

!

Se!revela!en!el!código!anterior!que!en!el!ESTADO1!se!publicará!el!tanto!de!un!

cambio!de!estado!onChange(),!como!que!además!es!el!estado!inicial!onStart().!En!

la!figura!6.7,!se!puede!diferenciar!entre!un!conector!push!con!parámetro!callback!y!

otro! con! evento.! Esto! quiere! decir! que! cuando! se! declare! a! ese! conector! push,!

cuando! ocurra,! llamará! a! la! función! que! callback! que! se! haya! indicado,! o! bien!

disparará! el! evento! del! componente! que! se! designe.! En! el! siguiente! código! se!

aprecian!los!dos!casos!implementados:!

void callback( int idx, int v, int up ) { LED.toggle(); } void setup() { LED.begin( 1 ); button.begin( 2 ) .onPress( callback ); button2.begin( 3 ) .onPress( LED, LED.EVT_START ); button3.begin( 4 ) .onPress( [] ( int idx, int v, int up ) { Serial.print(“into a lambda expression); }); }

Código&6.9&Diferentes!formas!de!utilizar!los!conectores!push.!

En!el!primer!botón,! cuando! se!presione,! se! llama!a! la! función!callback()!

definida!al!principio.!En!el!segundo!botón,!al!presionarlo,!se!dispara!un!evento!en!

el! LED.! En! el! tercer! botón,! se! ejecuta! la! línea! que! escribe! en! puerto! serie.! Esta!

Page 82: ESCUELA UNIVERSITARIA DE INGENIERÍA TÉCNICA DE ...oa.upm.es/49224/1/PFC_AITOR_CANTERO_ROMERO.pdf · Para!concluir,!se!documenta!un!ejemplo!de!un!proyecto ... y!bajo!el!control!de!un!programa!

Aitor&Cantero&Romero&&&&&&&&&&&&&&&&&&&&&&&Programación&concurrente&orientada&a&eventos&en&Arduino&para&el&Internet&de&las&Cosas&&

!84!

última! forma!de! codificar,! se! llama!expresión!Lambda,! y! sirve!para! compactar! el!

código!y!facilitar!la!lectura!al!programador.!Esta!disponible!su!uso!desde!la!versión!

1.6.6!del!entorno!de!desarrollo!Arduino.!Fuente![W12].!

6.1.3&Creación&de&componentes&propios&

En!el!marco!de!trabajo!de!Automaton,!se!incluyen!unos!sencillos!pero!útiles!

componentes,! con! los! que! se! pueden! elaborar! estructuras! de! control! más!

complejas.! Estas! máquinas! de! estado! pueden! satisfacer! las! necesidades! del!

programador,! pero! en! caso! contrario,! se! facilita! la! de! otras! nuevas! en! una!

herramienta!basada!en!entorno!web! [W13]!que!permite! tanto! la!creación!de!una!

máquina!de!estados!partiendo!de!cero,!o!como!la!modificación!de!una!ya!existente.!!

!

Figura&6.2&Herramienta!de!creación!de!máquinas!de!estado.!

En! la!Figura!6.2!se!aprecia!el!estado! inicial!de! la!herramienta.!Para!comenzar,!se!

debe!pulsar!en!“Crear!una!máquina!de!estado!nueva”!o!en!“Modificar!una!máquina!

de!estado!existente”.!!Si!se!elige!la!primera!opción,!el!navegador!mostrará!esto:!

!

Page 83: ESCUELA UNIVERSITARIA DE INGENIERÍA TÉCNICA DE ...oa.upm.es/49224/1/PFC_AITOR_CANTERO_ROMERO.pdf · Para!concluir,!se!documenta!un!ejemplo!de!un!proyecto ... y!bajo!el!control!de!un!programa!

Aitor&Cantero&Romero&&&&&&&&&&&&&&&&&&&&&&&Programación&concurrente&orientada&a&eventos&en&Arduino&para&el&Internet&de&las&Cosas&&

! 85!

Figura&6.3&Herramienta!de!creación!de!máquinas!de!estado.!

Para!insertar!estados!y!eventos,!basta!con!escribir!el!nombre!en!la!caja!de!

texto!y!pulsar!sobre!el!botón!correspondiente.!A!modo!de!ejemplo,!se!genera!una!

máquina! de! estados! propia! de! un! juego! de! hundir! la! flota.! En! la! Figura! 6.4! se!

pueden! identificar! los! estados! OK,! TOCADO! y! HUNDIDO;! y! los! eventos! FUEGO! y!

AUTODESTRUCCION.! En! la! casilla! correspondiente! al! evento! y! estado! deseado,! se!

debe! indicar!el!estado! futuro!al!que!se!migra.!En!este!caso,!en!caso!de!FUEGO,!un!

barco! en! estado! OK! pasa! a! estar! TOCADO,! y! si! está! TOCADO! pasa! a! estar! HUNDIDO.!

También!se!puede!modificar!el!ámbito!de!acceso!de!cada!evento.!Aquí!se!diferencia!

un! evento! solamente! accesible! desde! la! propia!máquina! de! estados,! como! en! el!

caso!del!evento!AUTODESTRUCCION,!o!de!acceso!exterior,!como!en!el!evento!FUEGO.!Al!

barco!se!le!debe!poder!disparar!desde!fuera,!pero!solo!se!puede!autodestruir!desde!

dentro.!En!los!“subeventos”!autogenerados!ENTER,!LOOP!y!EXIT!se!encuentran!unas!

casillas!de!verificación!para!generar!acciones.!Es!necesario!para!realizar!tareas!en!

los!cambios!de!estado!y!enlazar!los!conectores!push.!

!

!

Figura&6.4&Tabla!de!transiciones!de!estado.!

!

Por!último,!es!posible!añadir!conectores!para!poder!comunicarse!con!otros!

componentes,! o! realizar! llamadas! a! funciones! (callbacks)! en! el! cuerpo! del!

programa!principal.!Una!muestra!de!ello!se!encuentra!en!la!Figura!6.5.!

Page 84: ESCUELA UNIVERSITARIA DE INGENIERÍA TÉCNICA DE ...oa.upm.es/49224/1/PFC_AITOR_CANTERO_ROMERO.pdf · Para!concluir,!se!documenta!un!ejemplo!de!un!proyecto ... y!bajo!el!control!de!un!programa!

Aitor&Cantero&Romero&&&&&&&&&&&&&&&&&&&&&&&Programación&concurrente&orientada&a&eventos&en&Arduino&para&el&Internet&de&las&Cosas&&

!86!

!

Figura&6.5&Conectores!de!máquina!de!estado.!

!

En!el!botón!.hpp!y!en!.cpp!se!puede!encontrar!la!cabecera!escrita!en!C++,!y!

el! código! respectivamente.! Para! descargar! el! código! en! nuestro! ordenador,!

encontramos! los! botones! en! la! pantalla! inicial! o! el! botón! File.! En! la! práctica,!

apenas!se!ha!realizado!el!esqueleto!de!la!máquina!de!estado.!Para!que!haga!cosas,!

se! tiene! que! detallar! el! código! en! la! función! action()! y! en! event().! En! este!

supuesto!el!método!action()!podría!ser!así:!

void Atm_machine::action( int id ) { switch ( id ) { case ENT_OK: digitalWrite( pin1, HIGH ); digitalWrite( pin2, HIGH ); digitalWrite( pin3, HIGH ); push( connectors, ON_CHANGE, 0, 0, 0 ); return; case EXT_OK: digitalWrite( pin2, LOW ); return; case ENT_TOCADO: push( connectors, ON_CHANGE, 0, 1, 0 ); return; case EXT_TOCADO: return; case ENT_HUNDIDO: digitalWrite( pin1, LOW ); digitalWrite( pin2, LOW ); digitalWrite( pin3, LOW ); push( connectors, ON_CHANGE, 0, 2, 0 ); return; } }

Código&6.10&Detalle!del!método!action()!en!componente!creado.!

A!esto!hay!que!añadirle!las!variables!internas!de!la!máquina!de!estado,!los!

métodos!que!se!quieran!definir!y!los!disparadores!a!eventos.!

Page 85: ESCUELA UNIVERSITARIA DE INGENIERÍA TÉCNICA DE ...oa.upm.es/49224/1/PFC_AITOR_CANTERO_ROMERO.pdf · Para!concluir,!se!documenta!un!ejemplo!de!un!proyecto ... y!bajo!el!control!de!un!programa!

Aitor&Cantero&Romero&&&&&&&&&&&&&&&&&&&&&&&Programación&concurrente&orientada&a&eventos&en&Arduino&para&el&Internet&de&las&Cosas&&

! 87!

6.2&Microcontrolador&ESP8266&

!

Figura&6.6&Módulo!ESP8266.!

!

Existe!un!componente!!de!comunicación,!a!parte!de!los!documentados!en!la!

presentación! de! Automaton.! Consiste! en! una! implementación! de! la! biblioteca!

Arduino! WiFi,! para! microcontroladores! basados! en! el! chip! ESP8266.! Este!

microcontrolador,!y!toda!la!gama!ESPWXX,!se!han!vuelto!muy!populares!gracias!a!su!

bajo!costo,!potencia!y!capacidad!de!comunicación!inalámbrica!bajo!el!estándar!WiW

Fi.!En! realidad,! estos!microcontroladores! consisten!en!un!microcontrolador!y!un!

transceptor!en!la!banda!ISM!2,4GHz.!Tiene!la!ventaja!de!superar!a!cualquier!placa!

Arduino!en!rendimiento!bruto,!utilizando!una!arquitectura!hardware! similar.!Sus!

características!son:!

• CPU!RISC!de!32Wbit:!Tensilica!Xtensa!LX106!a!un!reloj!de!80!MHz.!

• RAM!de!instrucción!de!64!KB,!RAM!de!datos!de!96!KB.!

• Capacidad!de!memoria!externa!flash!QSPI!W!4!MB.!

• IEEE!802.11!b/g/n!WiWFi.!

• Soporte!de!autenticación!WEP!y!WPA/WPA2.!

• 16!pines!GPIO!(Entradas/Salidas!de!propósito!general).!

• SPI,!I²C.!

• Interfaz!I²S!con!DMA!(comparte!pines!con!GPIO).!

• Pines! dedicados! a!UART,!mas! una!UART!únicamente! para! transmisión!

que!puede!habilitarse!a!través!del!pin!GPIO2.!

• 1!conversor!ADC!de!10!bits.!

Page 86: ESCUELA UNIVERSITARIA DE INGENIERÍA TÉCNICA DE ...oa.upm.es/49224/1/PFC_AITOR_CANTERO_ROMERO.pdf · Para!concluir,!se!documenta!un!ejemplo!de!un!proyecto ... y!bajo!el!control!de!un!programa!

Aitor&Cantero&Romero&&&&&&&&&&&&&&&&&&&&&&&Programación&concurrente&orientada&a&eventos&en&Arduino&para&el&Internet&de&las&Cosas&&

!88!

El! problema!de! este!módulo! es! que! aunque! su! chip!disponga!de!16!pines!

GPIO!para! la!entrada/!salida,! físicamente!solo!hay!dos!disponibles.!Además,!para!

su!programación!es!necesario!un!adaptador!a!USB,!conectado!mediante!un!circuito!

sencillo!llamado!FTDI.!Además!no!era!compatible!nativamente!con!Arduino.!

No!obstante,!dado!el!potencial!de!aplicación!de!este!módulo,!se!han!creado!

multitud!de!placas!basadas!en!este!chip,!con!los!pines!de!entrada/salida!accesibles!

y! programador! mediante! puerto! microUSB! incorporado.! Con! ello! se! permite!

facilidad! de! programación! y! versatilidad! en! su! interacción! con! instrumentación!

externa!(botones,!sensores,!relés,!LEDs,!etc).!En!este!proyecto,!se!ha!optado!por!la!

placa! Wemos! D1! mini.! Respecto! a! la! compatibilidad! con! Arduino,! los! propios!

desarrolladores!de!Arduino!han!incluido!esta!placa!como!soportada!en!su!entorno!

de!desarrollo.!Se!puede!acceder!al!código!fuente!en!su!repositorio!de!GitHub.!

!

Figura&6.7&Microcontrolador!Wemos!D1!Mini.!

Fuente![W14].!

6.3&Diseño&

El!caso!práctico!consiste!en!sistema!de!semáforos! inteligente!y!conectado.!

El! semáforo! es! capaz! de! en! función! del! tráfico! de! peatones! y! vehículos! que! lo!

crucen,!notificar!los!valores!obtenidos!a!la!nube,!o!a!un!servidor!dedicado.!Con!los!

datos!registrados!en!la!nube!o!en!el!servidor,!se!elabora!una!respuesta!lógica!dados!

los! datos! actuales! y! su! histórico.! Una! vez! hecho! se! reajustan! los! valores! del!

semáforo!con!el!fin!de!optimizar!el!tráfico!tanto!de!peatones!como!de!vehículos.!

Page 87: ESCUELA UNIVERSITARIA DE INGENIERÍA TÉCNICA DE ...oa.upm.es/49224/1/PFC_AITOR_CANTERO_ROMERO.pdf · Para!concluir,!se!documenta!un!ejemplo!de!un!proyecto ... y!bajo!el!control!de!un!programa!

Aitor&Cantero&Romero&&&&&&&&&&&&&&&&&&&&&&&Programación&concurrente&orientada&a&eventos&en&Arduino&para&el&Internet&de&las&Cosas&&

! 89!

El! semáforo! podrá! ser! constituido! por! un! solo! elemento! de! hardware!

integrado,!o!por!varios.!Por!ejemplo,!el!captador!de!tráfico!peatonal!y!de!vehículos!

puede!estar!en!un!módulo,!y!el!sistema!de!luces!en!otro.!O!bien!el!sistema!de!luces!

puede! estar! repartido! en! dos! módulos! separados.! Cabe! pensar! en! cualquier!

combinación!de!estos!casos.!En!este!ejemplo!se!utilizará!LEDs! individuales!como!

señalizadores!del! semáforo.!El!esquema!de! luces!es!el!habitual! rojoWámbarWverde!

para!vehículos!y!rojo!verde!para!peatones.!El!captador!de!tráfico!tanto!de!peatones!

como!de!vehículos!podría!ser!realizado!mediante!un!sensor!de!ultrasonidos!o!un!

sistema!láser.!Como!no!es!objeto!de!este!proyecto!el!desarrollo!de!dichos!sistemas,!

se!simplifica!la!entrada!de!información!mediante!un!pulsador!para!cada!tráfico.!

!

Figura&6.8&Diagrama!semáforo!IoT.!

El! semáforo! y/o! las! partes! que! lo! integren,! se! comunicarán! utilizando! el!

sistema! IEEE! 802.11!WiWFi.! Uno! de! los! requisitos! del! semáforo! es! funcionar! del!

mismo!modo!tanto!si!el!semáforo!es!completo!como!si!es!distribuido!en!diferentes!

subsistemas.!!Para!ello!la!latencia!y!tiempo!del!respuesta!de!la!comunicación!deben!

Page 88: ESCUELA UNIVERSITARIA DE INGENIERÍA TÉCNICA DE ...oa.upm.es/49224/1/PFC_AITOR_CANTERO_ROMERO.pdf · Para!concluir,!se!documenta!un!ejemplo!de!un!proyecto ... y!bajo!el!control!de!un!programa!

Aitor&Cantero&Romero&&&&&&&&&&&&&&&&&&&&&&&Programación&concurrente&orientada&a&eventos&en&Arduino&para&el&Internet&de&las&Cosas&&

!90!

estar! en! una! tolerancia! del! orden! de! milisegundos.! En! este! sistema,! ni! los!

semáforos,!ni!las!partes!que!los!integren!contendrán!la!lógica!computacional.!Esta!

tarea!será!designada!a!un!(o!varios)!servidor(es),!mediante!un!servicio!en!la!nube.!

En!el!siguiente!apartado!se!profundiza!en!las!particularidades!de!la!comunicación.!

Cada! semáforo! o! parte! que! lo! conforme,! será! gobernado! por! un!

microcontrolador!con!capacidades!de!comunicación!inalámbrica!fabricados!por!la!

empresa!china!Wemos.!En!concreto! la!placa!utilizada!es! la!Wemos!D1!Mini![Wx],!

documentada!en!el!capítulo!6.7.!

La!programación!de! estos!microcontroladores! es! llevada! a! cabo!mediante!

un! ordenador! con! sistema! operativo! indiferente,! macOS,! Windows! o! Linux.! La!

conexión! entre! el! ordenador! y! el!microcontrolador! se! realiza!mediante! un! cable!

estándar!USB!–!microUSB.!El!entorno!de!desarrollo!utilizado!es!Arduino!IDE!en!su!

versión!actual!1.8.3.!Las!bibliotecas!implicadas!en!la!programación!son!las!propias!

de!Automaton!framework,!la!máquina!de!estados!creada!a!medida!(el!semáforo)!y!

la! correspondiente! a! la! comunicación! a! través! de! la! placa! basada! en! el! chip!

ESP8266.!

El! sistema! conecta! con! un! servicio! de! nube! para! Internet! de! las! Cosas,!

donde! deposita! la! información! obtenida.! El! plano! lógico! donde! se! extrae! esta!

información,!se!procesa,!y!se!retornan!los!resultados!se!encuentra!en!un!servidor!

conectado!a!la!nube!también.!

6.4&Protocolo&de&comunicaciones&de&red.&REST&

En!un! sistema!de! Internet! de! las! Cosas,! la! heterogeneidad! intrínseca! a! su!

concepto,! es! necesaria! limitarla! en! términos! de! comunicación,! o! por! lo! menos,!

lograr! la! interacción!de! las!diferentes!partes!del! sistema!de!manera! cooperativa,!

con!independencia!de!los!que!haya!por!debajo.!

En! este! caso,! a! nivel! de! interfaz! de! red! entre! los! objetos! IoT! se! utiliza! la!

norma! IEEE! 802.11! hasta! el! punto! de! acceso! que! haga! de! puerta! de! enlace! con!

Internet.!A!partir!del!punto!de!acceso,!lo!habitual!es!emplear!la!norma!IEEE!802.3!

Ethernet!ya!sea!a! través!de!cobre!o! fibra!del!proveedor!de!servicio.!No!obstante,!

esta!conexión!podría!ser!realizada!mediante!una!red!celular!GSM!o!cualquier!otro!

método.!Lo!realmente!interesante,!es!que!se!transporte!a!la!nube!llegue!en!tiempo!

y!forma,!de!tal!manera!que!pueda!haber!entendimiento!entre!las!dos!partes.!Para!

Page 89: ESCUELA UNIVERSITARIA DE INGENIERÍA TÉCNICA DE ...oa.upm.es/49224/1/PFC_AITOR_CANTERO_ROMERO.pdf · Para!concluir,!se!documenta!un!ejemplo!de!un!proyecto ... y!bajo!el!control!de!un!programa!

Aitor&Cantero&Romero&&&&&&&&&&&&&&&&&&&&&&&Programación&concurrente&orientada&a&eventos&en&Arduino&para&el&Internet&de&las&Cosas&&

! 91!

ello,!es!deseable!emplear!un!método!simple,!ligero!y!robusto.!El!método!elegido!es!

la!arquitectura!REST.!

REST! es! una! arquitectura! que! utiliza! sencillos! métodos! encapsulados! en!

mensajes!HTTP!para!interactuar!con!un!recurso!web!desarrollada!por!Roy!Fielding!

en! el! año! 2000.! En! estos! mensajes! HTTP! se! pueden! publicar! datos! (crear! y/o!

actualizar),!leerlos!(por!ejemplo,!realizar!consultas)!y!eliminar!datos.!Por!lo!tanto,!

REST! utiliza! HTTP! para! las! cuatro! operaciones! CRUD! (Create, /, Read, /,Update, /,

Delete)!propias!de!las!bases!de!datos.!

A!pesar!de!ser!simple,!REST!es!ampliamente!utilizado!en!la!actualidad!como!

alternativa!a!protocolos!formales!de!servicios!web!como!SOAP.!La!ventaja!de!REST!

es!la!interoperabilidad!con!cualquier!dispositivo!al!funcionar!sobre!HTTP.!Además!

es! sencillo! de! operar! y! flexible,! en! detrimento! de! SOAP.! Los! principios! de! esta!

arquitectura!son:!

• Todo!lo!que!se!mueve!a!través!de!las!comunicaciones!web!es!un!recurso.!

• Los!recursos!web!pueden!ser!clasificados!por!su!tipo:!video,! imagen,!docx,!

etc.!

• Los!recursos!de!la!web!deben!tener!un!identificador!único,!el!cual!va!a!estar!

dado!por!su!URL,!y!estos!deben!estar!accesibles!e!identificables.!

• El!método!REST!se!apoya!en!las!8!acciones!principales!definidas!en!HTTP:!

GET,!POST,!PUT,!DELETE,!HEAD,!OPTIONS,!TRACE!y!CONNECT.!

• Cada! recurso! puede! tener!múltiples! representaciones,! con! independencia!

de!su!almacenamiento.!Por!ejemplo,!podría!tenerse!un!recurso!en!formato!

XML!y!poder!solicitarlo!en!formato!JSON.!

• La! comunicación! entre! cliente! y! servidor,! no! contempla! estado! alguno!

(aunque!se!puede!cachear).!Por! tanto,! cada!petición!al! servidor!es! tratada!

de!manera!totalmente!independiente.!

!

REST!no!es!un!protocolo,!ni!un!estándar,!es!un!concepto!de!arquitectura!que!

sigue!los!criterios!anteriormente!mencionados!y!que!se!sirven!de!buenas!practicas!

en! su! implementación! para! lograr! esa! interoperabilidad.! Por! ello,! es! habitual!

encontrar! discrepancias! entre! los! métodos! de! obtención! y! modificación! de!

recursos,!como!en!el!caso!de!este!proyecto.!

Page 90: ESCUELA UNIVERSITARIA DE INGENIERÍA TÉCNICA DE ...oa.upm.es/49224/1/PFC_AITOR_CANTERO_ROMERO.pdf · Para!concluir,!se!documenta!un!ejemplo!de!un!proyecto ... y!bajo!el!control!de!un!programa!

Aitor&Cantero&Romero&&&&&&&&&&&&&&&&&&&&&&&Programación&concurrente&orientada&a&eventos&en&Arduino&para&el&Internet&de&las&Cosas&&

!92!

Por!último,! cabe!mencionar!que!RESTful! son! los! servicios!web! que! siguen!

los!principios!REST.!

A! nivel! de! red,! se! va! a! utilizar! la! pila! de! protocolos! TCP/IPv4,! dada! la!

compatibilidad! del! hardware! actual,! y! poder! prescindir! de! puertas! de! enlace! de!

doble!pila!(IPv4!e!IPv6).!Gracias!a!la!estratificación!de!la!red!en!niveles,!bien!podría!

ser!utilizado!IPv6!sin!apenas!modificaciones.!

6.5&Implementación&

Dados! los! requisitos! previos! de! la! aplicación! a! diseñar,! y! sus!métodos! de!

implementación,!entorno!de!desarrollo,! lenguaje!de!programación!y!hardware,!se!

estudia!una!estrategia!para!el!desarrollo!de!la!misma.!

Para! ello,! lo! ideal! es! crear! una! máquina! de! estados! en! el! framework!

Automaton,! donde! se! resuelva! el! sistema! de! iluminación! gobernado! por!

temporizadores! variables.! A! su! vez,! esta! programación! debe! tanto! manejar! la!

entrada!de!valores!de!tráfico!de!personas!y!peatones.!Por!último,!se!necesita!una!

capa!de!conectividad!para!publicar!esos!valores!obtenidos!y!recibir!la!información!

tras!su!proceso!para!modificar!los!valores!de!temporización.!

En!primer!lugar,!se!define!un!diagrama!de!estados!para!este!componente.!

!

Figura&6.9&Diagrama!de!estados!semáforo.!

!

Que!trasladado!a!una!tabla!de!transición!de!la!máquina!de!estado!finito,!se!

tiene:!

Page 91: ESCUELA UNIVERSITARIA DE INGENIERÍA TÉCNICA DE ...oa.upm.es/49224/1/PFC_AITOR_CANTERO_ROMERO.pdf · Para!concluir,!se!documenta!un!ejemplo!de!un!proyecto ... y!bajo!el!control!de!un!programa!

Aitor&Cantero&Romero&&&&&&&&&&&&&&&&&&&&&&&Programación&concurrente&orientada&a&eventos&en&Arduino&para&el&Internet&de&las&Cosas&&

! 93!

! verde! ámbar! rojo!

WW>!VERDE! ÁMBAR! ! !

ÁMBAR! ! ROJO! !

*ROJO! ! ! VERDE!

Figura&6.10&Tabla!de!transiciones!semáforo.!

!

En!la!Figura!6.10,!se!puede!advertir!la!similitud!de!esta!tabla!de!transición!

con!la!tabla!vista!en!el!apartado!dedicado!al!framework!Automaton,!concretamente!

en! la! Figura! 6.2.! La! diferencia! radica! en! que! las! máquinas! de! estados! de!

Automaton,! incorporan! “subeventos”! de! entrada,! salida! y! permanencia! por!

defecto;!correspondiendo!respectivamente!a!ON_ENTER,!ON_EXIT!y!ON_LOOP.!

En! estos! diagramas! solo! se! tiene! en! cuenta! el! estado! del! semáforo! para!

vehículos.!No!obstante,!los!estados!para!peatones!están!directamente!relacionados!

con!ellos.!Un!representación!de!ello!se!puede!observar!en!la!Figura!6.11.!

!

!

Figura&6.11&Diagrama!de!estados!semáforo!completo.!

!

Con! este! diseño! ya! se! puede! desarrollar! la!máquina! de! estado.! El! código!

fuente!de!la!máquina!de!estado!se!encuentra!en!los!Códigos!6.11!y!6.12.!

!

Page 92: ESCUELA UNIVERSITARIA DE INGENIERÍA TÉCNICA DE ...oa.upm.es/49224/1/PFC_AITOR_CANTERO_ROMERO.pdf · Para!concluir,!se!documenta!un!ejemplo!de!un!proyecto ... y!bajo!el!control!de!un!programa!

Aitor&Cantero&Romero&&&&&&&&&&&&&&&&&&&&&&&Programación&concurrente&orientada&a&eventos&en&Arduino&para&el&Internet&de&las&Cosas&&

!94!

#pragma once #include <Automaton.h> class Atm_smarttrafficlight: public Machine { public: enum { GREEN, YELLOW, RED }; // STATES enum { EVT_TIMER_G, EVT_TIMER_Y, EVT_TIMER_R, EVT_NEXT, EVT_GREEN, EVT_YELLOW, EVT_RED, ELSE }; // EVENTS Atm_smarttrafficlight( void ) : Machine() {}; Atm_smarttrafficlight& begin( void ); Atm_smarttrafficlight& trace( Stream & stream ); Atm_smarttrafficlight& trigger( int event ); int state( void ); Atm_smarttrafficlight& onStart( Machine& machine, int event = 0 ); Atm_smarttrafficlight& onStart( atm_cb_push_t callback, int idx = 0 ); Atm_smarttrafficlight& onChange( Machine& machine, int event = 0 ); Atm_smarttrafficlight& onChange( atm_cb_push_t callback, int idx = 0 ); Atm_smarttrafficlight& next( void ); Atm_smarttrafficlight& green( void ); Atm_smarttrafficlight& yellow( void ); Atm_smarttrafficlight& red( void ); Atm_smarttrafficlight& begin( int pin_g, int pin_y, int pin_r, int pin_gp, int ping_rp); Atm_smarttrafficlight& setTimers( int g, int y, int r ); Atm_smarttrafficlight& setTimers( int g, int r ); private: enum { ENT_GREEN, EXT_GREEN, ENT_YELLOW, EXT_YELLOW, ENT_RED, EXT_RED }; // ACTIONS enum { ON_START, ON_CHANGE, CONN_MAX }; // CONNECTORS atm_connector connectors[CONN_MAX]; int pin_g, pin_y, pin_r, pin_gp, pin_rp; int countp, countc; atm_timer_millis timer_g, timer_y, timer_r; int event( int id ); void action( int id ); };

Código&6.11&Cabecera!de!la!máquina!de!estados!smarttrafficlight.hpp.!

!!

En!el!código!de!cabecera!se!comienza!heredando!de!la!clase!madre!Machine,!

utilizada! de! base! para! la! modelación! del! nuevo! componente.! Se! declaran! los!

estados!y!eventos!mediante!una!enumeración!estática!y!se!incluyen!los!prototipos!

de!los!métodos.!Todo!ello!corresponde!al!ámbito!público!de!la!clase.!Para!el!ámbito!

privado,! se! declaran! las! acciones! y! conectores! push,! así! como! las! variables!

necesarias! para! la! lógica! de! la! máquina! de! estados.! En! el! código! fuente!

smarttrafficlight.cpp,! se! resuelve! el! contenido! de! los! métodos! y! el! enlace! de!

estados,!eventos,!acciones!y!conectores.!Se!puede!observar!en!el!Código!6.12.!

!!

!

Page 93: ESCUELA UNIVERSITARIA DE INGENIERÍA TÉCNICA DE ...oa.upm.es/49224/1/PFC_AITOR_CANTERO_ROMERO.pdf · Para!concluir,!se!documenta!un!ejemplo!de!un!proyecto ... y!bajo!el!control!de!un!programa!

Aitor&Cantero&Romero&&&&&&&&&&&&&&&&&&&&&&&Programación&concurrente&orientada&a&eventos&en&Arduino&para&el&Internet&de&las&Cosas&&

! 95!

#include "Atm_smarttrafficlight.h" /* Add optional parameters for the state machine to begin() * Add extra initialization code */ Atm_smarttrafficlight& Atm_smarttrafficlight::begin( int pin_g, int pin_y, int pin_r, int pin_gp, int pin_rp) { // clang-format off const static state_t state_table[] PROGMEM = { /* ON_ENTER ON_LOOP ON_EXIT EVT_TIMER_G EVT_TIMER_Y EVT_TIMER_R EVT_NEXT EVT_GREEN EVT_YELLOW EVT_RED ELSE */ /* GREEN */ ENT_GREEN, -1, EXT_GREEN, YELLOW, -1, -1, YELLOW, -1, YELLOW, RED, -1, /* YELLOW */ ENT_YELLOW, -1, EXT_YELLOW, -1, RED, -1, RED, GREEN, -1, RED, -1, /* RED */ ENT_RED, -1, EXT_RED, -1, -1, GREEN, GREEN, GREEN, YELLOW, -1, -1, }; // clang-format on Machine::begin( state_table, ELSE ); this->pin_g = pin_g; // Save the pins this->pin_y = pin_y; this->pin_r = pin_r; this->pin_gp = pin_gp; this->pin_rp = pin_rp; pinMode( pin_g, OUTPUT ); // Set the pin modes pinMode( pin_y, OUTPUT ); pinMode( pin_r, OUTPUT ); pinMode( pin_gp, OUTPUT ); pinMode( pin_rp, OUTPUT ); timer_g.set( -1 ); // Initialize the timers timer_y.set( -1 ); timer_r.set( -1 ); countc=0; countp=0; return *this; } /* Add C++ code for each internally handled event (input) * The code must return 1 to trigger the event */ int Atm_smarttrafficlight::event( int id ) { switch ( id ) { case EVT_TIMER_G: return timer_g.expired( this ); case EVT_TIMER_Y: return timer_y.expired( this ); case EVT_TIMER_R: return timer_r.expired( this ); } return 0; } /* Add C++ code for each action * This generates the 'output' for the state machine * * Available connectors: * push( connectors, ON_CHANGE, 0, <v>, <up> ); */ void Atm_smarttrafficlight::action( int id ) { switch ( id ) { case ENT_GREEN: digitalWrite( pin_g, HIGH );

Page 94: ESCUELA UNIVERSITARIA DE INGENIERÍA TÉCNICA DE ...oa.upm.es/49224/1/PFC_AITOR_CANTERO_ROMERO.pdf · Para!concluir,!se!documenta!un!ejemplo!de!un!proyecto ... y!bajo!el!control!de!un!programa!

Aitor&Cantero&Romero&&&&&&&&&&&&&&&&&&&&&&&Programación&concurrente&orientada&a&eventos&en&Arduino&para&el&Internet&de&las&Cosas&&

!96!

digitalWrite( pin_rp, HIGH ); push( connectors, ON_START, 0, 0, 0); push( connectors, ON_CHANGE, 0, 0, 0 ); return; case EXT_GREEN: digitalWrite( pin_g, LOW ); return; case ENT_YELLOW: digitalWrite( pin_y, HIGH ); digitalWrite( pin_rp, HIGH ); push( connectors, ON_CHANGE, 0, 1, 0 ); return; case EXT_YELLOW: digitalWrite( pin_y, LOW ); digitalWrite( pin_rp, LOW); return; case ENT_RED: digitalWrite( pin_r, HIGH ); digitalWrite( pin_gp, HIGH ); push( connectors, ON_CHANGE, 0, 2, 0 ); return; case EXT_RED: digitalWrite( pin_r, LOW ); digitalWrite( pin_gp, LOW ); return; } } Atm_smarttrafficlight& Atm_smarttrafficlight::setTimers( int g, int r ) { timer_g.set( g ); timer_r.set( r ); return *this; } Atm_smarttrafficlight& Atm_smarttrafficlight::setTimers( int g, int y, int r ) { timer_g.set( g ); timer_y.set( y ); timer_r.set( r ); return *this; } /* Optionally override the default trigger() method * Control how your machine processes triggers */ Atm_smarttrafficlight& Atm_smarttrafficlight::trigger( int event ) { Machine::trigger( event ); return *this; } /* Optionally override the default state() method * Control what the machine returns when another process requests its state */ int Atm_smarttrafficlight::state( void ) { return Machine::state(); } /* Public event methods * */ Atm_smarttrafficlight& Atm_smarttrafficlight::next() { trigger( EVT_NEXT ); return *this; }

Page 95: ESCUELA UNIVERSITARIA DE INGENIERÍA TÉCNICA DE ...oa.upm.es/49224/1/PFC_AITOR_CANTERO_ROMERO.pdf · Para!concluir,!se!documenta!un!ejemplo!de!un!proyecto ... y!bajo!el!control!de!un!programa!

Aitor&Cantero&Romero&&&&&&&&&&&&&&&&&&&&&&&Programación&concurrente&orientada&a&eventos&en&Arduino&para&el&Internet&de&las&Cosas&&

! 97!

Atm_smarttrafficlight& Atm_smarttrafficlight::green() { trigger( EVT_GREEN ); return *this; } Atm_smarttrafficlight& Atm_smarttrafficlight::yellow() { trigger( EVT_YELLOW ); return *this; } Atm_smarttrafficlight& Atm_smarttrafficlight::red() { trigger( EVT_RED ); return *this; } /* onStart() push connector variants ( slots 1, autostore 0, broadcast 0 ) * * Usage in action() handler: push( connectors, ON_SATART, 0, v, up) */ Atm_smarttrafficlight& Atm_smarttrafficlight::onStart( Machine& machine, int event ) { onPush( connectors, ON_START, 0, 1, 1, machine, event ); return *this; } Atm_smarttrafficlight& Atm_smarttrafficlight::onStart( atm_cb_push_t callback, int idx ) { onPush( connectors, ON_START, 0, 1, 1, callback, idx ); return *this; } /* * onChange() push connector variants ( slots 1, autostore 0, broadcast 0 ) */ Atm_smarttrafficlight& Atm_smarttrafficlight::onChange( Machine& machine, int event ) { onPush( connectors, ON_CHANGE, 0, 1, 1, machine, event ); return *this; } Atm_smarttrafficlight& Atm_smarttrafficlight::onChange( atm_cb_push_t callback, int idx ) { onPush( connectors, ON_CHANGE, 0, 1, 1, callback, idx ); return *this; } /* State trace method * Sets the symbol table and the default logging method for serial monitoring */ Atm_smarttrafficlight& Atm_smarttrafficlight::trace( Stream & stream ) { Machine::setTrace( &stream, atm_serial_debug::trace, "TRAFFICLIGHT\0EVT_TIMER_G\0EVT_TIMER_Y\0EVT_TIMER_R\0EVT_NEXT\0EVT_GREEN\0EVT_YELLOW\0EVT_RED\0ELSE\0GREEN\0YELLOW\0RED" ); return *this; }

Código&6.12&Código!fuente!de!la!máquina!de!estados!smarttrafficlight.cpp.!

!

Page 96: ESCUELA UNIVERSITARIA DE INGENIERÍA TÉCNICA DE ...oa.upm.es/49224/1/PFC_AITOR_CANTERO_ROMERO.pdf · Para!concluir,!se!documenta!un!ejemplo!de!un!proyecto ... y!bajo!el!control!de!un!programa!

Aitor&Cantero&Romero&&&&&&&&&&&&&&&&&&&&&&&Programación&concurrente&orientada&a&eventos&en&Arduino&para&el&Internet&de&las&Cosas&&

!98!

En!este!código!se!detalla!el!funcionamiento!de!la!máquina!de!estado.!Como!

particularidad!se!puede!observar!que!se!ha!escrito!una!función!para!modificar!los!

intervalos! de! tiempo! entre! cambio! de! luz! del! semáforos.! Se! realiza!mediante! la!

función!setTimers()!y!puede!ser! llamada!con!valores!para!vede,!rojo!y!ámbar,!o!

bien!con!solo!verde!y!rojo,!manteniendo!el!valor!de!ámbar!por!defecto.!

Han! sido! generados! eventos! para! cambiar! el! estado! del! componente! de!

manera! abrupta.! Esto! permite! inicializar! la! secuencia! de! luces! una! vez! han! sido!

configurados! los! temporizadores,! o! bien,! para! darle! sincronismo! con! otros!

semáforos.! Por! ejemplo,! sincronizar! toda! una! calle,! indicando! a! la! vez! que! se!

pongan! en! verde.! Corresponde! con! los!métodos! green(),! yellow()! y! red();! los!

eventos!EVT_GREEN,!EVT_YELLOW!y!EVT_RED.

Es! importante! advertir! que! a! diferencia! del! ejemplo! del! apartado! de!

generación!de!máquinas!de!estado!aquí!si!ocurren!eventos!internos!en!la!máquina.!

Estos! corresponden! con! la! finalización! de! los! temporizadores! para! cada! luz! del!

semáforo.!Para!ello!la!máquina!de!estados,!hace!uso!de!componentes!atm_timer!a!

los!que!les!asigna!los!valores!de!temporizador,!y!a!los!que!se!encarga!de!consultar!

su!finalización!en!el!método!event().!

La! comunicación! de! este! componente! para! su! posterior! utilización! es!

similar!a!la!vista!en!el!ejemplo!del!apartado!donde!se!creaba!un!nuevo!componente!

en! este! proyecto! (Sección! 6.1.3! Creación! de! componentes! propios).! Consiste! en!

publicar! cada! cambio! de! estado! mediante! el! conector! onChange(),! y! además,!

publicando!un!nuevo!ciclo!usando!el!conector!onStart().!!

Todas! estas! particularidades! son! empleadas! por! la! lógica! del! programa!

principal!para!detectar!el!estado!en!curso!de!la!máquina!de!estados!y!modificar!su!

comportamiento.!Como!se!puede!demostrar!en!este!comportamiento,!se!hace!uso!

de! programación! dirigida! por! eventos! (externos! e! internos! de! la! máquina! de!

estados)! y! programación! concurrente! cooperativa! entre! diferentes! componentes!

del!sistema.!El!programa!principal!queda!reflejado!en!el!Código!6.13!que!sigue.!

! !

Page 97: ESCUELA UNIVERSITARIA DE INGENIERÍA TÉCNICA DE ...oa.upm.es/49224/1/PFC_AITOR_CANTERO_ROMERO.pdf · Para!concluir,!se!documenta!un!ejemplo!de!un!proyecto ... y!bajo!el!control!de!un!programa!

Aitor&Cantero&Romero&&&&&&&&&&&&&&&&&&&&&&&Programación&concurrente&orientada&a&eventos&en&Arduino&para&el&Internet&de&las&Cosas&&

! 99!

#include <Automaton.h> #include <Atm_esp8266.h> #include "Atm_smarttrafficlight.h" #include <ESP8266WiFi.h> Atm_smarttrafficlight smarttrafficlight; Atm_esp8266_httpd_simple server( 80 ); Atm_esp8266_httpc_simple client; Atm_button button, bPeople, bCars; String mac; String request; char brain_host[] = "52.1.229.129"; int countP=2; int countC=4; String key = "0YNJMN1QZTXR8IPJ"; String url = ""; String preurl = ""; void setup() { Serial.begin( 9600 ); Serial.println( "Connecting to WIFI" ); // The traffic light to be controlled on pins D5, D6 & D7 smarttrafficlight.begin( D5, D6, D7, D1, D2 ) .setTimers(5000,2000,4000) //valores por defecto de tiempo de verde, amarillo y rojo .onStart([] ( int idx, int v, int up ) { url = ""; url += "api_key="; url += key; url += "&field1="; url += countP; url += "&field2="; url += countC; Serial.println(url); client.setCounters(countP,countC); client.start(); countP=0; countC=0; }); /*DEBUG cambios * .onChange([] ( int idx, int v, int up ) { switch (v){ case 0: Serial.println("Verde"); break; case 1: Serial.println("Ambar"); break; case 2: Serial.println("Rojo"); break; } });*/ button.begin(D8) .onPress(smarttrafficlight, smarttrafficlight.EVT_NEXT ); bPeople.begin(D3) .onPress([] ( int idx, int v, int up ) { Serial.println("+ persona"); countP ++; }); bCars.begin(D4)

Page 98: ESCUELA UNIVERSITARIA DE INGENIERÍA TÉCNICA DE ...oa.upm.es/49224/1/PFC_AITOR_CANTERO_ROMERO.pdf · Para!concluir,!se!documenta!un!ejemplo!de!un!proyecto ... y!bajo!el!control!de!un!programa!

Aitor&Cantero&Romero&&&&&&&&&&&&&&&&&&&&&&&Programación&concurrente&orientada&a&eventos&en&Arduino&para&el&Internet&de&las&Cosas&&

!100!

.onPress([] ( int idx, int v, int up ) { Serial.println("+ coche"); countC ++; }); // The Wifi machine manages the wifi connection /* Static IP Config IPAddress ip(172,20,10,10); IPAddress gw(172,20,10,1); IPAddress mask (255,255,255,240); IPAddress dns1 (8,8,8,8); IPAddress dns2 (8,8,4,4); WiFi.config(ip,gw,mask,dns1,dns2); */ wifi.begin( "iPhone", "probando" ) .onChange( true, [] ( int idx, int v, int up ) { Serial.print( "Connected to Wifi, browse to http://" ); Serial.println( wifi.ip() ); Serial.println(WiFi.macAddress()); mac = WiFi.macAddress(); for(int i=2;i<=10;i+=2) mac.remove(i,1); Serial.println(mac); server.start(); }) .start(); //The Http client machine handles de outgoing posts client.begin(brain_host) .get("/update","api_key=0YNJMN1QZTXR8IPJ"); // The Http server machine handles incoming requests server.begin() .onRequest( "/red", smarttrafficlight, smarttrafficlight.EVT_RED ) .onRequest( "/yellow", smarttrafficlight, smarttrafficlight.EVT_YELLOW ) .onRequest( "/green", smarttrafficlight, smarttrafficlight.EVT_GREEN ) .onRequest( "/next", smarttrafficlight, smarttrafficlight.EVT_NEXT ) .onRequest( [] ( int idx, int v, int up) { Serial.print( "Request: " ); Serial.println( server.uri() ); request = server.uri(); Serial.println( request.length()); Serial.print(mac.c_str()); if (request.startsWith("/bbb")){ Serial.println("La peticion empieza por bbb"); Serial.println( server.arg( "green" ) ); int green=server.arg("green").toInt(); Serial.println( server.arg( "red" ) ); int red=server.arg("red").toInt(); if (red>=1000 && red<=600000 && green>=1000 && green<=600000){ //si el valor asignado a rojo y verde es entre un seg y 10 min Serial.println( "Valores en rango"); smarttrafficlight.setTimers(green,red); smarttrafficlight.red(); }else{ Serial.println( "Valores no validos"); } } }); }

Page 99: ESCUELA UNIVERSITARIA DE INGENIERÍA TÉCNICA DE ...oa.upm.es/49224/1/PFC_AITOR_CANTERO_ROMERO.pdf · Para!concluir,!se!documenta!un!ejemplo!de!un!proyecto ... y!bajo!el!control!de!un!programa!

Aitor&Cantero&Romero&&&&&&&&&&&&&&&&&&&&&&&Programación&concurrente&orientada&a&eventos&en&Arduino&para&el&Internet&de&las&Cosas&&

! 101!

Código&6.13&Código!fuente!Arduino!de!la!aplicación!principal!semáforo.ino.!

El!diagrama!de!bloques!que!sigue!en!la!Figura!6.12!representa!la!interacción!

entre! máquina! de! estado! del! sistema! y! la! gestión! que! hace! de! ellas! la! clase!

Automaton.!

!

Figura&6.12&Diagrama!de!uso!de!máquinas!de!estado.!

!

En!el!código!anterior!se!ve!que!el!sistema!tras!iniciar!una!conexión!de!red!

inalámbrica,! se! conecta! mediante! un! cliente! http! a! un! servidor.! Este! servidor!

proporciona!un!servicio!en!nube!para!Internet!de!las!Cosas.!La!comunicación!con!

este!servicio!es!RESTful!y!la!plataforma!es!ThingSpeak![W15].!

!