GPS-Datenlogger mit räumlicher Analyse auf Azure IoT Hub
Komponenten & Zubehör
| Bauteil | Anzahl | Hinweise |
|---|---|---|
| Arduino UNO | 1 | Datenlogger-Hardware |
| Raspberry Pi 2 Model B | 1 | Windows 10 IoT Core Gateway |
| Adafruit Ultimate GPS Breakout | 1 | Seriell, mit PPS |
| MicroSD-Karte 16 GB + Adapter | 2 | Datenlogger & Pi |
| Fotowiderstand (LDR) | 1 | Lichtmessung 0–1023 (analog) |
| LEDs (3× klar, 1× rot, 1× gelb, 1× grün) | 6 | Satelliten-Fix-Status (HDOP) |
| Taster (12 mm) | 2 | Datenlogging & Pi-Button |
| Schiebeschalter | 3 | Binär-Codierung Feature-Type (0–7) |
| Widerstände (10 kΩ, 221 Ω) | Set | Pull-ups & LED-Vorwiderstände |
| Steckbretter (Halb & Voll) | je 1 | Aufbau |
| 9 V Blockbatterie + Klinkenadapter | 1 | Stromversorgung Arduino |
| Jumper-Kabel | 1 Set | Verdrahtung |
Software & Cloud-Dienste
- Arduino IDE – Firmware für Datenlogger
- Microsoft Windows 10 IoT Core – Auf Raspberry Pi 2
- Microsoft Azure IoT Hub – Cloud-Backend für Gerätemanagement & Messaging
- Visual Studio 2015 – UWP-Apps für Pi & Empfänger
- Google Earth Pro – CSV-Import & Visualisierung
- QGIS (Quantum GIS) – Räumliche Interpolation (IDW/Kriging)
- Azure IoT Device Explorer – Geräteverwaltung & Connection Strings
Projektstruktur: Drei Bausteine
1. Arduino GPS-Datenlogger (Feldgerät)
Ein batteriebetriebenes Handgerät, das beim Tastendruck folgende Daten auf MicroSD im CSV-Format speichert:
LATITUDE, LONGITUDE, LIGHT_VALUE, FEATURE_TYPE
40.77221, -73.97392, 105, 5
40.77139, -73.97394, 60, 1
...
- GPS: Adafruit Ultimate GPS → Breite, Länge, HDOP.
- Licht: Fotowiderstand (0–1023). Beispiel: Sonne ~1000, Schatten ~900, Laterne nachts ~170.
- Feature-Type: 3 Schiebeschalter → 3-Bit Binärzahl (0–7), z. B. 0=Lichtsensor, 1=Parkbank, 2=Fels, 3=Mülleimer, 4=Baum, 5=Telefon, 6=Laterne, 7=Trinkbrunnen.
- Status-LEDs: Rot = Kein Fix, Gelb = Fix HDOP > 1.5, Grün = Fix HDOP ≤ 1.5.
- Kein LCD: Zu instabil mit SD & GPS auf UNO (RAM), LEDs reichen für Feedback. 9V-Batterie hält länger ohne LCD.
2. GIS-Visualisierung & Räumliche Analyse
- Google Earth Pro: CSV importieren, Spaltenköpfe hinzufügen, Punkte nach Feature-Type stylen.
- QGIS – Interpolation:
- Grenzen, Wege laden.
- Punkte mit Lichtwerten laden, symbologisieren (blau=hell, rot=dunkel).
- Interpolation (IDW) → flächendeckende Lichtkarte.
- Weitere Messpunkte sammeln → Interpolation wiederholen → detaillierteres Bild.
3. Skalierung mit Windows 10 IoT Core & Azure IoT Hub
Statt manueller SD-Karten-Sammelaktion: Automatisierter Upload von tausenden Geräten.
Architektur
- Raspberry Pi 2 mit Windows 10 IoT Core als Gateway.
- UWP-App „IoTHubClientSendEvent“ liest lokale CSV-Datei (data.csv) und sendet per Button-Druck an Azure IoT Hub (HTTPS, JSON).
- Konsolen-App „IoTEventHubReceiver“ (Windows) empfängt Nachrichten via Event Hub Consumer Group, deserialisiert JSON, speichert als CSV pro Gerät & Zeitstempel (c:\gps\download\).
- Device Explorer für Connection Strings & Geräteverwaltung.
Wichtige Code-Schnipsel (C#)
Senden (Pi):
deviceClient = DeviceClient.CreateFromConnectionString("DEVICE_CONNECTION_STRING", TransportType.Http1);
initGPIO(); // Button an Pin 6 mit Debounce
private async void sendMessageToIOTHub() {
string myString = File.Exists(uploadFile) ? File.ReadAllText(uploadFile) : "Just checking in!!";
var msg = new evData { id = deviceId, data = myString };
var message = new Message(Encoding.ASCII.GetBytes(JsonConvert.SerializeObject(msg)));
await deviceClient.SendEventAsync(message);
}
Empfangen (PC):
eventHubClient = EventHubClient.CreateFromConnectionString(connectionString, "messages/events");
while (true) {
foreach (var partition in eventHubClient.GetRuntimeInformation().PartitionIds) {
var receiver = eventHubClient.GetDefaultConsumerGroup().CreateReceiver(partition, DateTime.UtcNow);
while (true) {
EventData ed = await receiver.ReceiveAsync();
if (ed == null) continue;
var d = JsonConvert.DeserializeObject<evData>(Encoding.UTF8.GetString(ed.GetBytes()));
File.WriteAllText($@"c:\gps\download\{d.id}.{DateTime.Now:yyyy.MM.dd.HH.mm.ss}.csv", d.data);
}
}
}
Deployment auf Pi
- Windows 10 IoT Core Image per IoT Image Helper auf microSD flashen.
- Pi booten, im IoT Core Watcher sichtbar.
- Visual Studio: Target „Release ARM“, Remote Machine = Pi IP.
- App deployen, im Pi-Webinterface (Port 8080) unter Apps starten.
Zusammenfassung & Erweiterungsmöglichkeiten
- Verschiedene Sensortypen am Arduino-Logger.
- Direkter Upload vom Arduino via WiFi/Bluetooth/LTE (ESP32, MKR NB 1500).
- Andere räumliche Analysen (Hotspot, Clustering).
- Web-Mapping-App (Leaflet, Mapbox) für Roh- & Analysedaten.
- Azure Stream Analytics / Event Processor für Echtzeit-Reaktionen.
Code-Repositories
- Arduino GPS Datalogger: GitHub
- Azure IoT Hub Example (UWP Sender): GitHub
- Azure IoT Device Explorer: Doku
- Windows 10 IoT Core Samples: GitHub
Schaltpläne
- GPS-Datenlogger (Fritzing: GPSDataLogger.fzz)
- Raspberry Pi 2 GPIO Button (Fritzing: RPi2 IOT Core.fzz)
Herstellungsprozess
- Avnet Silica zeigt Cutting-Edge KI, IoT und Connectivity Solutions auf Embedded World 2019
- Präzise Temperatur- & Feuchtigkeitsüberwachung mit SHT15 unter Windows 10 IoT Core
- Arduino Temperatur- & Feuchtelogger mit DHT11 & Ethernet Shield
- Smart IoT-Glas bauen: Füllstand überwachen mit ESP8266, Arduino & Ultraschall
- Licht & Sound zum Geburtstag: DIY Arduino-Projekt
- u-blox LEA-6H 02 GPS-Modul: Arduino & Python Integrationsanleitung
- TV per Alexa steuern mit Arduino IoT Cloud – Schritt-für-Schritt
- DIY Guitar Speed Pick & Stomp Pedal – 3D-gedruckter motorisierter Plektrum
- Azure IoT Schwimmbadsteuerung: Smarte Sensoren & Fernüberwachung
- PCB-Design für das Internet der Dinge meistern: Ein umfassender Leitfaden