• No se han encontrado resultados

Programación concurrente orientada a eventos en Arduino para el Internet de las Cosas

N/A
N/A
Protected

Academic year: 2020

Share "Programación concurrente orientada a eventos en Arduino para el Internet de las Cosas"

Copied!
99
0
0

Texto completo

(1)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!.

(2)

(3)  . 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.    .  .  .

(4)  . 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.  .  .  .

(5) Aitor&Cantero&Romero&&&&&&&&&&&&&&&&&&&&&&&Programación&concurrente&orientada&a&eventos&en& Arduino&para&el&Internet&de&las&Cosas&&. Í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! !. 7!.

(6) Aitor&Cantero&Romero&&&&&&&&&&&&&&&&&&&&&&&Programación&concurrente&orientada&a&eventos&en& Arduino&para&el&Internet&de&las&Cosas&&. 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! ! !. !. !8!.

(7) Aitor&Cantero&Romero&&&&&&&&&&&&&&&&&&&&&&&Programación&concurrente&orientada&a&eventos&en& Arduino&para&el&Internet&de&las&Cosas&&. 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.! !. ! !. 9!.

(8) Aitor&Cantero&Romero&&&&&&&&&&&&&&&&&&&&&&&Programación&concurrente&orientada&a&eventos&en& Arduino&para&el&Internet&de&las&Cosas&&. 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.! !. &. !10!.

(9) Aitor&Cantero&Romero&&&&&&&&&&&&&&&&&&&&&&&Programación&concurrente&orientada&a&eventos&en& Arduino&para&el&Internet&de&las&Cosas&&. 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.!. !. 11!.

(10) Aitor&Cantero&Romero&&&&&&&&&&&&&&&&&&&&&&&Programación&concurrente&orientada&a&eventos&en& Arduino&para&el&Internet&de&las&Cosas&&. 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! !12!.

(11) Aitor&Cantero&Romero&&&&&&&&&&&&&&&&&&&&&&&Programación&concurrente&orientada&a&eventos&en& Arduino&para&el&Internet&de&las&Cosas&&. 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;. a)!lenguaje!C!. !. _asm { MOV MOV ADD MOV };. ! AX, a BX, b AX, BX c, AX. b)!ensamblador!. 0: 6: d: 10:. 66 66 66 66. !. a1 8b 01 a3. 00 00 00 00 1d 00 00 00 00 d8 00 00 00 00. 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.!. !. 13!.

(12) Aitor&Cantero&Romero&&&&&&&&&&&&&&&&&&&&&&&Programación&concurrente&orientada&a&eventos&en& Arduino&para&el&Internet&de&las&Cosas&&. 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,! !14!.

(13) Aitor&Cantero&Romero&&&&&&&&&&&&&&&&&&&&&&&Programación&concurrente&orientada&a&eventos&en& Arduino&para&el&Internet&de&las&Cosas&&. 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.!. !. 15!.

(14) Aitor&Cantero&Romero&&&&&&&&&&&&&&&&&&&&&&&Programación&concurrente&orientada&a&eventos&en& Arduino&para&el&Internet&de&las&Cosas&&. 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! !16!.

(15) Aitor&Cantero&Romero&&&&&&&&&&&&&&&&&&&&&&&Programación&concurrente&orientada&a&eventos&en& Arduino&para&el&Internet&de&las&Cosas&&. 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.! !. 17!.

(16) Aitor&Cantero&Romero&&&&&&&&&&&&&&&&&&&&&&&Programación&concurrente&orientada&a&eventos&en& Arduino&para&el&Internet&de&las&Cosas&&. 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! !18!.

(17) Aitor&Cantero&Romero&&&&&&&&&&&&&&&&&&&&&&&Programación&concurrente&orientada&a&eventos&en& Arduino&para&el&Internet&de&las&Cosas&&. 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.!. ! !. 19!.

(18) Aitor&Cantero&Romero&&&&&&&&&&&&&&&&&&&&&&&Programación&concurrente&orientada&a&eventos&en& Arduino&para&el&Internet&de&las&Cosas&&. ! 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! !20!.

(19) Aitor&Cantero&Romero&&&&&&&&&&&&&&&&&&&&&&&Programación&concurrente&orientada&a&eventos&en& Arduino&para&el&Internet&de&las&Cosas&&. 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.! ! !. 21!.

(20) Aitor&Cantero&Romero&&&&&&&&&&&&&&&&&&&&&&&Programación&concurrente&orientada&a&eventos&en& Arduino&para&el&Internet&de&las&Cosas&&. ! 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.!. !22!.

