UNIVERSIDAD NACIONAL DE EDUCACIÓN A DISTANCIA ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA INFORMÁTICA Proyecto de Fin de Carrera de Ingeniero Informático REDES MALLADAS CON ARDUINO PARA EL INTERNET DE LAS COSAS FRANCISCO JAVIER GONZÁLEZ SÁIZ Dirigido por: ANTONIO SOLANO TARROC Supervisado por: RAQUEL DORMIDO CANTO y NATIVIDAD DURO CARRALERO Curso: CURSO 2014-15 REDES MALLADAS CON ARDUINO PARA EL INTERNET DE LAS COSAS Proyecto de Fin de Carrera de modalidad oferta específica Realizado por: FRANCISCO JAVIER GONZÁLEZ SÁIZ Dirigido por: ANTONIO SOLANO TARROC Supervisado por: RAQUEL DORMIDO CANTO y NATIVIDAD DURO CARRALERO Tribunal calificador: Presidente: D./Da. ................................................................................................................................... (firma) Secretario: D./Da. ................................................................................................................................... (firma) Vocal: D./Da. ........................................................................................................................................... (firma) Fecha de lectura y defensa: .................................................................................................................. Calificación: ............................................................................................................................................ RESUMEN El proyecto forma parte un proyecto de tesis cuyo objetivo es aplicar las ideas del Internet de las Cosas al mundo de las máquinas de vending, dotándolas de conectividad y explorando todas las posibilidades que ofrece de interacción con el usuario; utilizando para ello tecnologías de bajo coste Open Source y Open Hardware. El primer objetivo de este proyecto es el análisis de las diferentes alternativas que nos ofrece el mercado para la intercomunicación “Machine to machine”, entre las que podemos encontrar nrf24l01, Bluetooth, ZigBee, WIFI, Ethernet. Un segundo objetivo es la selección de una de las tecnologías analizadas anteriormente para dotar a nuestra plataforma de la posibilidad de ser usada en un entorno multi-máquina, con el fin de reducir los costes hardware y de comunicaciones Un tercer objetivo es la implementación de la tecnología seleccionada en un proyecto con la finalidad de conocer si esta se adapta a las necesidades de comunicaciones de la plataforma. Esta obra está bajo una licencia Reconocimiento 3.0 España de Creative Commons. Para ver una copia de esta licencia, visite: http://creativecommons.org/licenses/by-sa/3.0/es/ o envíe una carta a Creative Commons, 171 Second Street, Suite 300, San Francisco, California 94105, USA. LISTA DE PALABRAS CLAVE Internet of Things, IOT, Arduino, Mega 2560, Wboard, GBoard, nrf24l01, Bluetooth, Ethernet, Redes malladas, OSI, OpenCart, Scrum, Metodología Ágil, Gateway, Cloud Computing, PaaS, SaaS, IaaS. TÍTULO DEL PROYECTO EN INGLÉS Mesh Network with Arduino for the Internet of Things. ÍNDICE RESUMEN ......................................................................................................... 5 LISTA DE PALABRAS CLAVE ......................................................................... 7 TÍTULO DEL PROYECTO EN INGLÉS ............................................................. 9 ÍNDICE ............................................................................................................. 11 LISTA DE FIGURAS Y TABLAS ..................................................................... 15 DESCRIPCIÓN DEL PROYECTO ................................................................... 19 1. CONTEXTO .............................................................................. 23 2. PLANIFICACIÓN DE TAREAS Y ACTIVIDADES .................... 31 2.1. Desarrollo ágil de software y SCRUM.................................... 31 2.1.1. Desarrollo ágil de software .................................................................... 31 2.1.2. Scrum .................................................................................................... 33 2.2. Planificación del trabajo ......................................................... 39 3. INTRODUCCION A ARDUINO ................................................. 45 3.1. ¿Qué es arduino? .................................................................. 45 3.2. ¿Cómo se programa? ............................................................ 54 3.3. Ventajas y desventajas de Arduino ........................................ 57 4. INTRODUCCION A REDES MALLADAS ................................. 61 4.1. Introducción ........................................................................... 61 4.2. Definición de Red Mallada ..................................................... 62 4.3. Características de las Redes Malladas .................................. 64 4.4. La Infraestructura de las redes malladas ............................... 66 5. TECNOLOGIAS PROPUESTAS .............................................. 68 5.1. NRf24L01............................................................................... 68 5.2. Bluetooth LE .......................................................................... 69 5.3. ZigBee ................................................................................... 69 5.4. Wifi ......................................................................................... 70 6. NIVELES DEL MODELO OSI ................................................... 75 6.1. Modelo de referencia ............................................................. 75 6.2. Nivel físico ............................................................................. 76 6.3. Nivel de enlace de datos........................................................ 78 6.4. Nivel de red ............................................................................ 82 6.5. Nivel de transporte ................................................................. 85 6.6. Nivel de sesión ...................................................................... 87 6.7. Nivel de presentación ............................................................ 88 6.8. Nivel de aplicación ................................................................. 90 7. HARDWARE PARA ESTE PROYECTO................................... 93 7.1. Tarjeta Arduino Gboard Pro ................................................... 93 7.1.1. Visión general........................................................................................ 93 7.1.2. Especificaciones ................................................................................... 93 7.1.3. Características eléctricas ...................................................................... 94 7.1.4. Hardware ............................................................................................... 94 7.1.5. Mapa de pines ....................................................................................... 95 7.1.6. Indicadores ............................................................................................ 98 7.1.7. Botones ................................................................................................. 99 7.1.8. Conexión de alimentación y reset del SIM900 ...................................... 99 7.2. Tarjeta Arduino WBoard Pro ................................................ 100 7.2.1. Visión general...................................................................................... 100 7.2.2. Caracteristicas..................................................................................... 100 7.2.3. Especificaciones. ................................................................................ 100 7.2.4. Caracteristicas electricas .................................................................... 101 7.2.5. Harware ............................................................................................... 101 7.2.6. Mapa de pines ..................................................................................... 103 7.3. ESP8266.............................................................................. 105 7.3.1. Visión general...................................................................................... 105 7.3.2. Posibles Usos...................................................................................... 106 7.3.3. Comandos AT ..................................................................................... 107 7.4. Wee Serial WIFI Module ...................................................... 109 7.5. NRF24L01 ........................................................................... 111 7.5.1. Vision general...................................................................................... 111 7.5.2. Rango de cobertura ............................................................................ 112 7.6. HM-10 .................................................................................. 114 7.7. DNFC ................................................................................... 117 7.8. FOCA ................................................................................... 118 8. 7.8.1. Visión general...................................................................................... 119 7.8.2. Caracteristicas básicas ....................................................................... 119 7.8.3. Especificaciones ................................................................................. 119 SELECCIÓN DE TECNOLOGIA ............................................. 121 8.1. Motivos ................................................................................ 125 8.2. Alternativas viables .............................................................. 125 9. CASOS DE USO ..................................................................... 127 9.1. Escenario multi-máquina, GPRS Gateway + Wifi Client ...... 127 9.1.1. Contexto .............................................................................................. 127 9.1.2. Análisis del escenario ......................................................................... 128 9.1.3. Diseño, implementación y evaluación ................................................. 129 9.1.4. Conclusión........................................................................................... 131 9.2. Escenario máquina individual Wifi Client ............................. 132 9.2.1. Contexto .............................................................................................. 132 9.2.2. Análisis del escenario ......................................................................... 133 9.2.3. Diseño, implementación y evaluación ................................................. 134 9.2.4. Conclusión........................................................................................... 137 10. Trabajos futuros .................................................................... 139 11. Conclusiones ......................................................................... 143 BIBLIOGRAFÍA ............................................................................................. 147 SIGLAS, ABREVIATURAS Y ACRÓNIMOS ................................................. 149 ANEXOS ........................................................................................................ 153 1. API RestFull ........................................................................... 153 2. Diagrama de conexión del cliente WIFI ............................... 159 3. Diagrama de conexión de la pasarela GRPS-WIFI .............. 163 4. Actualización del firmware del módulo ESP8266 ............... 165 5. Comandos AT de módulo WIFI ESP8266 ............................ 171 6. Comandos AT de módulo GPRS SIM900............................. 173 7. Proceso de inicialización de un operador y una tienda ..... 177 LISTA DE FIGURAS Y TABLAS FIGURA 1-1 innovación en ventas en máquinas de vending................. 24 FIGURA 1-2 Lógica de interfaces de openvend .................................... 25 FIGURA 1-3 Integrantes del proyecto .................................................... 26 FIGURA 2-1 Panel de tarjetas con trello ................................................ 40 FIGURA 2-2 Tarjeta de actividades trello .............................................. 41 FIGURA 3-1 Arduino MEGA .................................................................. 46 FIGURA 3-2 Tabla de modelos y caracteristicas de arduinos ............... 51 FIGURA 3-3 Arduino Micro .................................................................... 53 FIGURA 3-4 Arduino Yun ...................................................................... 53 FIGURA 3-5 Arduino LiLypad ................................................................ 53 FIGURA 3-6 arduino Nano..................................................................... 53 FIGURA 3-7 ENTORNO DE DESARROLLO ARDUINO ....................... 55 FIGURA 3-8 Interfaz de desarrollo de visual studio ............................... 56 FIGURA 3-9 Intellisense de Visual Studio 2013 .................................... 57 FIGURA 3-10 INTEL GALILEO CON PINES ARDUINO........................ 59 FIGURA 3-11 RASPBERRY PI MODELO 2B ........................................ 60 FIGURA 4-1 DIAGRAMA DE INFRAESTRUCTURA ............................. 67 FIGURA 8-1 PLACA GBOARD PRO ..................................................... 94 FIGURA 8-2 PLACA WBOARD PRO .................................................. 101 FIGURA 8-3 FOTO WBOARD PRO .................................................... 102 FIGURA 8-4 FOTO WBOARD PRO .................................................... 105 FIGURA 8-5 GOOGLE TENDENCIAS ESP8266 ................................ 105 FIGURA 8-6 WEE ESP8266 ................................................................ 109 FIGURA 8-7 IMAGEN NFR24l01 ......................................................... 111 FIGURA 8-8 HM-10 ............................................................................. 114 FIGURA 8-7 TAG DINAMICO NFC ..................................................... 117 FIGURA 8-10 IMAGEN FOCA v2.0 ..................................................... 118 FIGURA 8-11 TABLA ESPECIFICACIONES FOCA ............................ 119 FIGURA 9-1 ESCENARIO MULTIMáQUINA ....................................... 128 FIGURA 9-2 ESCENARIO MULTIMáQUINA ....................................... 129 FIGURA 9-3 Interfaz del programa hercules........................................ 131 FIGURA 9-2 ESCENARIO MáQUINA CONECTADA POR WIFI ......... 132 FIGURA 9-4 MAPA DE COBERTURA WIFI ........................................ 133 FIGURA 1-1 diagrama de conexion cliente wifi ................................... 159 FIGURA 2-1 diagrama de conexion GATEWAY GPRS WIFI .............. 164 FIGURA 2-1 PINES DEL ESP8266 ..................................................... 166 FIGURA 2-1 INTERFAZ DEL IDE ARDUINO PUERTO SERIAL ......... 167 FIGURA 2-3 INTERFAZ DEL ESP8266 FLASH DOWNLOAD ............ 168 FIGURA 2-4 INTERFAZ DEL ESP8266 FLASH DOWNLOAD ............ 169 FIGURA 2-4 INTERFAZ DEL IDE ARDUINO MOSTRANDO MAC ..... 170 FIGURA 4-1 DIAGRAMA DE COMANDOS AT ................................... 171 FIGURA 6-1 INTERFAZ DHC ENVIO APIKEY .................................... 178 FIGURA 6-1 INTERFAZ DHC ENVIO APIKEY .................................... 178 FIGURA 7-3 ALTA DE MáQUINA EN LA PLATAFORMA ................... 180 FIGURA 7-4 PROCESO DE COMPRA................................................ 183 FIGURA 7-5 OBTENCION DE UN TOKEN ......................................... 183 DESCRIPCIÓN DEL PROYECTO A continuación se exponen los apartados que componen la memoria del presente proyecto: El apartado “Contexto” proporciona una visión global del problema que se quiere abordar y los objetivos que se persiguen en su realización. En “Planificación de tareas y actividades” se analiza la metodología utilizada durante el desarrollo del proyecto, así como la planificación de las tareas realizadas. En el apartado “Introducción a Arduino” se realiza una descripción de esta plataforma. Se comienza definiendo qué es Arduino, el hardware, su entorno de desarrollo, su lenguaje y cómo se puede expandir para darle mayores prestaciones. En el apartado “Introducción a redes malladas” se detalla la arquitectura de este tipo de redes, las diferentes topologías que se pueden dar: estrella, anillo, malla, árbol, etc. así como las formas de intercambio de paquetes y direccionamiento de los mismos entre los distintos nodos que forman la red. En el apartado “Niveles OSI” se describen las características de cada uno de los niveles del modelo OSI usado como referencia en la creación de cualquier topología de red. Este modelo nos sirve de referencia para describir todas las necesidades de nuestro sistema de comunicaciones: niveles físicos y electrónicos, direccionamiento físico de los mensajes, orden de distribución de las tramas, direccionamiento de los mensajes entre los distintos dispositivos que conforman la red, reconstrucción de los mensajes a partir del conjunto de datagramas recibidos y presentación final de los datos recibidos en el otro extremo. En el apartado “Tecnologías propuestas” se definen las alternativas evaluadas para la creación de una red mallada que permita la interconexión de varios microcontroladores y el intercambio de mensajes entre los mismos. Las opciones evaluadas son: nrf24l01, Bluetooth, WIFI, Ethernet y ZigBee. En el apartado “Selección de Tecnología” se definen las características básicas de cada una de las tecnologías evaluadas enfrentando éstas entre sí, para tratar de evaluar las ventajas y desventajas que cada una de ellas nos pueda aportar en la obtención de una solución al escenario de intercomunicación de varias máquinas de vending. El apartado de “Hardware de este proyecto” está dedicado a cada uno de los componentes electrónicos que se han usado o evaluado a lo largo del proyecto. Las dos primeras secciones corresponden al detalle de las dos placas compatibles con Arduino utilizadas. Los siguientes aparatados corresponden con todos los componentes que se conectan a los Arduinos a modo de periféricos para añadir nuevas funcionalidades como pueden ser comunicaciones o grabador de tarjetas nfc. En el siguiente apartado, “Casos de uso”, se abordan diferentes problemas que se han resuelto durante el desarrollo del proyecto, tales como: entorno multi-máquina en una misma ubicación compartiendo infraestructura de comunicaciones y entorno de máquina individual con conexión WIFI ya disponible. Los apartados “Conclusiones y Trabajos futuros” resumen el trabajo realizado e indican las posibles líneas de trabajo futuras teniendo como punto de partida el proyecto global al que pertenece este proyecto. En la sección de “Anexos” se incluye información útil para replicar los prototipos construidos con diagramas de interconexión entre todos los elementos del proyecto, También se incluye información necesaria para actualizar los módulos WIFI ESP8266 que es necesario para que el código entregado pueda funcionar. Los Anexos 4 y 6 corresponden a un breve resumen de los comandos AT empleados por los módulos SIM900 y ESP8266 usados para la comunicación GPRS y WIFI respectivamente. Finalmente el último Anexo detalla todo el proceso de inicialización manual del sistema que ayuda a comprender el proceso de activación de un nuevo propietario en la plataforma, registro de una máquina para ese propietario, inicialización de una máquina con el envío del fichero DEX y configuración de los productos en los carriles de la máquina. Redes malladas con Arduino para el Internet de las cosas Proyecto Fin de Carrera - Ingeniería en Informática Página 22 de 185 Redes malladas con Arduino para el Internet de las cosas 1. CONTEXTO Este proyecto forma parte del trabajo de investigación de la tesis "Building the Internet of Things of Vending Machines" propuesta por Antonio Solano. Su objetivo es, "proporcionar a las PYMES que operan máquinas auto expendedoras (máquinas de vending) soluciones tecnológicas asequibles que permitan conectar sus máquinas a la Internet del futuro con el fin último de mejorar su competitividad". Con la evolución de "Internet de las Cosas" (IoT) los puntos de venta desatendidos, máquinas de vending, se convierten en un "punto de presencia", realizando comunicaciones M2M, mejorando la experiencia de compra de los usuarios y obteniendo más información de su uso para las empresas propietarias de estas máquinas. Con ello las máquinas de vending se convertirían en experiencias interactivas e inteligentes usando la computación en la nube y mejorarían la percepción del usuario en la compra ofreciendo más servicios e información. Proyecto Fin de Carrera - Ingeniería en Informática Página 23 de 185 Redes malladas con Arduino para el Internet de las cosas FIGURA 1-1 INNOVACIÓN EN VENTAS EN MÁQUINAS DE VENDING La tesis pretende construir una solución integral Cloud IaaS-PaaS-SaaS de bajo coste para las PYMES de máquinas de vending, usando módulos M2M para conectar las máquinas y software que permita transacciones de comercio electrónico desde los móviles de los usuarios y facilite un entorno de gestión de las máquinas para el operador de vending. Proyecto Fin de Carrera - Ingeniería en Informática Página 24 de 185 Redes malladas con Arduino para el Internet de las cosas FIGURA 1-2 LÓGICA DE INTERFACES DE OPENVEND Un proyecto de esta complejidad y tamaño requiere un enfoque multidisciplinar, ya que involucra diferentes campos de conocimiento bastante diferentes entre sí, que varían desde la ubicua computación en la nube hasta el acceso a nivel físico del teclado de la máquina de vending desde Arduino. Esto ha hecho necesaria la participación de diferentes alumnos acogidos a los distintos Proyectos de Fin de Carrera ofertados por el Departamento de Informática y Automática que han estado dirigidos y coordinados por Antonio Solano. Como se puede apreciar en la figura 1-3 hay tres grandes campos de actuación: Computación en la nube: como se verá a lo largo de esta memoria, la simplicidad del proceso de compra que se busca para el usuario se convierte en complejidad de trasfondo en la infraestructura necesaria. Proyecto Fin de Carrera - Ingeniería en Informática Página 25 de 185 Redes malladas con Arduino para el Internet de las cosas Hay gran número de servidores involucrados en el proceso muy interrelacionados entre sí. Para dar cabida a todos estos servidores, y teniendo presentes también los requerimientos de disponibilidad y escalabilidad, se decidió crear una capa IaaS sobre la que se despliegan todos los servicios. La organización y gestión de esta capa, implementada utilizando la aplicación de software libre OpenStack, ha sido responsabilidad de Juan Miguel Sánchez y Rafael Alonso. FIGURA 1-3 INTEGRANTES DEL PROYECTO Proyecto Fin de Carrera - Ingeniería en Informática Página 26 de 185 Redes malladas con Arduino para el Internet de las cosas Tiendas online: la interacción con el usuario se realiza a través de su teléfono móvil o tablet desde donde selecciona los productos y realiza los pagos. Para ello se ha optado por la utilización de la solución software libre de tiendas online OpenCart cuyo diseño por módulos se adapta perfectamente a las necesidades de este proyecto. Esta parte se abordó principalmente en los proyectos de años anteriores realizados por Víctor González, Iván Pérez y Nacho Mantero que entre otras cosas abordaron los pagos online y el proceso de compra desde la Web App. Un tercer proyecto, asignado a Francisco Javier García, pertenecería también a esta parte mediante la interpretación de los datos de telemetría enviados por la máquina de vending a la plataforma. Durante el desarrollo de mi proyecto también han participado Luis Miguel dando cobertura a las mejoras de la plataforma en infraestructura, proceso de compra y servidor Slim y Pedro Martínez con el análisis Big Data de la información del sistema. Máquina de vending: aunque el usuario realiza las compras a través de la Web App también necesita interactuar con la máquina de vending. Sin embargo es imprescindible que esta interacción se limite al máximo: simplemente acercar el teléfono móvil a la máquina y coger el producto que ésta le entrega. Todo esto se consigue interactuando con elementos físicos de la máquina, tanto propios como añadidos: NFC para intercambiar datos con su teléfono móvil, acceso al teclado de la máquina, etc. Proyecto Fin de Carrera - Ingeniería en Informática Página 27 de 185 Redes malladas con Arduino para el Internet de las cosas Por otro lado hay que realizar comunicaciones con los servidores que se mencionaron anteriormente para comprobar qué producto ha adquirido el usuario y si ha realizado o no el pago. El soporte para realizar todas estas operaciones es Arduino, una plataforma de hardware libre de bajo costo. Dado el gran número de tareas que recaen sobre esta plataforma fuimos cinco los alumnos encargados de su programación: Patxi Ballesteros, Ángel Cifuentes, José Daniel Fernández, Ricardo Cárdenes y yo mismo. Mi Proyecto se ha centrado en aumentar las posibilidades de comunicación de la máquina con la plataforma, permitiendo compartir entre varias máquinas con una ubicación cercana la conexión de acceso a datos GPRS. Esto además nos llevó a plantear la opción de suprimir la conexión acceso a datos GPRS y sustituirla por una conexión WIFI pudiéndose plantear 3 posibles escenarios: Máquina individual con conexión GPRS. Máquina individual con conexión WIFI: Conjunto de máquinas “tren de máquinas” en la que solo una tiene acceso GPRS y genera un punto de acceso WIFI para las que están en un entorno próximo. En estos escenarios considerados, el principal objetivo es el de la reducción de costes al propietario de la máquina, principalmente los costes generados por el operador de telefonía. El escenario 2 podría ser usado por Proyecto Fin de Carrera - Ingeniería en Informática Página 28 de 185 Redes malladas con Arduino para el Internet de las cosas máquinas que se encuentran en una ubicación con WIFI como podría ser una máquina de tabaco en un bar. El propietario del bar ya tiene contratada una línea de datos ADSL y no es necesario un alta nueva de una línea GPRS para las comunicaciones de la máquina con la plataforma. En el tercer caso, cuando tenemos varias máquinas próximas, una de bebidas frías, una de café, una de snacks dulces y una de snacks salados, todas ellas compartirán una única conexión de acceso datos GPRS. Como parte inicial del proyecto se evaluaron diferentes alternativas que nos permitieran la comunicación entre las distintas máquinas, para cada una de las tecnologías planteadas se creó un proyecto piloto que nos permitiera conocer las bondades y defectos de cada una de ellas. De todas las soluciones que se plantearon tomamos la decisión de usar WIFI. Al comenzar el proyecto no parecía ser la opción más posible debido a su coste, pero justo en el momento de realizar el estudio apareció en el mercado un nuevo componente, el ESP8266, que permitía conectarse a una red WIFI y trabajar como punto de acceso con un coste 7 veces menor que el resto de shields o componentes con la misma funcionalidad. La aparición de este pequeño componente causó un gran revuelo en la comunidad “maker” ya que por 4 euros se puede dotar a cualquier microcontrolador de la posibilidad de conectarse a internet o de funcionar como punto de acceso. Y que otros nodos bien sean ordenadores, teléfonos o tablets se conecten a su red. Este componente ha proyectado el Internet de las cosas Proyecto Fin de Carrera - Ingeniería en Informática Página 29 de 185 Redes malladas con Arduino para el Internet de las cosas a niveles que eran insospechados hace tan solo unos meses. El auge ha sido tal que ha sido esta misma comunidad la que generado nuevos firmwares para el dispositivo, incluyendo nuevas funcionalidades que el fabricante no incorporó inicialmente. Los grandes retos del proyecto han consistido en el aprendizaje de la plataforma Arduino, el uso de un lenguaje de programación de bajo nivel como C++ (después de llevar varios años usando lenguajes de alto nivel), aprender unos conceptos mínimos de electrónica necesarios para el proyecto y por último, el más difícil, ha sido la integración de todos los módulos de una plataforma construida como piezas aisladas y que funcionaban de manera independiente pero que necesitábamos que llegasen a funcionar como una única entidad. Proyecto Fin de Carrera - Ingeniería en Informática Página 30 de 185 Redes malladas con Arduino para el Internet de las cosas 2. PLANIFICACIÓN DE TAREAS Y ACTIVIDADES 2.1. DESARROLLO ÁGIL DE SOFTWARE Y SCRUM 2.1.1. DESARROLLO ÁGIL DE SOFTWARE Para el desarrollo de este proyecto se ha optado por la utilización del desarrollo ágil de software. Con este nombre se conoce un conjunto de métodos de ingeniería del software que surgió en los años 90 como alternativa a los rígidos desarrollos tradicionales, basados en una estricta planificación y que priorizan la generación de una documentación muy detallada frente al propio desarrollo del software. Los principios del desarrollo ágil de software se resumen perfectamente en el Manifiesto por el Desarrollo Ágil de Software, enunciado en el año 2001 por un grupo de desarrolladores de software: “Estamos descubriendo formas mejores de desarrollar software tanto por nuestra propia experiencia como ayudando a terceros. A través de este trabajo hemos aprendido a valorar:” “Individuos e interacciones sobre procesos y herramientas.” “Software funcionando sobre documentación extensiva.” “Colaboración con el cliente sobre negociación contractual.” “Respuesta ante el cambio sobre seguir un plan.” Proyecto Fin de Carrera - Ingeniería en Informática Página 31 de 185 Redes malladas con Arduino para el Internet de las cosas Estos cuatro puntos constituyen los pilares fundamentales del desarrollo ágil de software y, a pesar de su simplicidad, resumen a la perfección toda la filosofía detrás de esta metodología. Individuos e interacciones sobre procesos y herramientas: el software está desarrollado por personas, no por procesos o herramientas, por lo que valora la capacidad de los desarrolladores para trabajar en equipo de forma efectiva. Software funcionando sobre documentación extensiva: modelos anteriores como el modelo en cascada enfatizaban en una documentación altamente detallada. Pero una extensa documentación no sirve de nada si el software final no se ajusta a las necesidades del cliente. Aunque en el desarrollo ágil no se descarta la documentación, su generación solamente es un medio más para que llegar al objetivo final, que es el software funcional adaptado a las necesidades del cliente. Colaboración con el cliente sobre negociación contractual: en contraposición a unas especificaciones rígidamente preestablecidas de antemano, se valora una comunicación continua con el cliente involucrándolo en todo el proceso de desarrollo. Respuesta ante el cambio sobre seguir un plan: el desarrollo del software no tiene que ser algo cerrado y preestablecido de antemano, sino que tiene que ser capaz de reaccionar de forma rápida y efectiva ante los cambios en los requisitos. Proyecto Fin de Carrera - Ingeniería en Informática Página 32 de 185 Redes malladas con Arduino para el Internet de las cosas 2.1.2. SCRUM El desarrollo ágil de software establece un marco general de trabajo que se concretiza en una serie de aproximaciones o metodologías, pudiendo utilizar una u otra en función de las necesidades del proyecto a desarrollar. Algunas de las metodologías ágiles más utilizadas son Extreme Programming (XP), Agile Modeling (AM), Kanban, Unified Process (UP), etc. Para el desarrollo de este proyecto se ha optado por utilizar la que probablemente sea la metodología ágil más utilizada: Scrum. Scrum se puede definir como un proceso mediante el cual se aplican de manera regular un conjunto de mejores prácticas para trabajar en equipo y obtener los mejores resultados. En Scrum se realizan entregas parciales y regulares del resultado final del proyecto, priorizadas por el beneficio que aportan al receptor del proyecto según su propia opinión. Esto hace que esté especialmente indicado para proyectos complejos, donde se necesitan obtener resultados pronto, donde los requisitos son cambiantes o poco definidos y donde la innovación, la competitividad y la productividad son fundamentales. Scrum se fundamenta en tres aspectos principales: roles, reuniones y documentos. Proyecto Fin de Carrera - Ingeniería en Informática Página 33 de 185 Redes malladas con Arduino para el Internet de las cosas 2.1.2.1. Roles de Scrum Scrum define tres roles principales y una serie de roles auxiliares. Los roles auxiliares son aquellas partes no involucradas frecuentemente en el proceso de desarrollo pero cuya participación y retroalimentación es importante en determinados puntos del desarrollo. Dentro de este grupo de roles se incluyen los administradores, que establecen el ambiente para el desarrollo del producto, y los stakeholders, donde se incluyen clientes, proveedores, vendedores, etc. En cuanto a los roles principales se definen los siguientes: Product Owner: es el miembro del equipo que le da voz al cliente, representa las necesidades y deseos de los stakeholders en las reuniones. Su responsabilidad es mantener una visión global de qué es lo que se quiere construir y transmitirla al equipo de desarrollo. Asimismo debe recoger, priorizar y administrar los requerimientos del producto, validar o rechazar los trabajos presentados en los sprints y tomar decisiones junto con el equipo de desarrollo. Equipo de desarrollo: son los miembros encargados del desarrollo del producto asumiendo tareas como realización de pruebas, análisis, arquitectura, diseño, programación, planificación, estimación, documentación, etc. Algunas características del equipo de desarrollo son: Proyecto Fin de Carrera - Ingeniería en Informática Página 34 de 185 Redes malladas con Arduino para el Internet de las cosas o Auto-organizados. o Multifuncionales, aglutinando todas las habilidades necesarias para el desarrollo del producto. o No hay títulos, todos los miembros son Desarrolladores, independientemente del trabajo realizado por cada uno de ellos. o Los miembros individuales pueden tener habilidades especializadas y áreas en las que estén más enfocados, pero la responsabilidad recae en el Equipo como un todo. Scrum-Master: es el responsable de asegurar que el Scrum es entendido y adoptado, orientando al equipo hacia la consecución de los objetivos. No es un líder de proyecto en el sentido tradicional, sino que más bien actúa como intermediario entre el equipo y las distracciones que puedan tener. 2.1.2.2. Eventos En Scrum existen eventos predefinidos con el fin de crear regularidad y minimizar la necesidad de reuniones no definidas en Scrum. Todos los eventos son bloques de tiempo de tal modo que todos tienen una duración máxima que no puede ser extendida. Los diferentes eventos son: Sprint: es un bloque de tiempo de un mes o menos durante el cual se crea un incremento de producto terminado, utilizable y potencialmente desplegable. Cada sprint se puede considerar un proyecto dentro del Proyecto Fin de Carrera - Ingeniería en Informática Página 35 de 185 Redes malladas con Arduino para el Internet de las cosas propio proyecto con una definición de qué se va a construir, un diseño y un plan flexible que guiará la construcción, el trabajo y el producto resultante. Los Sprints están limitados a un mes ya que así se limita la posibilidad de que lo que se está construyendo pueda cambiar, la complejidad se eleve y el riesgo aumente. Los Sprints limitan el riesgo al costo de un mes de calendario. Reuniones: todas ellas forman parte de cada uno de los Sprints y son: o Reunión de planificación de Sprint (Sprint Planning Meeting): en ella se establece el plan de trabajo a realizar durante el Sprint mediante el trabajo colaborativo de todo el equipo. El Scrum Master es quien se asegura de que el evento se realice y que los asistentes entiendan su propósito. o Scrum Diario (DailyScrum): esta reunión se realiza cada día durante el Sprint y tiene que seguir las siguientes reglas: Todos los miembros del equipo de desarrollo acuden preparados con sus revisiones. Comienza puntualmente aunque falte algún miembro del equipo. Debe realizarse todos los días a la misma hora y lugar. Su duración máxima es de 15 minutos. Aunque pueden acudir miembros de todos los roles, solo tienen la palabra miembros de los roles principales. Durante estas reuniones los miembros del equipo tienen que responder las siguientes preguntas: Proyecto Fin de Carrera - Ingeniería en Informática Página 36 de 185 Redes malladas con Arduino para el Internet de las cosas ¿Qué he hecho desde ayer? ¿Qué voy a hacer hoy? ¿Ha surgido algún impedimento importante? o Revisión de Sprint (Sprint Review): se realiza al final de Sprint y tiene las siguientes características: Acuden tanto el Equipo Scrum como los interesados clave invitados por el Product Owner. El Product Owner indica qué elementos se han terminado y cuáles no. El Equipo de Desarrollo habla acerca de qué fue bien durante el Sprint, qué problemas aparecieron y cómo fueron resueltos esos problemas. El Equipo de Desarrollo demuestra el trabajo terminado. El grupo completo colabora acerca de qué hacer a continuación, lo cual es muy útil como entrada para la siguiente Reunión de Planificación. Revisión de cómo el mercado o el uso potencial del producto podría haber cambiado lo que es de más valor para hacer a continuación. o Retrospectiva de Sprint (Sprint Retrospective): esta reunión tiene lugar después de la Revisión de Sprint y antes de la siguiente Planificación de Sprint. Sus objetivos son: Inspeccionar cómo fue el último Sprint en cuanto a personas, relaciones, procesos y herramientas. Proyecto Fin de Carrera - Ingeniería en Informática Página 37 de 185 Redes malladas con Arduino para el Internet de las cosas Identificar y ordenar los elementos más importantes que salieron bien y las posibles mejoras. Crear un plan para implementar las mejoras a la forma en la que el Equipo Scrum desempeña su trabajo. 2.1.2.3. Artefactos Constituyen la documentación necesaria para que todos los miembros del equipo tengan una visión clara de los objetivos. Estos artefactos son: Lista de producto (Product Backlog): su responsable es el Product Owner y constituye la única fuente de requisitos del proyecto. No es una lista cerrada sino que al principio solo abarca los requisitos conocidos y mejor entendidos y posteriormente irá evolucionando junto con el proyecto, añadiendo nuevos requisitos a medida que estos vayan surgiendo. Esta lista enumera todas las características, funcionalidades, requisitos, mejoras y correcciones que constituyen cambios a ser hechos sobre el producto para futuras entregas. Lista de pendientes del Sprint (Sprint Backlog): es el conjunto de elementos de la Lista de producto seleccionados para el Sprint. Define cual será la funcionalidad del producto una vez que haya finalizado el Sprint. Esta lista es responsabilidad del Equipo de Desarrollo. Es una lista dinámica en el sentido de que a medida que el equipo aprende más Proyecto Fin de Carrera - Ingeniería en Informática Página 38 de 185 Redes malladas con Arduino para el Internet de las cosas acerca del trabajo necesario para conseguir el objetivo del Sprint pueden surgir nuevos elementos. Igualmente algunos elementos se pueden demostrar innecesarios, por lo que desaparecerían de esta lista. La Lista de pendientes del Sprint se puede ver como una imagen visible en tiempo real del trabajo que el Equipo de Desarrollo está llevando a cabo en el Sprint. 2.2. PLANIFICACIÓN DEL TRABAJO Para la planificación del proyecto se han utilizado las siguientes herramientas: Trello: es una herramienta online gratuita que permite la gestión de proyectos utilizando el paradigma kanban, también conocido como sistema de tarjetas. El proyecto está representado por un tablero que contiene listas que a su vez contienen tarjetas. Cada tarjeta representa un objetivo o tarea que puede desplazarse entre las listas, las cuales representan estados: backlog, to do, doing y done. Teamviewer: es una herramienta que permite la realización de reuniones remotas con algunas funcionalidades interesantes como la compartición de escritorios. Dispone de versiones para las plataformas Windows, Linux y Android. Google Groups: la comunicación entre reuniones se ha realizado utilizando el conocido sistema de listas de distribución de correo de Google. Proyecto Fin de Carrera - Ingeniería en Informática Página 39 de 185 Redes malladas con Arduino para el Internet de las cosas Hangouts: además de Google Goups para la comunicación entre los miembros del grupo de una manera más directa se han usado las conversaciones online tipo chat y llamadas a través de Voz Ip. Dropbox: soporte de almacenamiento en la nube que ha sido utilizado para el intercambio de ficheros. FIGURA 2-1 PANEL DE TARJETAS CON TRELLO Proyecto Fin de Carrera - Ingeniería en Informática Página 40 de 185 Redes malladas con Arduino para el Internet de las cosas FIGURA 2-2 TARJETA DE ACTIVIDADES TRELLO La planificación ha consistido en tres sprints y una demostración con los supervisores, entre los meses de Octubre y Julio. Las funciones de Scrum Máster han ido rotando entre todos los componentes del proyecto cambiando en cada Sprint. El tutor del proyecto, Antonio Solano, ha ejercicio en todo momento las funciones de product owner, proponiendo continuamente nuevas vías a investigar y valorando nuestros trabajos. Aunque personalmente considero que el trabajo en equipo con esta metodología ha resultado una experiencia muy enriquecedora, creo que los problemas inherentes al estudio a distancia han supuesto un lastre que no ha permitido aprovechar todas las bondades de la metodología ágil, restando eficiencia al desarrollo del proyecto. Entre los principales problemas, los cuales también hubieran surgido en cualquier otra metodología de trabajo en equipo a distancia, destacaría: Proyecto Fin de Carrera - Ingeniería en Informática Página 41 de 185 Redes malladas con Arduino para el Internet de las cosas La aplicación TeamViewer tienen un funcionamiento muy irregular: frecuentes cortes en las conversaciones, expulsiones sin motivo de miembros de la reunión, pésimo funcionamiento en Linux que obliga a acciones como tener una sesión en Linux para compartir escritorio y simultáneamente otra en Windows o Android para hablar. En la parte final del proyecto sustituimos TeamViewer por Hangouts y conseguimos eliminar estos problemas. El seguimiento de Trello ha sido bastante desigual por lo que creo que su utilidad se ha visto enormemente mermada. La comunicación mediante correo electrónico a un grupo de Google, aunque proporciona inmediatez y acceso a todos los miembros del grupo, tiene el problema de la complejidad de localizar conversaciones pasadas. Viéndolo en retrospectiva tal vez hubiera sido más eficiente la utilización de otro mecanismo, como puede ser un foro privado o similar, con hilos para los diferentes temas que se abordaban de forma que sean fácilmente accesibles y categorizables todas las conversaciones anteriores. Las particularidades de cada persona y las necesidades de interacción entre nuestros proyectos han supuesto un freno en muchas ocasiones. Prácticamente todos trabajamos y tenemos obligaciones personales que determinan los momentos que podemos dedicar al proyecto, a veces incompatibles con los de nuestros compañeros. Esto nos ha obligado a tener que esperar días o semanas hasta encontrar el momento en el que Proyecto Fin de Carrera - Ingeniería en Informática Página 42 de 185 Redes malladas con Arduino para el Internet de las cosas todos los participantes en una prueba de integración estén disponibles simultáneamente. A pesar de todos estos problemas que han lastrado el desarrollo del proyecto, también sería justo destacar todas las ventajas individuales que proporciona un proyecto conjunto de estas características: El trabajo en equipo me ha permitido acceder fácilmente a expertos en áreas de conocimiento que he necesitado en momentos puntuales evitándome leer hojas y hojas de documentación. Al ser varios en el equipo cada uno es experto en su tema y eso enriquece enormemente a los demás. A pesar de los problemas de TeamViewer, las reuniones han sido muy útiles para aclarar nuestras ideas, permitiendo discutirlas y exponerlas de una forma que no se podría conseguir por otros medios como el correo electrónico. El hecho de tener reuniones semanales donde justificar las tareas realizadas durante la semana es un elemento motivador para avanzar en el proyecto. Es la mejor solución a la tendencia de "dejarlo todo para el final". La demo que se ha realizado, presentando nuestros avances a personas ajenas al día a día del proyecto, ha servido para centrarnos en el objetivo del proyecto. Independientemente de toda la investigación que realicemos, el objetivo final es el proceso de compra sencillo en tres Proyecto Fin de Carrera - Ingeniería en Informática Página 43 de 185 Redes malladas con Arduino para el Internet de las cosas pasos, y los avances en la consecución de dicho objetivo ha habido que materializarlos en cada una de las demos. Proyecto Fin de Carrera - Ingeniería en Informática Página 44 de 185 Redes malladas con Arduino para el Internet de las cosas 3. INTRODUCCION A ARDUINO 3.1. ¿QUÉ ES ARDUINO? Arduino es una plataforma de prototipado de proyectos de electrónica de código abierto (open – source) basada en hardware y software flexibles y fáciles de usar. Está pensado e inspirado en artistas, diseñadores, y estudiantes de informatica o robótica y dirigido a cualquier interesado en crear objetos o entornos interactivos, o simplemente por hobby. Arduino consta de una placa principal de componentes electrónicos, donde se encuentran conectados los controladores principales que gestionan los demás complementos y circuitos ensamblados en la misma. Además, requiere de un lenguaje de programación para poder ser utilizado y, como su nombre lo dice, programado y configurado a nuestra necesidad, por lo que se puede decir que Arduino es una herramienta "completa", ya que sólo debemos instalar y configurar con el lenguaje de programación de esta placa los componentes eléctricos que queramos para realizar el proyecto que tenemos en mente, haciéndola una herramienta, no sólo de creación, sino también de aprendizaje en el ámbito del diseño de sistemas electrónicos-automáticos y, además, fácil de utilizar. Arduino también simplifica el proceso de trabajo con micro controladores, ya que está fabricada de tal manera que viene “pre ensamblada” y lista con los controladores necesarios para poder operar con ella una vez que la saquemos de su caja, ofreciendo una ventaja muy grande para profesores, Proyecto Fin de Carrera - Ingeniería en Informática Página 45 de 185 Redes malladas con Arduino para el Internet de las cosas estudiantes y aficionados interesados en el desarrollo de tecnologías. Las posibilidades de realizar proyectos basados en esta plataforma tienen como limite la imaginación de quien opera esta herramienta. FIGURA 3-1 ARDUINO MEGA Arduino está constituido en el hardware por un micro controlador principal llamado Atmel AVR de 8 bits (que es programable con un lenguaje de alto nivel), presente en la mayoría de los modelos de Arduino, encargado de realizar los procesos lógicos y matemáticos dentro de la placa, además de controlar y gestionar los recursos de cada uno de los componentes externos conectados a la misma. Consta además de una amplia variedad de sensores eléctricos como cámaras VGA, sensores de sonido, seguidores de línea, botones de control de sensores, e incluso, otras placas de micro controladores Proyecto Fin de Carrera - Ingeniería en Informática Página 46 de 185 Redes malladas con Arduino para el Internet de las cosas (más conocidos como Shields), que pueden adaptarse fácilmente gracias a que Arduino cuenta con entradas de pines analógicos y digitales para integrar estos componentes sin necesidad de alterar el diseño original de esta placa. Estos a su vez son controlados junto con el procesador primario por otros componentes de menor jerarquía, pero de igual importancia y prioridad, como el Atmega168, Atmega328, Atmega1280 y el Atmega8 , que son lo más utilizados debido a sus bajos precios y gran flexibilidad para construir diversidad de diseños. Además, Arduino cuenta con la ventaja de tener entre sus elementos principales puertos seriales de entrada /salida (input/output), lo que le permite conectarse por medio de un cable USB a un ordenador para poder trabajar con ella desde nivel software, ya que es dónde se le darán las “ordenes” que ejecutarán cada uno de los componentes conectados a la placa, e incluso, para operar como un dispositivo más (dependiendo de la configuración que hayamos establecido y para que se quiere utilizar). Por otro lado, Arduino para operar necesita de una fuente de alimentación externa, ya que por desgracia, no cuenta con una propia, por lo que también se encuentra incorporada una entrada para conectar un cable de alimentación. Las características de la placa más conocida de Arduino (Arduino UNO): El microprocesador ATmega328 32 kbytes de memoria Flash 1 kbyte de memoria RAM 16 MHz 13 pins para entradas/salidas digitales (programables) Proyecto Fin de Carrera - Ingeniería en Informática Página 47 de 185 Redes malladas con Arduino para el Internet de las cosas 5 pins para entradas analógicas 6 pins para salidas analógicas (salidas PWM) Completamente autónomo: Una vez programado no necesita estar conectado al PC Microcontrolador ATmega328 Voltaje de operación 5V Voltaje de entrada (recomendado) 7-12 V Voltaje de entrada (limite) 6-20 V Digital I/O Pins 14 (con 6 salidas PWM) Entradas analógicas Pins 6 DC corriente I/O Pin 40 mA DC corriente 3.3V Pin 50 mA Memoria Flash 32 KB (2 KB para el bootloader) SRAM 1 KB EEPROM 512 byte Velocidad de reloj 16 MHz Realmente existen múltiples tipos de Arduinos y cada uno tiene unas características diferentes, las principales características son: Procesador Voltaje de operación Velocidad del procesador Entradas y salidas analógicas Proyecto Fin de Carrera - Ingeniería en Informática Página 48 de 185 Redes malladas con Arduino para el Internet de las cosas Entradas y salidas digitales Tamaño de la EEPROM Tamaño de la RAM Tamaño de la memoria Flash Tipo de conexión USB Numero de puertos serie Proyecto Fin de Carrera - Ingeniería en Informática Página 49 de 185 Redes malladas con Arduino para el Internet de las cosas Proyecto Fin de Carrera - Ingeniería en Informática Página 50 de 185 Redes malladas con Arduino para el Internet de las cosas Operating CPU Analog Digital EEPROM SRAM Flash Voltage/Input Speed In/Out IO/PWM [KB] [KB] [KB] ATmega328 5 V/7-12 V 16MHz 6/0 14-jun 1 2 Due AT91SAM3X8E 3.3 V/7-12 V 84 MHz 12-feb 54/12 - Leonardo ATmega32u4 5 V/7-12 V 16MHz 12/0 20-jul 1 Mega 2560 ATmega2560 5 V/7-12 V 16MHz 16/0 54/15 Mega ADK ATmega2560 5 V/7-12 V 16MHz 16/0 54/15 Micro ATmega32u4 5 V/7-12 V 16MHz 12/0 Mini ATmega328 5 V/7-9 V 16MHz 8/0 Name Processor Uno Nano ATmega168 ATmega328 USB UART 32 Regular 1 96 512 2 Micro 4 2.5 32 Micro 1 4 8 256 Regular 4 4 8 256 Regular 4 20-jul 1 2.5 32 Micro 1 14-jun 1 2 32 - - 0.512 1 16 1 2 32 Mini-B 1 5 V/7-9 V 16MHz 8/0 14-jun Ethernet ATmega328 5 V/7-12 V 16MHz 6/0 14-abr 1 2 32 Regular - Esplora ATmega32u4 5 V/7-12 V 16MHz - - 1 2.5 32 Micro - ArduinoBT ATmega328 5 V/2.5-12 V 16MHz 6/0 14-jun 1 2 32 - 1 Fio ATmega328P 3.3 V/3.7-7 V 8MHz 8/0 14-jun 1 2 32 Mini 1 Pro (168) ATmega168 3.3 V/3.35-12 V 8MHz 6/0 14-jun 0.512 1 16 - 1 Pro (328) ATmega328 5 V/5-12 V 16MHz 6/0 14-jun 1 2 32 - 1 Pro Mini ATmega328 3.3 V/3.35-12 V 8MHz 5 V/5-12 V 16MHz 6/0 14-jun 0.512 1 16 - 1 2.7-5.5 V/2.7-5.5 V 8MHz 6/0 14-jun 0.512 1 16 - - ATmega32u4 3.3 V/3.8-5V 8MHz 4/0 09-abr 1 2.5 32 Micro - ATmega328 2.7-5.5 V/2.7-5.5 V 8MHz 4/0 09-abr 1 2 32 - - ATmega328 2.7-5.5 V/2.7-5.5 V 8MHz 4/0 09-abr 1 2 32 - - ATmega32u4 5V 16MHz 12/0 20-jul 1 2.5 32 Micro 1 LilyPad LilyPad USB LilyPad Simple LilyPad SimpleSnap Yun ATmega168V ATmega328V FIGURA 3-2 TABLA DE MODELOS Y CARACTERISTICAS DE ARDUINOS Proyecto Fin de Carrera - Ingeniería en Informática Página 51 de 185 Redes malladas con Arduino para el Internet de las cosas Proyecto Fin de Carrera - Ingeniería en Informática Página 52 de 185 Redes malladas con Arduino para el Internet de las cosas Cada una de estas versiones de Arduino tienen una forma y tamaño diferente de modo que se pueden adaptar a las necesidades de la mayoría de los proyectos, incluso existe una versión flexible apta para ser cosida a la ropa, este tipo de Arduinos permite el desarrollo de que se conoce como wereables que son un conjunto de aparatos y dispositivos electrónicos que se incorporan en alguna parte de nuestro cuerpo interactuando continuamente con el usuario y con otros dispositivos con la finalidad de realizar alguna función específica. A continuación se muestran algunas imágenes de los diversos tipos de Arduinos. FIGURA 3-3 ARDUINO MICRO FIGURA 3-5 ARDUINO LILYPAD Proyecto Fin de Carrera - Ingeniería en Informática FIGURA 3-4 ARDUINO YUN FIGURA 3-6 ARDUINO NANO Página 53 de 185 Redes malladas con Arduino para el Internet de las cosas 3.2. ¿CÓMO SE PROGRAMA? Como se había mencionado, Arduino, no sólo son componentes eléctricos ni una placa de circuitos, sino que además, también es una plataforma que combina esto con un lenguaje de programación que sirve para controlar los distintos sensores que se encuentran conectados a la placa, por medio de instrucciones y parámetros que nosotros establecemos al conectar la placa a un ordenador. Este lenguaje que opera dentro de Arduino se llama Wiring, basado en la plataforma Processing y primordialmente en el lenguaje de programación C/C++, que se ha vuelto popular hasta llegar a ser el preferido para enseñar programación a alumnos de nivel superior que estudian informática y robótica, gracias a que es muy fácil de aprender y brinda soporte para cualquier necesidad. De este lenguaje derivan otros más que son muy utilizados en el ámbito de Ingeniería y desarrollo, como C#, Java, BASIC, Php, Phytom, JavaScript, Perl, entre otros; por lo tanto, Arduino soporta varios lenguajes de programación de alto nivel derivados de C, haciendo de esto una ventaja para los diseñadores que trabajan en varios o en un sólo entorno de desarrollo de programación. Para poder programar el procesador, debe descargarse el software que incluye las librerías necesarias. Otra ventaja es que este software puede descargarse desde el sitio web oficial de Arduino, ya que opera bajo licencia libre y está disponible a todo el público. Su versión más reciente para todos los sistemas operativos es la versión Arduino 1.6.1. Proyecto Fin de Carrera - Ingeniería en Informática Página 54 de 185 Redes malladas con Arduino para el Internet de las cosas FIGURA 3-7 ENTORNO DE DESARROLLO ARDUINO Al ser una herramienta que incorpora tanto uso de hardware y software (circuitos eléctricos y un lenguaje de programación respectivamente) se requiere un nivel de conocimiento básico en estas dos ramas. Es fácil encontrar diversidad de manuales en la página oficial e incluso, pueden adquirirse libros donde se explica cómo utilizar esta herramienta didáctica e innovadora. Además, existe en internet un simulador virtual de Arduino de licencia libre llamado Virtual BreadBoard, que ayuda al aprendizaje de esta plataforma antes de comenzar a utilizarla de manera real, ofreciendo las herramientas necesarias y el mismo soporte que esta placa, pero de manera digital. Proyecto Fin de Carrera - Ingeniería en Informática Página 55 de 185 Redes malladas con Arduino para el Internet de las cosas Durante el desarrollo de este proyecto se evaluaron dos alternativas a este entorno de desarrollo más propias de otros lenguajes de programación como son: Atmel Studio y el plugin Visual Micro para Visual Studio. FIGURA 3-8 INTERFAZ DE DESARROLLO DE VISUAL STUDIO El uso de herramientas de desarrollo más potentes como estas permiten hacer uso de funcionalidades que facilitan: la codificación de los programas, gestión y edición de los ficheros que componen la solución, uso de herramientas de autocompletado, intellisense, descripción de los métodos y parámetros recibidos a medida que se codifica una instrucción de invocación. Proyecto Fin de Carrera - Ingeniería en Informática Página 56 de 185 Redes malladas con Arduino para el Internet de las cosas FIGURA 3-9 INTELLISENSE DE VISUAL STUDIO 2013 3.3. VENTAJAS Y DESVENTAJAS DE ARDUINO Existe una diversidad de plataformas que operan con micro controladores disponibles para la programación del hardware. Todas estas herramientas se organizan en paquetes fáciles de usar para minimizar el trabajo del desarrollo a nivel de programación (software). Además, Arduino ofrece ventajas como: Asequible - Las placas Arduino son más asequibles comparadas con otras plataformas de microcontroladores. La versión más cara de un módulo de Arduino puede ser montada a mano, e incluso ya montada cuesta menos de 60€. Multi-Plataforma - El software de Arduino funciona en los sistemas operativos Windows, Macintosh OSX y Linux. La mayoría de los entornos para microcontroladores están limitados a Windows. Proyecto Fin de Carrera - Ingeniería en Informática Página 57 de 185 Redes malladas con Arduino para el Internet de las cosas Entorno de programación simple y directo - El entorno de programación de Arduino es fácil de usar para principiantes y lo suficientemente flexible para los usuarios avanzados. Pensando en los profesores, Arduino está basado en el entorno de programación Procesing con lo que el estudiante que aprenda a programar en este entorno se sentirá familiarizado con el entorno de desarrollo Arduino. Software ampliable y de código abierto- El software Arduino está publicado bajo una licencia libre y preparado para ser ampliado por programadores experimentados. El lenguaje puede ampliarse a través de librerías de C++, y si se está interesado en profundizar en los detalles técnicos, se puede dar el salto a la programación en el lenguaje AVR C en el que está basado. De igual modo se puede añadir directamente código en AVR C en tus programas si así lo deseas. Hardware ampliable y de Código abierto - Arduino está basado en los microcontroladores ATMEGA168, ATMEGA328 y ATMEGA1280. Los planos de los módulos están publicados bajo licencia Creative Commons, por lo que diseñadores de circuitos con experiencia pueden hacer su propia versión del módulo, ampliándolo u optimizándolo. Incluso usuarios relativamente inexpertos pueden construir la versión para placa de desarrollo para entender cómo funciona y ahorrar algo de dinero. Proyecto Fin de Carrera - Ingeniería en Informática Página 58 de 185 Redes malladas con Arduino para el Internet de las cosas A continuación detallaremos algunas de las desventajas del uso de Arduino frente a otras plataformas de reciente aparición como puede ser una Rapberry Pi. Arduino es mono-tarea aunque se puede llegar a simular algo parecido a la multitarea no es algo real. Esto es algo que se ha visto superado por la aparición de nuevos modelos de placas que permiten el desarrollo de proyectos como el nuestro en dispositivos que poco tienen que envidiar a la capacidad de proceso de un “Smartphone” actual. Algunas de estas nuevas placas como el caso de la Intel Galileo han continuado siendo compatible con los conectores de las placas Arduino. FIGURA 3-10 INTEL GALILEO CON PINES ARDUINO Proyecto Fin de Carrera - Ingeniería en Informática Página 59 de 185 Redes malladas con Arduino para el Internet de las cosas FIGURA 3-11 RASPBERRY PI MODELO 2B El entorno de desarrollo es pobre en comparación con todas las herramientas que ya existen. El IDE de Arduino se limita a un editor de texto en el que se dispone de un botón para cargar tu código en la placa, lo cual hace que muchos desarrolladores busquen alternativas como puede ser el uso de Atmel Studio, plugins para otros entornos de desarrollo como puede ser Viual Studio de Micorosoft o Eclipse por tratarse de un entorno multiplataforma. Algunas placas compatibles con Arduino como pueden ser las WBoard de Itead utilizadas en este proyecto no exponen todos los pines del microcontrolador que llevan incorporados lo que pierde la filosofía de las placas originales donde cada pin del microcontrolador tiene su pin correspondiente para usarlo como conector, esto ha provocado en nuestro proyecto tener que duplicar el hardware WIFI para poder usar pines que el fabricante tenia usados con otros fines y no exponer otros que nos permitían tener la misma funcionalidad. Proyecto Fin de Carrera - Ingeniería en Informática Página 60 de 185 Redes malladas con Arduino para el Internet de las cosas 4. INTRODUCCION A REDES MALLADAS 4.1. INTRODUCCIÓN En este capítulo vamos a definir lo que entendemos por red mallada inalámbrica y los dos tipos de nodos que se utilizan, routers y clientes mallados. Explicaremos detalladamente las características que presentan las redes malladas inalámbricas, como la robustez, la topología dinámica, el ancho de banda limitado, la seguridad y los canales de comunicación aleatorios. Además expondremos las diferentes redes que existen dependiendo de la función que desempeñen los nodos de la red mallada. Podemos encontrarnos una red donde la infraestructura está formada por routers mallados, clientes mallados o una combinación de ambos. Si nos fijamos en el modo que se interconectan los clientes y los routers nos podemos encontrar con 3 generaciones diferentes. En la primera generación los clientes y los routers utilizan el mismo canal de radio. En la segunda generación se utilizan dos canales de radio diferentes, un canal de radio para los clientes y otro canal de radio para los routers. Y por último nos encontramos con la tercera generación que utiliza dos canales de radio para los routers. Las redes malladas inalámbricas presentan ciertas ventajas que las convierten en la mejor opción en múltiples ocasiones. Una de estas ventajas es que no necesita cableado para interconectar a los nodos y por tanto el coste es Proyecto Fin de Carrera - Ingeniería en Informática Página 61 de 185 Redes malladas con Arduino para el Internet de las cosas más bajo. Además como las redes van aumentando día a día otra ventaja que presenta es la facilidad de incluir nuevos nodos para aumentar las zonas de cobertura. Las redes malladas inalámbricas ofrecen fiabilidad en la comunicación gracias a los caminos redundante que se pueden utilizar en caso de fallo. Otro punto a favor es que las redes malladas inalámbricas son compatibles con otro tipo de redes que ya están desplegadas. Por todas estas ventajas as redes malladas inalámbricas tienen un alto potencial en el mundo de las telecomunicaciones. 4.2. DEFINICIÓN DE RED MALLADA Podemos decir que la red mallada inalámbrica es una red de nodos unidos todos con todos, o la gran mayoría, y que se conectan sin cables. En estas redes existen dos tipos de nodos, los routers mallados y los clientes mallados. Los routers mallados se encargan de realizar funciones de reenvío de tráfico de otros nodos y funciones de gateway para interconectar con otras redes existentes. Si comparamos un router mallado con un router inalámbrico convencional observamos que se alcanza la misma cobertura utilizando una potencia de transmisión menor, ya que puede dar servicio a nodos fuera de su cobertura radio a través de otros nodos. Proyecto Fin de Carrera - Ingeniería en Informática Página 62 de 185 Redes malladas con Arduino para el Internet de las cosas Un aspecto importante del funcionamiento de las redes malladas inalámbricas, comparándolo con las redes tradicionales WIFI, es que no necesitan que los nodos a los que quiere transmitir estén dentro del rango de cobertura del nodo. Es decir, que un nodo puede transmitir a otro nodo que no esté en su mismo rango de cobertura, ya que se realiza un encaminamiento multi-salto y la información va atravesando nodos intermedios hasta que alcanza el destino. Los clientes mallados también realizan la función de reenvío de tráfico de otros nodos pero no realizan las funciones de gateway. Para acceder a otras redes, como por ejemplo Internet, los clientes mallados deben conectarse a los routers mallados que permiten el acceso a otras redes gracias a la función de gateway. Como ya hemos comentado las redes malladas inalámbricas pueden tener una conexión total de todos sus nodos o parcial. Si la conexión es total la red es muy robusta ante fallos en la topología, pero resulta muy costoso y por este motivo se utilizan la alternativa de conexión parcial que también presenta una gran robustez. El principal objetivo de las redes de comunicaciones es que la información llegue a su destino de manera rápida y fiable. En este aspecto las redes malladas inalámbricas ofrecen un buen servicio, son robustas ya que poseen redundancia de enlaces y de nodos en caso de fallo. Cada nodo de la Proyecto Fin de Carrera - Ingeniería en Informática Página 63 de 185 Redes malladas con Arduino para el Internet de las cosas red mallada posee al menos dos conexiones a dos nodos diferentes, por lo que si se cae un enlace siempre se puede alcanzar al nodo por otro enlace. Las redes malladas al ser inalámbricas presenta ventajas a la hora de incrementar el número de nodos, ya que no es necesario cambiar infraestructuras como en el caso de las redes cableadas. Y por tanto se puede incluir un nuevo nodo en cualquier momento y lugar. Como consecuencia el coste de este tipo de redes inalámbricas es mucho menor que en las redes cableadas, ya que no hay que invertir en materiales de cableado y en estudios enfocados a la unión más óptima de los nodos. Como en todas las redes debemos utilizar protocolos de encaminamiento que se encargan de la transmisión de la información desde el nodo origen al nodo destino. Para conseguirlo, los protocolos de encaminamiento deben conocer el estado de la topología de la red y saber cuándo se ha introducido un nuevo nodo, cuándo ha fallado un nodo, cuándo se satura un enlace y cuándo es necesario balancear la carga por otros caminos porque hay saturación. 4.3. CARACTERÍSTICAS DE LAS REDES MALLADAS Las redes malladas inalámbricas presentan ciertas ventajas como la robustez y la flexibilidad, y otras muchas más que hacen de este tipo de red una opción muy ventajosa. Pero también existen puntos que hay que mejorar como la seguridad, el ancho de banda y los canales de comunicación. Vamos a explicar con más detalle cada una de las características de la red mallada. Proyecto Fin de Carrera - Ingeniería en Informática Página 64 de 185 Redes malladas con Arduino para el Internet de las cosas En una red mallada un conjunto de nodos se comunican entre sí de manera directa transmitiendo la información de nodo a nodo hasta que llega a su destino final. La información atraviesa múltiples saltos y no hay necesidad de una unidad centralizada que controle el modo de transmisión. La comunicación se realiza entre los nodos directamente. Cada nodo puede ser origen y destino de los datos o encaminar la información de otros nodos. Las redes malladas inalámbricas son robustas al tener varios caminos disponibles entre el nodo origen y el destino. De modo que el servicio no se verá afectado por la caída de un nodo o por la ruptura de un enlace. Otro aspecto importante de las redes malladas es la flexibilidad, ya que se pueden incluir nuevos nodos sin implicar un replanteamiento de la red global, ya que las redes malladas inalámbricas afrontan los cambios en la topología. Además se pueden incluir nuevos nodos en cualquier lugar siempre que alcance a algún vecino que ya pertenezca a la red. El ancho de banda es limitado ya que los nodos deben estar en contacto, realizan el transporte de datos de otros nodos y se producen congestiones en los enlaces. En este tipo de redes donde la información atraviesa diversos nodos, se compromete la seguridad y se puede dar la situación de que un usuario que no es el destinatario pueda acceder a información privada de otros usuarios. Por este motivo se define una subcapa de seguridad para proteger la información. Proyecto Fin de Carrera - Ingeniería en Informática Página 65 de 185 Redes malladas con Arduino para el Internet de las cosas A pesar de las desventajas presentadas, son más importantes las ventajas que ofrecen las redes malladas inalámbricas por lo que merece la pena invertir en mejorar estos puntos. 4.4. LA INFRAESTRUCTURA DE LAS REDES MALLADAS Si nos fijamos en el funcionamiento de los nodos existen tres tipos de redes malladas inalámbricas. Como hemos explicado, las redes malladas tienen dos tipos de nodos, los routers y los clientes mallados. Por tanto nos podemos encontrar una red donde la funcionalidad de la red reside únicamente en los routers, en los clientes o una combinación de ambos nodos: Red de infraestructura: En este tipo de red los routers mallados forman la infraestructura principal de la red y se conectan entre ellos de manera inalámbrica. Permiten el acceso a clientes mallados y a clientes convencionales de otras redes. Los clientes convencionales se pueden conectar a los routers mallados a través de cable Ethernet o de manera inalámbrica. Esta es la infraestrutura elegida para nuestro proyecto. Existirá un router mallado Gateway que se conectará a la plataforma mediante GPRS a la vez que pone a disposición de los nodos próximos al acceso a esta infraestructura de comunicaciones. Proyecto Fin de Carrera - Ingeniería en Informática Página 66 de 185 Redes malladas con Arduino para el Internet de las cosas FIGURA 4-1 DIAGRAMA DE INFRAESTRUCTURA Red de clientes mallados: En las redes de clientes mallados no se utilizan los routers mallados. Los clientes mallados forman la infraestructura de la red y se conectan de manera inalámbrica. En este caso los clientes mallados actúan como cliente y router para el resto de nodos. Red híbrida: Como su propio nombre indica es una red que combina los dos conceptos mencionados anteriormente. En las redes híbridas los routers y los clientes realizan las funciones de encaminamiento. Proyecto Fin de Carrera - Ingeniería en Informática Página 67 de 185 Redes malladas con Arduino para el Internet de las cosas 5. TECNOLOGIAS PROPUESTAS Cuatro fueron las posibles tecnologías encontradas para tratar de conseguir nuestro objetivo de intercomunicar varias máquinas con el claro objetivo de reducir costes en hardware e infraestructura. Todas las soluciones se basan en radio frecuencia en la banda libre de los 2.4 GHz, que es la zona de frecuencias liberada por el ministerio de industria para no interferir en otras emisiones como pueden ser la telefonía móvil, TDT… El alcance de todas las opciones evaluadas es muy parecido pudiendo llegar a los 150 metros si se trata de un espacio abierto y sin obstáculos. 5.1. NRF24L01 Fue la primera tecnología evaluada y es una de las más extendidas. Los módulos se conectan mediante SPI y poseen muchas características como: modo de bajo consumo, múltiples canales, salto entre canales, calibración de frecuencias, control de errores, modo repetidor, etc. Son empleados con mucha frecuencia para aplicaciones de telemetría. Tienen un alance de entre 10 y 150 metros, aunque es posible encontrar módulos con un alcance de 1.5 Km. Proyecto Fin de Carrera - Ingeniería en Informática Página 68 de 185 Redes malladas con Arduino para el Internet de las cosas 5.2. BLUETOOTH LE Todavía no se está empleando mucho para la comunicación entre máquinas. Ha evolucionado bastante durante los últimos años. La ultima evolución ha sido la aparición del Bluetooth 4.0 LE el cual es de bajo consumo y tiene un elevado ancho de banda. Puede abarcar una casa entera sin problemas. Igual que el WIFI una de sus ventajas es que no necesita componentes externos para conectarse a un ordenador. Algunos Arduinos están incorporando módulos Bluetooth de modo que se puede interactuar con ellos como si fueran un puerto COM, pudiendo conectar con ellos desde el IDE de Arduino como si estuviera conectado a través de un cable. 5.3. ZIGBEE Es muy conocido en el campo de la domótica y en el ámbito Arduino. Los módulos ZigBee son de bajo consumo y puede transmitir información a muy larga distancia usando otros elementos como repetidores. Comparados con el resto de soluciones más baratas son mucho más sencillos de utilizar. Los módulos ZigBee son muy conocidos porque pueden funcionar durante muchos años con baterías debido a su bajo consumo sin embargo su principal desventaja es el precio Proyecto Fin de Carrera - Ingeniería en Informática Página 69 de 185 Redes malladas con Arduino para el Internet de las cosas 5.4. WIFI Las redes WIFI son muy vulnerables a la interceptación de paquetes, a los ataques o simplemente a que usuarios no autorizados se aprovechen de la conexión, por tanto es conveniente implementar medidas de seguridad que prevengan un uso indebido de la red. El estándar IEEE 802.1x, parte del grupo de protocolos IEEE 802 (IEEE 802.1). Permite la autenticación de dispositivos conectados a un puerto LAN, estableciendo una conexión punto a punto o previniendo el acceso por ese puerto si la autenticación falla. Es utilizado en algunos puntos de acceso inalámbricos cerrados y se basa en el protocolo de autenticación extensible (EAP). Originalmente este estándar era para redes cableadas pero se modificó para poder ser utilizado en redes inalámbricas. Consiste en el control de los puertos de acceso a la red, de forma que sólo se abrirá el puerto y la conexión, si el usuario está autentificado y autorizado. En redes inalámbricas el estándar tiene tres componentes principales: El autenticador, será el punto de acceso, este recibirá la información del cliente. El solicitante, será el software del cliente que dará la información de las claves y permisos para mandarla al autenticador. Proyecto Fin de Carrera - Ingeniería en Informática Página 70 de 185 Redes malladas con Arduino para el Internet de las cosas El servidor de autenticación, será el servidor que debe verificar los permisos y claves de los usuarios. Es de gran importancia “asegurar” las comunicaciones vía WIFI, evitando que la red inalámbrica esté abierta, (accesible a todos), y además cifrar los paquetes de datos. Esto se consigue aplicando estándares de seguridad, tales como WEP (Wired Equivalent Privacy o Privacidad equivalente a cableado) o WPA (WIFI Protected Access o Acceso WIFI protegido). WEP es un protocolo de seguridad en redes inalámbricas antiguo. Permite utilizar claves de 64 a 128 bits. Este tipo de cifrado es bastante inseguro, ya que actualmente existen multitud de utilidades que rompen fácilmente la seguridad de redes con WEP. WEP codifica los datos mediante una clave de cifrado antes de enviar la información. Cuanta más longitud tenga la clave, más fuerte será el cifrado. Pero, si la clave de seguridad es estática o no cambia, es posible que un intruso persistente consiga romper la seguridad de la red WiFi. Por lo tanto, se recomienda cambiar la clave WEP frecuentemente. El protocolo de seguridad WPA y su variante WPA2 proporcionan una protección más fiable y robusta que su antecesor, WEP. Sin embargo, no todos los dispositivos soportan WPA, sobre todo los más antiguos. WPA utiliza claves de cifrado de entre 64 y 256 bits. Sin embargo en WPA se generan claves nuevas de manera dinámica con lo que dificulta su descifrado. WPA Proyecto Fin de Carrera - Ingeniería en Informática Página 71 de 185 Redes malladas con Arduino para el Internet de las cosas tiene una versión mejorada, la WPA2 que es aún más robusta y difícil de descifrar. WPA se sirve del protocolo de integridad de claves temporales (TKIP) que es un tipo de mecanismo empleado para crear el cifrado de clave dinámico y autenticación mutua. WPA2 es la segunda generación de WPA y está actualmente disponible en los puntos de acceso más modernos del mercado. Es compatible con los productos anteriores con WPA. La principal diferencia con WPA original WPA2 es que la segunda necesita el estándar avanzado de cifrado (AES) frente al referido TKIP. WPA puede utilizar dos tipos de encriptación: WPA-PSK que utiliza un algoritmo complejo de encriptación, utilizando el protocolo TKIP que es el que cambia la clave dinámicamente. Por lo que WPA-PSK es vulnerable en la primera conexión al punto de acceso que es donde utiliza la clave preestablecida, después va cambiando las claves de forma dinámica. Utilizando servidores de encriptación, usualmente Radius. Estos servidores utilizan protocolos de autenticación y autorización, de esta manera es el servidor el que se encarga de distribuir claves diferentes entre los usuarios. Este método es el más seguro, pero también el de mayor coste. Proyecto Fin de Carrera - Ingeniería en Informática Página 72 de 185 Redes malladas con Arduino para el Internet de las cosas El filtrado de direcciones MAC es una medida de seguridad adicional y se recomienda utilizarla como complemento de algunos de los métodos de encriptación. Consiste en configurar el punto de acceso o router de tal forma que tenga un listado de direcciones MAC de los equipos autorizados a conectarse a la red inalámbrica, para que aquellos equipos que no estén en la lista no puedan conectarse. Proyecto Fin de Carrera - Ingeniería en Informática Página 73 de 185 Redes malladas con Arduino para el Internet de las cosas Proyecto Fin de Carrera - Ingeniería en Informática Página 74 de 185 Redes malladas con Arduino para el Internet de las cosas 6. NIVELES DEL MODELO OSI Entender el modelo OSI nos ayuda a definir las necesidades de comunicación e intercambio de mensajes de un sistema como el que se pretende construir. 6.1. MODELO DE REFERENCIA El modelo OSI, siglas en inglés de Open System Interconnection o traducido, Interconexión de Sistemas Abiertos, es el modelo de red creado por la Organización Internacional para la Normalización (ISO) en el año 1984. El modelo define un marco de referencia para la definición de arquitecturas de interconexión de sistemas de comunicaciones. Es conveniente tener en cuenta que el modelo OSI no es una arquitectura desarrollada en ningún sistema, sino una referencia para desarrollar arquitecturas de red, de forma que los protocolos que se desarrollen puedan ser conocidos por todos. Aunque el modelo OSI no esté realmente desarrollado en ningún sistema, facilita la comprensión de los procesos de comunicación que se producen en una red. Además puede usarse como referencia para la detección de errores o desarrollo de un plan de mantenimiento. En definitiva, el modelo OSI establece un conjunto de normas mínimas que permiten una mayor compatibilidad e interoperabilidad entre los distintos tipos de tecnología de red utilizados por las empresas a nivel mundial. Proyecto Fin de Carrera - Ingeniería en Informática Página 75 de 185 Redes malladas con Arduino para el Internet de las cosas Así mismo el modelo OSI simplifica las actividades de red, ya que agrupa los procesos de comunicación en siete capas o niveles con funcionalidades específicas. Esta división en niveles diferenciados del proceso de comunicación entre dispositivos aporta las siguientes ventajas fundamentales: Reducción de la complejidad del proceso global al abordar la resolución por separado de problemas más sencillos. Normaliza los componentes de red para permitir el desarrollo y el soporte de los productos de diferentes fabricantes. Permite a los distintos tipos de hardware y software de red comunicarse entre sí. Minimiza o anula el efecto de los cambios producidos en una capa sobre el resto de niveles, lo que permite un desarrollo más rápido. Facilita el aprendizaje y comprensión del proceso de comunicación. Las características y funcionalidades esenciales de cada uno de los niveles establecidos por el modelo OSI son las siguientes: 6.2. NIVEL FÍSICO La Capa Física o Nivel 1 proporciona los medios mecánicos, eléctricos, funcionales y de procedimiento para activar, mantener y desactivar conexiones físicas. Para ello, en esta capa se definen especificaciones fundamentalmente concernientes a la transmisión de las señales y al medio de transmisión. Proyecto Fin de Carrera - Ingeniería en Informática Página 76 de 185 Redes malladas con Arduino para el Internet de las cosas El objetivo final es el de la codificación y transmisión de las señales (ópticas, eléctricas o electromagnéticas) que representan los bits que conforman las tramas de la capa superior de Enlace de Datos. Por tanto en esta capa se describen aspectos relativos a la propia interpretación de la señal (como se define una señal que representa un bit a 1, o un bit a 0). Se contemplan características físicas como la velocidad de transmisión, atenuación de la señal, interferencias posibles, modulación, amplitud o frecuencia, todo ello en función del medio de transmisión. Igualmente son descritas las características del propio medio de transmisión y por tanto aspectos relativos a las características físicas y geométricas de éstos. Fundamentalmente se emplean como medios de transmisión el cobre y la fibra óptica para redes cableadas y el aire o el vacío para la transmisión de señales electromagnéticas (microondas, infrarrojos, etc). Para cada tecnología, medio y tipo de señal, además han de adecuarse los tipos de conexión entre el medio y las máquinas. Los dispositivos intermedios vinculados con esta capa habitualmente se limitan a actuar como repetidores de la señal transmitida, no interviniendo en el procesado de la información (hubs -obsoletos-, repetidores inalámbricos, etc.). Por último, señalar que son aspectos concernientes a este nivel los relativos a la propia topología física de la red (bus, anillo, malla, estrella, etc.), al modo de transmisión (simplex, halfduplex o full duplex) o al tipo de comunicación (serie, paralela). Proyecto Fin de Carrera - Ingeniería en Informática Página 77 de 185 Redes malladas con Arduino para el Internet de las cosas 6.3. NIVEL DE ENLACE DE DATOS La capa de Enlace de Datos o nivel 2, es responsable de la transferencia fiable de información a través de un circuito de transmisión de datos. Recibe peticiones de la capa de red y utiliza los servicios de la capa física. Por tanto, se trata de una capa de conexión entre los procesos de software de las capas superiores y la capa física inferior La capa de enlace de datos releva a las capas superiores de la responsabilidad de colocar datos en la red y de recibir datos de la red. Esta capa prepara los paquetes de capa de red para la transmisión a través de alguna forma de medio, ya sea cobre, fibra o entornos o medios inalámbricos y proporciona servicios para soportar los procesos de comunicación para cada medio por el cual se transmitirán los datos. Los protocolos de la Capa 2 especifican la encapsulación de un paquete en una trama y las técnicas para colocar y sacar el paquete encapsulado de cada medio. En función de la tecnología se define la trama, cuya estructura común suele constar de cabecera, datos y cola. La cabecera puede contener información relativa a; la definición del comienzo de la trama, direccionamiento, tipo de PDU (Unidad de paquete de datos) contenido en la trama y/o campos de control. Proyecto Fin de Carrera - Ingeniería en Informática Página 78 de 185 Redes malladas con Arduino para el Internet de las cosas La cola o "trayler" suele contener campos para el control de errores y para la definición del final de la trama. Entre ambos se insertan los datos propiamente dichos. De este modo se brinda a las señales físicas una estructura que puede ser recibida por los nodos y decodificada en paquetes en el destino. La técnica utilizada para colocar y sacar la trama de los medios se denomina método de control de acceso al medio. Para que los datos se transfieran a lo largo de una cantidad de medios diferentes, puede que se requieran distintos métodos de control de acceso al medio durante el curso de una única comunicación. La capa de enlace de datos aísla de manera efectiva a las capas superiores de las transiciones entre medios que pueden producirse. Los métodos de control de acceso al medio utilizados dependerán de si los nodos comparten los medios, de cómo lo hacen y del tipo de conexión entre los nodos. En situaciones de medios compartidos estos métodos deben aportar un equilibrio entre el grado de control requerido y las colisiones que se pueden producir. A mayor control menor número de colisiones pero mayor sobre carga en el proceso y viceversa. Existen dos métodos básicos de control de acceso al medio para medios compartidos: Controlado y Basado en la contención. Proyecto Fin de Carrera - Ingeniería en Informática Página 79 de 185 Redes malladas con Arduino para el Internet de las cosas En el método Controlado, los dispositivos de red toman turnos en secuencia para acceder al medio. A este método se lo conoce como acceso programado o determinístico. Si un dispositivo no necesita acceder al medio, la oportunidad de utilizar el medio pasa al siguiente dispositivo en línea. Cuando un dispositivo coloca una trama en los medios, ningún otro dispositivo puede hacerlo hasta que la trama haya llegado al destino y haya sido procesada por el destino. Aunque el acceso controlado está bien ordenado y provee rendimiento predecible, los métodos determinísticos pueden ser ineficientes ya que un dispositivo tiene que esperar su turno antes de poder utilizar el medio independientemente de que éste esté ocupado. En el método Basado en la contención, todos los nodos compiten por el uso del medio. Cualquier dispositivo tratara de obtener acceso al medio cuando haya datos para enviar. Estos métodos usan un proceso de Acceso múltiple por detección de portadora (CSMA o Carrier Sense Multiple Access) para detectar primero si los medios están transportando una señal. Cuando un dispositivo está intentando transmitir y nota que el medio está ocupado, esperará y volverá a intentarlo después de un período de tiempo corto. Si no se detecta una señal portadora, el dispositivo Proyecto Fin de Carrera - Ingeniería en Informática Página 80 de 185 Redes malladas con Arduino para el Internet de las cosas transmite sus datos. Las redes Ethernet e inalámbricas utilizan control de acceso al medio por contención. CSMA es generalmente implementado junto con un método para resolver la contención del medio. Los dos métodos comúnmente utilizados son: CSMA/CD (with Collision Detection) y CSMA/CA (with Collision Avoidance). En CSMA/CD, el dispositivo monitoriza los medios para detectar la presencia de una señal de datos. Si no hay una señal de datos, que indica que el medio está libre, el dispositivo transmite los datos. Si luego se detectan señales que muestran que otro dispositivo estaba transmitiendo al mismo tiempo, todos los dispositivos dejan de enviar y lo intentan después. Las formas tradicionales de Ethernet usan este método. En CSMA/CA el dispositivo examina los medios para detectar la presencia de una señal de datos. Si el medio está libre, el dispositivo envía una notificación a través del medio, sobre su intención de utilizarlo. El dispositivo luego envía los datos. Este método es utilizado por las tecnologías de redes inalámbricas 802.11. Por último, señalar que los servicios y especificaciones de la capa de enlace de datos se definen mediante varios estándares basados en una variedad de tecnologías y medios a los cuales se aplican los protocolos. Algunos de estos estándares integran los servicios de la Capa 2 y la Capa 1. Las organizaciones de ingeniería que definen estándares y protocolos abiertos que se aplican a la capa de enlace de datos incluyen: Proyecto Fin de Carrera - Ingeniería en Informática Página 81 de 185 Redes malladas con Arduino para el Internet de las cosas Organización Internacional para la Estandarización (ISO) Instituto de Ingenieros Eléctricos y Electrónicos (IEEE) Instituto Nacional Estadounidense de Estándares (ANSI) Unión Internacional de Telecomunicaciones (ITU) A diferencia de los protocolos de la capa superior que están implementados principalmente en el software como el sistema operativo de host o aplicaciones específicas, los procesos de la Capa de enlace de datos se producen tanto en el software como en el hardware. Los protocolos en esta capa se implementan dentro de la electrónica de los adaptadores de red con los que el dispositivo se conecta a la red física. 6.4. NIVEL DE RED La capa de red, o nivel 3 del modelo, tiene como objetivo principal el hacer que los datos lleguen desde el nodo origen al nodo destino. Estos nodos, habitualmente no cuentan con acceso directo uno a otro puesto que se ubican en redes diferenciadas, separadas a su vez por otras redes. Los dispositivos que permiten la transición entre estas redes son los enrutadores. Por tanto, las funciones más importantes de este nivel son las de las de la identificación de la ubicación de los nodos mediante protocolos que definan direcciones lógicas y la de determinar el camino o ruta optima de tránsito de los datos a través de los sucesivos enrutadores hasta el destino final. Proyecto Fin de Carrera - Ingeniería en Informática Página 82 de 185 Redes malladas con Arduino para el Internet de las cosas Para la primera de las funciones, el direccionamiento lógico, protocolos asociados a esta capa definen direcciones que permiten ubicar un nodo en particular dentro de una red concreta. Ejemplos de estos protocolos son: IPX que a partir de un número de 32bits define la red y el host mediante su MAC o el protocolo IS-IS, que usa unas direcciones llamadas CLNP (nombre de otro protocolo), que tienen una estructura más compleja que la basada en parte red/ parte host. En el protocolo de Internet (IP), las direcciones IP consisten en un número de 32bits (IPv4) al que se asocia una máscara de subred para determinar qué parte de la dirección corresponde a la red y qué parte al host. La versión IPv6 basada en direcciones de 128bits permitirá ampliar el número de direcciones disponibles. El protocolo de internet tiene en sus encabezados datos como la versión, las direcciones origen y destino, unas banderas que controlan la fragmentación en un enlace directo, otras banderas para calidad de servicio y otras opciones por ejemplo, la encapsulación segura (ESP por sus siglas en inglés Encapsulating Security Payload). Una vez definidas las direcciones de los nodos extremos, la segunda función principal, el enrutamiento, permite establecer el mejor tránsito posible de los datos (designados paquetes en este nivel), en base a criterios denominados métricas, a su vez asociada a distintas magnitudes: distancia, Proyecto Fin de Carrera - Ingeniería en Informática Página 83 de 185 Redes malladas con Arduino para el Internet de las cosas coste, retardo de transmisión, número de saltos, etc., o combinaciones de varias de éstas. Para ello los routers, en base a la dirección de destino, encapsulada en el paquete, han de determinar la dirección del reenvío de la información recibida. Puesto que éstos 'conocen' únicamente las redes adyacentes deben existir mecanismos que permitan intercambiar información sobre las redes y ubicaciones entre los routers. Estos mecanismos son conocidos como protocolos de enrutamiento (por ejemplo, RIP, IGRP u OSPF). Existen algunas otras funciones adicionales que se vinculan en la práctica a ésta capa, por ejemplo, el mapeado de direcciones lógicas a direcciones físicas en ethernet se realiza con el protocolo (ARP) que se considera de capa 3, la obtención automática de una dirección, parte de la calidad de servicio (QoS), etc. Otra funcion que cumple usualmente la capa de red es la fragmentación en un enlace (en caso posible), que consiste en permitir que un paquete grande se divida en varios paquetes pequeños, siendo responsabilidad del protocolo de capa 3 en uso, controlar cuántos y cuáles fueron los fragmentos en los que se dividió un paquete. Con IP eso sólo puede suceder en enlaces directos o punto a punto. Proyecto Fin de Carrera - Ingeniería en Informática Página 84 de 185 Redes malladas con Arduino para el Internet de las cosas 6.5. NIVEL DE TRANSPORTE La capa de transporte, o nivel 4 del modelo, tiene como objetivo principal el identificar flujos o conversaciones diferentes entre dos nodos de la red, es decir; administrar las comunicaciones independientes entre dos nodos. La PDU o Unidad de Datos genérica de la capa 4 la PDU tiene por nombre Segmento o datagrama de datos. En base a los niveles o capas previos los flujos de información ('conversaciones') que provienen de un dispositivo y van a otro, son indistinguibles unos de otros con sólo la información y procesos implementados hasta la capa 3. Una conversación tiene como identificador general las direcciones origen y destino (p. ej.: la IP u otra dirección de capa 3), pero para poder diferenciar dos flujos de datos diferentes que ocurren simultáneamente entre el mismo origen y destino se usan otros dos identificadores, uno para la conversación saliente y otro para la entrante. Este concepto, a veces, es definido como identificación de flujos de punto final a punto final o de extremo a extremo. Por otro lado los protocolos de este nivel definen un tamaño máximo de unidad llamado MSS -maximum segment size- para los Segmentos o datagramas de datos. Cuando una comunicación llega a esta capa y tal comunicación está compuesta por datos mayores a la MSS, se debe segmentar la transmisión en partes de ese tamaño o menor que se puedan Proyecto Fin de Carrera - Ingeniería en Informática Página 85 de 185 Redes malladas con Arduino para el Internet de las cosas transportar. De ser necesaria la segmentación, se hace necesaria la identificación del orden de secuencia de cada segmento puesto que es posible que los segmentos individuales tomen diferentes caminos y lleguen en un orden distinto. La inclusión en cada segmento de su número de secuencia, permite la reconstrucción ordenada de los datos así como detectar posibles pérdidas de datos y hasta solicitar la retransmisión de tales datos lo que redunda en mayor confiabilidad. Es decir, garantizar que si algún segmento se pierde en el camino se pueda pedir la retransmisión y retribuir la pérdida transparentemente. Es función, así mismo, de esta capa el control del flujo. Es decir, facilitar mecanismos para evitar que un emisor rápido desborde a un receptor lento incapaz de entregar velozmente los datos recibidos a los procesos que los necesitan. Los protocolos más conocidos de este nivel son TCP y UDP dado que forman parte de la definición de pila de protocolos TCP/IP. Ambos se ocupan de diferentes necesidades de la capa de transporte, teniendo en común el uso de puertos para diferenciar las conversaciones entre dos nodos. Normalmente quien origina el flujo de datos conoce a qué puerto enviar sus datos y espera que el otro lado esté atento a ese puerto para responder. TCP (Transmission Control Protocol) es un protocolo complejo que obedece a la necesidad de una comunicación confiable. Dentro de los mecanismos que implementa TCP para asegurar la confiabilidad está el Proyecto Fin de Carrera - Ingeniería en Informática Página 86 de 185 Redes malladas con Arduino para el Internet de las cosas establecimiento de sesión, el uso de acuses de recibo y el control de flujo con ventana deslizante. UDP (User Datagram Protocol) por otro lado responde a una necesidad de comunicación no confiable, es decir, una entrega simple de datos pequeños que no requieren retransmisión ni acuses de recibo. En este caso la confiabilidad es implementada por capas superiores o bien no se hace necesaria debido a que la pérdida esporádica de fragmentos de información (denominados datagramas en UDP) es irrelevante como puede ser el caso de transmisión de una conversación de voz. A su vez el menor tamaño del encabezado UDP (de 8bytes) frente a los 20bytes de UTP, lo hace más eficiente para el envío de datos pequeños. 6.6. NIVEL DE SESIÓN La capa de Sesión o nivel 5 del modelo, usa las funciones de la capa de transporte para efectuar las suyas y ofrecérselas a la capa de presentación. La capa de sesión permite a los usuarios de máquinas diferentes establecer sesiones entre ellos. Una sesión permite el transporte ordinario de datos, como lo hace la capa de transporte, pero también proporciona servicios mejorados que son útiles en algunas aplicaciones. A la capa de sesión usualmente se le responsabiliza de iniciar y gestionar la conexión de alto nivel dentro de un servicio particular. Allí se decide cuándo y cómo iniciar una conexión, qué requisitos debe cumplir y en Proyecto Fin de Carrera - Ingeniería en Informática Página 87 de 185 Redes malladas con Arduino para el Internet de las cosas qué modalidad se llevará a cabo. Se encarga entonces de decidir si la transmisión va a ser alternada, lo que en programación se suele llamar sincronizada o bloqueante o no bloqueante o asíncrona, (las entidades transmiten sin esperar a que el otro lado reciba la información). Otra responsabilidad de la capa de sesión del modelo de referencia OSI es establecer puntos de chequeo, de tal manera que si la operación es interrumpida, la transacción pueda mantener su integridad, es decir, deshacer todo o recuperar lo que se había hecho. Finalmente, la capa de sesión también se ocupa del control de la concurrencia. Cuando un servicio está en escucha y varias comunicaciones intentan abrir una sesión con éste, la capa de sesión administra cuándo y cómo se van a establecer las comunicaciones concurrentes con el servidor en cuestión. Algunos protocolos que realizan funciones a este nivel pueden ser; SAP, tuberías nombradas de Unix/Linux, NetBIOS, RCP (llamada a procedimiento remoto), SCP (protocolo de comunicación simple) o ASP (Protocolo de sesión APPLE TALK). 6.7. NIVEL DE PRESENTACIÓN La capa de presentación o nivel 6 del modelo permite la comunicación entre aplicaciones en diversos sistemas informáticos de tal forma que sean transparentes para las aplicaciones. Proyecto Fin de Carrera - Ingeniería en Informática Página 88 de 185 Redes malladas con Arduino para el Internet de las cosas La capa de presentación tiene la misión de presentar los datos en una forma que el dispositivo receptor pueda comprender. Para ello debe gestionar aspectos como el formateo, cifrado y compresión de los datos. La Capa opera como traductor entre la sintaxis específica de las aplicaciones y la sintaxis de la transferencia, permitiendo gestionar diferentes tipos de códigos de representación de caracteres, imágenes, sonido, etc. La capa 6 también es responsable del cifrado de datos con el objeto de proteger información confidencial durante la transmisión. Para ello se utiliza una clave de cifrado para cifrar los datos en el lugar origen y luego descifrarlos en el lugar destino. Otra de las funciones de esta capa de presentación es la compresión de los datos. La compresión funciona mediante el uso de algoritmos (fórmulas matemáticas complejas) para reducir el tamaño de los archivos. El algoritmo busca patrones de bits repetidos en el archivo y entonces los reemplaza con un token. Un token es un patrón de bit mucho más corto que representa el patrón largo Hay varios ejemplos de protocolos que se clasificarían en ésta capa: ASN.1 y MIME. El primero es una forma normalizada de representar datos, es decir, define una forma “estándar” de pasar un tipo de dato por una red, por ejemplo, cómo codificar un número con punto decimal que sea reconocible tanto en el extremo que lo envía como en el que lo lee sin importar si las máquinas tienen arquitecturas diferentes (p. ej.: Windows y Unix). Mime es un Proyecto Fin de Carrera - Ingeniería en Informática Página 89 de 185 Redes malladas con Arduino para el Internet de las cosas protocolo que también define tipos de datos, sólo que de un poco más alto nivel. MIME se usa para transportar los archivos adjuntos en protocolos como HTTP o SMTP, con él se definen tipos de archivo como IMAGE/JPG o TEXT/HTML para enviar éstos archivos como parte de una página web o de un mensaje de correo. 6.8. NIVEL DE APLICACIÓN La capa de Aplicación o nivel 7 del modelo de referencia OSI, tiene como principal función la de proveer mecanismos para que las aplicaciones puedan acceder a los servicios de las demás capas y por tanto a la red. Así mismo, define los protocolos que utilizan las aplicaciones para intercambiar datos, como correo electrónico (POP y SMTP), gestores de bases de datos y protocolos de transferencia de archivos (FTP). En algunos casos actúa demás como interface para los usuarios y los procesos de aplicaciones para tener acceso a servicios de red. Otras funciones específicas asociadas a esta capa son: Uso compartido de recursos y redirección de dispositivos Acceso a archivos remotos. Acceso a la impresora remota. Comunicación entre procesos. Administración de la red. Servicios de directorio. Proyecto Fin de Carrera - Ingeniería en Informática Página 90 de 185 Redes malladas con Arduino para el Internet de las cosas Mensajería electrónica (como correo). Terminales virtuales de red. La capa utiliza los protocolos de las aplicaciones y servicios. Los protocolos especifican como se estructuran los datos dentro de los mensajes y los tipos de mensajes posibles a intercambiar entre origen y destino. Estos tipos de mensajes pueden ser, por ejemplo; solicitudes de servicio, acuses de recibo, mensajes de datos, mensajes de estado o de error. Dada la variedad de aplicaciones y servicios de red, existen multitud de protocolos, siendo los más populares entre otros los siguientes: FTP para transferencia de archivos, HTTP, HTTPS para aplicaciones web, DNS para resolución de nombres, TELNET, SSH para conexiones remotas, DHCP para configuración dinámica de direcciones o SMTP, POP para servicios de correo. Proyecto Fin de Carrera - Ingeniería en Informática Página 91 de 185 Redes malladas con Arduino para el Internet de las cosas Proyecto Fin de Carrera - Ingeniería en Informática Página 92 de 185 Redes malladas con Arduino para el Internet de las cosas 7. HARDWARE PARA ESTE PROYECTO Para conseguir el objetivo del proyecto ha sido necesaria la conexión de diversos módulos hardware, los cuales detallaremos a continuación. En la sección de anexos puede encontrarse la manera en que deben conectarse todos estos componentes según el caso de uso. 7.1. TARJETA ARDUINO GBOARD PRO 7.1.1. VISIÓN GENERAL GBoard Pro es la única placa Arduino con módulo SIM900 GSM/GPRS, zócalo Xbee, interfaz para el módulo nRF24L01+, interfaz tarjeta micro SD, interfaz paralela ITDB02 para modulo LCD. Permite en un único bloque electrónico control inalámbrico vía XBee, nRF24L01+, o GSM/GPRS con funciones que van desde un hogar inteligente hasta el control remoto de robots. 7.1.2. ESPECIFICACIONES Tamaño de la placa: 131.0mm X 68.8mm X 1.6mm Alimentación: 7~23V DC Voltaje de operación: 3.3V DC Microcontrolador: ATmega2560 Indicadores: PWR, NET, Status, Test Interfaces de comunicación: XBee, nRF24L01+,UART, IIC, ITDB02 LCD, micro SD Proyecto Fin de Carrera - Ingeniería en Informática Página 93 de 185 Redes malladas con Arduino para el Internet de las cosas 7.1.3. CARACTERÍSTICAS ELÉCTRICAS Característica Min. Valor típico Max. Unidades Alimentación 7 - 23 VDC Entrada en alto 3 3.3 3.6 V Entrada en bajo -0.3 0 0.5 V Media de consumo de corriente - 100 500 mA Máximo consumo puntual - - 2 A 7.1.4. HARDWARE FIGURA 7-1 PLACA GBOARD PRO Proyecto Fin de Carrera - Ingeniería en Informática Página 94 de 185 Redes malladas con Arduino para el Internet de las cosas 7.1.5. MAPA DE PINES Interfaz del módulo paralelo LCD ITBD02 Posición en la Interfaz Nombre de la interfaz Índice Arduino Pin Atmega 2560 1 GND GND GND 2 DB0 D37 PC0 3 VCC 4.2V - 4 DB1 D36 PC1 5 NC - - 6 DB2 D35 PC2 7 LCD_RS D38 PD7 8 DB3 D34 PC3 9 LCD_WR D39 PG2 10 DB4 D33 PC4 11 LCD_RD 3V3 3V3 12 DB5 D32 PC5 13 DB8 D22 PA0 14 DB6 D31 PC6 15 DB9 D23 PA1 16 DB7 D30 PC7 17 DB10 D24 PA2 18 Touch_CLK D6 PH3 19 DB11 D25 PA3 20 Touch_CS D5 PE3 21 DB12 D26 PA4 22 Touch_DIN D48 PL1 23 DB13 D27 PA5 24 Touch_BUSY - - Proyecto Fin de Carrera - Ingeniería en Informática Página 95 de 185 Redes malladas con Arduino para el Internet de las cosas 25 DB14 D28 PA6 26 Touch_DOUT D3 PE5 27 DB15 D29 PA7 28 Touch_IRQ D2 PE4 29 LCD_CS D40 PG1 30 SD_MISO D50 PB3 31 NC - - 32 SD_SCK D52 PB1 33 LCD_RST D41 PG0 34 SD_MOSI D51 PB2 35 NC - - 36 SD_CS D53 PB0 37 LED+ 3V3 3V3 38 NC - - 39 LED- GND GND 40 NC - - Interfaz de conectores Posición en la Interfaz Nombre de la interfaz Índice Arduino Pin Atmega 2560 1 EB0 A0 PF0 2 EB1 A1 PF1 3 EB2 A2 PF2 4 EB3 A3 PF3 5 EB4 A4 PF4 6 EB5 A5 PF5 7 EB6 A6 PF6 8 EB7 A7 PF7 9 EB8 A8 PK0 10 EB9 A9 PK1 11 EB10 A10 PK2 Proyecto Fin de Carrera - Ingeniería en Informática Página 96 de 185 Redes malladas con Arduino para el Internet de las cosas 12 EB11 A11 PK3 13 EB12 A12 PK4 14 EB13 A13 PK5 15 EB14 A14 PK6 16 EB15 A15 PK7 17 SCL D21 PD0 18 SDA D20 PD1 19 RX1 D19 PD2 20 TX1 D18 PD3 Modulo nrf24l01+ Posición en la Interfaz Nombre de la interfaz Índice Arduino Pin Atmega 2560 1 GND - - 2 3V3 - - 3 CE D12 PB6 4 CS D11 PB5 5 SCK D9 PH6 6 MOSI D8 PH5 7 MISO D7 PH4 8 IRQ - PE7 Micro SD Socket Posición en la Interfaz Nombre de la interfaz Índice Arduino Pin Atmega 2560 1 SD_CS D4 PG5 2 SD_MOSI D51 PB2 3 3V3 - - 4 SD_SCK D52 PB1 5 GND - - 6 SD_MISO D50 PB3 Proyecto Fin de Carrera - Ingeniería en Informática Página 97 de 185 Redes malladas con Arduino para el Internet de las cosas Interfaz XBee Posición en la Interfaz Nombre de la interfaz Índice Arduino Pin Atmega 2560 1 XBee_DOUT D15(RX3) PJ0 2 XBee_DIN D14(TX3) PJ1 3 XBee_RESET D49 PL0 Interfaz de comunicaciones SIM900 Posición en la Interfaz Nombre de la interfaz Índice Arduino Pin Atmega 2560 1 SIM900_TXD D17(RX2) PH0 2 SIM900_RXD D16(TX2) PH1 3 SIM900_RST D47 PL2 4 SIM900_PWR D46 PL3 7.1.6. INDICADORES PWR: Indicador de corriente. Normalmente “on” indica un correcto suministro de energía en la GBoard Pro. Estado: Indicador de estado. Normalmente “on” indica que SIM900 todavía esta encendido. NET: Indicador de Red, “off” indica que SIM 900 no funciona. Ciclo “on” de 64 ms. y “off” 800 ms. indica que SIM900 no puede encontrar la red. Ciclo “on” de 64 ms. y “off” 3000 ms. indica que SIM900 está registrado en la red. Proyecto Fin de Carrera - Ingeniería en Informática Página 98 de 185 Redes malladas con Arduino para el Internet de las cosas Ciclo “on” de 64 ms. y “off” 300 ms. indica comunicación GPRS. 7.1.7. BOTONES Reset: Botón de “reset”, presiona el botón para reiniciar el ATmega2560. SIM_Reset: Botón de “reset” SIM900, presiona el botón para resetear el SIM900 SIM_Power: Botón de encendido SIM900, si el SIM900 está apagado, se encenderá manteniendo el botón pulsado durante más de 500 ms. Si SIM900 esta encendido se apagará manteniendo presionado el botón durante más de 500 ms. 7.1.8. SIM900 CONEXIÓN DE ALIMENTACIÓN Y RESET DEL En la Gboard Pro, los botones de encendido y apagado para el módulo SIM900 pueden ser manipulados vía software con los pines de entrada/salida, la conexión de estos pines se muestra a continuación: Pin Arduino Pin SIM900 Activo D46 PWR Activo en alto D47 RESET Activo en alto Proyecto Fin de Carrera - Ingeniería en Informática Página 99 de 185 Redes malladas con Arduino para el Internet de las cosas 7.2. TARJETA ARDUINO WBOARD PRO 7.2.1. VISIÓN GENERAL. WBoard Pro es una placa de desarrollo wifi basada en Arduino MEGA2560. Cuenta con un chip en placa ESP8266 (que tiene el firmware ya cargado en él). Puedes programar el ESP8266 para conectarte a internet a través de los puertos serie. Wboard Pro soporta la librería IoTgo para agilizar el desarrollo de los proyectos. 7.2.2. CARACTERISTICAS. Interfaz Bee estándar, interfaz nRF24L01+, zócalo para tarjeta SD, indicadores Led de Test y corriente. Chip ESP8266 integrado en la placa que permite las conexiones a internet via WIFI. Interfaz de 40 pines compatible con Raspberry Pi, por lo que puede usarse con la mayoría de los complementos de Raspberry Pi. Diseñada para usarse dentro de una carcasa. 7.2.3. ESPECIFICACIONES. Pin Arduino Pin SIM900 Tamaño PCB 90 x 60 x 1.6mm Interface Interfaz estándar Bee, interfaz nRF24L01+, uSD, uUSB Indicadores PWR, Test Proyecto Fin de Carrera - Ingeniería en Informática Página 100 de 185 Redes malladas con Arduino para el Internet de las cosas 7.2.4. CARACTERISTICAS ELECTRICAS Característica Símbolo Min. Valor típico Max. Unidades Alimentación Vsupply 7 - 23 VDC Entrada en alto VDD 3 3.3 3.6 V Entrada en bajo VIH -0.3 0 0.5 V Media de consumo de corriente VIL - 100 500 mA Máximo consumo puntual IDD - - 2 A 7.2.5. HARWARE FIGURA 7-2 PLACA WBOARD PRO Proyecto Fin de Carrera - Ingeniería en Informática Página 101 de 185 Redes malladas con Arduino para el Internet de las cosas FIGURA 7-3 FOTO WBOARD PRO Aclaraciones sobre el uso del Jumper 3 y FW J3: Cuando hay jumpers conectando 2-4 y 1-3, CP2102 conectará con el Puerto UART0 del Mega2560. Conectando 4-6 y 3-5, CP2102 conectará con el Puerto UART0 del ESP8266. FW: Conecta el pin GPIO0 a masa GND. Si quieres actualizar el firmware en el ESP8266, se debe conectar un jumper en FW. Después del reset del ESP8266, se puede comenzar con la actualización del firmware en el ESP8266. Proyecto Fin de Carrera - Ingeniería en Informática Página 102 de 185 Redes malladas con Arduino para el Internet de las cosas E-RESET: Reseteo del ESP8266. El pin de reset del ESP8266 está conectado al PC0 (Arduino D37) del Mega2560. Si se establece PC0 a bajo, se puede hacer un reseteo suave del ESP8266. 7.2.6. MAPA DE PINES Interfaz Rpi Posición en la Interfaz Nombre de la interfaz Índice Arduino Pin Atmega 2560 1 3V3 2 5V 3 IIC-SDA PD0 D20 4 5V 5 IIC-SCL PD1 D21 6 GND 7 GPIO0 PF0 A0 8 TXD2 PH1 D16 9 GND 10 RXD2 PH0 D17 11 GPIO1 PF1 A1 12 GPIO2 PF2 A2 13 GPIO3 PF3 A3 14 GND 15 GPIO4 PF4 A4 16 GPIO5 PF5 A5 17 3V3 18 GPIO6 PF6 A6 19 SPI-MOSI PB2 D51 20 GND 21 SPI-MISO PB3 D50 Proyecto Fin de Carrera - Ingeniería en Informática Página 103 de 185 Redes malladas con Arduino para el Internet de las cosas 22 CS PG1 D40 23 SPI-SCK PB1 D52 24 SPI-NSS PB0 D53 25 GND 26 GPIO7 PF7 A7 27 GPIO8 PK0 A8 28 GPIO9 PK1 A9 29 GPIO10 PK2 A10 30 GND 31 GPIO11 PK3 A11 32 GPIO12 PK4 A12 33 GPIO13 PK5 A13 34 GND 35 GPIO14 PK6 A14 36 GPIO15 PK7 A15 37 RST PG0 D41 38 WR PG2 D39 39 GND 40 RS PD7 D38 Proyecto Fin de Carrera - Ingeniería en Informática Página 104 de 185 Redes malladas con Arduino para el Internet de las cosas 7.3. ESP8266 FIGURA 7-4 FOTO WBOARD PRO Esta placa permite las comunicaciones desde un microcontrolador como puede ser Arduino. Se lanzó al mercado a finales del año 2014 y desde entonces se ha popularizado en la comunidad “maker” y profesional por ser un componente de bajo coste, que permite dar grandes capacidades de comunicación a los proyectos. A continuación se puede ver una gráfica de “Google Tendencias” que muestra este hecho. FIGURA 7-5 GOOGLE TENDENCIAS ESP8266 7.3.1. VISIÓN GENERAL ESP8266 ofrece una solución completa para la conexión a redes WIFI, permitiendo no solo alojar la solución sino descargar de ésta funcionalidad a otros procesos. Proyecto Fin de Carrera - Ingeniería en Informática Página 105 de 185 Redes malladas con Arduino para el Internet de las cosas Si el ESP8266 aloja la aplicación y solo él es el procesador en el dispositivo, es capaz de arrancar directamente de una memoria flash externa. Tiene memoria cache integrada para mejorar el funcionamiento del sistema en estas aplicaciones y para reducir las necesidades de memoria externa. Alternativamente, funcionando como adaptador WIFI, se puede dotar a cualquier microcontrolador a través del puerto Serie UART o con un puente interfaz CPU AHB de capacidades de comunicación inalámbrica. La capacidad de procesamiento y almacenamiento permiten a este componente ser integrado con sensores y otros componentes a través de sus pines GPIO. 7.3.2. POSIBLES USOS Algunos de los posibles usos que se pueden dar a este componente son: Enchufes inteligentes Domótica Redes malladas Control industrial inalámbrico Monitorización de bebes Cámaras IP Redes de sensores WSN Wereables electrónicos Tags Identificativos de seguridad Proyecto Fin de Carrera - Ingeniería en Informática Página 106 de 185 Redes malladas con Arduino para el Internet de las cosas Sistemas de balizas para posicionamiento 7.3.3. COMANDOS AT El modo de comunicación con este módulo es a través de comandos AT que se envían a través del puerto UART0. En este caso del ESP8266. El conjunto de comandos Hayes es un lenguaje desarrollado por la compañía Hayes Communications que prácticamente se convirtió en estándar abierto de comandos para configurar y parametrizar módems. Los caracteres «AT», que preceden a todos los comandos, significan «Atención», e hicieron que se conociera también a este conjunto de comandos como comandos AT. Midiendo la longitud de los bits se puede determinar en detalle la velocidad de transmisión. Un aparato que implemente el conjunto de comandos Hayes se considera compatible Hayes. Parte del conjunto de comandos Hayes fue incluido por la ITU-T en el protocolo V.25ter, actual V.250. La adopción de este estándar hizo superfluo el desarrollo de controladores específicos para distintos módems. A continuación se muestran algunos de los comandos AT que soporta este dispositivo: Comando Descripción Tipo Parámetros y ejemplos AT Pruebas generales Básico - Proyecto Fin de Carrera - Ingeniería en Informática Página 107 de 185 Redes malladas con Arduino para el Internet de las cosas AT+RST Reinicio del modulo Básico - AT+GMR Comprobar la Básico - Wifi 1= Sta, 2= AP, 3=both, Sta es el modo por defecto para un versión del firmware AT+CWMODE Modo del wifi router, AP es el modo por defecto para dispositivos AT+CWJAP Unirse al punto de Wifi ssid = ssid, pwd = wifi contraseña acceso AT+CWLAP Listar los puntos de Wifi acceso AT+CWQAP Desconectar del Wifi punto de acceso AT+ CWSAP AT+CWLIF Establecer los Wifi ssid, pwd, chl = canal, ecn = encriptacion; eg. Conectar a tu parámetros del router: AT+CWJAP="www.electrodragon.com","helloworld"; y punto de acceso comprueba si esta conectado: AT+CWJAP? Comprobar la ip del Wifi dispositivo conectado AT+ Comprobar el CIPSTATUS estado de la TCP/IP <id>,<type>,<addr>,<port>,<tetype>= modo cliente o servidor TCP/IP id = 0-4, type = TCP/UDP, addr = dirección IP, port= puerto; conexión AT+CIPSTART Establecer una conexión TCP o eg. Conectar a otro servidor ip, Establecer conexión multiple UPD primero: AT+CIPMUX=1; conectar: AT+CIPSTART=4,"TCP","X1.X2.X3.X4",9999 AT+CIPMODE Establecer el modo TCP/IP de transmisión AT+CIPSEND Enviar datos 0 no modo de datos, 1 modo de datos; devuelve "Link is builded" TCP/IP eg. send data: AT+CIPSEND=4,15 y entonces enviar los datos. AT+CIPCLOSE Cerrar la conexión TCP/IP TCP UDP AT+CIFSR Obtener la dirección TCP/IP IP AT+ CIPMUX Permitir conexiones TCP/IP 0 para conexión simple 1 para conexión múltiple TCP/IP mode 0 para finalizar el modo servidor, mode 1 para abrir; múltiple AT+ Funcionar como CIPSERVER servidor port = puerto; eg. Inicializar servidor TCP AT+CIPSERVER=1,8888, comprobar la propia ip del servidor: AT+CIFSR=? AT+ CIPSTO Establecer el AT+CIP timeout del servidor STO=<ti Proyecto Fin de Carrera - Ingeniería en Informática Página 108 de 185 Redes malladas con Arduino para el Internet de las cosas me> +IPD Información recibida Para modo de conexión simple(CIPMUX=0): + IPD, <len>: Para modo de conexión múltiple (CIPMUX=1): + IPD, <id>, <len>: <data> 7.4. WEE SERIAL WIFI MODULE FIGURA 7-6 WEE ESP8266 El módulo Wee es usado en el proyecto para facilitar la conexión de los dispositivos a la placa principal. La ventaja de esta placa es que incorpora el chip ESP8266 como el de la sección anterior y el de la WBoar Pro pero en este caso está montado sobre una placa que cumple el estándar de conexión XBee lo que nos permite usarlo sobre el zócalo que tiene la placa GBoar Pro. Usando este zócalo reducimos el número de conexiones y aumentamos la consistencia de todo el conjunto ya que este tipo de conexiones son mucho más estables que usar cables conectados a los jumpers de las placas y nos evitan posibles malos contactos durante el desarrollo de los prototipos. Proyecto Fin de Carrera - Ingeniería en Informática Página 109 de 185 Redes malladas con Arduino para el Internet de las cosas Este zócalo además permite que el fabricante haya expuesto más pines del ESP8266 por lo que podrían usarse más funcionalidades a través de los pines GPIO lo que en el caso anterior no es posible. Índice del pin Nombre del pin 1 3V3 2 TX 3 RX 4 - 5 RST# 6 - 7 FW 8 - 9 - 10 GND 11 - 12 - 13 MTMS 14 GPIO2 15 - 16 - 17 - 18 MTD0 19 MTCK 20 MTDI Descripción Permite resetear a estableciendo a “bajo” Pin para actualizar firmware Proyecto Fin de Carrera - Ingeniería en Informática Página 110 de 185 Redes malladas con Arduino para el Internet de las cosas 7.5. NRF24L01 FIGURA 7-7 IMAGEN NFR24L01 7.5.1. VISION GENERAL Este módulo permite que varios microcontroladores sean capaces de comunicarse entre sí de forma distante a través de una red inalámbrica. Permite manejar sensores remotos de temperatura, presión, alarmas, etc… Comunicarse con Robots de control y vigilancia desde 10 a 500 metros de distancia. Control remoto y monitorización de edificios cercanos y maquinaria. Vehículos autónomos de todo tipo. Los transceptores NRF24L01 son una serie de módulos de radio de 2,4 GHz que se basan en el chip de Nordic Semiconductor nRF24L01+. El Nordic nRF24L01+ integra un completo transceptor RF de 2,4 GHz, un sintetizador de Proyecto Fin de Carrera - Ingeniería en Informática Página 111 de 185 Redes malladas con Arduino para el Internet de las cosas RF y toda la lógica de banda base incluyendo un acelerador de protocolo por hardware Enhanced ShockBurst™ con una interfaz SPI de alta velocidad para el controlador de la aplicación. El módulo Transceptor es de baja potencia y corto alcance (200 metros más o menos). 7.5.2. RANGO DE COBERTURA El rango es muy dependiente de la situación de los transceptores y tienen mucho más alcance cuando: están en la línea de visión, al aire libre sin obstáculos como paredes y otros materiales. La distancia normal, que indican los distintos proveedores para el módulo de baja potencia, es de unos 50 metros. Pero este valor es para espacio abierto entre unidades funcionando a 250 KHz, en interiores, el alcance es mucho menor como hemos comentado. Se sugiere que las pruebas se realicen en ubicaciones reales antes de tomar una decisión de cuál es la ideal para el proyecto. Hay unidades con un preamplificador de antena para el receptor y un amplificador de potencia para el transmisor que cuentan con antena externa. La comunicación entre una unidad de este tipo y varias unidades de bajo consumo producirá mejores resultados que utilizar dos unidades de baja potencia. Cada situación es diferente y es difícil conseguir un número exacto sin hacer pruebas reales. Afortunadamente, el mismo producto se encargará, a nivel de placa, de muchos de los detalles físicos y eléctricos, de la impedancia de adaptación de Proyecto Fin de Carrera - Ingeniería en Informática Página 112 de 185 Redes malladas con Arduino para el Internet de las cosas antena, etc. Esta librería se encarga de la inicialización de registro de varios detalles operativos. Hay módulos adicionales que añaden amplificadores de potencia al transmisor y preamplificadores al receptor para conseguir distancias más largas, (aseguran que pueden llegar hasta 1 km). Estos módulos utilizan una antena externa que puede ser una antena simple que esté directamente conectada o un cable conectado a una antena con más ganancia o directividad. Así es como se ven los diferentes tipos: 2.4GHz NRF24L01+ Antenna Wireless Transceiver Module For Microcontrol Esta es la versión de bajo consumo, con antena en zig-zag incorporada. nRF24L01-LN-PA-2nRF24L01-LN-PA-1 Está la versión con amplificador de potencia de transmisión y preamplificador para recepción. Los 8 pines se conectan con Arduino igual en todas las versiones de transceptor y se utiliza el mismo software. Estos transceptores pueden tanto enviar, como recibir datos en “paquetes” de varios bytes a la vez. Incluyen una función de corrección de errores y reenvío y es posible comunicar una unidad con hasta otras 6 unidades similares al mismo tiempo. Proyecto Fin de Carrera - Ingeniería en Informática Página 113 de 185 Redes malladas con Arduino para el Internet de las cosas Sin embargo, a pesar de su bajo coste estas unidades tienen una increíble complejidad interna, pero gracias a algunas personas con talento quienes han escrito las librerías para Arduino, los hacen fáciles de utilizar para el resto de usuarios. 7.6. HM-10 FIGURA 7-8 HM-10 7.6.1. VISION GENERAL Bluetooth Low Energy (BLE) es una nueva funcionalidad añadida al estándar Bluetooth a partir de la versión 4.0. La versión tradicional de Bluetooth se denomina Bluetooth Classic para distinguirla de esta nueva versión. La especificación se puede descargar desde este enlace. BLE surgió para responder al requisito de "muy" bajo consumo que Bluetooth Classic no podía cumplir. Principales características: Proyecto Fin de Carrera - Ingeniería en Informática Página 114 de 185 Redes malladas con Arduino para el Internet de las cosas BLE utiliza la misma banda (2.4GHz) que Bluetooth Classic o WIFI sin embargo el protocolo está optimizado para evitar colisiones y reducir el consumo de energía (tiempo en que la radio está emitiendo). Un dispositivo puede implementar sólo BLE, sólo Bluetooth Classic o ambos. BLE no está pensando para streaming de datos (su throughput está en el orden de bytes o unos pocos Kbyes por segundo). BLE tiene un alcance real de unos pocos metros (Personal Area Networks, PAN). En la versión 4.0 aún no se define una funcionalidad mesh para generar redes malladas de dispositivos (wireless sensor networks, WSN). La versión 4.1 ya incluye funcionalidad mesh. La versión 4.0 sólo permite la conexión punto a punto entre dos dispositivos (por ejemplo un móvil se puede conectar a varios dispositivos sensores, pero cada conexión es independiente). El objetivo de BLE es conseguir objetos conectados que puedan tener una vida útil de varios meses e incluso años alimentados con una pila de botón. Su principal caso de uso actual es la conectividad con dispositivos móviles. La gran mayoría de los móviles actuales soportan BLE (iOS, Android, Windows Mobile, Blackberry). EL móvil sueles actuar como gateway para conectar el objeto a Internet Proyecto Fin de Carrera - Ingeniería en Informática Página 115 de 185 Redes malladas con Arduino para el Internet de las cosas El Módulo HM-10 abstrae y empaqueta una conexión Bluetooth Low Energy en una conexión serie. En la configuración "de fábrica" del firmware el módulo se comporta como un periférico BLE que expone un servicio BLE de conectividad (UUID: 0000ffe0-0000-1000-8000-00805f9b34fb) que permite la comunicación entre el módulo y cualquier otro dispositivo central que se conecte a él. Para ello utiliza una característica (UUID: 0000ffe1-0000-10008000-00805f9b34fb) que almacena una lista de bytes (sin formato) con la siguiente lógica de funcionamiento: Cuando el dispositivo central quiere enviar algún dato al módulo, hace un WRITE en la característica con el contenido del dato. Cuando el módulo quiere enviar un dato al dispositivo central conectado, envía una NOTIFICATION al dispositivo central. El módulo HM-10 implementa una conexión serie en los pines 1 (TXD en la placa breakout) y 2 (RXD) que está conectada a nivel lógico con la conexión BLE. Todo lo que le entra por el pin RXD lo envía vía notificaciones al dispositivo central y todo lo que escribe el dispositivo central se saca vía el pin TXD. De esta forma aunque los dos dispositivos (módulo HM-10 y dispositivo central) se están comunicando a través de BLE, de cara al micro que controla el módulo se trata de una simple conexión serie. En el caso de Arduino, está conexión se gestiona como cualquier otra conexión serie utilizando las librerías Serial o SoftwareSerial según los pines de Arduino a los que se conecten los pines TXD y RXD del módulo. Proyecto Fin de Carrera - Ingeniería en Informática Página 116 de 185 Redes malladas con Arduino para el Internet de las cosas 7.7. DNFC FIGURA 7-9 TAG DINAMICO NFC Desarrollado por ElecFreaks y basado en la interfaz dinámica NFC RF430CL330H de Texas Instruments, DNFC Tag, posibilita el intercambio de datos gracias a comunicar su MCU con la interfaz I2C a una tasa de 848kbps y una radio frecuencia de 13,65Mhz para cumplir con la ISO14443B. Incluye una memoria SRAM de 3 kilobytes para mensajes NDEF, lo que habilita a su MCU poder intercambiar mensajes vía I2C tanto en lectura como en escritura a una distancia aproximada de 3 centímetros y de una manera totalmente autónoma. DNFC tag puede intercambiar datos fácilmente con dispositivos móviles con NFC. Comparado con los tag de sólo lectura su principal ventaja recae en la comunicación en tiempo real que puede soportar este dispositivo al ejercer como puente entre ambos, usando su propio MCU y la interfaz I2C. No Proyecto Fin de Carrera - Ingeniería en Informática Página 117 de 185 Redes malladas con Arduino para el Internet de las cosas debemos obviar que, al fin y al cabo, es sólo un tag aunque con características especiales. Estas características hacen posible que se pueda intercomunicar mediante lectura y escritura sin intervención de placas externas por lo que se puede escribir en él desde cualquier dispositivo y leer de él exactamente igual. Si se quiere dotar de mayor funcionalidad, se puede acoplar a cualquier plataforma de desarrollo y usarlo de forma independiente, sin tener que controlarlo o gestionarlo. Sólo es necesario tenerlo en cuenta cuando surge alguna interrupción que hayamos establecido y que debamos atender. 7.8. FOCA FIGURA 7-10 IMAGEN FOCA V2.0 Proyecto Fin de Carrera - Ingeniería en Informática Página 118 de 185 Redes malladas con Arduino para el Internet de las cosas 7.8.1. VISIÓN GENERAL Foca v2.0 es una placa de comunicación USB con UART que cuenta con un socket de conexión XBee. Es la herramienta necesaria para las comunicaciones entre un PC y la mayor parte de microcontroladores o Xbee. Especialmente, es la herramienta óptima para las placas Arduino que no cuentan con interfaz USB 7.8.2. CARACTERISTICAS BÁSICAS Interfaz sencilla de comunicación serie asíncrona a USB. Tamaño reducido Implementación completa del protocolo USB. No requiere firmware. Selector 3.3v o 5.0v Compatible con Xbee 7.8.3. ESPECIFICACIONES Característica Valor Tamaño de la placa 45.72mm X 29.21mm X 1.6mm Alimentación 5V DC Indicadores TX,RX,PWR RoSH Si FIGURA 7-11 TABLA ESPECIFICACIONES FOCA Proyecto Fin de Carrera - Ingeniería en Informática Página 119 de 185 Redes malladas con Arduino para el Internet de las cosas Proyecto Fin de Carrera - Ingeniería en Informática Página 120 de 185 Redes malladas con Arduino para el Internet de las cosas 8. SELECCIÓN DE TECNOLOGIA Una vez evaluadas todas las tecnologías y realizadas pruebas de comunicación con ellas, cuando fue posible, se tuvieron que considerar las ventajas y desventajas de cada una de ellas con el fin de poder tomar una decisión respecto de la tecnología que mejor se adaptaba a las necesidades del proyecto. Todas las tecnologías están basadas en emisiones radioeléctricas en la banda libre de 2.4 GHz ya que nos evitan tener que disponer de una infraestructura de cableado que seguramente no sea posible en muchos de los escenarios. La tecnología de ZigBee fue estudiada pero no se llegó a implementar ningún prototipo puesto que se salía del ámbito del proyecto e iba en contra de los requisitos del mismo que son el bajo coste y tecnologías libres. Si bien con el estudio previo se vio que podía ser una de las opciones candidatas a implementar, se trata de una tecnología propietaria que se sale de las filosofías open hardware del proyecto y, además, en relación con el resto de opciones evaluadas multiplicaba por 10 los costes. La siguiente opción que se descartó fue el uso de Bluetooth. Si bien es cierto que se consiguió hacer un prototipo funcional que nos permitía el intercambio de mensajes entre dos microcontroladores, el principal problema que se encontró fue que la implementación de buetooth 4.0 todavía no Proyecto Fin de Carrera - Ingeniería en Informática Página 121 de 185 Redes malladas con Arduino para el Internet de las cosas incorporaba la opción de mesh networking, se espera esté disponible a partir de la versión 4.1. Por tanto nuestra comunicación estaba limitada a una conexión peer to peer entre dos máquinas. Cabe destacar en esta opción los problemas que tuvimos con las placas empleadas. Debido al tamaño de sus pines fue casi imposible poder trabajar con ellas en un entorno doméstico y sin herramientas más profesionales. La siguiente opción que descartamos debido a la complejidad de desarrollo necesario fue el uso de nfr24l01. Las placas se conectaban de un modo muy sencillo en las placas de Itead y tanto la GBoard Pro como WBoard Pro cuentan con zócalos específicos para este tipo de componentes. Su precio era muy similar al de otras opciones como pueden ser el WIFI o el Bluetooth 4.0. Para el direccionamiento, recepción y confirmación de recepción de mensajes se debían implementar al menos 4 de los niveles del modelo teórico OSI que se salía del ámbito del proyecto. Por suerte la comunidad de Arduino es muy amplia y hay gran cantidad de código disponible para poder utilizar. Con algunas modificaciones conseguimos hacer funcionar el código de “manicbug” que encontramos en Proyecto Fin de Carrera - Ingeniería en Informática Página 122 de 185 Redes malladas con Arduino para el Internet de las cosas github de modo que pudimos asignar direcciones de red a varios microcontroladores y poder intercambiar mensajes entre ellos. Realizando estas pruebas pronto nos dimos cuenta de una limitación importante en esta tecnología, el payload “tamaño del mensaje” era demasiado pequeño (32 bytes) para los requerimientos de la solución planteada. Ésto no es una limitación para los proyectos para los que están pensados estos componentes como la creación de redes malladas de sensores de temperatura o presión donde la información a intercambiar no es mucho más que un valor entero o un bit si se trata de una entrada o salida digital. Éste fue el motivo principal para descartar el nrf24l01 ya que nuestro proyecto tiene unas necesidades de comunicación mayores usando el protocolo HTTP. Por ejemplo, para el envío del fichero DEX se necesitan más de 1024 bytes. Una posible solución era haber partido la información e intercambiar cada uno de los trozos, pero fue descartada ya que otra tecnología evaluada nos ofrecía esta característica y se prefirió no “reinventar la rueda”. La última opción fue usar WIFI. En las primeras reuniones del grupo no parecía una opción muy viable debido al precio de los componentes. A mediados del 2014 hacer que un microcontolador se comunicase por WIFI suponía aumentar el presupuesto de nuestro proyecto entre 20 y 30 €. Proyecto Fin de Carrera - Ingeniería en Informática Página 123 de 185 Redes malladas con Arduino para el Internet de las cosas Pero a finales de año 2014 se empezaron a escuchar noticias sobre un nuevo componente que estaba revolucionando el mercado y que permitía con apenas 4 €, poder comunicar cualquier microcontrolador a través de una red WIFI o incluso que fuera el microcontrolador el que expusiera un punto de acceso para que otros dispositivos se conectaran él. Este componente era el ESP8266 y permitía mediante un puerto UART del Arduino establecer una comunicación bidireccional entre el componente y el microcontrolador. Esta comunicación entre ambos se realiza mediante comandos AT con un protocolo parecido al del SIM900. Otra de las ventajas que se obtuvo usando WIFI fue que como toda la plataforma está basada en el intercambio de mensajes HTTP, estos se envían contra la API RESTFULL del servidor Slim y éste es el único punto de acceso a toda nuestra plataforma. El proxy reverso se encarga de direccionar las llamadas a los servidores correspondientes del propietario de la máquina. El uso del WIFI nos añade una capa de seguridad que con otros elementos de radiofrecuencia no teníamos ya que el punto de acceso WIFI que expone la máquina Gateway está protegido mediante contraseña y las comunicaciones son cifradas. Uno de los problemas que nos encontramos al usar una única conexión de datos compartida entre diferentes máquinas fue que recientemente se había implementado un sistema de paso de mensajes a las máquinas a través de SMS por lo que si queríamos mantener esa funcionalidad las máquinas a las Proyecto Fin de Carrera - Ingeniería en Informática Página 124 de 185 Redes malladas con Arduino para el Internet de las cosas que se conectaba la Gateway debían poder recibir notificaciones de alguna manera desde esta. Esta circunstancia obligó a configurar las máquinas cliente también como máquinas que implementasen un servidor de modo que pudieran recibir esas conexiones entrantes con la información que recibió el Gateway. De este modo el servidor de SMS enviaría el SMS al Gateway y este se encargaría de redistribuirlo a todos los posibles clientes que tiene conectados. 8.1. MOTIVOS Los principales motivos para decidirnos por el uso del WIFI fueron: Reducido coste. Es una tecnología muy implementada y extendida. Implementa todos los niveles del modelo OSI. Permite el uso de peticiones HTTP RestFull ya empleadas en el proyecto 8.2. ALTERNATIVAS VIABLES Aunque la decisión final fue el uso de los ESP8266, cabe destacar que el uso del bluetooth 4.1, será igualmente una buena alternativa como solución al intercambio de mensajes en una red mallada. Incluso el uso de nrf24l01 podría ser usado modificando ligeramente la forma en la que se intercambian los mensajes entre los nodos de la red. Proyecto Fin de Carrera - Ingeniería en Informática Página 125 de 185 Redes malladas con Arduino para el Internet de las cosas Proyecto Fin de Carrera - Ingeniería en Informática Página 126 de 185 Redes malladas con Arduino para el Internet de las cosas 9. CASOS DE USO 9.1. ESCENARIO MULTI-MÁQUINA, GPRS GATEWAY + WIFI CLIENT 9.1.1. CONTEXTO Este escenario describe la situación en la que tenemos varias máquinas en una misma ubicación. Para el estado previo del proyecto hubiéramos necesitado cuatro placas con capacidades de comunicaciones GPRS y dar de alta con el operador de telefonía móvil 4 líneas M2M diferentes, una para cada máquina, con los elevados costes que esto supone. Con la solución propuesta de la creación de una red mallada, necesitaríamos un único módulo GPRS y una única línea de datos. Los nodos clientes solo necesitarían un componente para la conexión WIFI de muy bajo coste. Proyecto Fin de Carrera - Ingeniería en Informática Página 127 de 185 Redes malladas con Arduino para el Internet de las cosas FIGURA 9-1 ESCENARIO MULTIMÁQUINA 9.1.2. ANÁLISIS DEL ESCENARIO Todas las comunicaciones deben ser centralizadas en el nodo “Gateway”, que debe actuar de servidor HTTP en el puerto 80 de la red interna y para cada petición HTTP recibida de los nodos clientes. Éste debe interceptarla y trasladarla al su módulo GPRS, una vez recibida la respuesta desde la interfaz GPRS ésta debe ser devuelta al nodo cliente que comenzó la comunicación, así conseguimos que toda la lógica de comunicaciones que se estaba utilizando en el proyecto siga siendo válida. Lo único que se modifica es el canal y el número de puntos por los que se transmite el mensaje. Proyecto Fin de Carrera - Ingeniería en Informática Página 128 de 185 Redes malladas con Arduino para el Internet de las cosas 9.1.3. DISEÑO, IMPLEMENTACIÓN Y EVALUACIÓN FIGURA 9-2 ESCENARIO MULTIMÁQUINA El primer paso en el desarrollo fue la conexión de un módulo WIFI ESP8266 en las placas Gboard que nos permitiera funcionar como servidor y permanecer a la escucha de las peticiones que pudieran hacer los clientes. Pero antes de esto, fue necesario que el módulo WIFI expusiera un SSID al que pudieran conectarse los clientes. Para ello se debe enviar el siguiente comando AT: AT+CWSAP="NOMBRESSID","CONTRSAEÑASSID",3,3 En esta llamada debemos pasar los siguientes parámetros: identificador SSID de la red que queremos exponer, contraseña que usaran los clientes que se quieran conectar, canal de comunicaciones y seguridad empleada. Para que el módulo sea capaz de recibir conexiones, debemos ponernos en modo escucha a través del siguiente comando: AT+CWMODE=3 Proyecto Fin de Carrera - Ingeniería en Informática Página 129 de 185 Redes malladas con Arduino para el Internet de las cosas Con estos dos pasos, el módulo expone el punto de acceso y además actúa de servidor atendiendo a peticiones del resto de dispositivos que puedan estar conectados al punto de acceso. Cuando llega una petición HTTP, se recibirá a través del puerto UART del dispositivo WIFI un mensaje con la información del remitente así como el contenido de la misma. Podemos ver un ejemplo de mensaje a continuación: +IPD,1,250:GET /credit/ HTTP/1.1 Host: 10.40.10.1 Connection: keep-alive Api-Key: fdG4fshk56 En este ejemplo vemos una llamada realizada por uno de los clientes y recibida por la Gateway. En concreto es una llamada a la interfaz RestFull credit. El primer parámetro “+IPD” identifica una petición recibida, el segundo parámetro indica el número del cliente que ha realizado la petición, el tercer parámetro indica el número de bytes que contiene la petición y, por lo tanto, el número de caracteres que se deberán leer para obtener la petición completa. La parte del cliente es común al escenario siguiente por lo que lo trataremos en el próximo apartado. Proyecto Fin de Carrera - Ingeniería en Informática Página 130 de 185 Redes malladas con Arduino para el Internet de las cosas Para las pruebas y depuración se buscó la manera de poder simular las peticiones HTTP y la escucha de las peticiones recibidas en un puerto. Con el programa Hércules de la compañía www.hw-group.com pudimos simular esto y nos fue útil para otros procesos del proyecto ya que en la misma herramienta podemos: simular peticiones TCP contra un servidor, recibir conexiones TCP provenientes de un cliente y simular la respuesta FIGURA 9-3 INTERFAZ DEL PROGRAMA HERCULES 9.1.4. CONCLUSIÓN Fue posible mediante el ESP8266 exponer nuestro propio punto de acceso WIFI con el SSID “OpenVend” por lo que cualquier dispositivo con WIFI se podría conectar a nuestra red y comunicarse con los elementos que la forman. Proyecto Fin de Carrera - Ingeniería en Informática Página 131 de 185 Redes malladas con Arduino para el Internet de las cosas Esta capacidad podría ser usada como medio de comunicación para tareas de mantenimiento que pudieran ser realizadas in situ por un operario. Se consiguió que las máquinas cliente se conectasen a este punto de acceso y que pudieran hacer conexiones HTTP con el nodo “Gateway”. Éste las recoge y las envía a través de su interfaz GPRS. Cuando recibe la respuesta, la devuelve de nuevo a través del canal que comenzó la comunicación. Si se supone un escenario de 5 máquinas la reducción de costes en cuanto a hardware seria aproximadamente de 75 €. Así mismo, reduce el número de líneas M2M que deben ser dadas de alta con el operador de telefonía de 5 a 1, ya que todas comparten la misma interfaz de salida. 9.2. ESCENARIO MÁQUINA INDIVIDUAL WIFI CLIENT 9.2.1. CONTEXTO FIGURA 9-4 ESCENARIO MÁQUINA CONECTADA POR WIFI Proyecto Fin de Carrera - Ingeniería en Informática Página 132 de 185 Redes malladas con Arduino para el Internet de las cosas Éste es un escenario que se producía con cierta frecuencia y, de igual manera que en el caso anterior, la solución propuesta supone una reducción de costes tanto en hardware como en consumo de líneas móviles. Este escenario es aplicable a lugares públicos donde existe una red WIFI. Nuestra máquina podría conectarse para realizar las comunicaciones. Supongamos un bar donde se tiene contratada una línea ADSL y se dispone de una máquina de tabaco, en lugar de contratar una línea M2M para las comunicaciones de la máquina, ésta se conectaría a la red WIFI ya existente. Determinados operadores de telefonía están desplegando redes WIFI en los núcleos urbanos, a los que se podrían conectar las maquinas, previa negociación con el operador sobre los costes del uso de su infraestructura. FIGURA 9-5 MAPA DE COBERTURA WIFI 9.2.2. ANÁLISIS DEL ESCENARIO Se analizará, el cliente WIFI que aplica tanto a la parte cliente del Gateway del punto anterior como a este nuevo concepto, donde no existe un Proyecto Fin de Carrera - Ingeniería en Informática Página 133 de 185 Redes malladas con Arduino para el Internet de las cosas nodo Gateway, y nos conectamos a una red WIFI ya contratada o a una infraestructura ya desplegada por un operador de telefonía. 9.2.3. DISEÑO, IMPLEMENTACIÓN Y EVALUACIÓN En este escenario nos centramos solo en la parte cliente. Como punto de partida se utilizaron las versiones entregadas por otros participantes del proyecto. Lo que se realizó fue la sustitución de los módulos de comunicaciones GPRS a través del SIM900, por unos nuevos módulos de comunicación a través de WIFI y los ESP8266. De igual manera que en las comunicaciones a través de GPRS, son necesarios una serie de parámetros de configuración como son las credenciales del APN. En WIFI son necesarios: el nombre del SSID al que nos queremos conectar, usuario y contraseña. Todos estos parámetros se configuran en el fichero “settings.h” del directorio raíz del código fuente. Con el objetivo de hacer el código lo más fácil de mantener y en vistas de que la parte de comunicaciones debía ser reemplazable (puede que más adelante se desee usar otro sistema de comunicaciones como por ejemplo Ethernet) se ha incluido un “define” que nos permite antes de la compilación del proyecto decidir si queremos que el módulo de comunicaciones sea WIFI o GPRS. Proyecto Fin de Carrera - Ingeniería en Informática Página 134 de 185 Redes malladas con Arduino para el Internet de las cosas Para poder establecer una comunicación WIFI lo primero que debemos hacer es conseguir conectarnos al punto de acceso SSID del que necesitamos conocer las credenciales del acceso, esto se consigue mediante el comando: AT+CWJAP="<access_point_name>","<password>" El módulo ESP8266 posee un comando para poder listar todos los puntos de acceso disponibles. AT+CWLAP Una vez que estamos conectados al punto de acceso podemos consultar la IP que nos ha sido asignada. En el caso de la conexión con el punto de acceso al Gateway la ip será “10.40.10.X” donde X es un valor entre 1 y 5. En el caso de conexión a un SSID ajeno, dependerá de la configuración de la red. El siguiente paso es la conexión de un socket contra el servidor al que queremos realizar una petición. Esto se realiza mediante el comando: AT+CONECT 92.16.32.7 80 Que trata de establecer una conexión con el servidor en el puerto 80 que es el puerto estándar para el protocolo HTTP. Ya sólo queda enviar una petición siguiendo el estándar HTTP. Es muy importante ser cuidadoso con los caracteres salto de línea ya que son Proyecto Fin de Carrera - Ingeniería en Informática Página 135 de 185 Redes malladas con Arduino para el Internet de las cosas utilizados en el protocolo para distinguir entre la sección de cabeceras y la sección del cuerpo de la petición. GET /credit2/ HTTP/1.1 X-Apikey: eyagc9zffczXInF Host: openvend.eu Connection: close REQUEST_BODY Para poder realizar el envío de esta petición deberemos invocar el comando SEND, indicando el número de bytes que vamos a enviar AT+CIPSEND=180 Como respuesta a este comando, el módulo nos devolverá un prompt donde comenzar a enviar la petición. Una vez enviada la petición obtendremos un SEND OK y finalmente, recibiremos la respuesta en el mismo prompt. Proyecto Fin de Carrera - Ingeniería en Informática Página 136 de 185 Redes malladas con Arduino para el Internet de las cosas 9.2.4. CONCLUSIÓN Tras haber implementado las comunicaciones a través de GPRS y WIFI, se observaron grandes similitudes entre ambos procesos e incluso en los comandos que se deben enviar a cada uno de los módulos de comunicaciones. El concepto de interconectar varias máquinas de vending entre sí a través de una red mallada de infraestructura es posible. Este escenario podría ser extendido con mucha facilidad a otros de similares características. Proyecto Fin de Carrera - Ingeniería en Informática Página 137 de 185 Redes malladas con Arduino para el Internet de las cosas Proyecto Fin de Carrera - Ingeniería en Informática Página 138 de 185 Redes malladas con Arduino para el Internet de las cosas 10. Trabajos futuros Limitar los accesos a peticiones del protocolo. Como medida de seguridad se propone limitar las peticiones, a las que respondería el nodo Gateway, a aquellas cuyo destino sea la comunicación con la plataforma así como las que cumplen el protocolo de comunicaciones que se ha implementado. Aunque las conexiones de datos en los teléfonos móviles están cada vez más extendidas, se plantea la posibilidad de que los compradores pudieran conectarse al WIFI de la máquina para poder completar el proceso de compra. Si la maquina hace de “hotspot”, se podría plantear un portal cautivo donde la página de inicio sea le web App de compra y se puede ofrecer al usuario ciertos minutos de navegación gratuita. En este escenario se puede prescindir del NFC dinámico o cambiarlo por NFC estático para facilitar la conexión WIFI. Este escenario también solventaría la falta de cobertura 2G/3G/LTE. Sería la maquina con su “hotspot” de WIFI la responsable de llevar al usuario a internet, al usar la propia red de la maquina garantizamos la presencia ya que de otro modo no podría estar conectado a nuestra red. Añadir BIDI en pantalla LCD para clientes sin NFC. Si bien es cierto que cada vez son más los teléfonos que cuentan con la tecnología NFC, todavía son muchos los que no la tienen. Por ello, para tratar Proyecto Fin de Carrera - Ingeniería en Informática Página 139 de 185 Redes malladas con Arduino para el Internet de las cosas de llegar a un público más amplio se propone la incorporación a la máquina de una pantalla LCD. En dicha pantalla se mostrará un código BIDI con la url de acceso a la plataforma, que incorpore el token de acceso único. Con ésto conseguimos llegar al 90% de la flota de teléfonos móviles, a pesar de añadir un paso más de complejidad al proceso de compra. Uso de balizas Bluettoth como reclamo de posibles clientes. Se propone el uso de beacons para atraer mayor cantidad de compradores. Durante el estudio de las tecnologías que se podían emplear en el proyecto se vio la posibilidad de usar bluetooth 4.0. En este proceso se descubrió que existe un mecanismo de envío de notificaciones a teléfonos móviles que están próximos a la máquina, a través de Bluetooth. La mejora consiste en captar posibles nuevos clientes u ofertar productos con descuentos a clientes existentes. Para la toma de decisiones sobre a quién o qué productos ofertar se puede usar la información obtenida de Big Data en la plataforma. Extender la red mallada para aumentar el número de máquinas. Una de las limitaciones de tienen los dispositivos ESP8266 es que sólo se pueden conectar 5 dispositivos, por lo que en una Gateway no podemos conectar más que esas máquinas. Como solución se propone la implementación de un Gateway WIFI-WIFI, de modo que ésto nos permita extender la red con otros cinco clientes conectados a esa Gateway. Así ampliaríamos nuestra red de árbol con nuevas ramas. El proceso se podría Proyecto Fin de Carrera - Ingeniería en Informática Página 140 de 185 Redes malladas con Arduino para el Internet de las cosas repetir tantas veces como queramos pero siempre teniendo en cuenta el factor limitante del ancho de banda de la conexión GPRS. Proyecto Fin de Carrera - Ingeniería en Informática Página 141 de 185 Redes malladas con Arduino para el Internet de las cosas Proyecto Fin de Carrera - Ingeniería en Informática Página 142 de 185 Redes malladas con Arduino para el Internet de las cosas 11. Conclusiones El desarrollo del proyecto me ha resultado muy interesante debido a varios motivos. Por un lado, me ha permitido aumentar mis conocimientos de la plataforma de Arduino y por otro, me ha dado la posibilidad de conocer diversos campos del conocimiento a partir de los proyectos del resto de compañeros, desde el cloud computing, administración de máquinas virtuales, interfaces restfull, html5 hasta el Big Data. El aporte individual de cada uno hace un gran conjunto. Si algo he aprendido del mundo “maker” de Arduino es la impresionante capacidad de escalabilidad de los proyectos, donde el límite lo pone la imaginación de la persona. La unión de un Arduino con cualquier shield o con un simple (o complejo) componente electrónico es una funcionalidad nueva añadida, una mejora en la experiencia de usuario o una nueva información publicada en un entorno de Big Data. Son muchos los conceptos y aplicaciones relacionados con el Internet de las cosas, desde un sensor de temperatura situado en medio de una ciudad, un sistema de detección de incendios en medio de un bosque, un sistema de localización gps, un sistema embarcado en un vehículo capaz de detectar un accidente en base a las mediciones de un acelerómetro y envío de una alerta con las posición del vehículo hasta un sistema de alumbrado inteligente en una ciudad. Proyecto Fin de Carrera - Ingeniería en Informática Página 143 de 185 Redes malladas con Arduino para el Internet de las cosas Con esta plataforma la elaboración de un prototipo es como un juego de construcción en el que las piezas van encajando unas encima de las otras, casi sin posibilidad de equivocarte. Buena prueba de ello es que Arduino está siendo utilizado en muchos colegios e institutos como medio de enseñanza de nociones de programación a niños de entre 5 y 14 años. Las “piezas” de este juego de construcción siempre parten de una placa de Arduino que, podría ser como el cerebro principal del sistema al que se le unen una serie de sensores y actuadores que le permiten interactuar con el entono que le rodea: Comunicaciones WIFI, Ethernet, gprs, bluetooth, redes inalámbricas. Principales actuadores: motor, válvula de fluidos, bomba de fluidos, motor, motor de pasos, motor brushless (empelado en drones), pantallas lcd, pantallas eink Principales sensores: Temperatura presión, acelerómetros, giróscopos, sensor de presión ,gps, lectores de huella digital, En la mayoría de estas soluciones es igual de importante la plataforma que recibe los datos que el modo en el que se lo presentamos al usuario, siendo necesarios sistemas basados en el conocimiento que sean capaces de recopilar, agrupar e interpretar la información recibida para aplicarla posteriormente en la toma de decisiones. De nada nos sirve disponer de cantidades ingentes de información si no somos capaces de convertirla en información útil. Por este motivo ha sido tan beneficioso para mi aprendizaje participar en un proyecto donde están involucradas tantas personas y tantos campos del Proyecto Fin de Carrera - Ingeniería en Informática Página 144 de 185 Redes malladas con Arduino para el Internet de las cosas conocimiento. Si bien no se puede ahondar en todas ellas, si permite tener una visión global de las funcionalidades principales de cada una de ellas. Proyecto Fin de Carrera - Ingeniería en Informática Página 145 de 185 Redes malladas con Arduino para el Internet de las cosas Proyecto Fin de Carrera - Ingeniería en Informática Página 146 de 185 Redes malladas con Arduino para el Internet de las cosas BIBLIOGRAFÍA Foro de usuarios del módulo SIM900 incluye un simulador, http://m2msupport.net/m2msupport/forums/forum/at-command-tester/ Información de redes malladas, http://earchivo.uc3m.es/bitstream/handle/10016/11159/PFC%20Evaluacion%20experi metal%20de%20redes%20malladas.pdf?sequence=1 Manual de comandos AT pare el SIM 900, http://elecfreaks.com/store/download/datasheet/rf/SIM900/SIM900_AT%20Com mand%20Manual_V1.03.pdf Repositorio de código del fabricante de las placas WBoard, Gboard y Wee, https://github.com/itead Repositorio de código para el módulo nrf24l01, https://github.com/maniacbug Tutorial de uso del módulo ESP8266, http://www.instructables.com/id/Using-the-ESP8266-module/ Web del fabricante de la placa WBoard, Gboard y Wee, http://imall.iteadstudio.com/ Web del fabricante del módulo ESP8266, http://bbs.espressif.com/index.php Proyecto Fin de Carrera - Ingeniería en Informática Página 147 de 185 Redes malladas con Arduino para el Internet de las cosas Proyecto Fin de Carrera - Ingeniería en Informática Página 148 de 185 Redes malladas con Arduino para el Internet de las cosas SIGLAS, ABREVIATURAS Y ACRÓNIMOS AES American Encryption Standard ACK Acknowledgement AES Advanced Encryption Standard Ajax Asynchronous JavaScript and XML ANSI American National Standards Institute API Application Programming Interface APN Access Point Name BIOS Basic Input/Output System CA Certificate Authority CBC Cipher Block Chaining CCM Counter with CBC-MAC CoAP Constrained Application Protocol CoRE Constrained RESTful Environment CSS3 Cascading Style Sheets DES Data Encryption Standard DEX Data Exchange DNFC Dynamic Near Field Communication DNS Domain Name Server DOM Document Object Model DTLS Datagram Transport Layer Security ECDH Elliptic Curve Diffie-Hellman EEPROM Electrically Erasable Programmable Read-Only Memory EFF Electronic Frontier Foundation EVA European Vending Association EVMMA European Vending Machine Manufactures Association FOTA Firmware Over The Air FTP File Transfer Protocol GPL General Public Licence Proyecto Fin de Carrera - Ingeniería en Informática Página 149 de 185 Redes malladas con Arduino para el Internet de las cosas GPRS General Packet Radio Service GSM Global System for Mobile communications HATEOAS Hypermedia as the Engine of Application State HMAC Hashed Message Authentication Code HTML HyperText Markup Language HTML5 Hypertext Markup Language HTTP HyperText Transfer Protocol HTTPS Secured Hypertext Transfer Protocol I+D Investigación + Desarrollo I2C Inter Integrated Circuit IaaS Infrastructure as a Service ICP Internal Communication Protocol ICSP In Circuit Serial Programming IDE Integrated Development Environment IEC International Electrotechnical Commision IETF Internet Engineering Task Force IMEI International Mobile system Equipment Identity IOT Internet Of Things IR Infrared ISO International Organization for Standardization ISP Serial Peripheral Interface IV Initialization Vector JSON JavaScript Object Notation LCD Liquid Crystal Display LED Light-Emitting Diode LSB Least Significant Bit LWM2M LightWeight M2M M2M Machine to Machine MAC Media Access Control MCU Micro-Controller Unit Proyecto Fin de Carrera - Ingeniería en Informática Página 150 de 185 Redes malladas con Arduino para el Internet de las cosas MD5 Message-Digest Algorithm 5 MDB Multi-Drop Bus MDB/ICP Multi Drop Bus / Internal Communication Protocol MVC Model - View - Controller MVC(L) Model - View - Controller - Language NAK Negative Acknowledgment NAMA National Automatic Merchandising Association NDEF NFC Data Exchange Format NFC Near Field Communication NIST National Institute of Standards and Technology NRZ Non Return to Zero OMA Open Mobile Alliance OTA Over The Air OTP One Time Password Paas Platform as a Service PC Personal Computer PHP PHP Hypertext Pre-Processor PIN Personal Identification Number PKCS Public-Key Cryptography Standards PSK Pre-Shared Keys PYME Pequeña Y Mediana Empresa QR Quick Response QR Code Quick Response Code RAM Random Access Memory REST Representational State Transfer RFID Radio Frecuency Identification ROM Read Only Memory RSA Rivest - Shamir - Adleman SaaS Software as a Service SCP Secure Copy Proyecto Fin de Carrera - Ingeniería en Informática Página 151 de 185 Redes malladas con Arduino para el Internet de las cosas SD Secure Digital SGML Standard Generalized Markup Language SHA Secure Hash Algorithm SIM Subscriber Identity Module SMS Short Message Service SOAP Simple Object Access Protocol SPI Serial Peripheral Interface SRAM Static Random-Access Memory SSL Secure Socket Layer TCP Transmission Control Protocol TFTP Trivial File Transfer Protocol TLS Transport Layer Security TPV Terminal Punto de Venta UART Universal Asynchronous Receiver-Transmitter URL Uniform Resource Locator USB Universal Serial Bus UUID Universally Unique Identifier VLAN Virtual Area Network VMC Vending Micro-Controller W3C World Wide Web Consortium WDSL Web Services Description Language XML Extensible Markup Language Yourls Your Own URL Shortener Proyecto Fin de Carrera - Ingeniería en Informática Página 152 de 185 Redes malladas con Arduino para el Internet de las cosas ANEXOS 1. API RestFull GET credit Resources /credit Request Header X-ApiKey: xxxxxx Response Hay crédito en la máquina HTTP Status 200 OK Body JSON ↦ {“p”:“D1402041241C0050L21T001191”, "u":" 9K6XHO"} No hay crédito HTTP Status: 304 Not Modified PIN necesario HTTP Status: 300 Body JSON ↦ {“p”:“D1402041241P1234”} Proyecto Fin de Carrera - Ingeniería en Informática Página 153 de 185 Redes malladas con Arduino para el Internet de las cosas POST vend Resources /vend Request Header X-ApiKey: xxxxxx Body JSON ↦ {“p”:“D1402041241S1T001191”} Response HTTP Status 200 OK GET balance Resources /balance Request Header X-ApiKey: xxxxxx X-CardKey: xxxxxx Response HTTP Status 200 OK Body Proyecto Fin de Carrera - Ingeniería en Informática Página 154 de 185 Redes malladas con Arduino para el Internet de las cosas JSON ↦ {“p”:“D1402041241B0240”} POST balance Resources /balance Request Header X-ApiKey: xxxxxx X-CardKey: xxxxxx Body JSON ↦ {“p”:“D1402041241B0200”} Response HTTP Status 200 OK POST dex Resources /dex Request Header X-ApiKey: xxxxxx Body JSON ↦ {“d”:“....”} Proyecto Fin de Carrera - Ingeniería en Informática Página 155 de 185 Redes malladas con Arduino para el Internet de las cosas Response HTTP Status 200 OK GET token Resources /token Request Header X-ApiKey: xxxxxx Response HTTP Status 200 OK Body JSON ↦ {"u":"9K6XHO"} GET apikey Resources /apikey Request Headers X-SN: xxxxxx Response HTTP Status 200 OK Proyecto Fin de Carrera - Ingeniería en Informática Página 156 de 185 Redes malladas con Arduino para el Internet de las cosas Body JSON ↦ {“k”:“abcde”}, GET status Resources /status Request Headers X-ApiKey: xxxxxx Response HTTP Status 200 OK Body JSON ↦ {“p”:“D1402041241S1”} Proyecto Fin de Carrera - Ingeniería en Informática Página 157 de 185 Redes malladas con Arduino para el Internet de las cosas Proyecto Fin de Carrera - Ingeniería en Informática Página 158 de 185 Redes malladas con Arduino para el Internet de las cosas 2. Diagrama de conexión del cliente WIFI Para el cliente WIFI, como se ha comentado anteriormente, se ha usado la placa WBoar PRO del fabricante Itead que incluye un microcontrolador Mega 2560 y un ESP8266 integrado en la placa que permite las conexiones WIFI. Debido a ciertas necesidades del proyecto en cuanto al uso de interrupciones y la implementación del fabricante del módulo ESP8266 en la placa tuvimos que desechar la opción de usar el módulo integrado y optar por usar un módulo “al aire” por lo que en lugar de usar la placa WBoard PRO ésta podría ser sustituida por una IteadDuino Mega 2560. La relación de costes es prácticamente la misma en ambos casos. FIGURA 2-1 DIAGRAMA DE CONEXION CLIENTE WIFI Proyecto Fin de Carrera - Ingeniería en Informática Página 159 de 185 Redes malladas con Arduino para el Internet de las cosas En la parte izquierda del diagrama encontramos la WBoard PRO, en la parte inferior ESP8266, en la parte izquierda DNFC y en la parte superior la conexión con la máquina real. Los módulos DNFC, ESP8266 y VMC están conectados a los pines VCC 3.3v y GND de la Gboard. Finalmente la GBoar debe estar conectada a una fuente de alimentación recomendada de 12v. y 2 Amperios. Las necesidades de intensidad de corriente no son tan elevadas como en el caso de la GBoard PRO, ya que en este caso no es necesaria la sobre alimentación del módulo GPRS. MDB: Está conectado al puerto UART3 de la Wboard que se encuentra en los pines 2 y 3 “Tx y Rx respectivamente” del zocalo XBee. DNFC: El tag dinámico se conecta mediante el protocolo de comunicaciones serie I2C. Para ello hace uso de los pines SDA y SCL que se encuentran en los pines 3 y 5 de la implementación de conector Rpi que tiene la WBoard. Esta interfaz de conexión la ha popularizado la placa Raspberry Pi, que es una placa similar a las empleadas en este proyecto, con la principal característica de contar con un procesador más potente “ARM a 700 MHz”, sobre el que se ejecutan versiones reducidas de Linux. Además hace uso de otras dos conexiones, el pin de interrupción y el pin de reset. Proyecto Fin de Carrera - Ingeniería en Informática Página 160 de 185 Redes malladas con Arduino para el Internet de las cosas El primero lo debíamos conectar a uno de los 6 pines de interrupción del Mega2560, el problema que encontramos fue que el fabricante decidió no exponer en la placa un conector para todos los pines con los que cuenta el Mega 2560 y otros estaban siendo usados por las funciones añadidas a la placa. Como solución se planteó dejar de usar el chip wifi de la placa y usar una de sus conexiones como chip de interrupción Int3. Para trabajos futuros se plantea encargar un nuevo diseño a Itead en el que se expongan el resto de pines de interrupción u optar por algún otro modelo de placa como puede ser la IteadDuino. El segundo, el pin Reset del Dnfc se conecta al pin A25 del Mega que corresponde con el pin 25 de la interfaz Rpi. ESP8266: este es el módulo que hemos tenido que añadir, aunque sea redundante, debido a los problemas que encontramos en el uso de interrupciones comentadas en el apartado anterior. Este módulo se conecta al UART2 del Mega 2560. Proyecto Fin de Carrera - Ingeniería en Informática Página 161 de 185 Redes malladas con Arduino para el Internet de las cosas Proyecto Fin de Carrera - Ingeniería en Informática Página 162 de 185 Redes malladas con Arduino para el Internet de las cosas 3. Diagrama de conexión de la pasarela GRPS-WIFI Para el Gateway GRPS-Wifi se ha optado por una placa GBoard PRO del mismo fabricante. Esta placa cuenta con un microcontrolador Mega 2560 y con un módulo SIM 900 mediante el cual se pueden realizar conexiones de datos con el operador de telefonía. Para ello se debe usar una tarjeta SIM en el zócalo. Este módulo de comunicaciones tiene unos grandes requisitos de intensidad de corriente por lo que se requiere que la fuente de alimentación empleada sea lo más estable posible y proporcione 2 Amperios o más. En caso contrario podemos encontrarnos con comportamientos inesperados de este módulo de comunicaciones. Para la comunicación WIFI se ha optado por el módulo ESP8266, igual que en el caso del cliente WIFI, pero aquí para tratar de reducir la complejidad de las conexiones se ha usado la Wee de IteadStudio que incorpora este chip en una placa que sigue el estándar de conexión del zócalo ZigBee, por lo que no es necesaria ninguna conexión adicional (parte superior del diagrama). Proyecto Fin de Carrera - Ingeniería en Informática Página 163 de 185 Redes malladas con Arduino para el Internet de las cosas FIGURA 3-1 DIAGRAMA DE CONEXION GATEWAY GPRS WIFI MDB: Está conectado al puerto UART1 de la Gboard que se encuentra debajo del zócalo EB0-15 y debajo del conector I2C. GPRS: Según la implementación del fabricante el módulo SIM 900 está conectado al puerto UART2 del Arduino Mega 2560. Además usa el pin 46 como pin de “power” para el reseteo e inicialización de la placa. DNFC: El tag dinámico se conecta mediante el protocolo de comunicaciones serie I2C. Para ello hace uso de los pines SDA y SCL que se encuentran debajo del zócalo EB0-15. El pin de interrupción que se conecta al PIN EB15 y el pin de Reset del Dnfc se conectará al pin T-DOUT de la interfaz LCD. Proyecto Fin de Carrera - Ingeniería en Informática Página 164 de 185 Redes malladas con Arduino para el Internet de las cosas 4. Actualización del firmware del módulo ESP8266 Este módulo fue comercializado a finales del año 2014. Si bien es cierto que ha supuesto una gran revolución debido a su bajo coste y sus capacidades de conexión, más cierto es, que hasta mediados del 2015 el módulo ha recibido más de 20 actualizaciones en su firmware. Estas modificaciones se deben a la inclusión de nuevas funcionalidades por parte del fabricante pero también a la respuesta de éste ante los numerosos errores detectados por la comunidad. Probablemente el fabricante quería distribuirlo lo antes posible para adelantarse en el mercado. Esta política hizo que algunas versiones distribuidas no fuesen operativas y, al final, somos los usuarios los que realmente hacemos el proceso de beta tester para el fabricante. Durante el desarrollo del proyecto se tuvo que actualizar dos veces el firmware de las placas. Una de ellas porque la versión que vino de fábrica no permitía acceder a la mac del hardware y era la opción que estábamos barajando para la generación del ApiKey en la plataforma y la otra por problemas en el reconocimiento del salto de línea en la respuesta recibida por el módulo. Las versiones que el fabricante va liberando se pueden encontrar en: http://bbs.espressif.com/viewforum.php?f=5 A continuación se detalla el proceso de actualización del firmware: Conexión de la Foca inicial Proyecto Fin de Carrera - Ingeniería en Informática Página 165 de 185 Redes malladas con Arduino para el Internet de las cosas FIGURA 4-1 PINES DEL ESP8266 Foca <--> ESP8266 GND <--> GND TX <--> RX RX <--> TX VCC <--> VCC, CH_PD DTR <--> NULL NULL <--> RST NULL <--> RST NULL <--> GPIO0 NULL <--> GPIO2 Desde la interfaz de Arduino IDE se abre una conexión al puerto COM de la Foca, en nuestro caso el 3, usamos "9600 baudio" y "Ambos NL & CR" Proyecto Fin de Carrera - Ingeniería en Informática Página 166 de 185 Redes malladas con Arduino para el Internet de las cosas FIGURA 4-2 INTERFAZ DEL IDE ARDUINO PUERTO SERIAL Si enviamos los comandos AT deberemos recibir un OK. Si enviamos un AT+GMR recibiremos la versión del firmware Con AT+RST haremos un reset del ESP8266. Se nos mostrará la información del fabricante. Comenzamos con la instalación del firmware: Añadimos una conexión del pin GPIO0 del ESP8266 a GND de la Foca Foca <--> ESP8266 GND <--> GND, GPIO0 TX <--> RX RX <--> TX Proyecto Fin de Carrera - Ingeniería en Informática Página 167 de 185 Redes malladas con Arduino para el Internet de las cosas VCC <--> VCC, CH_PD DTR <--> NULL NULL <--> RST NULL <--> RST NULL <--> GPIO2 Reiniciamos "Power cycle" desconectando el vcc de la foca y volvemos a conectarlo. Iniciamos la aplicación esp8266_flasher.exe FIGURA 4-3 INTERFAZ DEL ESP8266 FLASH DOWNLOAD Elegimos el fichero "AI-v0.9.5.0 AT Firmware.bin" y ponemos el puerto COM de nuestra Foca, en nuestro caso el 3. Proyecto Fin de Carrera - Ingeniería en Informática Página 168 de 185 Redes malladas con Arduino para el Internet de las cosas FIGURA 4-4 INTERFAZ DEL ESP8266 FLASH DOWNLOAD Cuando finaliza, aparece un mensaje que debemos ignorar "Failed to leave Flash mode". Desconectamos el pin GPIO0 de GND. Desconectamos y volvemos a conectar. De nuevo desde el IDE de Arduino podemos enviar el comando "AT+CIPSTAMAC?" que pertenece al nuevo conjunto de comandos AT que añade el firmware recién instalado. Proyecto Fin de Carrera - Ingeniería en Informática Página 169 de 185 Redes malladas con Arduino para el Internet de las cosas FIGURA 4-5 INTERFAZ DEL IDE ARDUINO MOSTRANDO MAC En el caso que nos ocupa la MAC del dispositivo es 18:fe:34:9e:00:00. Proyecto Fin de Carrera - Ingeniería en Informática Página 170 de 185 Redes malladas con Arduino para el Internet de las cosas 5. Comandos AT de módulo WIFI ESP8266 En este esquema se detallan los posibles comandos AT que se pueden enviar al módulo en función del modo en el que esté operando en ese momento. FIGURA 5-1 DIAGRAMA DE COMANDOS AT Proyecto Fin de Carrera - Ingeniería en Informática Página 171 de 185 Redes malladas con Arduino para el Internet de las cosas Proyecto Fin de Carrera - Ingeniería en Informática Página 172 de 185 Redes malladas con Arduino para el Internet de las cosas 6. Comandos AT de módulo GPRS SIM900 AT+CIPMUX Iniciar conexión múltiple AT+CIPSTART Inicia una conexión TCP o UPD AT+CIPSEND Envía datos a través de una conexión TCP o UPD AT+CIPQSEND Selecciona el modo de transmisión AT+CIPACK Consulta el estado de la transmisión anterior AT+CIPCLOSE Cierra la conexión TCP o UDP AT+CIPSHUT Desactiva el contexto PDP anterior AT+CLPORT Establece el puerto local AT+CSTT Comienza una tarea y establece APR, usuario y password AT+CIICR Levanta la conexión inalámbrica con GPRS o CSD AT+CIFSR Obtiene la IP local AT+CIPSTATUS Consulta el estado de la conexión AT+CDNSCFG Configura el nombre del servidor AT+CDNSGIP Consulta la IP del nombre de dominio dado AT+CIPHEAD Añade una cabecera HTTP cuando se recibe información AT+CIPATS Establece temporizador de auto envió AT+CIPSPRT Establece el prompt de envío de datos AT+CIPSERVER Configurar como servidor AT+CIPCSGP Establece el modo de conexión GRPS o CSD AT+CIPSRIP Establece si se muestra la IP u puerto del remitente cuando se recibe información AT+CIPMODE Selecciona TCPIP como modo AT+CIPCCFG Configura el modo de transferencia transparente AT+CIPSHOWTP Muestra el protocolo de transferencia en la cabeceras cuando se recibe información AT+CGATT Conectar/Desconectar del servicio GPRS AT+CGDCONT Define el contexto PDP AT+CGQMIN Calidad del perfil de servicio (Mínimo) Proyecto Fin de Carrera - Ingeniería en Informática Página 173 de 185 Redes malladas con Arduino para el Internet de las cosas AT+CGQREQ Calidad del perfil de servicio (Aceptable) AT+CGACT Activa o desactivar el contexto PDP AT+CGDATA Entrar en estado DATOS AT+CGPADDR Mostrar la dirección PDP AT+CGCLASS Tipo de la estación GPRS AT+CGEREP Controlar reporte de eventos GRPS no solicitados AT+CGREG Estado del registro en la red AT+CGSMS Seleccionar el servicio para mensajes SMS AT+ SIDET Cambiar la ganancia AT+CPOWD Apagar AT+SPIC Numero de reintentos restantes para PIN/PUK AT+CMIC Cambiar la ganancia del micrófono AT+CALA Establecer hora de alarma AT+CADC Leer ADC AT +CSNS Esquema de marcado simple AT +CDSCB Reset del dispositivo AT +CMOD Configurar modos de llamada alternativos AT +CFGRI Indicar RI cuando se use URC AT+CLTS Obtener la hora local AT+CEXTHS Control de auriculares externo AT+CEXTBUT Botón de reporte de estado de auriculares AT+CSMINS Reporte de inserción de SIM AT+CLDTMF Generación de tono DTMF local AT+CDRIND Indicador de fin de llamada AT+CSPN Obtener el proveedor de servicios de la SIM AT+CCVM Obtener o establecer el número del buzón de voz en la tarjeta SIM AT+CBAND Establecer y consultar la banda de operación AT+CHF Configurar manos libres Proyecto Fin de Carrera - Ingeniería en Informática Página 174 de 185 Redes malladas con Arduino para el Internet de las cosas AT+CHFA Intercambiar los canales de audio AT+CSCLK Configurar reloj lento AT+CENG Encender o apagar el modo Debug AT+SCLASS0 Almacenar los SMS de clase 0 en la tarjeta SIM cuando se reciban AT+CCID Mostrar ICCID AT+CMTE Establecer la temperatura critica de operación o consultar la temperatura AT+CSDT Encender o apagar detección de tarjeta SIM AT+CMGDA Borrar todos los mensajes AT+SIMTONE Generar tono especifico AT+CCPD Identificador de línea AT+CGID Obtener el grupo identificador de la tarjeta SIM AT+MORING SHOW STATE OF MOBILE ORIGINATED CALL AT+CMGHEX Permitir enviar caracteres no ASCII AT+AUTEST Prueba del canal de audio AT+CCODE Configurar el modo de codificación SMS AT+CIURC Habilitar o deshabilitar presentación inicial URC AT+CPSPWD Cambiar contraseña súper PS AT+EXUNSOL Permitir o no indicaciones no solicitadas AT+CGMSCLASS Cambiar la clase de GRPS Multislot AT+CDEVICE Ver tipo Flash del dispositivo AT+CCALR Consulta de llamada preparada AT+GSV Muestra información de la identificación del producto Proyecto Fin de Carrera - Ingeniería en Informática Página 175 de 185 Redes malladas con Arduino para el Internet de las cosas Proyecto Fin de Carrera - Ingeniería en Informática Página 176 de 185 Redes malladas con Arduino para el Internet de las cosas 7. Proceso de inicialización de un operador y una tienda Para simular las llamadas de un cliente REST realizadas en este proceso se ha usado el plugin de Chrome “DHC - REST/HTTP API Client” que puede ser descargado con un navegador web desde la siguiente url: https://chrome.google.com/webstore/detail/dhc-resthttp-apiclient/aejoelaoggembcahagimdiliamlcdmfm. Las capturas de pantalla de peticiones REST han sido realizadas con este programa. Accedemos a la siguiente url de administración con nuestro navegador web: http://openvend.eu/web/ Dentro del menú “propietarios” usamos la opción de la parte interior “AddOwner”. El nombre del operador NO debe contener números, mayúsculas ni símbolos raros. El tipo de hardware debe ser vending.small. La máquina debe pedir el apliKey, indicando el IMEI o MAC del dispositivo con la cabecera X-Sn:HARDWARE_SERIAL mediante una llamada GET a http://openvend.eu/apikey/. Proyecto Fin de Carrera - Ingeniería en Informática Página 177 de 185 Redes malladas con Arduino para el Internet de las cosas FIGURA 7-1 INTERFAZ DHC ENVIO APIKEY El siguiente paso es que la máquina envíe el fichero DEX, indicando el ApiKey obtenido en el proceso anterior X-Apikey, mediante una llamada POST a http://openvend.eu/dex/. FIGURA 7-2 INTERFAZ DHC ENVIO APIKEY El contenido de esta petición debe ir en una única línea. El DEX debe contener los saltos de línea con los caracteres CR y LR \r y \n respectivamente. Se debe poner atención al carácter del final del DEX \u0000 Este es un ejemplo del cuerpo de post. Proyecto Fin de Carrera - Ingeniería en Informática Página 178 de 185 Redes malladas con Arduino para el Internet de las cosas {"d" : "DXS*WUR0*VA*V0\/6*1\r\nST*001*0001\r\nID1*WUR0*WUR S=49*W*W*W*0*6*0\r\nCB1*88200205*IVC2*309\r\nVA1*202473*2656*202473* 2656*0*0*0*0\r\nVA2*1104*524288*1104*524288**\r\nTA2*0*0*0*0****\r\nCA 2*202473**202473*2656\r\nCA3*324482*144982**179500*324482*144982**1795 00\r\nCA4*36380*15010*36380*15010\r\nCA5**77\r\nCA8*2476*2476\r\nCA9*0 *0\r\nCA10*14664*13560\r\nDA2*111020*1418*111020*1418*\r\nDA4*235000*235 000*\r\nDB2*0*0*0*0*\r\nDB4*0*0*\r\nEA1*EGS*20131226*1130\r\nEA2*EGS* *186**0\r\nEA3*50*20131226*1131**20131224*1436**50*0\r\nEA7*77*77\r\nEA9* 1882**\r\nLS\r\nPA1*10*60****\r\nPA2*49*2940*49*2840*0*0*0*0\r\nPA3*0* 0*0*0\r\nPA5***0\r\nPA1*11*80****\r\nPA2*50*4000*50*4000*0*0*0*0\r\nP A3*0*0*0*0\r\nPA5***0\r\nPA1*12*80****\r\nPA2*70*5000*70*5000*0*0*0*0 \r\nPA3*0*0*0*0\r\nPA5***0\r\nPA1*13*60****\r\nPA2*50*3000*50*3000*0* 0*0*0\r\nPA3*0*0*0*0\r\nPA5***0\r\nPA1*14*60****\r\nPA2*55*3000*50*30 00*0*0*0*0\r\nPA3*0*0*0*0\r\nPA5***0\r\nPA1*15*0****\r\nPA2*0*0*0*0*0 *0*0*0\r\nPA3*0*0*0*0\r\nPA5***0\r\nPA1*16*0****\r\nPA2*0*0*0*0*0*0*0 *0\r\nPA3*0*0*0*0\r\nPA5***0\r\nPA1*17*0****\r\nPA2*0*0*0*0*0*0*0*0\r\ nPA3*0*0*0*0\r\nPA5***0\r\nPA1*18*0****\r\nPA2*0*0*0*0*0*0*0*0\r\nPA3 *0*0*0*0\r\nPA5***0\r\nPA1*19*0****\r\nPA2*0*0*0*0*0*0*0*0\r\nPA3*0*0 *0*0\r\nPA5***0\r\nPA1*20*0****\r\nPA2*0*0*0*0*0*0*0*0\r\nPA3*0*0*0*0 \r\nPA5***0\r\nPA1*21*0****\r\nPA2*0*0*0*0*0*0*0*0\r\nPA3*0*0*0*0\r\nP A5***0\r\nPA1*22*0****\r\nPA2*0*0*0*0*0*0*0*0\r\nPA3*0*0*0*0\r\nPA5** *0\r\nPA1*23*0****\r\nPA2*0*0*0*0*0*0*0*0\r\nPA3*0*0*0*0\r\nPA5***0\r \nPA1*24*0****\r\nPA2*0*0*0*0*0*0*0*0\r\nPA3*0*0*0*0\r\nPA5***0\r\nPA 1*25*0****\r\nPA2*0*0*0*0*0*0*0*0\r\nPA3*0*0*0*0\r\nPA5***0\r\nLE\r\n G85*EDE8\r\nSE*262*0001\r\nDXE*1*1\r\n\u0000"} Como respuesta a esta petición debemos esperar un Response status 200, indicando que el proceso ha funcionado correctamente y se ha Proyecto Fin de Carrera - Ingeniería en Informática Página 179 de 185 Redes malladas con Arduino para el Internet de las cosas conseguido almacenar en la base de datos del servidor de Slim para la posterior inicialización de la tienda. Una vez que la máquina ha enviado el DEX, deberá aparecer en la web de administración http://openvend.eu/web/ dentro del menú “ApiKey”, “Máquinas que han enviado el DEX”, buscamos la máquina en el listado a partir del ApiKey, en el ejemplo que nos ocupa “eyagc9zffczXInF”. FIGURA 7-3 ALTA DE MÁQUINA EN LA PLATAFORMA Proyecto Fin de Carrera - Ingeniería en Informática Página 180 de 185 Redes malladas con Arduino para el Internet de las cosas Al seleccionar el ApiKey debemos asignar la máquina al propietario deseado cumplimentando en el formulario: el número de máquina, datos de geolocalización de la máquina y modelo de máquina “Necta”. Al pulsar enviar se nos pedirá confirmación para la inicialización de la máquina. Al confirmar, pasados unos segundos la tienda asociada a esa máquina estará levantada y habrá pasado al listado de máquinas inicializadas dentro de la aplicación web. Ahora que la máquina está asociada al propietario debemos configurar los productos. Un primer paso que podemos hacer es comprobar que el envío del fichero DEX es correcto. Para ello accedemos a la página de administración de la tienda por defecto de ese operador, cuya url tendrá el siguiente formato, “http://openvend.eu/#NOMBREPROPIETARIO#/admin/” (en el ejemplo que nos ocupa será http://openvend.eu/enviodex/admin/), para acceder al sistema, las credenciales son: Usuario: vending Contraseña: uned2014vending Una vez logados en el sistema podemos consultar los últimos envíos de DEX en el menú “Extensiones” -> “text_dex_report” -> “text_dex_report”. Realizada esta comprobación podemos, ahora sí, configurar los productos de nuestra tienda. Para acceder debemos ir a una url con el siguiente formato “http://openvend.eu/#NOMBREPROPIETARIO#/index.php?route=module/opera Proyecto Fin de Carrera - Ingeniería en Informática Página 181 de 185 Redes malladas con Arduino para el Internet de las cosas tor/operatorVending”, (en el caso que nos ocupa será http://openvend.eu/enviodex/index.php?route=module/operator/operatorVendin g). Las credenciales de acceso son: Usuario: default_operator Contraseña: default Elegimos la opción “Máquinas nuevas” y posteriormente seleccionamos la máquina que queremos configurar. En nuestro ejemplo será la máquina “enviodex15”. Seleccionamos la categoría del almacén que queremos configurar “Latas y botellas pequeñas” y arrastramos los productos de la parte inferior a los carriles en los que deben aparecer. Cuando hayamos terminado, pulsamos sobre el botón máquina configurada. Nos deberá mostrar el mensaje “Máquina configurada”. Desde este momento la web de compra de esta máquina estará accesible desde una url con el siguiente formato: http://openvend.eu/#NOMBREPROPIETARIO##NUMEROMAQUINA#/?route= module/openvend. (En el ejemplo que nos ocupa será http://openvend.eu/enviodex15/?route=module/openvend). Esta es la interfaz que deberemos ver: Proyecto Fin de Carrera - Ingeniería en Informática Página 182 de 185 Redes malladas con Arduino para el Internet de las cosas FIGURA 7-4 PROCESO DE COMPRA La siguiente llamada que debe hacer la máquina después de inicializada es la petición de una url corta que, tras leerla del tag de nfc dinámico situado en la máquina, le redireccionará a una url larga con un token único para esa tienda y de un único acceso. En esta petición deberá indicar el ApiKey obtenido en el proceso inicial X-Apikey, mediante una llamada GET a http://openvend.eu/token/ FIGURA 7-5 OBTENCION DE UN TOKEN Este es un ejemplo de url obtenida mediante la llamada a token: Proyecto Fin de Carrera - Ingeniería en Informática Página 183 de 185 Redes malladas con Arduino para el Internet de las cosas “http://openvend.eu/yourls/SOKQPJ”, el formato es el mismo para todos los propietarios, esta url corta será almacenada en el sistema yourls (a continuación se detallan los datos de acceso a este servicio en la plataforma) Datos de acceso a yourls: La ruta base donde está instalado es: http://openvend.eu/yourls/ Para el acceso a su administración y consulta debemos acceder a la siguiente url: http://openvend.eu/yourls/admin/ Las credenciales son: Usuario: vgonzalez Contraseña: vgonzalez Cada url corta de este sistema se traduce en una dirección larga a la que se re direcciona al usuario tras el acceso a la primera. Este es el formato que debe tener el contenido de una url larga “http://openvend.eu/#NOMBREPROPIETARIO#/?route=module/openvend&tok en=o5YR6q12gBZcSRXuUkOeow..&id_machine=#NOMBREPROPIETARIO## NUMEROMAQUINA#”. (En el ejemplo que llevamos siguiendo en esta guía es: Proyecto Fin de Carrera - Ingeniería en Informática Página 184 de 185 Redes malladas con Arduino para el Internet de las cosas http://openvend.eu/enviodex/?route=module/openvend&token=o5YR6q12gBZc SRXuUkOeow..&id_machine=enviodex15). Proyecto Fin de Carrera - Ingeniería en Informática Página 185 de 185