Echtzeit-GPS-Tracking mit Helium, Azure IoT Hub und Power BI
Komponenten und Zubehör
| Helium Atom Prototyping Module | × | 1 |
| Arduino Zero | × | 1 |
| Adafruit Ultimate GPS Breakout | × | 1 |
| Breadboard (generisch) | × | 1 |
Apps und Online-Dienste
- Microsoft Azure – IoT Hub und Stream Analytics
- Arduino IDE – Programmierung des Mikrocontrollers
- Power BI – Datenvisualisierung
- Helium Dashboard – Geräteverwaltung und Channel-Konfiguration
Über dieses Projekt
Helium ermöglicht Entwicklern den Bau von stromsparenden, sicheren und vernetzten Geräten. In diesem Projekt zeigen wir, wie das Helium Atom Prototyping Modul zusammen mit einem Arduino Zero und dem Adafruit Ultimate GPS Breakout verwendet wird, um GPS-Daten nahtlos an den Azure IoT Hub zu senden und diese anschließend in einem Power BI Report zu visualisieren.
Weitere Informationen zu Heliums stromsparenden, sicheren Long-Range-Wireless-Produkten und Bezugsquellen für die Hardware finden Sie unter helium.com/store.
Hardware-Aufbau
Zunächst wird das Helium Atom Prototyping Modul auf den Helium Atom Arduino Adapter gesteckt und dieser mit dem Arduino verbunden. Wir verwenden hier einen Arduino Zero, aber auch ein Uno, Due, M0 oder andere Arduino-Boards funktionieren.
Anschließend wird der Adafruit Ultimate GPS Breakout per Breadboard mit dem Arduino verdrahtet (alternativ direkt verlöten):
- Arduino 5V → GPS VIN
- Arduino GND → GPS GND
- Arduino D12 → GPS TX
- Arduino D10 → GPS RX
Nun muss das Helium Element mit Strom versorgt und verbunden werden:
- Cellular Element: Einschalten und warten, bis die LED türkis leuchtet.
- Ethernet Element: Per Ethernet an einen DHCP-fähigen Port anschließen (z. B. Kabelmodem/Router). Nach dem Einschalten leuchtet die LED grün bei erfolgreicher Verbindung.
Helium Dashboard & Channels
Im Helium Dashboard werden Atom und Element dem Benutzerkonto hinzugefügt. Falls noch kein Konto besteht, aber Hardware vorliegt, kontaktieren Sie support@helium.com.
- Element aktivieren: Links auf Elements klicken, dann oben rechts Add New. Die letzten 4 Stellen der MAC-Adresse und den HVV-Code vom Etikett auf der Rückseite eingeben, Namen vergeben, optional Tags hinzufügen und Activate Element klicken.
- Atom aktivieren: Gleicher Vorgang unter Atoms → Add New mit MAC und HVV vom Atom-Etikett.
Azure IoT Hub einrichten
Ein Azure-Konto wird vorausgesetzt. Im Azure Portal:
- Oben links auf + → Internet of Things → IoT Hub klicken.
- Gewünschte Konfiguration wählen, Pin to Dashboard aktivieren und Create klicken.
- Nach Bereitstellung (einige Minuten) den IoT Hub im Dashboard öffnen.
- Links Shared Access Policies wählen, RegistryReadWrite auswählen und die Connection string—primary key kopieren (Vorsicht: nicht teilen!).
Helium Channel für Azure IoT Hub erstellen
Zurück im Helium Dashboard:
- Links auf Channels klicken, unter Create New Channel Azure IoT Hub auswählen.
- Den kopierten Connection String einfügen, Channel benennen und Create klicken.
- Wichtig: Den Channel-Namen merken – er wird im Arduino-Sketch benötigt.
Arduino Sketch
Mit eingerichtetem IoT Hub und Helium Channel wird nun der Arduino-Sketch erstellt. Voraussetzung: Installation der Helium Arduino Library und Adafruit GPS Library über den Library Manager in der Arduino IDE (Sketch → Include Library → Manage Libraries).
Der Sketch initialisiert das Atom, erstellt einen Channel (namensgleich zum Helium Dashboard), liest GPS-Daten vom Adafruit-Board, formatiert sie als JSON und sendet sie über das Helium-Netzwerk.
/*
* 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);
#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");
helium.begin(helium_baud_b115200);
Serial.print("Connecting - ");
int status = helium.connect();
while (status != helium_status_OK) {
status = helium.connect();
}
Serial.println("Succeeded");
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);
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);
sprintf(data, "{\"lat\": \"%s\", \"lon\": \"%s\"}", lat, lon);
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!");
}
}
}
Neuen Sketch in der Arduino IDE erstellen (File → New), Code einfügen, Arduino per USB verbinden und Upload (Pfeil-rechts-Icon) klicken.
Nach wenigen Sekunden blinken die Atom-LEDs rot/blau, dann gleichmäßig rot – das Atom ist mit dem Helium-Netzwerk verbunden. Die GPS-FIX-LED blinkt langsam rot, bis ein Satellitenfix vorliegt (besser bei Fensternähe oder im Freien).
Im Serial Monitor (Tools → Serial Monitor) lassen sich Debug-Ausgaben verfolgen: Verbinden, Channel-Erstellung, dann „No GPS fix!“ bis zum ersten Fix.
Datenübertragung prüfen
Im Helium Dashboard unter Channels → aktiven Azure-Channel wählen. Im Event Log sollten Einträge mit Zeitstempel, Datengröße und Routing-Status (erfolgreich an Azure) erscheinen.
Im Azure IoT Hub unter Device Explorer sollte das Helium Atom Gerät unter seiner MAC-Adresse gelistet sein. Ein Klick bestätigt die automatische Sicherung per hardware-signiertem X.509-Zertifikat.
Daten in Power BI bringen
Voraussetzung: Power BI Konto und Workspace. Ein Azure Stream Analytics Job leitet Daten vom IoT Hub an Power BI weiter.
- Im Azure Portal: New → Stream Analytics Job suchen, Create.
- Nach Deployment: Inputs → Add → Alias vergeben, Source: IoT Hub, passenden Hub wählen, Rest Defaults.
- Outputs → Add → Sink: Power BI → Power BI Konto autorisieren, Workspace und Tabellennamen wählen.
- Query → Abfrage erstellen, die Input auf Output mapped (SELECT * INTO [Output] FROM [Input]). Speichern.
- Auf Overview → Start klicken. Nach Minuten fließen Daten in Power BI.
Visualisierung in Power BI
- Power BI Workspace öffnen → + Create → Report → Dataset vom Stream Analytics Job wählen → Create.
- Rechts die Karten-Visualisierung (Weltkugel-Icon) wählen.
- Felder: lat → Latitude, lon → Longitude ziehen. Optional EventProcessedUTCTime → Tooltips.
- Save – fertig! Die Karte zeigt nun den Standort des Helium Atom.
Fazit
Mit Helium, Azure IoT Hub und Power BI lässt sich eine vollständige Echtzeit-GPS-Tracking-Lösung ohne eigene Netzwerkinfrastruktur aufbauen. Die Helium-Abstraktion über Channels macht die Cloud-Integration besonders einfach und sicher.
Herstellungsprozess
- RFID-Anwesenheitssystem mit Arduino & Python – Daten direkt in phpMyAdmin (XAMPP) speichern
- GPS-Datenlogger mit räumlicher Analyse auf Azure IoT Hub
- Universelle Android-Fernbedienung mit Arduino, 1Sheeld & IR-Steuerung
- Intelligentes Voltmeter mit Arduino & Smartphone bauen – Einfaches DIY-Projekt
- Echtzeit-IoT-Herzfrequenzmonitor mit Arduino & MAX30100
- Fernsteuerung eines Roboterarms per IoT: Eigenbau mit Arduino MKR1000
- Smart IoT-Glas bauen: Füllstand überwachen mit ESP8266, Arduino & Ultraschall
- Frequenz & Tastverhältnis präzise messen mit Arduino UNO
- Echtzeit-Entfernungsmessung mit Arduino Sonar & Processing-Visualisierung
- Azure IoT Schwimmbadsteuerung: Smarte Sensoren & Fernüberwachung