Waspmote 的 IoT 调用





5.00/5 (3投票s)
引言
一个物联网生态系统远不止是在少数节点中加载固件、通过网络协议将信息发送到某处,以及可能添加一些远程控制。
使物联网解决方案成为一个全面的物联网解决方案的关键特性是
- 可组合的硬件:一个通用的基础硬件平台,带有可选配的传感器/执行器
- 支持广泛的通信协议(从短距离,如 RFID 到全球范围,如 HTTP)
- 功耗策略(例如,电池供电的节点分布在环境中,应保持活跃数月/数年)
- 固件的远程部署(所谓的空中升级)
- 网关(例如,将来自私有 ZigBee 网络的数据发送到 WWW/云端)
- 数据应以通用数据模型表示,以便于第三方聚合
- 一种语言,一个 API 库,一个开发工具
本文介绍了 Waspmote 的两个应用,并展示了该硬件如何满足上述特性。
Waspmote 简介
Waspmote:它是一种受 Arduino 启发的开源硬件,面向生产场景,具有重要的功能,如省电策略和广泛的传感器/执行器。
Waspmote 的开发方法:提供类似 Arduino 的开发工具和高级语言。得益于全面的 API 库,硬件访问非常直接。此外,一个由创客/开发人员组成的社区正在分享他们的经验和代码。
Waspmote 支持广泛的通信协议:无论您需要使用 RFID、NFC、802.15.4、ZigBee、WiFi、HTTP、FTP 等进行通信。可以连接许多天线。
Waspmote 平台
下面是一些文章中提到的 Waspmote 平台和无线模块的有用图表。
顶层图
底层图
XBee PRO S2 天线(ZigBee 模块)
SIM908(GPRS+GPS 模块)
Waspmote 开发环境
Waspmote Pro IDE 是 Arduino IDE 的一个“分支”,有很多相似之处(例如,Sketch 菜单、串口监视器、基于 C/C++ 的语言、编译/上传过程)。
如果您迫不及待想在开发板上运行代码,下面是一个简单的“Hello World”应用程序,让您热身!
通用的源代码骨架如下所示
//include support libraries #include <WaspGPRS_SIM908.h> //global variables float temperature = 0.0; void setup() { // run once on first platform start USB.ON(); RTC.ON(); ACC.ON(); } void loop() { // loop on this code USB.printf("%s\n", "Hello world"); delay(5000); }
复制并粘贴上面的代码,编译并上传固件。然后点击 Tools/Serial monitor,猜猜会发生什么?!
Using the Code
AppTemperature
每小时 Waspmote 会唤醒,收集温度,加入 ZigBee 网络,将数据发送到协调器,然后返回休眠模式。
架构
要求
- Waspomote PRO V1.2
- XBee PRO S2 天线
- ICR18650H-1S3P 可充电电池组
Waspmote 设置
参考上面的顶层图,请按以下步骤操作
- 通过 Radio Socket 0 将 XBee PRO S2 天线连接到 Waspomote PRO V1.2
- 通过 Battery Socket 将 ICR18650H-1S3P 可充电电池组连接到 Waspomote PRO V1.2
您的平台现在应该看起来像这样
Meshlium 设置
由于本文侧重于终端设备活动,我们使用 Meshlium 网关作为“即插即用”的 ZigBee 协调器,但请记住,例如,配备 802.15.4 + ZigBee 天线并配置为协调器的 Arduino 也可以。
- 将以太网连接到路由器
- 访问管理页面(类似 http://192.168.1.xx/ManagerSystem/login.php)
- 导航到 ZigBee 部分
- 此网关已配置为 ZigBee 协调器
源代码
AppTemperature 的完整代码位于 WaspmoteCalling_CodeProject\AppTemperature\AppTemperature.pde
代码亮点是
- 设置 ZigBee 协调器的 MAC 地址。
char* MAC_ADDRESS="MESHLIUM_MAC_ADDRESS";
- 设置一个唤醒触发器,每小时调用一次 hibInterrupt() 函数
PWR.hibernate("00:01:00:00",RTC_OFFSET,RTC_ALM1_MODE2);
- 检索温度值
float temperature = RTC.getTemperature() - 3;
- 向协调器发送 ZigBee 数据包。作为一项高级练习,您可以在终端设备和协调器之间添加路由器节点。在当前示例中,通信是单播和单跳的。
xbeeZB.sendXBee(packet);
运行代码
- 检查 MESHLIUM_MAC_ADDRESS = MAC high + MAC low(参见 WaspmoteCalling_CodeProject\Images\meshlium_mac.png)。Meshlium 将充当 ZigBee 协调器。
- 点击日志视图(参见 WaspmoteCalling_CodeProject\Images\meshlium_log.png)
- 通过 USB 线将 Waspmote 连接到您的 PC
- XBee PRO S2 天线的固件带有一个通用的 ZigBee 配置,因此它应该适用于当前示例。但是,如果您想深入研究或重新定义一些设置,如操作 PAN_ID 或操作 CHANNEL,一种方法是通过 Digi 的 XCTU 工具和 Waspmote 网关或带有天线模块的 Arduino 进行配置。在示例中,使用了一个非常通用的配置(参见 WaspmoteCalling_CodeProject\Images\zb_config.png)。
上传并运行应用程序
- 使用 Waspmote Pro IDE 打开 AppTemperature.pde。在示例中使用了 Waspmote Pro IDE v. 04 和 Waspmote Pro IDE v 012。
- 将 USB 线连接到 Battery Socket,并将 Switch ON/OFF 和 Hibernate Switch 都拨向 Battery Socket。
- 上传固件 WaspmoteCalling_CodeProject\AppTemperature\AppTemperature.pde
- 拔下 USB 线,将 Switch ON/OFF 和 Hibernate Switch 都拨向 Battery Socket,当红灯亮起时,仅将 Hibernate Switch 拨向相反方向(这将启用休眠模式)。一个小技巧:为了调试 Waspmote 代码,您可以在代码中添加 USB.println(F("some string")),然后点击 Tools/Serial Monitor。
- 打开 WaspmoteCalling_CodeProject\Images\meshlium_log.png,您将看到正在进行的通信!
亮点
- Meshlium 作为 ZigBee 协调器
- Waspmote 作为 ZigBee 终端设备
- 通过 Digi 的 X-CTU 工具进行的高级 ZigBee 配置
- Waspmote 的休眠模式允许节点运行数月(本例中使用 3.7V-6600mAh 电池组)
- 如果您在多个终端设备上加载应用程序,您将获得一个初步的多节点 ZigBee 网络
AppTracker
配备 GPS 和 GPRS 模块的 Waspmote 会循环进行地理位置检索,然后进行常见的 HTTP 调用(POST+JSON)。
架构
要求
- Waspomote PRO V1.2
- SIM908 无线板,带有通用 SIM 卡
- ICR18650H-1S3P 可充电电池组
Waspmote 设置
参考上面的顶层图,请按以下步骤操作
- 将一张通用 SIM 卡插入 SIM908 无线板
- 通过 SPI - UART Socket 将 SIM908 无线板连接到 Waspomote PRO V1.2
- 通过 Battery Socket 将 ICR18650H-1S3P 可充电电池组连接到 Waspomote PRO V1.2
您的平台现在应该看起来像这样
REST 服务概述
该示例考虑了一个远程 REST 服务,它监听 http://xxx.org:8080/rest,并接受具有 JSON 主体的 POST 调用,例如 {"validtimestr":"xxx","framenumber":"x","sensor":"xxx","value":"gps_coordinates","nodeCod":"xxx"}。服务可以自行管理此消息,也许将其存储到数据库中。
源代码
AppTraker 的完整代码位于 WaspmoteCalling_CodeProject\AppTraker\AppTracker.pde
代码亮点是
- 根据您使用的 SIM 卡配置 GPRS 连接
GPRS_SIM908.set_APN(apn, login, password);
- 检索 GPS 信息。其中,您还将获得当前的经纬度
GPRS_SIM908.getGPSData(BASIC, 1);
- 调用一个通用的 POST/HTTP 请求到
url
。GPS_data
是一个代表您的 JSON 主体的字符串
answer = GPRS_SIM908.readURL(url, GPS_data, 1 );
运行代码
- 使用 Waspmote Pro IDE 打开 AppTraker.pde。在示例中使用了 Waspmote Pro IDE v. 04 和 Waspmote Pro IDE v 012。
- 将 USB 线连接到 Battery Socket,并将 Switch ON/OFF 和 Hibernate Switch 都拨向 Battery Socket。
- 上传固件 WaspmoteCalling_CodeProject\AppTracker\AppTracker.pde
- 拔下 USB 线,将 Switch ON/OFF 和 Hibernate Switch 都拨向 Battery Socket,然后点击 Tools/Serial Monitor。一个小提示:请记住 GPS 信号相当弱,所以最好在室外工作(希望是个晴天 ;-))。
- 在 Serial Monitor 中,您将看到执行的主要步骤!
亮点
- 使用了标准的 Web 技术,如 HTTP-POST-JSON
- 通过几个调用即可访问 GPS 卫星连接和 GPRS 通信
关注点
让我们展示 Waspmote 如何满足引言部分提到的关键特性
- 可组合的硬件:一个通用的基础硬件平台,带有可选配的传感器/执行器:Waspmote 可以轻松连接各种传感器(例如,CO2 振动、噪音、摄像机)、执行器和天线(之前您只看到了一些,如 GPRS 和 ZigBee);
- 支持广泛的通信协议(从短距离,如 RFID 到全球范围,如 HTTP):可用的天线范围从短距离到广域。在示例中,AppTemperature 使用了 ZigBee,AppTracker 使用了 GPRS;
- 功耗策略(例如,电池供电的节点分布在环境中,应保持活跃数月/数年):在 AppTemperature 中,我们使用了一种休眠模式策略(大约 0.06µA ,可持续数月),只需几次调用。无需深入研究电气细节;
- 固件的远程部署(所谓的空中升级):远程 Waspmote 可以通过 FTP、802.15.04 和其他网络协议进行更新。想象一下像 AppTracker 这样成千上万个节点散布在您城市中的场景……;
- 网关(例如,将来自私有 ZigBee 网络的数据发送到 WWW/云端):在 AppTemperature 中,终端设备传感的温度数据被发送到 Meshlium(网关),Meshlium 作为 ZigBee 协调器。此外,它以透明的方式管理这些数据包,并将它们存储在外部数据库或像 Axeda 或 ThingWorks 这样的物联网云平台或其他支持 MQTT 等新兴物联网协议的服务中;
- 数据应以通用数据模型表示,以便于第三方聚合:在 AppTemperature 和 AppTracker 中,无需太多努力,数据就可以用您选择的通用格式表示,也许符合您数据库中 Message 表的模式(例如,{id,nodecod,framenumber,sensor,value,validtime,transactiontime})
- 一种语言,一个 API 库,一个开发工具:无论您为 Waspmote 开发什么,一些 C 语言的基础知识、Waspmote Pro API 和 Waspmote Pro IDE 就足够了。此外,如果您熟悉 Arduino 开发,可以重用您的技能!