Blog de Amazon Web Services (AWS)
Creación de su propio rastreador de vehículos – Parte 2
Por Gerson Itiro Hidaka, Arquitecto de Soluciones AWS Brasil
Introducción
El dispositivo Edge es una parte importante del sistema y no puede quedar fuera de esta publicación de blog. Este dispositivo es responsable por capturar datos GPS y transmitir esa información a la nube. En esta segunda parte de la publicación utilizaremos técnicas de programación basada en flujos (FBP) para desarrollar nuestra aplicación de captura de datos integrada con los servicios configurados en la primera parte de la publicación del blog, Amazon Location Service, AWS IoT Core y AWS Lambda.
Manos a la obra 3: Generar dispositivo perimetral
El foco de esta sección será la creación del prototipo de Dispositivo Edge y la creación de la aplicación que recogerá los datos USB GPS y transformará estos datos en información en formato JSON. Utilizaremos Node-Red para crear esta aplicación.
Si tiene dudas sobre cómo instalar los componentes iniciales, le sugiero que visite los enlaces Raspberry Pi y Node-Red para obtener más información.
Decidimos utilizar la versión «Zero W» de Raspberry Pi porque es más compacta y porque ya tiene Wi-Fi incorporado, pero solo tiene conectores Micro USB. Si tiene otras versiones de Raspberry Pi, como el Modelo B, puede usarlo en este proyecto.
Después de configurar e instalar el sistema operativo en la tarjeta SD, copie 2 archivos en la tarjeta antes de insertarlo en la Raspberry Pi. Los archivos son:
- ssh: Archivo de texto, sin contenido, es decir, un archivo vacío para habilitar SSH Daemon (sshd) en Raspberry Pi y permitir el acceso al dispositivo vía terminal (acceso headless).
- conf: Este es el archivo para la configuración WiFi inicial de Raspberry pi. Inicialmente se configuro Raspberry Pi para que se conecte a la red WiFi doméstica y para poder configurarla e instalar las aplicaciones. Después de todo configurado copio un segundo wpa_supplicant.conf para que se conecte a la red HotSpot de mi teléfono móvil y así puedo utilizarlo dentro de mi vehículo.
Después de copiar los archivos insertamos la tarjeta SD en la Raspberry Pi y hacemos las conexiones externas.
Para conectar el GPS USB que tiene un conector USB-A, elegimos utilizar un convertidor/adaptador «USB-A a Micro USB». Si utiliza una versión más tradicional de Raspberry Pi, como el modelo «B», puede conectar el dispositivo directamente a uno de los puertos USB.
La segunda entrada Micro USB se utilizará para alimentar el dispositivo. Utilizaré otro cable «microUSB/USB-A» para conectarlo al puerto USB de carga de teléfono móvil que está presente en el vehículo.
Con el hardware correctamente conectado y configurado, ahora creamos la aplicación para capturar coordenadas de geolocalización (longitud, latitud y fecha/hora) y enviar los datos a AWS IoT Core en la nube. Para esto, será necesario instalar Node-Red en el Raspberry Pi.
NoDerD es una programación basada en flujo, es decir, podemos crear una aplicación visual y con pocas líneas de programación (utilizando el sintaxis JavaScript). Creamos este flujo sencillo, con 7 nodos, para capturar los datos GPS (por medio del puerto USB – serial), filtrar, convertir los datos (JSON) y, por último, enviarlos a AWS IoT Core por medio del nodo MQTT Out.
Voy a enumerar aquí un resumen de los 7 pasos. El código se ha compartido en AWS Github y se puede importar y personalizar en su Node-Red.
- El serial node es responsable por leer los datos de la puerta serie. El dispositivo GPS USB envía una gran cantidad de información con una periodicidad de 1 segundo. El protocolo utilizado aquí es el NMEA.
Al posicionar el nodo de depuración en la salida del serial node podemos leer los datos enviados por el dispositivo GPS USB en formato NMEA (RAW), como se muestra en la siguiente figura:
- El switch node se utilizará para filtrar la gran cantidad de datos enviados por USB GPS. La información necesaria para el proyecto estan contenidas en el bloque $GNGLL, así que podemos filtrarlas utilizando esta cadena. Añadimos el debug node a la salida del switch node y ahora todos los mensajes contienen la cadena GNGLL.
- NMEA Node convierte el mensaje GNGLL del formato NMEA al formato JSON, y también convierte Latitud y Longitud de grados a un valor decimal.
- O segundo Switch Node também age como um filtro, mas desta vez para filtrar as mensagens válidas. Ele deixa passar apenas as mensagens que possuírem o status = “valid”. Isso é necessário pois na inicialização do GPS USB (warm up period) ele envia uma série de mensagens inválidas (sem informação) e não queremos enviar esse tipo de informação ao AWS IoT Core.
- El function node agrega el campo deviceId al objeto JSON, permite que haya un formato para timestamp y quita los campos que no son necesarios para el proyecto. Se utiliza con el propósito de optimizar los datos que se enviarán a la nube.
6. Después de la optimización de los datos, MQTT Out Node envía de forma segura la carga útil a AWS IoT Core.
7. Para iniciar la configuración del MQTT Out Node simplemente haga doble clic en el nodo. Rellene los campos Topic con el valor mycartopic , QOS con el valor 0 y Retain para False . Seleccione el botón para editar el parámetro Server como se muestra a continuación.
- Rellene el campo Client ID con el valor car01 , tal como se define en la política de AWS IoT Core. En el campo Server, rellene con el valor de punto final de AWS IoT Core obtenido en la publicación anterior. El puerto debe estar configurado con Seleccione el botón para editar el parámetro de TLS configuration como se muestra a continuación.
- Tres archivos deben ser copiados en Node-Red en esta pantalla. Seleccione el enlace Cargar correspondiente al certificado, la clave privada y root CA para cargar los archivos. Seleccione el botón Update en ambas ventanas y Terminar para finalizar.
- El último bloque, Debug, se utiliza para comprobar qué mensajes pasan por medio del flujo y se envían al Broker MQTT.
Conclusión
En esta entrada de Blog vimos que es posible desarrollar dispositivos integrados en la nube con pocas líneas de código. Utilizamos Node-Red en este ejemplo, pero hay muchas otras maneras de crear prototipos rápidos y probar su idea. También hemos visto que es posible integrar este software de código abierto con tecnologías de AWS de forma segura mediante la configuración de certificados y claves de cifrado.
En la parte 3 de esta serie, crearemos servicios front-end y algunos servicios back-end con AWS Amplify.
Te invito a que nos envíes preguntas, comentarios y comentarios utilizando el siguiente formulario. Hasta nuestro próximo blog Post!
Este artículo fue traducido del Blog de AWS en Portugués
Sobre el Autor
Gerson Itiro Hidaka actualmente trabaja como Arquitecto de Soluciones de AWS y presta servicios a socios de todo el mundo denominados Global System Integrators and Influencers (GSII) en la región de América Latina. Entusiasta de tecnologías como Internet de las cosas (IoT), drones, Devops y un experto en tecnologías como la virtualización, serverless, contenedor y Kubernetes. Ha trabajado con soluciones de TI durante más de 24 años, con experiencia en numerosos proyectos de infraestructura, red, migración, recuperación ante desastres y optimización de DevOps en su portafolio.
Revisores
Murilo Nascimento es Gerente de Producto de AWS. Especialista en tecnologías de bases de datos, le encanta estudiar sobre el tema y disfruta aún más compartir lo que aprende con los demás.
Giovanna Chiaratti es Arquitecta de Soluciones para Socios en América Latina enfocada en los países hispano-hablantes. Admiradora y estudiosa de tecnologías como Machine Learning, Artificial Intelligence y Serverless. Trabaja para escalar los socios de consultoría y tecnología para que puedan apoyar a AWS en la creación de soluciones seguras, innovadoras e inteligentes.
Juliano Fernandes Baeta es Arquitecto de Soluciones para Integradores Globales de Sistemas para América Latina. Es un entusiasta del big data, el análisis y el aprendizaje automático y su misión es ayudar a los socios a crear soluciones seguras, eficaces y resistentes en AWS.