(21) Aitor&Cantero&Romero&&&&&&&&&&&&&&&&&&&&&&&Programación&concurrente&orientada&a&eventos&en& Arduino&para&el&Internet&de&las&Cosas&&. 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! !. 23!.

(22) Aitor&Cantero&Romero&&&&&&&&&&&&&&&&&&&&&&&Programación&concurrente&orientada&a&eventos&en& Arduino&para&el&Internet&de&las&Cosas&&. 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); delay (1000); digitalWrite (13, LOW); delay (1000); }. // // // //. encender el LED esperar 1 segundo apagar el LED 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! !24!.

(23) Aitor&Cantero&Romero&&&&&&&&&&&&&&&&&&&&&&&Programación&concurrente&orientada&a&eventos&en& Arduino&para&el&Internet&de&las&Cosas&&. 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.! !. 25!.

(24) Aitor&Cantero&Romero&&&&&&&&&&&&&&&&&&&&&&&Programación&concurrente&orientada&a&eventos&en& Arduino&para&el&Internet&de&las&Cosas&&. 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! !26!.

(25) Aitor&Cantero&Romero&&&&&&&&&&&&&&&&&&&&&&&Programación&concurrente&orientada&a&eventos&en& Arduino&para&el&Internet&de&las&Cosas&&. 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.! !. ! 27!.

(26) Aitor&Cantero&Romero&&&&&&&&&&&&&&&&&&&&&&&Programación&concurrente&orientada&a&eventos&en& Arduino&para&el&Internet&de&las&Cosas&&. !. &. !28!.

(27) Aitor&Cantero&Romero&&&&&&&&&&&&&&&&&&&&&&&Programación&concurrente&orientada&a&eventos&en& Arduino&para&el&Internet&de&las&Cosas&&. 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! ! !. 29!.

(28) Aitor&Cantero&Romero&&&&&&&&&&&&&&&&&&&&&&&Programación&concurrente&orientada&a&eventos&en& Arduino&para&el&Internet&de&las&Cosas&&. 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)!! Voltaje!de!entrada!(Límite)!!. 7!–!12V!! 6!–!20V!!. Pines! para! entradaW! salida! 14! (6! pueden! usarse! como! digital.!!. salida!de!PWM)!!. Pines!de!entrada!analógica.!!. 6!!. Corriente!continua!por!pin!IO!! 40!mA!! Corriente! continua! en! el! pin! 3.3V!! Memoria!Flash!!. 50!mA!! 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!. !30!.

(29) Aitor&Cantero&Romero&&&&&&&&&&&&&&&&&&&&&&&Programación&concurrente&orientada&a&eventos&en& Arduino&para&el&Internet&de&las&Cosas&&. 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! !. 31!.

(30) Aitor&Cantero&Romero&&&&&&&&&&&&&&&&&&&&&&&Programación&concurrente&orientada&a&eventos&en& Arduino&para&el&Internet&de&las&Cosas&&. 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]!. !. !. !32!.

(31) Aitor&Cantero&Romero&&&&&&&&&&&&&&&&&&&&&&&Programación&concurrente&orientada&a&eventos&en& Arduino&para&el&Internet&de&las&Cosas&&. 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.! !. !. 33!.

(32) Aitor&Cantero&Romero&&&&&&&&&&&&&&&&&&&&&&&Programación&concurrente&orientada&a&eventos&en& Arduino&para&el&Internet&de&las&Cosas&&. ! 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().!. !34!.

(33) Aitor&Cantero&Romero&&&&&&&&&&&&&&&&&&&&&&&Programación&concurrente&orientada&a&eventos&en& Arduino&para&el&Internet&de&las&Cosas&&. 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.! ! &. !. 35!.

(34) Aitor&Cantero&Romero&&&&&&&&&&&&&&&&&&&&&&&Programación&concurrente&orientada&a&eventos&en& Arduino&para&el&Internet&de&las&Cosas&&. & & 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!. !36!.

(35) Aitor&Cantero&Romero&&&&&&&&&&&&&&&&&&&&&&&Programación&concurrente&orientada&a&eventos&en& Arduino&para&el&Internet&de&las&Cosas&&. 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.! !. !. 37!.

(36) Aitor&Cantero&Romero&&&&&&&&&&&&&&&&&&&&&&&Programación&concurrente&orientada&a&eventos&en& Arduino&para&el&Internet&de&las&Cosas&&. 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!. !38!.

Referencias

Documento similar