Télémétrie du capteur 2.0.1
Sensor Telemetry 2.0.1 Conduisez les données de température vers Microsoft Azure IoT Hub et surveillez les données à distance à partir d'une application Windows Universal. Remasterisé numériquement !
Histoire
MISE À JOUR :Le projet Sensor Telemetry a été remasterisé numériquement. Mis à jour le 17 mai 2017 et renommé Sensor Telemetry 2.0.1
Introduction
Aperçu
Dans ce projet, nous surveillerons un capteur de température (MCP9808 ) et envoyer les relevés de télémétrie à un Microsoft Azure IoT Hub où un Stream Analytics La tâche traitera les messages et les écrira dans un SQL Azure Base de données tableau. Nous utiliserons les applications mobiles pour afficher l'historique des lectures du capteur.
L'Application
Le projet contient deux applications Windows universelles (sur la plate-forme Windows universelle, UWP) qui partagent environ 99% du code. L'un est destiné au Raspberry Pi (ou ARM) et l'autre aux plates-formes x86 ou x64.
La version IoT de l'application s'exécute sur le Raspberry Pi et lit la température du MCP9808. L'application envoie des événements de télémétrie à Azure IoT Hub et au SignalR moyeu. Cette version écoutera également les commandes d'Azure IoT Hub.
La version client, démarrée sur un ordinateur, écoutera les mises à jour des capteurs du hub SignalR et les affichera à l'écran. Cette version enverra également des commandes à la version IoT via Azure IoT Hub.
Technologies
L'application de ce projet est basée sur le MVVM (Modèle-Vue-VueModèle) et a été construit à l'aide du prisme bibliothèque et utilise Prism.Unity pour le IoC (Inversion de contrôle) conteneur. En plus de ces bibliothèques, l'application utilise l'Agrégateur d'événements trouvé dans le Prism.Event bibliothèque pour créer, au mieux, une architecture purement événementielle. L'application utilise cette bibliothèque pour permettre aux modules internes de communiquer tout en restant faiblement couplés.
L'application utilise également SignalR sur Azure Mobile App pour permettre à plusieurs instances de l'application de communiquer entre elles. Les relevés de température sont « diffusés » à tous les clients fonctionnant à distance afin qu'ils puissent recevoir les relevés du capteur de température à afficher dans la vue principale.
Architecture
Au cœur de l'application se trouve la bibliothèque MCP9808 construite en tant que projet distinct pouvant être réutilisé dans d'autres applications. Ce projet est développé comme une bibliothèque UWP qui peut être utilisée dans n'importe quelle application Windows 10. Si la bibliothèque est utilisée sur un appareil qui n'a pas de I2C bus, la bibliothèque ne renverra aucun objet périphérique. Cette approche peut être utilisée pour "détecter" un capteur et ignorer gracieusement la bibliothèque lorsqu'un capteur n'est pas trouvé.
Dans l'application cliente UWP, plusieurs blocs constituent l'application globale. Les vues sont les pages visibles et chaque vue a un modèle de vue responsable de l'état de la vue. Il existe trois référentiels :les paramètres des applications (IApplicationSettingsRepository ), informations de débogage (IDebugConsoleRepository ) et lire et écrire le MCP9808 (ITemperatureRepository ). Il existe deux classes concrètes construites autour de ITemperatureRepository ; l'un enveloppe la bibliothèque MCP9808 et l'autre est un périphérique nul utilisé lorsque l'application ne s'exécute pas sur le Raspberry Pi.
La classe Mcp9808TemperatureRepository surveille le MCP9808 à l'aide du service de minuterie et publie des informations sur la température via l'agrégateur d'événements interne chaque fois que la lecture de la température ou l'état d'alerte change. Un nouvel événement est envoyé uniquement lorsque la lecture actuelle est différente de la lecture précédente.
Il existe également une série de services définis par IBackgroundService qui s'exécutent en arrière-plan pour diverses activités.
Le diagramme ci-dessous représente une vue de haut niveau de l'architecture et de la connectivité entre les différents blocs et services.
Service de télémétrie
Ce service surveille l'événement de changement de température (via un abonnement) et envoie un message à Azure Service Bus Event Hub chaque fois que la température change.
Service de minuterie
Ce service simple est un minuteur qui publie un événement toutes les 500 millisecondes et est utilisé par les modèles de vue pour afficher l'heure actuelle sur une vue. Il est également utilisé par le Mcp9808TemperatureRepository pour lire le capteur une fois par seconde. Les arguments d'événement timer incluent un compteur qui peut être utilisé avec la fonction mod pour diviser facilement l'intervalle de timer en la longueur souhaitée. Il existe une méthode appelée IsMyInterval(TimeSpan interval) sur l'argument d'événement qui fait le calcul pour vous. Tout ce que vous avez à faire est de fournir l'intervalle sous forme de TimeSpan objet.
Service de surveillance des broches d'alerte
Ce service surveille l'état de la broche GPIO connectée à la broche d'alerte sur le MCP9808. Lorsque la valeur du GPIO est modifiée, ce service publie un événement.
Service LED
Ce service est chargé d'allumer et d'éteindre les LED. Cela se fait en surveillant (via un abonnement) l'événement de changement de température qui inclut également l'état d'alerte du MCP9808. Lorsque l'état d'alerte change, les LED sont mises à jour en conséquence.
Service de surveillance des boutons poussoirs
Ce service surveille la broche GPIO connectée au bouton poussoir et publie un événement lorsque le bouton est relâché. Cet événement est capté par le Mcp9808TemperatureRepository lorsque l'appareil est en mode de réinitialisation d'alerte manuelle (mode d'interruption MCP9808). Les événements de débogage sont également publiés afin que l'état du bouton puisse être affiché dans la console de débogage.
Service de relais de notification
Le service surveille le hub SignalR et l'agrégateur d'événements interne et relaie les messages entre les deux en fonction d'un mappage prédéfini (à l'aide de EventRelayMap classer). Cela permet essentiellement à l'application d'être uniquement consciente du système d'événements interne et toujours capable d'envoyer et de recevoir des messages avec d'autres instances de l'application.
Service de console de débogage
Ce service surveille les applications (via un abonnement) pour les événements de débogage et les ajoute à une collection interne. Il implémente également DebugConsoleRepository , qui permet à la vue de la console de débogage d'afficher ces événements dans l'application via le modèle de vue.
Initialisation de l'application
Lorsque l'application démarre, elle lance la StartPage view first, qui appelle automatiquement le StartPageViewModel . Ce modèle de vue met tout en place avant de se lancer dans la vue principale.
Mise en route
Exigences du circuit
Le circuit nécessite une grande planche à pain sans soudure et, en option, un cordonnier en forme de T et un câble plat (j'utilise la version vendue par Vilros). La planche à pain peut être obtenue à partir d'une multitude d'endroits (j'ai acheté dans les magasins locaux et sur Amazon). Le circuit utilise également un bouton-poussoir tactile momentané à quatre broches. Il existe de nombreux types; tout fera l'affaire. Enfin, pour le capteur de température, j'utilise la carte de déploiement de capteur de température I2C haute précision MCP9808 d'Adafruit.
Le circuit peut être construit sans le cordonnier. Suivez simplement le diagramme alternatif de la maquette à la fin du projet.
Assemblage du circuit
Utilisez ce guide pour assembler le circuit en utilisant le schéma situé près du bas de la page comme guide (remarque :la couleur des fils est facultative et a été sélectionnée pour aider à rendre le circuit facile à suivre quand il est construit).
- Placez chacune des quatre LED sur la maquette.
- Connectez une extrémité d'un 220 Ω résistance à l'anode de chaque LED et connectez l'autre extrémité de la résistance au 3V3 (broche 1 ou 17) sur le Raspberry Pi. Les quatre anodes LED doivent être connectées à 3V3 via un 220 résistance. Il est préférable d'utiliser l'un des + rails sur votre maquette pour les connexions 3V3.
- Connectez la cathode de la LED bleue au GPIO 18 (broche 12) sur le Raspberry Pi.
- Connectez la cathode de la LED verte au GPIO 23 (broche 16) sur le Raspberry Pi.
- Connectez la cathode de la LED rouge au GPIO 12 (broche 32) sur le Raspberry Pi.
- Connectez la cathode de la LED jaune au GPIO 16 (broche 36) sur le Raspberry Pi.
- Placez le MCP9808 sur la planche à pain.
- Connecter Vdd sur le MCP9808 vers le 3V3 sur le Raspberry Pi.
- Connecter GND sur le MCP9808 vers GND sur le Raspberry Pi. La masse du Raspberry Pi peut être l'une des broches suivantes : 6, 9, 14, 20, 25, 30, 34 et 39.
- Connecter SCL sur le MCP9808 vers SCL sur le Raspberry Pi (broche 5).
- Connecter SDA sur le MCP9808 vers SDA sur le Raspberry Pi (broche 3).
- Connectez un 10K Ω résistance entre le Alerte broche sur le MCP9808 et 3V3 sur le Raspberry Pi.
- Connectez l'Alerte épinglez le MCP9808 sur le GPIO 6 (broche 31) sur le Raspberry Pi.
- Placez le bouton-poussoir sur la planche à pain.
- Connectez un côté du commutateur à GPIO 5 (broche 29) sur le Raspberry Pi.
- Connectez l'autre côté du commutateur GND sur le Raspberry Pi.
- Connectez un 10K Ω résistance entre le GPIO 5 et 3V3 sur le Raspberry Pi.
Vous trouverez ci-dessous quelques photos du circuit que j'ai construit à l'aide du cordonnier.
Exigences Microsoft Azure
Si vous n'avez pas de compte Azure, vous devrez en créer un. Vous pouvez obtenir un crédit de 200 $ lorsque vous démarrez votre compte. Accédez à azure.com et cliquez sur le lien COMPTE GRATUIT . Si vous avez déjà un compte, connectez-vous au portail à l'adresse portal.azure.com .
REMARQUE :ce guide n'est pas un guide exhaustif de configuration d'Azure. Vous devrez peut-être vous familiariser avec le portail si vous ne l'avez jamais utilisé auparavant. Je vais parcourir les étapes nécessaires à ce projet du mieux que je peux.
Laissez-vous connecté au portail Azure pendant tout le processus d'installation. Vous devrez vous y référer plusieurs fois.
Configuration Azure IoT Event Hub
- Sélectionnez Nouveau dans le menu de gauche du portail.
- Sélectionnez Internet des objets
- Sélectionnez Iot Hub
- Saisissez un nom unique pour votre hub.
- Sélectionnez un abonnement.
- Sous Groupe de ressources sélectionnez Créer un nouveau et entrez un nom pour votre groupe. Notez que vous utiliserez ce groupe pour toutes les ressources Azure créées au cours de ce projet.
- Choisissez un emplacement (essayez de garder toutes les ressources dans la même région pour garder les frais bas ).
- S'il s'agit de votre premier hub IoT, sélectionnez Tarification et niveau de mise à l'échelle. Sélectionnez ensuite F1 gratuit . Vous pouvez avoir un niveau gratuit dans votre compte.
- Enfin, cliquez sur créer et attendez que l'IoT Hub soit créé.
- Cliquez sur IoT Hub dans le menu de gauche pour voir le nouveau hub.
- Cliquez sur le nouveau hub pour voir un aperçu des détails. Vous devrez vous référer à cette vue plus tard.
Créer un appareil
Azure IoT Hub requiert que chaque appareil soit identifié et enregistré de manière unique dans le hub à des fins de sécurité. Un appareil peut être enregistré à l'aide du SDK et du code Azure, mais pour ce projet, nous utiliserons l'explorateur d'appareils disponible dans le SDK Azure.
- Téléchargez le SDK Azure depuis GitHub à partir de https://github.com/Azure/azure-iot-sdk-csharp soit en récupérant le fichier zip, soit en clonant le référentiel.
- Si vous avez téléchargé le fichier zip, développez-le dans un dossier sur votre disque.
- Ouvrez le dossier azure-iot-sdk–csharp-master\tools\DeviceExplorer .
- Ouvrez le projet DeviceExplorer dans Visual Studio.
- Exécutez l'application.
- Revenez au portail Azure et sélectionnez votre IoT Hub. Cliquez sur les Règles d'accès partagé lien et sélectionnez iothubowner . Cliquez sur la copie bouton à côté de la Chaîne de connexion – clé primaire .
- Dans la fenêtre Explorateur d'appareils, collez cette chaîne dans la zone de texte intitulée Chaîne de connexion IoT Hub .
- Cliquez sur Mettre à jour bouton.
- Passer à la Gestion dans l'explorateur d'appareils et cliquez sur Créer .
- Tapez un nom pour votre appareil (par exemple, TemperatureDevice1 ).
- Assurez-vous que les Clés de génération automatique la case est cochée et cliquez sur Créer .
- Cliquez sur Terminé .
- Vous devrez revenir à cette application pour obtenir la chaîne de connexion de l'appareil plus tard.
Configuration de la base de données Azure SQL
Les données de télémétrie seront stockées dans une base de données Azure SQL. Utilisez le portail pour créer la base de données.
- Cliquez sur Bases de données SQL dans le menu du portail.
- Cliquez sur Ajouter bouton.
- Entrez un nom pour la base de données (c'est-à-dire SensorTelemetry)
- Sélectionnez un abonnement.
- Pour Groupe de ressources choisissez Utiliser l'existant et sélectionnez Télémétrie du capteur dans le menu déroulant.
- Cliquez sur le lien du serveur pour configurer un nouveau serveur.
- Entrez un nom pour le serveur.
- Entrez un nom d'utilisateur (vous en aurez besoin plus tard, alors n'oubliez pas ).
- Entrez un mot de passe (vous en aurez besoin plus tard, alors n'oubliez pas ).
- Choisissez un emplacement (essayez de garder toutes les ressources dans la même région pour garder les frais bas ).
- Cliquez sur Sélectionner .
- Cliquez sur Niveau de tarification .
- Sélectionnez Basique .
- Cliquez sur Sélectionner .
- Cliquez sur Créer .
- Cliquez sur le nouveau serveur dans la liste SQL Server,
- Cliquez sur Définir le pare-feu du serveur pour autoriser l'accès de votre ordinateur au serveur SQL.
- Saisissez un nom pour la connexion et votre adresse IP externe dans les plages IP de début et IP de fin.
- Cliquez sur les points de suspension pour enregistrer l'entrée.
- Cliquez sur Enregistrer pour enregistrer l'adresse IP.
Créer la table de base de données
La table utilisée sera créée manuellement. Le déploiement de Code First peut être utilisé dans les applications mobiles, mais la table créée ne sera pas compatible avec Stream Analytics.
- Ouvrez Visual Studio.
- Sélectionnez Explorateur d'objets SQL Server de la Vue menu.
- Cliquez avec le bouton droit sur SQL Server objet et sélectionnez Ajouter SQL Server .
- Parcourez les bases de données Azure et sélectionnez la base de données que vous avez créée à l'étape précédente.
- Saisissez votre nom d'utilisateur et votre mot de passe, puis cliquez sur Connecter .
- Développez les éléments de l'explorateur d'objets jusqu'à ce que vous voyiez la base de données que vous avez créée.
- Cliquez avec le bouton droit sur cette base de données et choisissez Nouvelle requête .
- Copiez le script SQL depuis le bas de cette page de projet et collez-le dans la fenêtre de code Visual Studio.
- Sélectionnez Exécuter à partir du SQL menu pour exécuter le script.
- Développer l'objet tableaux dans l'explorateur affichera le tableau nouvellement créé appelé SensorReadings .
Créer le plan de service d'application
Le plan App Service est requis pour créer un App Service.
- Sélectionnez les forfaits App Service dans le menu du portail.
- Saisissez un nom pour le plan.
- Pour Groupe de ressources choisissez Utiliser l'existant et sélectionnez Télémétrie du capteur dans le menu déroulant.
- Choisissez un emplacement.
- Cliquez sur Niveau de tarification et sélectionnez B1 Basic .
- Cliquez sur Créer .
Créez l'App Service ( Application mobile )
Le site Web et le hub SignalR fonctionneront avec un service d'application.
- Cliquez sur Nouveau dans le menu du portail.
- Choisissez Web+Mobile de la liste.
- Choisissez Application mobile .
- Saisissez un nom pour l'application.
- Sélectionnez un abonnement.
- Pour Groupe de ressources choisissez Utiliser l'existant et sélectionnez Télémétrie du capteur dans le menu déroulant.
- Choisissez le plan App Service que vous avez créé à l'étape précédente.
- App Insights est facultatif.
- Cliquez sur Créer .
Configuration Azure Stream Analytics
Le travail Stream Analytics surveillera les événements de données sur l'IoT Hub et les écrira dans une base de données SQL Server. Le travail consistera en une entrée (l'IoT Hub) et une sortie (la table SQL) et une requête qui choisit les champs à utiliser.
- Choisissez Nouveau .
- Sélectionnez Données + Analytics dans le menu.
- Sélectionnez Tâche d'analyse de flux dans le menu.
- Saisissez un nom unique pour la tâche.
- Sélectionnez un abonnement.
- Pour le groupe de ressources, choisissez Utiliser existant et sélectionnez Télémétrie du capteur dans la liste déroulante.
- Choisissez un emplacement (essayez de garder toutes les ressources dans la même région pour garder les frais bas ).
- Cliquez sur Créer .
- Sélectionnez Plus de services> dans le menu.
- Faites défiler jusqu'à Stream Analytics et cliquez sur l'étoile . Cela l'épinglera dans le menu du portail.
- Cliquez sur Travaux d'analyse de flux dans le menu du portail.
- Sélectionnez la tâche que vous venez de créer.
- Cliquez sur Entrées .
- Cliquez sur Ajouter .
- Entrez un nom pour l'entrée (c'est-à-dire SensorTelemetry-Input).
- Modifier la source en IoT Hub .
- Acceptez les valeurs par défaut restantes.
- Cliquez sur Créer .
- Cliquez sur Résultats .
- Cliquez sur Ajouter .
- Entrez un nom pour la sortie (c'est-à-dire SensorTelemetry-Output).
- Sélectionnez Base de données SQL comme évier.
- Sélectionnez la base de données de télémétrie des capteurs.
- Entrez le nom d'utilisateur que vous avez spécifié lors de la création du serveur de base de données.
- Entrez le mot de passe que vous avez spécifié lors de la création du serveur de base de données.
- Entrez SensorReadings pour le nom de la table.
- Cliquez sur Créer .
- Sélectionnez Requête .
- Remplacez le texte [YourOutputAlias] avec le nom de la sortie (en gardant les crochets).
- Remplacez le texte [YourInputAlias] avec le nom de l'entrée (en gardant les crochets).
- Remplacez l'astérisque (* ) avec ce texte : [TimestampUtc], Source, Temperature, IsCritical, IsAboveUpperThreshold, IsBelowLowerThreshold
- Cliquez sur Enregistrer puis cliquez sur Oui si vous y êtes invité.
- Cliquez sur Présentation dans le menu du travail Stream Analytics.
- Cliquez sur Démarrer bouton.
- Choisissez maintenant.
- Cliquez sur Démarrer .
Configuration du logiciel
À l'aide du lien du référentiel en bas de la page, téléchargez le code sous forme de fichier zip ou clonez le référentiel sur votre ordinateur et ouvrez le projet dans Visual Studio .
Configurer et publier l'application mobile
L'application Web (située dans le dossier Web) doit être publiée sur Azure App Service.
- Cliquez avec le bouton droit sur le projet dans Visual Studio and select Publish .
- Click Microsoft Azure App Service .
- Select your App Service from the list (you may need to log in if this is the first time).
- Click OK .
- Click Next .
- Go to the Azure portal
- Select SQL Databases from the portal menu.
- Select your database.
- Click the Show database connection strings link.
- Click the copy button next to ADO.NET string.
- Go back to Visual Studio and paste this string into the text box labeled MS_TableConnectionString .
- Change the user name and password to the values you set when you created the SQL Server.
- Click Next .
- Click Publish .
- When the publish has completed, a browser will be launched pointed at your new web site.
Enter the IoT Hub Credentials
Before running the application, you will need to enter your IoT Hub device credentials into the code.
- Open the project in Visual Studio.
- Expand the Sensor Telemetry project under the UWP folder and open the code behind for the App.xaml .
- Scroll down to the section with the definition for IIotHubConfiguration .
- Open the Device Explorer project in another instance of Visual Stduio.
- Click to the Management tab.
- Right-click the device you created previously.
- Click the Copy connection string for selected device option in the menu.
- Go back to the Sensor Telemetry prject and paste the connection string over the text {YOUR CONNECTION STRING HERE} .
- Enter the name of the device over the text {YOUR DEVICE ID HERE} .
- Save this file.
- Expand the Sensor Telemetry IoT project and find the code behidn for App.xaml .
- Scroll down to the section with the definition for IIotHubConfiguration .
- Copy and paste the same configuration from the previous app.cs file.
Enter the Mobile App URL
The Mobile App URL also needs to be entered into the code.
- Open the project in Visual Studio.
- Expand the Shared project.
- Open the UnityConfiguration.cs .
- Scroll down to the section containng the IMobileServicesConfiguration definition.
- Open the Azure portal.
- Click App Services .
- Select the App Service you created for this project.
- Hover the mouse over the URL and click the Copy icon.
- Goback to Visual Studio and paste the URL over the text {YOUR MOBILE SERVICES URL HERE} .
Read More Detail :Sensor Telemetry 2.0.1
Processus de fabrication
- Qu'est-ce que l'étalonnage du capteur - Définition et son application
- Capteur de rythme cardiaque – Fonctionnement et application
- Bibliothèque Python du capteur de température TMP006 utilisant Raspberry pi,
- Capteur de mouvement utilisant Raspberry Pi
- Capteur d'humidité du sol Raspberry Pi
- Test du capteur DS18B20
- Capteur de température Raspberry Pi
- Télémétrie du capteur 2.0.1
- Capteur d'émotion/EEG