NB-IoT使用CoAP协议接入华为IoT平台(NB-IoT项目实战专栏—8)_nbiotcoap-程序员宅基地

技术标签: IOT  

版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/m0_38106923/article/details/89852829

目录

1、华为 NB-IoT CoAP总体方案拓扑

2、华为IoT平台环境搭建

3、NB-IoT上传数据到云平台


BC95的CoAP测试需要云平台配合,当前的支持CoAP协议的平台有华为OceanConnect平台、电信天翼云(除了 Logo 其他和华为的一样)、移动 OneNet等。此教程以华为的OceanConnect 平台为例进行测试。下面我将就平台申请、平台测开发、NB-IoT实验开发板与平台的收发测试做出详细介绍。

1、华为 NB-IoT CoAP总体方案拓扑

华为提供NB-IoT端到端解决方案的支持,提供多种开放能力供合作伙伴快速集成应用。提供海思的NB-IoT芯片,基站网络和Ocean Connect连接管理平台。开发者可以根据芯片/模组开发手册进行终端的开发,基于IoT平台进行APP Server开发。

  • Device:NB-IoT终端(如智能水表、智能气表等)通过空口连接到eNodeB。
  • eNodeB:主要承担空口接入处理和小区管理等相关功能,通过S1-lite接口与IoT核心网进行连接,将非接入层数据转发给高层网元处理。
  • IoT Core:承担与终端非接入层交互的功能,将IoT业务相关数据转发到IoT平台进行处理。
  • IoT Platform:IoT联接管理平台汇聚从各种接入网得到的IoT数据,根据不同类型转发给相应的业务应用进行处理。
  • APP Server:是IoT数据的最终汇聚点,根据客户的需求进行数据处理等操作。

从总体拓扑中可以看到,华为在这里放置了一个CoAP Server,所有使用CoAP的模组,都得先连接到华为这边。

当然,有办法绕过这个限制,那就是不使用模组内置的CoAP相关的AT指令。

自己在UDP基础上做这个协议。 

2、华为IoT平台环境搭建

第1步:登录华为云平台,官网:https://www.huaweicloud.com/

 第2步:注册账号,可以申请企业账号和个人账号,这里我申请个人账号。

第3步:实名认证,华为云认证个人信息。

选择合适的认证方式,支持银行卡、身份证扫码、个人证件认证三种方式,这里使用扫码认证。

第4步:选择“开发者”—>“开发者资源”—>“资源”—>“IoT专区”,开通IoT业务(使用开发者资源是免费的,但是创建项目有限,适合新手练习)。

第5步:创建项目,填写项目信息。

第6步:创建产品,填写相关信息。

用户可以选择华为云提供的不同类型产品:灯、电表等,用户也可以自定义产品。

 点击自定义产品后,会弹出设置产品信息的框,协议类型选择CoAP的二进制码流。

 第7步:定义Profile,设备的 Profile 文件是用来描述设备类型和设备服务能力的文件。定义了同一类设备具
备的服务能力,属性,命令等。

“新建服务”—>创建属性(获取传感器数据)和命令(云平台下发控制设备)。

新增属性,这里模拟创建一个光照传感器 ,具体参数说明如下:

  • 属性名(propertyName):指示属性名称。
  • 属性类型(dataType):指示数据类型,取值范围:int、float、datetime、string、jsonObject、array。这里以 int 类型为例。上报数据时,复杂类型数据格式如:DateTime:yyyyMMdd’T’HHmmss’Z’如:20151212T121212Z 、 jsonObject:自定义 json 结构体,平台不理解只透传。
  • 最小(min)/最大值(max):指示最小/最大值,仅当 dataType 为 int、float 时生效,逻辑大于等于/小于等于。
  • 步长(step):指示步长,暂不使用,可填 0 即可。
  • 单位(unit):指示单位,英文,取值根据参数确定。如:温度单位:“°C”;百分比单位:“%”。
  • 访问模式(method):指示访问模式。R:可读;W:可写;E 可订阅。取值范围:R、RW、RE、RWE、null。

新增下发命令,这里模拟创建一个LED灯控制器,具体参数说明如下:

  • 长度(maxLength):指示字符串长度,仅当 dataType 为 string、datetime、jsonObject、array 时生效。
  • 枚举值(enumList):如LED灯属性 ,0,1:0代表关闭LED灯,1代表打开LED灯。

保存 Profile文件。

 第8步:开发完 Profile 文件后,可以在界面上通过图形化的方式完成设备与平台之间的消息映射。在平台中预集成了编解码插件的模板,可以根据设备类型和接入协议在插件模板中选择模板修改开发编解码插件。

