Suivi GPS en temps réel avec Helium, Azure IoT Hub et Power BI
Composants et fournitures
| Module de prototypage Helium Atom | × | 1 |
| Arduino Zero | × | 1 |
| Module GPS Adafruit Ultimate GPS Breakout | × | 1 |
| Plaque d'essai (breadboard) | × | 1 |
Applications et services en ligne
- Microsoft Azure
- Arduino IDE
À propos de ce projet
Helium permet aux développeurs de créer des appareils connectés, sécurisés et à faible consommation. Dans ce projet, nous allons utiliser le module Helium Atom Prototyping avec un Arduino Zero et un module GPS Adafruit Ultimate GPS Breakout pour envoyer des données vers Azure IoT Hub, puis les visualiser dans un rapport Power BI.
Matériel
Commencez par fixer votre module Helium Atom Prototyping sur l'adaptateur Helium Atom pour Arduino, puis sur votre Arduino. Nous utilisons un Arduino Zero pour ce guide, mais vous pouvez utiliser un Uno, Due, M0 ou tout autre Arduino.
Une fois l'Atom connecté à l'Arduino, vous devriez obtenir quelque chose comme ceci :

Ensuite, connectez le module Adafruit Ultimate GPS Breakout à l'ensemble. Nous utilisons une plaque d'essai pour plus de clarté, mais vous pouvez câbler directement le module GPS sur l'Arduino. Le câblage doit être le suivant :
- Arduino 5V → GPS VIN
- Arduino GND → GPS GND
- Arduino D12 → GPS TX
- Arduino D10 → GPS RX
Une fois terminé, votre montage devrait ressembler à ceci :

