Real-time GPS-tracking met Helium, Azure IoT Hub en Power BI
Onderdelen en benodigdheden
| Onderdeel | Aantal |
|---|---|
| Helium Atom Prototyping Module | 1 |
| Arduino Zero | 1 |
| Adafruit Ultimate GPS Breakout | 1 |
| Breadboard (generiek) | 1 |
Apps en online diensten
- Microsoft Azure
- Arduino IDE
Over dit project
Helium helpt ontwikkelaars bij het bouwen van energiezuinige, veilige, verbonden apparaten. In deze handleiding laten we zien hoe je de Helium Atom Prototyping-module combineert met een Arduino Zero en Adafruit Ultimate GPS Breakout om naadloos gegevens te verzenden naar Azure IoT Hub en vervolgens te visualiseren in een Power BI-rapport.
Meer informatie over Helium's producten en hardware vind je op helium.com/store.
Hardware
Stap 1: Helium Atom en Arduino verbinden
Bevestig de Helium Atom Prototyping-module op de Helium Atom Arduino-adapter en sluit deze aan op je Arduino. We gebruiken een Arduino Zero, maar een Uno, Due, M0 of andere Arduino werkt ook.

Stap 2: GPS Breakout aansluiten
Sluit de Adafruit Ultimate GPS Breakout aan via een breadboard voor overzichtelijkheid. De bedrading:
- Arduino 5V → GPS VIN
- Arduino GND → GPS GND
- Arduino D12 → GPS TX
- Arduino D10 → GPS RX

Stap 3: Helium Element aan de praat krijgen
Cellular Element: Zet aan en wacht tot het licht turquoise wordt.
Ethernet Element: Verbind met een DHCP-poort (bijv. router). Zodra het licht groen wordt, is het klaar.

Helium Dashboard & Channels
Element en Atom activeren
- Log in op het Helium Dashboard (of vraag credentials aan via support@helium.com).
- Ga naar Elements → Add New. Vul de laatste 4 tekens van het MAC-adres en de HVV-code van het etiket in, geef een naam en optionele tags. Klik Activate Element.
- Herhaal voor de Atom: Atoms → Add New, vul MAC en HVV in, klik Activate Atom.
Azure IoT Hub instellen
- Maak in Azure Portal een nieuwe IoT Hub aan (+ → Internet of Things → IoT Hub). Vink Pin to Dashboard aan voor gemakkelijke toegang.
- Na implementatie: open de IoT Hub, ga naar Shared Access Policies → RegistryReadWrite → kopieer de Connection string—primary key. Bewaar deze veilig.
Helium Channel aanmaken
- In Helium Dashboard: Channels → Azure IoT Hub onder Create New Channel.
- Plak de Connection String uit Azure, geef de Channel een naam (onthoud deze voor de Arduino-code) en klik Create.
Arduino Sketch
Installeer via de Library Manager in de Arduino IDE de bibliotheken Helium en Adafruit GPS.
De onderstaande sketch initialiseert de Atom, maakt een Channel die overeenkomt met de Azure IoT Hub Channel, verzamelt GPS-data, formatteert deze als JSON en stuurt het via het Helium-netwerk.
/* Copyright 2017, Helium Systems, Inc. */
#include "Arduino.h"
#include "avr/dtostrf.h"
#include "Helium.h"
#include
#include
#include "wiring_private.h"
#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");
Serial.print("Creating Channel - ");
int8_t result;
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], lon[10], 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!");
}
}
Upload de sketch naar de Arduino/Atom-combinatie via USB. Na enkele seconden knipperen de Atom-lichten rood/blauw en vervolgens vast rood: de Atom is verbonden. De GPS FIX-led knippert langzaam rood totdat een satellietfix is bereikt (bij voorkeur bij een raam of buitens).
Controleer de Serial Monitor (Tools → Serial Monitor) voor debug-output: verbinding, kanaal aanmaken, en daarna "No GPS fix!" totdat een fix wordt verkregen.
Controleren of data correct wordt verzonden
In het Helium Dashboard: Channels → selecteer je Azure-kanaal → Active Channels → Event Log. Hier zie je timestamps, datagrootte en of routing naar Azure succesvol was.

In Azure IoT Hub onder Device Explorer zou je Helium Atom-apparaat (herkenbaar aan MAC-adres) moeten zien, beveiligd met een hardware-ondertekend X.509-certificaat.

Data in Power BI krijgen
We gaan ervan uit dat je al een Power BI-account en workspace hebt. Anders ga naar powerbi.com.
- Maak in Azure een Stream Analytics Job aan (+ → zoek "Stream Analytics Job" → Create).
- Configureer Inputs: voeg een input toe, kies IoT Hub als bron, selecteer je IoT Hub.
- Configureer Outputs: voeg een output toe, kies Power BI als sink, autoriseer je account, kies workspace en geef de tabel een naam.
- Maak een Query die de input koppelt aan de output (bijv.
SELECT * INTO [output] FROM [input]). Sla op. - Start de job (Overview → Start). Na enkele minuten stroomt data naar Power BI.
Visualiseren in Power BI
- In Power BI Workspace: + Create → Report → selecteer de dataset uit de Streaming Job → Create.
- Kies de kaartvisualisatie (witte aardbol). Sleep lat naar Latitude, lon naar Longitude. Optioneel: EventProcessedUTCTime naar Tooltips.
- Sla op. Je ziet nu een kaart met de locatie van je Helium Atom.

Code
De volledige Arduino-code (C/C++) staat bovenaan in dit artikel. Download de Helium Arduino-bibliotheek en Adafruit GPS-bibliotheek via de Library Manager.
Productieproces
- Betrouwbaar Arduino RFID Aanwezigheidssysteem Aangedreven door Python
- Bouw een GPS-datalogger met ruimtelijke analyse op Azure IoT Hub
- Universele Android-afstandsbediening bouwen met Arduino, 1Sheeld en IR-besturing
- Een slimme voltmeter bouwen met Arduino en smartphone – Eenvoudig DIY-project
- Real-time IoT hartslagmonitor met Arduino en MAX30100
- Externe IoT-besturing van een zelfgebouwde robotarm
- Bouw een Slimme IoT Pot met ESP8266, Arduino & Ultrasonische Sensor – Real-time Monitoring
- Nauwkeurige Frequentie- en Duty Cycle-meting met Arduino UNO
- Realtime afstandsmeting met Arduino Sonar & Processing visualisatie
- Naadloze LED-dimmer met Bolt IoT en Arduino UNO
- Azure IoT Zwembadbeheersysteem: Slimme Sensoren & Remote Monitoring