制作编解码插件,点击“新增消息”,这里有两种模式:数据上传和命令下发,分别对应第7步中创建的光照传感器属性和LED灯控制器命令。 

在第7步中设置的光照传感器范围为0~100的整形数据,所以建立的消息映射也要对应,长度为1,偏移为0—1(若长度为2,偏移就为0—2,这个可以看作存储空间)。

LED灯控制器对应第7步,创建有开关两种状态的字符串类型数据,0代表关,1代表开。

 第9步:部署插件与profile建立映射关系。

第10步:新建测试设备

这里侧重设备端的开发工作,华为云平台为了方便大家调试,提供了虚拟设备和真实准备两种渠道来调试之前编写profile的正确性,其中虚拟设备不需要任何硬件就可以在华为的网站上虚拟出一个设备,可以收发数据,真实设备自然就是指的是NB模块。

首先为了验证我们的写的profile的正确性,这里先创建一个虚拟设备,进行调试。

进入刚刚创建的设备,进行调试,由于模拟器以及NB-IoT数据都是ASCII的十六进制数据,上传光照数据和下发LED灯控制状态否会转换对应的十六进制。

同时也能在设备详情中查看到历史的发送数据。

到此为止,如果都正常的情况下,说明华为OC云端服务器配置已经完成,而且验证成功。

3、NB-IoT上传数据到云平台

第1步:配置云平台硬件设备

上面讲述的是模拟设备,这里我们使用真实的硬件设备,在使用之前需要注册设备。

设备名称可以自定义,验证码是唯一的,必须使用模块的IMEI号,这个IMEI号印刷在模块上(86打头的数据),也可以使用串口调试助手通过AT指令(“AT+CGSN=1”)获取模块的的IMEI号,然后点击创建,不使用模块的IMEI号,会导致NB模块无法对接云平台 

刚刚创建的的设备,其状态是离线的,需要模块发送上报数据一次数据 。

第2步:测试NB-IoT模块 

针对不同的模块可能有些差异,模块上电之后,发送AT可以有OK返回,表示通信正常,执行指令:AT+CEREG?,一定要注网成功之后才能进行后续的网络操作,否则都是失败 。

AT指令 含义说明
AT+CEREG? 查看注网是否成功,这里需要返回0,1表示成功,其他值表示失败,特别是在模块复位(包括上下电)之后一段时间内需要等待模块注网成功,大约5~20秒时间不等。

第3步:NB-IoT模块上传数据

NB-IoT模块上传数据只需要两步:第一步使用AT+NCDP指令配置服务器地址,第二步使用AT+NMGS指令发送数据。

AT指令 含义说明
AT+NCDP=ip 配置服务器地址,其中ip地址在左右的对接信息中可以找到(位于左侧应用–>对接信息–>设备接入信息–> 49.4.85.232:5683 (CoAP),如下图所示),故本例是49.4.85.232,例如AT+NCDP=49.4.85.232
AT+NMGS=length,data[,<seq_num>] 发送数据指令,length表示后续数据长度(10进制表示,后续数据的字节长度),data表示需要发送的数据,例如AT+NMGS=12,32342E3135352E3636352E34

 配置服务器地址。

 配置成功后,发送数据指令,十六进制46为十进制70,实质上传到华为云的数据为70。

接收到数据后,华为云设备为在线状态。

进入设备查看上传的的信息 。

向NB-IoT设备下发控制指令。

NB-IoT接收到的数据为字符串数值“1”,转换为十六进制为0x31,注意:NB-IoT采用低功耗模式,发送完数据后就会休眠,所以云端下发的数据是在下一次上传数据成功后,才会下发到设备。

 

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/zhaogenhua3/article/details/99565673

智能推荐

【ESP8266之LUA开发】九、File操作,实现C#改变并存储工作模式,SSID与PWD的保存与读取_esp8266 configfile.close()-程序员宅基地

文章浏览阅读1.5k次。emmmm,这一片信息量很大,算是一个综合的过程吧,如果哪里有疑问记得及时查看前面的内容,查漏补缺。文件操作,保存数据,这样的话就可以随意修改启动时工作在哪一种模式,哪一种通信,以及其余需要保存在模块内部的信息。 就实现上位机软件的第一个功能,,修改启动模式 对应的C#代码private void button2_Click(object sender, EventArgs e)_esp8266 configfile.close()

【Unity】如何优雅地移动物体-8个方法_unity 物体移动-程序员宅基地

文章浏览阅读8.1k次,点赞58次,收藏136次。在游戏开发中,如何移动物体?是我们需要思考的事情。Unity 引擎也提供了众多的方法,每个开发者的使用习惯也各不相同,所以往往不是很清楚在这种场景下哪种方式最好的或者最有效的。那么,这篇文章,我想分享一下移动物体的一些方法和优缺点。_unity 物体移动