Il faut maintenant connecter et alimenter l'élément Helium (Element). Si vous avez un Element cellulaire, il suffit de l'allumer et d'attendre que le voyant devienne bleu-vert (teal). Pour un Element Ethernet, ou si vous préférez une connexion Ethernet pour votre Element cellulaire, branchez le port Ethernet de l'Element sur un port DHCP (comme l'arrière d'un modem câble ou d'un routeur). Une fois l'Element allumé et le voyant vert, c'est bon.

Maintenant que le matériel Arduino et Atom est prêt, et que l'Element est connecté, passons à la configuration dans le tableau de bord Helium.
Tableau de bord Helium et canaux (Channels)
Ajoutez d'abord votre Atom et votre Element à votre compte utilisateur dans le tableau de bord. Si vous n'avez pas de compte mais possédez le matériel, contactez support@helium.com, sinon connectez-vous avec les identifiants reçus lors de l'achat.
Une fois connecté, activez d'abord votre Element. Cliquez sur Elements à gauche, puis Add New en haut à droite. Saisissez les 4 derniers caractères de l'adresse MAC et le HVV de l'étiquette au dos de l'Element, donnez-lui un nom, ajoutez éventuellement des tags, puis cliquez sur Activate Element.

Répétez la même procédure pour l'Atom : cliquez sur Atoms à gauche, puis Add New, fournissez le MAC et le HVV de l'étiquette de l'Atom, ajoutez des tags si souhaité, et cliquez sur Activate Atom.

Créez maintenant un Azure IoT Hub qui servira de point d'ingestion pour tous vos appareils Helium Atom. Nous supposons que vous avez déjà un compte Azure, sinon créez-en un.
Dans le portail Azure, cliquez sur le + en haut à gauche, puis Internet of Things, puis IoT Hub :

Configurez votre IoT Hub selon vos besoins, puis cliquez sur Créer. Nous recommandons de cocher Pin to Dashboard pour le retrouver facilement :

Une fois le hub déployé (quelques minutes), cliquez dessus depuis votre tableau de bord. Pour configurer le canal Helium, nous avons besoin d'une information : dans l'IoT Hub, choisissez Shared Access Policies à gauche, sélectionnez RegistryReadWrite, puis cliquez sur l'icône de copie à côté de Connection string—primary key. Cette chaîne de connexion sera utilisée dans le tableau de bord Helium. Ne la partagez pas.

De retour dans le tableau de bord Helium, créez un canal qui correspond à l'Azure IoT Hub que vous venez de créer. Cliquez sur Channels à gauche, puis sur Azure IoT Hub sous Create New Channel. Collez la Connection String copiée depuis Azure pour créer le canal sur Helium :

Donnez un nom au canal et cliquez sur Create. Retenez bien ce nom, vous en aurez besoin dans votre code Arduino pour envoyer les données vers ce canal.
Sketch Arduino
Avec l'Azure IoT Hub configuré et le canal Helium créé, il faut maintenant un sketch Arduino utilisant les bibliothèques Helium Arduino et Adafruit GPS pour envoyer les positions GPS vers Helium, puis vers notre canal Azure.
Installez d'abord les deux bibliothèques dans l'Arduino IDE : allez dans Sketch → Include Library → Manage Libraries, recherchez Helium et Adafruit GPS et cliquez sur Install.

Le sketch ci-dessous initialise l'Atom, crée un canal correspondant au Azure IoT Hub créé précédemment, collecte les données GPS du module Adafruit, les formate en JSON, puis les envoie via le réseau Helium.
/*
* Copyright 2017, Helium Systems, Inc.
* All Rights Reserved. See LICENCE.txt for license information
*/
#include "Arduino.h"
#include "avr/dtostrf.h"
#include "Helium.h"
#include
#include
#include "wiring_private.h" // pinPeripheral() function
#define atom_serial Serial1
#define PIN_SERIAL2_RX (34ul)
#define PIN_SERIAL2_TX (36ul)
#define PAD_SERIAL2_TX (UART_TX_PAD_2)
#define PAD_SERIAL2_RX (SERCOM_RX_PAD_3)
Uart Serial2(&sercom1, PIN_SERIAL2_RX, PIN_SERIAL2_TX, PAD_SERIAL2_RX, PAD_SERIAL2_TX);
void SERCOM1_Handler() {
Serial2.IrqHandler();
}
Helium helium(&atom_serial);
Channel channel(&helium);
// GPS stuff
#define gps_serial Serial2
Adafruit_GPS GPS(&gps_serial);
void setup() {
pinPeripheral(10, PIO_SERCOM);
pinPeripheral(12, PIO_SERCOM);
Serial.begin(115200);
Serial.println("Starting");
// Begin communication with the Helium Atom
helium.begin(helium_baud_b115200);
// Connect the Atom to the Helium Network
Serial.print("Connecting - ");
int status = helium.connect();
while (status != helium_status_OK) {
status = helium.connect();
}
Serial.println("Succeeded");
// Begin communicating with the channel
int8_t result;
Serial.print("Creating Channel - ");
status = channel.begin("Hackster Guide", &result);
if (helium_status_OK == status && result == 0) {
Serial.println("Succeeded");
} else {
Serial.println("Failed");
}
delay(1000);
// Init GPS
GPS.begin(9600);
GPS.sendCommand(PMTK_SET_NMEA_OUTPUT_RMCGGA);
GPS.sendCommand(PMTK_SET_NMEA_UPDATE_1HZ);
GPS.sendCommand(PGCMD_NOANTENNA);
delay(2000);
}
uint32_t timer = millis();
void loop() {
char c = GPS.read();
if (GPS.newNMEAreceived()) {
if (!GPS.parse(GPS.lastNMEA())) return;
}
if (timer > millis()) timer = millis();
if (millis() - timer > 2000) {
timer = millis();
if (GPS.fix) {
char lat[10];
char lon[10];
char data[100];
dtostrf(GPS.latitudeDegrees, 4, 4, lat);
dtostrf(GPS.longitudeDegrees, 4, 4, lon);
// Format JSON object with lat/lon
sprintf(data, "{\"lat\": \"%s\", \"lon\": \"%s\"}", lat, lon);
// Send location data to configured channel
int8_t result;
Serial.print("Sending - ");
int status = channel.send(data, strlen(data), &result);
if (helium_status_OK == status && result == 0) {
Serial.print("Successfully sent ");
Serial.println(data);
} else {
Serial.println("Failed");
}
} else {
Serial.println("No GPS fix!");
}
}
}
Avec les bibliothèques installées, créez un nouveau sketch (File → New), collez le code ci-dessus. Connectez votre Arduino/Atom via USB et cliquez sur Upload (flèche droite).
Après quelques secondes, les voyants de l'Atom devraient clignoter rouge et bleu, puis adopter un clignotement rouge régulier, indiquant la connexion au réseau Helium. Le voyant FIX du GPS devrait également clignoter lentement en rouge ; quand il s'arrête, le GPS a acquis une position et commence à envoyer les données. Placez le GPS près d'une fenêtre ou à l'extérieur pour une meilleure réception.
Ouvrez le Serial Monitor (Tools → Serial Monitor) pour voir les messages de débogage : connexion, création du canal, puis une série de No GPS fix! jusqu'à l'acquisition des satellites.
Vérification de l'envoi des données
Retournez dans le tableau de bord Helium pour vérifier que les données remontent bien vers le canal Azure. Cliquez sur Channels à gauche, sélectionnez votre canal Azure dans la section Active Channels. En bas, dans l'Event Log, vous devriez voir les horodatages, la taille des données et la confirmation de routage vers Azure :

Dans votre Azure IoT Hub, sous Device Explorer, vous devriez voir votre appareil Helium Atom listé sous son adresse MAC. En cliquant dessus, vous confirmerez que l'appareil est sécurisé automatiquement via un certificat X509 signé matériellement, sans configuration requise.

Intégration des données dans Power BI
Nous supposons que vous avez déjà un compte Power BI et un espace de travail créé (sinon, rendez-vous sur www.powerbi.com).
Créez maintenant un travail Azure Stream Analytics pour acheminer les données de l'IoT Hub vers Power BI.
Dans le portail Azure, cliquez sur New en haut à gauche, recherchez Stream Analytics Job, sélectionnez-le, cliquez sur Create en bas à gauche, choisissez les options et validez.
Une fois déployé, configurez le travail pour utiliser l'IoT Hub comme entrée et Power BI comme sortie. Dans la page du travail Stream Analytics, cliquez sur Inputs à gauche, puis Add. Donnez un alias, sélectionnez IoT Hub comme source, choisissez votre IoT Hub, laissez les autres valeurs par défaut :

Créez ensuite une sortie vers Power BI. Depuis la page du travail, cliquez sur Outputs à gauche, puis Add. Choisissez Power BI dans le menu déroulant Sink. Autorisez votre compte Power BI et sélectionnez l'espace de travail souhaité. Donnez un nom à la table :

Enfin, créez une requête reliant l'entrée à la sortie. Cliquez sur Query à gauche. La requête doit sélectionner toutes les données de l'IoT Hub et les envoyer vers l'espace de travail Power BI :

Cliquez sur Save en haut à gauche. Retournez à la page Overview et cliquez sur Start dans la barre de navigation. Après quelques minutes, les données arriveront dans Power BI.
Visualisation dans Power BI
Allez dans votre espace de travail Power BI, cliquez sur + Create en haut à droite, sélectionnez Report. Choisissez le dataset créé par le travail Stream Analytics et cliquez sur Create.

Sélectionnez la visualisation de carte (icône globe blanc) dans le volet de droite. Dans les champs de données envoyés par l'Arduino, glissez lat vers Latitude et lon vers Longitude. Vous pouvez aussi glisser EventProcessedUTCTime vers Tooltips pour voir l'horodatage au survol. Cliquez sur Save. Vous avez maintenant une carte affichant la position de votre Helium Atom connecté à l'Arduino.

Processus de fabrication
- Système de pointage RFID fiable avec Arduino et Python (base de données phpMyAdmin)
- Enregistreur GPS avec Analyse Spatiale sur Azure IoT Hub
- Construire une télécommande Android universelle avec Arduino, 1Sheeld et contrôle IR
- Construire un Voltmètre Intelligent avec Arduino et Smartphone – Projet DIY Facile
- Moniteur de Fréquence Cardiaque IoT en Temps Réel avec Arduino et MAX30100
- Contrôle IoT à Distance d'un Bras Robotique Personnalisé avec Arduino MKR1000
- Bocal Intelligent IoT avec ESP8266, Arduino et Capteur Ultrasonique – Surveillance Temps Réel
- Mesure Précise de Fréquence et Rapport Cyclique avec Arduino UNO
- Système de Contrôle de Piscine IoT Azure : Capteurs Intelligents & Surveillance à Distance