构建 GPS 数据记录器:结合 Azure IoT Hub 实现空间分析
元器件与物料
| 元器件 | 数量 | 备注 |
|---|---|---|
| Arduino UNO | 1 | GPS 记录主控 |
| Raspberry Pi 2 Model B | 1 | 运行 Windows 10 IoT Core,上传数据至 Azure |
| Adafruit Ultimate GPS Breakout | 1 | 高灵敏度 GPS 模块 |
| 9V 电池扣转 DC 插头 | 1 | Arduino 供电 |
| 9V 电池 | 1 | |
| 光敏电阻 | 1 | 环境光照强度采集 |
| LED (透明×3, 红/黄/绿各1) | 6 | 卫星定位状态指示 |
| 12mm 轻触开关 | 2 | 记录触发、功能切换 |
| 拨码开关 (3位) | 3 | 二进制编码目标类型 (0-7) |
| 10kΩ 电阻 | 4 | 上拉/分压 |
| 221Ω 电阻 | 3 | LED 限流 |
| 半尺寸/全尺寸无焊面包板 | 各1 | |
| 杜邦线若干 | 1 | |
| 16GB MicroSD 卡 + 适配器 | 2 | 本地存储与 Pi 启动盘 |
软件与在线服务
- Microsoft Windows 10 IoT Core
- Microsoft Azure (IoT Hub)
- Arduino IDE
- Microsoft Visual Studio 2015
- Google Earth Pro
- QGIS (Quantum GIS)
- Windows 10 Enterprise (开发机)
项目概述
本项目包含三大部分,适合作为 STEM 教学案例:
- Arduino GPS 数据记录器:采集经纬度、光照、目标类型,按键写入 CSV 至 MicroSD。
- GIS 可视化与空间分析:导入 Google Earth Pro 显示点位;用 QGIS 对光照数据做空间插值,生成公园夜间照度分布图。
- Windows 10 IoT Core + Azure IoT Hub:Pi 端按键触发上传 CSV 至 IoT Hub,云端控制台应用接收并落盘,支撑千级设备扩展。
Arduino GPS 数据记录器
关键子系统
- 光敏电阻:模拟量 0-1023,阳光约 1000,路灯下约 170。
- MicroSD 卡槽:参考 Arduino SD 库 Datalogger 例程。
- Adafruit Ultimate GPS:配合官方库解析 NMEA,提取经纬度与 HDOP。
- HDOP 状态指示 LED:红=未定位,黄=HDOP>1.5,绿=HDOP≤1.5。
- 三位拨码开关:二进制编码 0-7 对应 8 种目标类型(长椅、石头、垃圾桶、树、公用电话、路灯、饮水台等)。
- 记录按钮:每次按下追加一行 CSV:
纬度,经度,光照值,类型码。
示例数据:
40.77221,-73.97392,105,5
40.77139,-73.97394,60,1
40.77051,-73.97460,150,6
为兼顾 SD 卡稳定性与电池续航,放弃了 LCD,改用多 LED 指示。
GIS 可视化与空间分析
Google Earth Pro 导入点位
- 将 CSV 复制到电脑,首行加表头
LATITUDE,LONGITUDE,LIGHT_VALUE,FEATURE_TYPE,另存为 .csv。 - Google Earth Pro → 文件 → 导入,设置图标样式按类型区分。

QGIS 空间插值分析
- 导入区域边界、步道等底图。
- 加载 CSV 点图层,按光照值渲染(蓝亮/红暗)。
- 执行插值(如 IDW、Kriging),生成连续照度栅格。
- 补充更多采样点,重跑插值,细节更丰富。




Windows 10 IoT Core + Azure IoT Hub 扩展
架构思路
大量低成本 Arduino 记录器分布式部署,通过 Pi 网关汇聚上传至 Azure IoT Hub,利用云端弹性消息处理实现千级设备管理。
关键步骤
- 完成 Azure IoT Hub .NET 入门教程,创建中心、注册设备、获取连接字符串。
- 下载 Device Explorer 管理设备。
- Pi 2 烧录 Windows 10 IoT Core,接入以太网,在 IoT Core Watcher 中确认在线。
- 接线 GPIO 按钮(下拉电阻 + 去抖)。
- Visual Studio 创建 UWP 应用
IoTHubClientSendEvent,引用Microsoft.Azure.Devices.Client、Newtonsoft.Json、Windows IoT Extensions。 - 代码核心:按钮下降沿触发
sendMessageToIOTHub(),读取本地data.csv(<256 KB)序列化为 JSON 发送。 - ARM Release 远程部署至 Pi,通过 IoT Core Web 界面启动应用。
- 开发机运行控制台程序
IoTEventHubReceiver,用EventHubClient持续接收消息,反序列化后按设备ID_年月日时分秒.csv落盘至c:\gps\download。



验证流程
- 启动接收端控制台。
- 按下 Pi 按钮,发送 "Just checking in!",控制台显示收到消息。
- 将 CSV 样本放入 UWP 应用安装目录 (
C$\Data\Users\DefaultAccount\AppxLayouts\<AppName>) 命名为data.csv,再次按钮,控制台显示完整 CSV 内容。
扩展方向
- Arduino 端增加更多传感器类型。
- Arduino 直连 Wi-Fi/蓝牙/蜂窝上传,省去 Pi 网关。
- 引入更多空间分析模型(热点分析、服务区分析等)。
- 开发 Web GIS 仪表盘实时展示。
- 使用 Azure Stream Analytics 对流数据实时告警。
代码仓库
- Arduino GPS Datalogger:GitHub
- Azure IoT Hub UWP 发送端:GitHub
- Azure IoT Device Explorer:文档
- Windows 10 IoT Core 样例:GitHub
原理图
包含 GPS 记录器 Fritzing 文件 (GPSDataLogger.fzz) 与 Pi GPIO 接线图 (RPi2 IOT Core.fzz)。
制造工艺
- Windows 10 IoT Core 上基于 SHT15 的精准温湿度监测
- Arduino + DHT11 + 以太网盾板温湿度数据记录仪
- 智能物联网罐:ESP8266 + Arduino + 超声波传感器实时监测罐内物位
- 光影交响:Arduino DIY 生日祝福灯光音乐装置
- u-blox LEA-6H GPS 模块:Arduino 与 Python 集成指南
- 通过 Arduino IoT Cloud 用 Alexa 控制电视:分步指南
- DIY 吉他高速拨片与踏板 - 3D 打印电机驱动拨片制作指南
- ESP8266 WiFi气象站:DHT22温湿度传感器 + ThingSpeak云端记录
- GPS 授时时钟:低成本高精度的 Arduino 卫星校时方案
- Azure IoT智能游泳池监控系统:温度感知与远程控制
- 掌握物联网 PCB 设计:综合指南
- Avnet Silica 在 Embedded World 2019 展示前沿 AI、物联网与连接解决方案