平台中NB-IoT设备使用OneNET云平台的ModBus协议进行通信。
步骤 1:登录OneNET云平台。
云平台登录地址为https://open.iot.10086.cn/passport/login,若没有OneNet账号,同时考虑到以后用手机号和验证码登录方便快捷,建议使用手机号注册账号,若提示邀请码非必须选项,暂时不用选择,直接单击“立即注册”按钮即可,如图3.4所示。
图3.4 注册OneNET云平台账号
步骤 2:进口控制台,选择多协议接入。
登录成功后,单击窗口右上方“控制台”,再前往旧版控制台页面,单击“选择旧版”,进入控制台首页,在“全部产品服务”中选择“多协议接入”,如图3.5所示。
图3.5 注册OneNET云平台账号
步骤 3:进入多协议接入界面,选择“ModBus协议”,单击“添加产品”按钮,根据具体需求完善表单信息,星号是必填项且要符合响应规范要求,最后单击“确定”添加产品。这里以光照和温湿度传感器为例填写产品相关信息,如图3.6所示。
图3.6 添加产品
图3.7 添加设备
步骤 4:进入新建或已有的产品,添加设备。单击添加产品,在弹出页面中选择“立即添加设备”,若是第一次进入设备主界面,单击左侧“设备列表”,此时产品中的设备数量是 0个,在线设备数是 0个,单击右侧的“添加设备”按钮,根据要求完善表单并添加设备。这里以温湿度传感器为例填写设备相关信息,如图3.7所示。
★在添加设备中值得注意的是:DTU序列号及密码要和设备统一,不然无法连接到设备。若是真实设备,DUT序列号及密码要和设备一致;若是仿真平台设备,要设置和仿真平台设备相同的DTU序列号和密码。
步骤 5:设备添加成功后,单击当前设备的“数据流”进入添加数据流界面,在数据流页面单击“添加采样数据流”,根据需求完善表单并保存,如图3.8所示。
图3.8 添加采样数据流
等该设备上线服务后,OneNET云平台会以配置的数据流信息进行数据采集。到达这一步,表示已经在OneNet云平台完成添加温湿度设备信息。
步骤 6:重复第 4~5步,完成添加“光照传感器”设备信息和对应采样数据流,如图3.9所示,从图中也可以看出设备状态是离线的,最后在线时间为空;原因是在云平台中仅仅只是添加了设备相关信息,并没有被远程终端连接。
图3.9 光照和温湿度传感器的设备信息
通过在物联网虚拟仿真环境中搭建NB-IoT光照传感器应用场景,得到光照数据后通过NB-IoT ModBus协议上传给OneNET云平台,在用户终端的安卓程序中查看云平台的NB-IoT光照传感器和温湿度传感器实时数据。
步骤 1:在物联网虚拟仿真环境中创建NB-IoT光照传感器,使用拖拽的方式把光照传感器添加到右侧实验台并连接其模拟器,此时设备状态灯为红色,代表未连接云平台;选择传感器,右键菜单中进入“属性”界面,如图3.10所示。
图3.10 虚拟仿真环境中NB-IoT光照传感器
步骤 2:配置虚拟仿真环境中的NB-IoT设备。在图3.10中,“序列号”对应OneNET云平台中的DTU序列号;“密钥”对应云平台中DTU密码;“产品ID”对应云平台中产品ID。在云平台设备列表中,单击设备的详情查看以上需要的DTU序列号及密码信息,比如NB-IoT光照传感器设备,详情见图3.11。
图3.11 云平台NB-IoT光照传感器设备详情
在OneNET云平台产品概况中可查看产品ID,如图3.12所示。
图3.12 OneNET云平台产品ID
步骤 3:在图3.10中,填完以上三项信息,单击“连接服务”按钮,进行服务连接;连接成功后设备状态灯变为绿色,然后单击“登录”按钮后,查看云平台设备列表,显示设备已在线,同时显示最后一次在线的时间,如图3.13所示。
图3.13 在线设备
在“数据流”中可以查看设备返回的数据信息,也可打开实时刷新查看实时数据流,这里以光照传感器为例,实时数据流如图3.14所示。
至此,设备已经连接到云平台,后续的上位机开发流程为:通过云平台提供的Http或者其他协议接口获取NB-IoT设备的数据。
图3.14 光照传感器实时数据流
创建一个移动App,通过Http请求云平台,然后获取光照传感器数据。
步骤 1:准备开发环境。
软件为Android Studio,JDK1.8或其他版本;硬件为NB-IOT ModBus光照传感器及其模拟器,虚拟仿真的硬件连接如图3.10所示。
步骤 2:理解实例工作原理。
当设备已经与OneNet云平台连接后,通过使用OneNet云平台的服务API获取数据。这里使用获取设备数据流接口,获取设备后再发送给云平台的最后一条数据。接口URL网址为http(s)://api.heclouds.com/devices/device_id/datastreams/datastream_id。
device_id需要替换为设备ID,datastream_id需要替换为数据流ID。
详情查看https://open.iot.10086.cn/doc/multiprotocol/book/develop/http/api/.html。如果需要其他接口,请到OneNet->HTTP部分查看:https://open.iot.10086.cn/doc/multiprotocol/book/develop/http/api/api-usage.html。这里使用OneNet云平台提供的SDK获取数据,在开发资源库文件夹中存放有编译好的dll文件,如需最新版本,请通过https://open.iot.10086.cn/doc/multiprotocol/book/develop/http/api/sdk.html下载。
步骤 3:理解查询设备数据流方法,请求方式为GET。
URL:https://api.heclouds.com/devices/device_id/datastreams/datastream_id
device_id需要替换为设备ID,datastream_id需要替换为数据流ID。
(1)返回参数。
(2)data描述表。
(3)请求示例。
GET http(s)://api.heclouds.com/devices/20474930/datastreams/temperature HTTP/1.1。
(4)返回示例。
步骤 4:App编程设计。
(1)启动Android Studio,新建项目,单击菜单栏File—New—New Project。此时会弹出创建Android项目模版的对话框(示例Android Studio版本为 4.0,不同版本界面有可能不同),选择Empty Activity模版,然后单击Next。
(2)单击下一步后,出现New Project界面其中Name代表项目名称,在项目创建完成后该名称会显示在Android Studio中。Package Name代表项目的包名,Android系统是通过包名来区分不同应用程序的,因此包名一定要有唯一性。Save location代表项目在硬盘上存储的路径(请注意,路径不能含有中文,否则项目会有问题)。Language代表开发语言,AndroidStudio3.*以上版本默认选择Kotlin,请手动修改为Java。Minimum SDK代表程序兼容的最低版本。最后单击Finish即可创建项目。
(3)项目创建好后,修改项目显示结构为Project,如图3.15所示。
展开图3.15中Project目录结构中的app模块,有以下几个子模块。
●src
src目录是放置我们所有Java代码的地方,它在这里的含义和普通Java项目下的src目录是完全一样的。
●libs
如果项目中使用到第三方Jar包,就需要把这些Jar包都放在libs目录下,放在这个目录下的Jar包都会被自动添加到构建的路径里去。
●res
src\main\res下的内容比较多,在项目中使用到的所有图片、布局、字符串等资源都存放在这个目录下,前面提到的R.java中的内容也是根据这个目录下的文件自动生成的。当然,这个目录还有很多子目录:图片放在drawable目录下,布局放在layout目录下,字符串放在values目录下。所以也不用担心会把整个res目录弄得乱糟糟的。
图3.15 修改项目显示结构为Project
●AndroidManifest.xml
这是整个Android项目的配置文件,在程序中定义的所有四大组件都需要在这个文件里注册。另外,可以在这个文件中给应用程序添加权限声明,也可以重新指定创建项时指定的程序最低兼容版本和目标版本。
●build.gradle
该项目中会有两个build.gradle:其中app目录下面的存放app模块的配置信息;project目录下的存放整个项目的配置信息。
(4)界面设计及控件属性,在控件列表区域寻找需要的控件,然后通过拖拽的方式摆放到窗体中,在窗体中选中控件,在右侧可以修改该控件的属性,如图3.16所示。
可以在控件列表区域查看使用到的控件及其id,代码界面可查看其对应xml源码。
步骤 5:源码实现与解析。
(1)在编程前,先要在app-build.gradle中添加OneNetSDK的依赖,导入“implementation'com.chinamobile.iot.onenet:onenet-sdk:2.2.1”库,然后单击右上角Sync Now进行项目同步。
图3.16 界面设计
(2)项目使用到OneNET云平台的SDK,需要在Application中初始化,请先建立新的Application并执行初始化代码。
(3)在AndroidManifest.xml文件中把application指向该类,并且添加使用的网络权限。
(4)添加字段信息。
(5)初始化View。
此方法中还注册了搜索按钮的单击事件。
(6)调用查询数据流的HTTP接口并解析数据。
如需详细代码,请打开配套电子材料的源码阅读。
步骤 6:在移动终端运行光照App,输入对应参数即可查询结果,如图3.17所示。
图3.17 移动终端光照传感器远程云平台数据获取界面
通过在物联网虚拟仿真环境中搭建NB-IoT温湿度传感器应用场景,得到数据后通过NB-IoT ModBus协议上传给云平台OneNET,在用户终端的安卓程序中查看云平台的NB-IoT光照传感器和温湿度传感器实时数据。
步骤 1:在物联网虚拟仿真中创建NB-IoT温湿度传感器,使用拖拽的形式把温湿度传感器添加到右侧实验台并连接其模拟器,此时设备状态灯为红色,代表未连接云平台。选择传感器,右键菜单中进入“属性”界面,如图3.18所示。
图3.18 温湿度传感器NB-IoT设备配置
步骤 2:其他步骤与移动终端App的编程类似实例 1,读者可以自学尝试如何创建一个App,通过HTTP请求云平台,然后获取温湿度传感器数据。
步骤 3:在移动终端运行温湿度App,输入对应参数可查询结果,如图3.19所示。
图3.19 移动终端温湿度传感器远程云平台数据获取界面