【Python】python 反射机制在实际的应用场景讲解-程序员宅基地

文章浏览阅读97次。 剖析python语言中 "反射" 机制的本质和实际应用场景一. 前言def s1(): print("s1是这个函数的名字!") s = "s1"print("%s是个字符串" % s)在上面的代码中,我们必须区分两个概念,f1和“f1"。前者是函数f1的函数名,后者只是一个叫”f1“的字符串,两者是不同的事物。我们可以用f1()的方式调用函数f1,但我们不能用"f..._python反射机制及应用场景

uni-app上传文件(带进度条)_uniapp 上传视频时显示进度-程序员宅基地

文章浏览阅读3.6k次。<template> <view> <view> <progress :percent="percent" stroke-width="10"></progress> </view> <view> <button type="primary" :loading="loading" :disabled="disabled" @click="upload">选择照片</button&g_uniapp 上传视频时显示进度

pthread_mutex_lock引起的core_thread mutex lock segmentation fault-程序员宅基地

文章浏览阅读5.9k次。遇到一个奇怪的corecore在pthread_mutex_lock下一行最后发现:_thread mutex lock segmentation fault

SuperSocket 一个轻量级可扩展 Socket 开发框架_super socket-程序员宅基地

文章浏览阅读461次,点赞7次,收藏8次。不用多说这是迄今为止用过最好用的.Net领域Socket开发框架,从Photon 脱坑之后,一直用它来搭建游戏服务器,相伴多年经历了多个游戏和工控项目的检验,简单易上手,功能应有尽有,强烈推荐。可以通过NuGet进行安装。_super socket

随便推点

公众号模板消息推送_公众号平台模板推送流程-程序员宅基地

文章浏览阅读365次。首先公众号和小程序需要在同一主体下需要在公众号“广告与服务”→“模板消息”中申请自己所需的模板需要在公众号“设置与开发”→“基本配置”拿到appid,appsecret及配置服务器对应的IP白名单其次推送需要推送人员关注该公众号且拿到该用户的openid进行推送最后点击模板消息进入小程序的话,还需要提供小程序的appid和path信息以上就是公众号推送的大致流程啦_公众号平台模板推送流程

python编程从入门到实践第五章习题_python快速编程入门第五章课后题-程序员宅基地

文章浏览阅读1.2k次。第五章讲的是if的一些用法,和C、C++相比,只是把当中的else if 换成了elif,其他逻辑等完全没有任何变化。总的来说还是没有任何难度的,只是每一个语句后面需要加一个“:”,这个是初学的时候特别容易遗漏的。好了,直接上代码:#5-1car = 'subaru'print("Is car == 'subaru'? I Predict True.")print(car=='subaru')..._python快速编程入门第五章课后题

基于SpringBoot的社区医院管理服务系统的设计与实现_基于springboot的社区医疗服务管理系统-程序员宅基地

文章浏览阅读1.3k次。因此,系统无疑给人们的生活带来了极大的方便,网络的应用让时间和距离不再是局限。通过前面的功能分析可以将社区医院管理服务系统的功能分为管理员、用户和医生三个部分,系统的主要功能包括首页、个人中心、用户管理、医生管理、预约医生管理、就诊信息管理、诊疗方案管理、病历信息管理、健康档案管理、费用信息管理、系统管理等内容。预约医生管理,在预约医生管理页面中可以对索引、预约编号、医生账号、医生姓名、预约时间、科室、用户账号、用户姓名、审核回复、审核状态、审核等内容进行详情、就诊、修改或删除等操作,如图5-21所示。_基于springboot的社区医疗服务管理系统

374. Guess Number Higher or Lower(猜数字大小)-程序员宅基地

文章浏览阅读304次,点赞10次,收藏9次。返回我选出的数字。

Eigen中三维位姿表示方式以及相互转换_eigen::matrix3d-程序员宅基地

文章浏览阅读1.8k次,点赞3次,收藏11次。Eigen中三维位姿表示方式以及相互转换_eigen::matrix3d

python Tk()、Frame()、TopLevel()用法-程序员宅基地

文章浏览阅读1w次,点赞9次,收藏24次。Tk():创建应用程序主窗口Frame():创建控件容器,可依附在窗口中TopLevel():创建弹出式窗口示例1:import tkinter#主窗口:window = tkinter.Tk()#创建窗口window.title("简易版小程序")#设置标题#创建控件容器frameDemo1frameDemo1 = tkinter.Frame(window)#向fram..._tk()

推荐文章

热门文章

相关标签