Telemetría del sensor 2.0.1
Sensor Telemetry 2.0.1 Conduzca los datos de temperatura a Microsoft Azure IoT Hub y supervise los datos de forma remota desde una aplicación universal de Windows. ¡Remasterizado digitalmente!
Historia
ACTUALIZADO:El proyecto Sensor Telemetry se ha remasterizado digitalmente. Actualizado el 17 de mayo de 2017 y renombrado a Sensor Telemetry 2.0.1
Introducción
Descripción general
En este proyecto, monitorearemos un sensor de temperatura ( MCP9808 ) y envía lecturas de telemetría a Microsoft Azure IoT Hub donde un Stream Analytics el trabajo procesará los mensajes y los escribirá en un Azure SQL Base de datos mesa. Usaremos Aplicaciones móviles para ver el historial de las lecturas del sensor.
La aplicación
El proyecto contiene dos Aplicaciones universales de Windows (en la Plataforma universal de Windows, UWP) que comparten aproximadamente el 99% del código. Uno está dirigido a Raspberry Pi (o ARM) y el otro está dirigido a las plataformas x86 o x64.
La versión de IoT de la aplicación se ejecuta en Raspberry Pi y lee la temperatura del MCP9808. La aplicación envía eventos de telemetría a Azure IoT Hub y SignalR centro. Esta versión también escuchará los comandos de Azure IoT Hub.
La versión del cliente, iniciada en una computadora, escuchará las actualizaciones del sensor desde el concentrador SignalR y las mostrará en la pantalla. Esta versión también enviará comandos a la versión de IoT a través de Azure IoT Hub.
Tecnologías
La aplicación de este proyecto se basa en MVVM (Model-View-ViewModel) y se creó utilizando el Prisma biblioteca y utiliza Prism.Unity para IoC Contenedor (Inversión de Control). Además de estas bibliotecas, la aplicación utiliza el agregador de eventos encontrado en el Prism.Event biblioteca para crear, lo mejor posible, una arquitectura puramente impulsada por eventos. La aplicación utiliza esta biblioteca para permitir que los módulos internos se comuniquen sin dejar de estar acoplados libremente.
La aplicación también usa SignalR en la aplicación móvil de Azure para permitir que varias instancias de la aplicación se comuniquen entre sí. Las lecturas de temperatura se "transmiten" a todos los clientes que se ejecutan de forma remota para que puedan recibir las lecturas del sensor de temperatura y mostrarlas en la vista principal.
Arquitectura
En el corazón de la aplicación se encuentra la biblioteca MCP9808 construida como un proyecto separado que se puede reutilizar en otras aplicaciones. Este proyecto se desarrolla como una biblioteca para UWP que se puede utilizar en cualquier aplicación de Windows 10. Si la biblioteca se usa en un dispositivo que no tiene un I2C bus, la biblioteca no devolverá ningún objeto de dispositivo. Este enfoque se puede utilizar para "detectar" un sensor e ignorar elegantemente la biblioteca cuando no se encuentra un sensor.
En la aplicación cliente para UWP hay varios bloques que componen la aplicación general. Las Vistas son las páginas visibles y cada vista tiene un Modelo de Vista responsable del estado de la Vista. Hay tres repositorios:configuración de aplicaciones ( IApplicationSettingsRepository ), información de depuración ( IDebugConsoleRepository ) y leer y escribir el MCP9808 ( ITemperatureRepository ). Hay dos clases concretas construidas alrededor de ITemperatureRepository; uno envuelve la biblioteca MCP9808 y el otro es un dispositivo nulo que se usa cuando la aplicación no se está ejecutando en la Raspberry Pi.
La clase Mcp9808TemperatureRepository monitorea el MCP9808 usando el servicio de temporizador y publica información de temperatura a través del agregador de eventos interno cada vez que cambia la lectura de temperatura o el estado de alerta. Se envía un nuevo evento solo cuando la lectura actual es diferente de la lectura anterior.
También hay una serie de servicios definidos por IBackgroundService que se ejecutan en segundo plano para diversas actividades.
El siguiente diagrama muestra una vista de alto nivel de la arquitectura y la conectividad entre los distintos bloques y servicios.
Servicio de telemetría
Este servicio supervisa el evento de cambio de temperatura (mediante una suscripción) y envía un mensaje al Centro de eventos de Azure Service Bus cada vez que cambia la temperatura.
Servicio de temporizador
Este servicio simple es un temporizador que publica un evento cada 500 milisegundos y lo utilizan los modelos de vista para mostrar la hora actual en una vista. También lo utiliza Mcp9808TemperatureRepository para leer el sensor una vez por segundo. Los argumentos del evento del temporizador incluyen un contador que se puede utilizar con la función mod para dividir fácilmente el intervalo del temporizador en la longitud deseada. Hay un método llamado IsMyInterval (intervalo de intervalo de tiempo) en el argumento del evento que hace los cálculos por usted. Todo lo que necesita hacer es proporcionar el intervalo como un TimeSpan objeto.
Servicio de supervisión de PIN de alerta
Este servicio monitorea el estado del pin GPIO conectado al pin de alerta en el MCP9808. Cuando se cambia el valor del GPIO, este servicio publica un evento.
Servicio LED
Este servicio es responsable de encender y apagar los LED. Esto se hace monitoreando (mediante suscripción) el evento de cambio de temperatura que también incluye el estado de alerta del MCP9808. Cuando cambia el estado de alerta, los LED se actualizan en consecuencia.
Servicio de monitoreo de botones
Este servicio monitorea el pin GPIO conectado al botón pulsador y publica un evento cuando se suelta el botón. Este evento es recogido por Mcp9808TemperatureRepository cuando el dispositivo está en modo de reinicio de alerta manual (modo de interrupción MCP9808). Los eventos de depuración también se publican para que el estado del botón se pueda ver en la consola de depuración.
Servicio de retransmisión de notificaciones
El servicio monitorea el concentrador de SignalR y el agregador de eventos interno y transmite mensajes entre los dos según un mapeo predefinido (usando EventRelayMap clase). Básicamente, esto permite que la aplicación solo sea consciente del sistema de eventos interno y aún pueda enviar y recibir mensajes con otras instancias de la aplicación.
Servicio de consola de depuración
Este servicio monitorea las aplicaciones (mediante suscripción) para depurar eventos y las agrega a una colección interna. También implementa DebugConsoleRepository , que permite que la vista de la consola de depuración muestre estos eventos en la aplicación a través del modelo de vista.
Inicialización de la aplicación
Cuando se inicia la aplicación, inicia la StartPage ver primero, que invoca automáticamente el StartPageViewModel . Este modelo de vista pone todo en funcionamiento antes de lanzarse a la vista principal.
Introducción
Requisitos del circuito
El circuito requiere una placa grande sin soldadura y, opcionalmente, un zapatero en forma de T y un cable plano (yo uso la versión vendida por Vilros). La placa se puede obtener en una multitud de lugares (la he comprado en tiendas locales y en Amazon). El circuito también utiliza un interruptor de botón táctil momentáneo con cuatro pines. Hay muchos tipos; cualquiera servirá. Finalmente, para el sensor de temperatura, estoy usando la placa de conexión del sensor de temperatura I2C de alta precisión MCP9808 de Adafruit.
El circuito se puede construir sin el zapatero. Simplemente siga el diagrama de tablero alternativo al final del proyecto.
Asamblea de circuito
Use esta guía para ensamblar el circuito mientras usa el diagrama ubicado cerca de la parte inferior de la página como guía (nota:el color de los cables es opcional y ha sido seleccionado para ayudar a que el circuito sea fácil de instalar). seguir cuando se construye).
- Coloque cada uno de los cuatro LED en la placa de pruebas.
- Conecte un extremo de un 220 Ω resistor al ánodo de cada LED y conecte el otro extremo del resistor al 3V3 (pin 1 o 17) en la Raspberry Pi. Los cuatro ánodos LED deben estar conectados a 3V3 a través de un 220 Ω resistor. Es mejor utilizar uno de los + rieles en su tablero para las conexiones 3V3.
- Conecte el cátodo del LED azul a GPIO 18 (pin 12) en la Raspberry Pi.
- Conecte el cátodo del LED verde a GPIO 23 (pin 16) en la Raspberry Pi.
- Conecte el cátodo del LED rojo a GPIO 12 (pin 32) en la Raspberry Pi.
- Conecta el cátodo del LED amarillo a GPIO 16 (pin 36) en la Raspberry Pi.
- Coloque el MCP9808 en la placa de pruebas.
- Conectar Vdd en el MCP9808 al 3V3 en la Raspberry Pi.
- Conectar GND en el MCP9808 a GND en la Raspberry Pi. La tierra de la Raspberry Pi puede ser cualquiera de los siguientes pines:6, 9, 14, 20, 25, 30, 34 y 39.
- Conectar SCL en el MCP9808 a SCL en la Raspberry Pi (pin 5).
- Conectar SDA en el MCP9808 a SDA en la Raspberry Pi (pin 3).
- Conecte un 10K Ω resistencia entre la Alerta pin en el MCP9808 y 3V3 en la Raspberry Pi.
- Conecte la alerta pin del MCP9808 al GPIO 6 (pin 31) en la Raspberry Pi.
- Coloque el interruptor de botón en la placa de pruebas.
- Conecta un lado del conmutador a GPIO 5 (pin 29) en la Raspberry Pi.
- Conecta el otro lado del interruptor GND en la Raspberry Pi.
- Conecte un 10K Ω resistencia entre GPIO 5 y 3V3 en la Raspberry Pi.
A continuación se muestran algunas fotos del circuito que construí con el zapatero.
Requisitos de Microsoft Azure
Si no tiene una cuenta de Azure, deberá crear una. Puede obtener un crédito de $ 200 al iniciar su cuenta. Vaya a azure.com y haga clic en el enlace CUENTA GRATIS . Si ya tiene una cuenta, inicie sesión en el portal en portal.azure.com . .
NOTA:Esta guía no es una guía exhaustiva para configurar Azure. Es posible que deba familiarizarse con el portal si nunca lo ha utilizado antes. Seguiré los pasos necesarios para este proyecto lo mejor que pueda.
Inicie sesión en Azure Portal durante todo el proceso de configuración. Deberá consultarlo muchas veces.
Configuración de Azure IoT Event Hub
- Seleccione Nuevo . en el menú de la izquierda del portal.
- Selecciona Internet de las cosas .
- Seleccione Iot Hub
- Ingrese un nombre único para su centro.
- Seleccione una suscripción.
- En Grupo de recursos seleccione Crear nuevo e ingrese un nombre para su grupo. Tenga en cuenta que utilizará este grupo para todos los recursos de Azure creados durante este proyecto.
- Elija una ubicación ( intente mantener todos los recursos en la misma región para mantener bajos los cargos ) ).
- Si este es su primer centro de IoT, seleccione Precios y nivel de escala. Luego, seleccione F1 Gratis . Puede tener un nivel gratuito en su cuenta.
- Por último, haga clic en crear y espere a que se cree IoT Hub.
- Haga clic en IoT Hub en el menú de la izquierda para ver el nuevo hub.
- Haga clic en el nuevo centro para ver una descripción general de los detalles. Deberá volver a consultar esta vista más adelante.
Crear un dispositivo
Azure IoT Hub requiere que cada dispositivo se identifique y registre de forma única en el concentrador por motivos de seguridad. Un dispositivo se puede registrar usando el SDK de Azure y el código, pero para este proyecto usaremos el Explorador de dispositivos disponible en el SDK de Azure.
- Descargue el SDK de Azure de GitHub desde https://github.com/Azure/azure-iot-sdk-csharp obteniendo el archivo zip o clonando el repositorio.
- Si descargó el archivo zip, expándalo a una carpeta en su disco.
- Abra la carpeta azure-iot-sdk – csharp-master \ tools \ DeviceExplorer .
- Abra el proyecto DeviceExplorer en Visual Studio.
- Ejecute la aplicación.
- Vuelva a Azure Portal y seleccione su IoT Hub. Haga clic en Políticas de acceso compartido . enlace y seleccione iothubowner . Haga clic en copiar junto a la Cadena de conexión:clave principal .
- En la ventana del Explorador de dispositivos, pegue esta cadena en el cuadro de texto etiquetado Cadena de conexión de IoT Hub .
- Haga clic en Actualizar botón.
- Cambiar a Gestión pestaña en el Explorador de dispositivos y haga clic en Crear .
- Escriba un nombre para su dispositivo (por ejemplo, TemperatureDevice1 ).
- Asegúrese de que Generar claves automáticamente está seleccionada la casilla de verificación y haga clic en Crear .
- Haga clic en Listo . .
- Deberá volver a esta aplicación para obtener la cadena de conexión del dispositivo más tarde.
Configuración de la base de datos SQL de Azure
Los datos de telemetría se almacenarán en una base de datos SQL de Azure. Utilice el portal para crear la base de datos.
- Haga clic en Bases de datos SQL . en el menú del portal.
- Haga clic en Agregar botón.
- Ingrese un nombre para la base de datos (es decir, SensorTelemetry)
- Seleccione una suscripción.
- Para grupo de recursos elija Usar existente y seleccione Telemetría del sensor en el menú desplegable.
- Haga clic en el enlace del servidor para configurar un nuevo servidor.
- Ingrese un nombre para el servidor.
- Ingrese un nombre de usuario ( lo necesitará más adelante, así que recuérdelo ).
- Ingresa una contraseña ( la necesitarás más adelante, así que recuérdala ).
- Elija una ubicación ( intente mantener todos los recursos en la misma región para mantener bajos los cargos ) ).
- Haga clic en Seleccionar . .
- Haga clic en Nivel de precios . .
- Seleccione Básico .
- Haga clic en Seleccionar . .
- Haga clic en Crear . .
- Haga clic en el nuevo servidor en la lista de SQL Server,
- Haga clic en Establecer firewall del servidor . para permitir el acceso desde su computadora al servidor SQL.
- Ingrese un nombre para la conexión y su dirección IP externa en el rango de IP de inicio y IP final.
- Haga clic en los puntos suspensivos para guardar la entrada.
- Haga clic en Guardar . para guardar la dirección IP.
Crear la tabla de base de datos
La tabla utilizada se creará manualmente. La implementación de Code First se puede utilizar en aplicaciones móviles, pero la tabla creada no será compatible con Stream Analytics.
- Abra Visual Studio.
- Seleccione Explorador de objetos de SQL Server . desde la Vista menú.
- Haga clic con el botón derecho en SQL Server objeto y seleccione Agregar servidor SQL .
- Examine las bases de datos de Azure y seleccione la base de datos que creó en el paso anterior.
- Ingrese su nombre de usuario y contraseña y haga clic en Conectar .
- Expanda los elementos del explorador de objetos hasta que vea la base de datos que creó.
- Haga clic con el botón derecho en esta base de datos y seleccione Nueva consulta . .
- Copie el script SQL de la parte inferior de la página de este proyecto y péguelo en la ventana de código de Visual Studio.
- Seleccione Ejecutar . desde el SQL menú para ejecutar el script.
- Al expandir el objeto de tablas en el explorador, se revelará la tabla recién creada llamada SensorReadings .
Crear el plan de servicio de la aplicación
El plan de servicio de aplicaciones es necesario para crear un servicio de aplicaciones.
- Seleccione los planes de App Service en el menú del portal.
- Ingrese un nombre para el plan.
- Para grupo de recursos elija Usar existente y seleccione Telemetría del sensor en el menú desplegable.
- Elija una ubicación.
- Haga clic en Nivel de precios . y seleccione B1 Basic .
- Haga clic en Crear . .
Cree el servicio de aplicaciones ( Aplicación móvil )
El sitio web y el centro de SignalR se ejecutarán con un servicio de aplicaciones.
- Haga clic en Nuevo . desde el menú del portal.
- Elija Web + Móvil . de la lista.
- Elija Aplicación móvil . .
- Ingrese un nombre para la aplicación.
- Seleccione una suscripción.
- Para grupo de recursos elija Usar existente y seleccione Telemetría del sensor en el menú desplegable.
- Elija el plan de servicio de aplicaciones que creó en el paso anterior.
- App Insights es opcional.
- Haga clic en Crear . .
Configuración de Azure Stream Analytics
El trabajo de Stream Analytics supervisará los eventos de datos en IoT Hub y los escribirá en una base de datos de SQL Server. El trabajo constará de una entrada (IoT Hub) y una salida (la tabla SQL) y una consulta que elige qué campos usar.
- Elija Nuevo . .
- Seleccione Datos + Análisis . en el menú.
- Seleccione Trabajo de Stream Analytics . en el menú.
- Ingrese un nombre único para el trabajo.
- Seleccione una suscripción.
- Para el grupo de recursos, elija Usar existente y seleccione Telemetría de sensor en el menú desplegable.
- Elija una ubicación ( intente mantener todos los recursos en la misma región para mantener bajos los cargos ) ).
- Haga clic en Crear . .
- Seleccione Más servicios> en el menú.
- Desplácese hacia abajo hasta Stream Analytics . y haz clic en la estrella . Esto lo fijará en el menú del portal.
- Haga clic en Trabajos de Stream Analytics . en el menú del portal.
- Seleccione el trabajo que acaba de crear.
- Haga clic en Entradas . .
- Haga clic en Agregar . .
- Ingrese un nombre para la entrada (es decir, SensorTelemetry-Input).
- Cambie la fuente a IoT Hub .
- Acepte los valores predeterminados restantes.
- Haga clic en Crear . .
- Haga clic en Salidas . .
- Haga clic en Agregar . .
- Ingrese un nombre para la salida (es decir, SensorTelemetry-Output).
- Seleccione Base de datos SQL . como el fregadero.
- Seleccione la base de datos de telemetría del sensor.
- Ingrese el nombre de usuario que especificó cuando creó el servidor de base de datos.
- Ingrese la contraseña que especificó cuando creó el servidor de base de datos.
- Ingrese SensorReadings para el nombre de la tabla.
- Haga clic en Crear . .
- Seleccione Consulta . .
- Reemplazar el texto [YourOutputAlias] con el nombre de la salida (manteniendo los corchetes).
- Reemplazar el texto [YourInputAlias] con el nombre de la entrada (manteniendo los corchetes).
- Reemplace el asterisco ( * ) con este texto: [TimestampUtc], Source, Temperature, IsCritical, IsAboveUpperThreshold, IsBelowLowerThreshold
- Haga clic en Guardar . y luego haga clic en Sí si se le solicita.
- Haga clic en Descripción general . en el menú de trabajo de Stream Analytics.
- Haga clic en Inicio botón.
- Elija ahora.
- Haga clic en Iniciar . .
Configuración del software
Con el vínculo del repositorio en la parte inferior de la página, descargue el código como un archivo zip o clone el repositorio en su computadora y abra el proyecto en Visual Studio .
Configurar y publicar la aplicación móvil
La aplicación web (ubicada en la carpeta Web) debe publicarse en Azure App Service.
- Haga clic con el botón derecho en el proyecto en Visual Studio . y seleccione Publicar .
- Haga clic en Servicio de aplicaciones de Microsoft Azure . .
- Seleccione su App Service de la lista (es posible que deba iniciar sesión si es la primera vez).
- Haga clic en Aceptar . .
- Haga clic en Siguiente . .
- Vaya al portal de Azure
- Seleccione Bases de datos SQL . desde el menú del portal.
- Seleccione su base de datos.
- Haga clic en Mostrar cadenas de conexión de base de datos enlace.
- Haga clic en el botón Copiar junto a ADO.NET cadena.
- Vuelva a Visual Studio y pegue esta cadena en el cuadro de texto etiquetado MS_TableConnectionString .
- Cambie el nombre de usuario y la contraseña a los valores que estableció cuando creó SQL Server.
- Haga clic en Siguiente . .
- Haga clic en Publicar . .
- Cuando se complete la publicación, se iniciará un navegador que apunta a su nuevo sitio web.
Ingrese las credenciales de IoT Hub
Antes de ejecutar la aplicación, deberá ingresar las credenciales de su dispositivo IoT Hub en el código.
- Abra el proyecto en Visual Studio.
- Expanda la Telemetría del sensor proyecto bajo UWP carpeta y abra el código subyacente para App.xaml .
- Desplácese hacia abajo hasta la sección con la definición de IIotHubConfiguration .
- Abra el Explorador de dispositivos . proyecto en otra instancia de Visual Stduio.
- Haga clic en la pestaña Administración.
- Haga clic con el botón derecho en el dispositivo que creó anteriormente.
- Haga clic en Copiar cadena de conexión para el dispositivo seleccionado . opción en el menú.
- Vuelva al proyecto de telemetría del sensor y pegue la cadena de conexión sobre el texto {SU CADENA DE CONEXIÓN AQUÍ} .
- Ingresa el nombre del dispositivo sobre el texto {TU ID DE DISPOSITIVO AQUÍ} .
- Guarde este archivo.
- Expanda Sensor Telemetry IoT proyecto y busque el código behidn para App.xaml .
- Desplácese hacia abajo hasta la sección con la definición de IIotHubConfiguration .
- Copie y pegue la misma configuración de la app.cs anterior archivo.
Ingrese la URL de la aplicación móvil
La URL de la aplicación móvil también debe ingresarse en el código.
- Abra el proyecto en Visual Studio.
- Expanda Compartido proyecto.
- Abra UnityConfiguration.cs .
- Desplácese hacia abajo hasta la sección que contiene IMobileServicesConfiguration definición.
- Abra el portal de Azure.
- Haga clic en Servicios de aplicaciones . .
- Seleccione el Servicio de aplicaciones que creó para este proyecto.
- Pase el mouse sobre la URL y haga clic en Copiar icono.
- Vuelva a Visual Studio y pegue la URL sobre el texto {SU URL DE SERVICIOS MÓVILES AQUÍ} .
Leer más detalles:Sensor Telemetry 2.0.1
Proceso de manufactura
- ¿Qué es la calibración del sensor? Definición y su aplicación
- Sensor de latido:funcionamiento y aplicación
- ¿Qué es un sensor de O2?
- Biblioteca Python del sensor de temperatura TMP006 con Raspberry pi,
- Sensor de movimiento con Raspberry Pi
- Sensor de humedad del suelo Raspberry Pi
- Prueba del sensor DS18B20
- Sensor de temperatura Raspberry Pi
- Telemetría del sensor 2.0.1
- Sensor de emoción / EEG
- UnifiedWater v1