完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
|
相关推荐
1个回答
|
|
本文档描述NB260的软件指令操作,即BC26的常用指令操作:模块初始化到数据通信。
关于BC26的详细指令手册,请阅读移远官方指令手册。 有关NB260的硬件描述,请阅读《NB260硬件设计手册》[[NB260硬件设计手册]] ,BC28模块指令使用介绍。 有关NB260作为OpenCPU二次开发的软件说明,请阅读《NB260-OpenCPU软件开发手册》[[NB260-OpenCPU软件开发手册]],基于BC26的OpenCPU软件开发指导。 准备工作 在实际生产环境中,一般使用MCU的UART发送AT指令与NB模块交互。这里为了方便演示和讲解,我们使用电脑来的虚拟串口来与NB模块通信。 1、对NB-IOT技术有一定的了解 2、准备以下硬件: *NB260小系统模块,以及NB天线(电信850MHz,移动900MHz) *NB网络SIM卡(电信或者移动) *串口转USB模块(任意的UART转USB模块,并安装好相应的驱动程序) 3、准备以下软件: *串口调试助手(例如SSCOM,XShell等)。用于手动向模块发送AT指令。 *谷雨NBTool调试软件。图形化快速测试,自动向模块发送相关AT指令。 == NB-IOT基础知识 == NB-IoT (Narrow Band Internet of Things)是可与蜂窝网融合演进的低成本电信级高可靠性、高安全性广域物联网技术。 NB-IoT 构建于蜂窝网络之上,只消耗约 180 KHz 的频段,可以直接部署于 GSM 网络,UMTS 网络和 LTE 网络。 NB-IoT 采用的是授权频带技术,以降低成本。 NB-IoT 具有四大优势: 海量链接的能力,在同一基站的情况下, NB-IoT 可以比现有无线技术提供 50~100 倍的接入数。一个扇区能够支持10 万个连接,设备成本降低,设备功耗降低,网络架构得到优化。 覆盖广,在同样的频段下, NB-IoT比现有的网络增益提升了 20 dB,相当于提升了 100 倍的覆盖面积。 低功耗, NB-IoT借助 PSM (Power Saving Mode,节电模式)和 eDRX (Extended Discontinuous Reception,超长非连续接收)可实现更长待机,它的终端模块待机时间可长达 10 年之久。 低成本,NB-IOT不需要重新建网,射频和天线都是可以复用的,模块价格最终不会超过 5 美元。 关于NB-IOT的更多介绍请阅读《NB-IOT技术揭秘》[[NB-IOT技术揭秘]],一文读懂NB-IOT 物联网平台 首先,NB-IOT是运营商网络,所以只能和有固定IP的服务器通信。 另外,为了凸显NB-IOT的低功耗,多链接等优点,需要一个打通用户服务器与核心网的物联网平台(如华为电信的平台),作为中转网关,用户只需要自建应用服务器,专注上层的应用数据开发,设备的连接和管理工作全部交给平台来完成。平台负责应用服务器和设备之间的数据转发工作。除此之外,华为电信平台例如自身技术优势还可以免心跳下发数据,这是模块直连用户自建服务器所无法实现的。 当前NB-IOT主要平台有: *华为OceanConnect *电信物联网平台 电信物联网平台是华为OceanConnect的NB-IOT业务的独立版本,对于设备端来说,这两大平台是完全相同的。另外,由于华为和电信物联网平台需要申请账号才能使用,而且接入流程较为复杂,这无形之中增加了NB-IOT的学习难度。所以,为了让大家快速的了解和测试NB-IOT,我们开发了谷雨云透传平台,开箱即用,支持多种接入方式。在后面的快速通信测试时,我们将使用谷雨的云透传平台来快速测试。 模块硬件准备 首先连接NB260与USB转串口模块,最小连接仅需:GND,VIN,TXD,RXD,PEN。PEN信号用来开机和唤醒模块休眠,建议通过一个按键来与VIN相连。有关更详细的硬件接口说明,请参考《NB260硬件设计手册》 然后打开串口调试助手软件,选择对应的串口号,设置串口参数:’’‘115200,无校验,8位数据位,1位停止位’’’,最后打开串口。 随即接通NB260的电源,红色电源指示灯亮,但串口无任何输出,因此BC26还未开机。 然后将PEN拉高至少500ms使模块开机,可以看到串口调试助手中打印了一些内容。如果全部显示乱码,请检查波特率是否为115200,若没有任何内容输出请重新尝试开机,并且检查串口线TX和RX是否反接等。 F1: 0000 0000 V0: 0000 0000 [0001] 00: 0006 000C 01: 0000 0000 U0: 0000 0001 [0000] T0: 0000 00B4 Leaving the BROM 在串口调试助手中发送字符串:AT,模块随即返回:OK,如下图所示,发送数据时务必勾选:’’‘加回车换行符’’’。否则模块不会响应。 {{Note|text=注意,当模块等待一段时间后再发串口数据无响应,表明模块处于休眠状态,需要按照开机的办法,也就是拉高PEN来唤醒模块。|type=warning}} 附着网络 附着网络是指模块连接到基站并注册网络。只有当网络附着成功后,才可以进行网络通信。 一般模块开机后会自动附着网络。也就是不需要任何指令操作,可以参考下面的指令来确认是否已成功附着到网络。 =查询模块功能状态= #发送指令 AT+CFUN? #模块返回 +CFUN:0 OK +CFUN:0表示模块功能未打开,若返回:+CFUN:1则表示功能已打开。 该指令类似查看手机是否处于处于飞行或关机状态。0表示模块处于最低功能状态,功耗很小,可用的指令和功能也很少。 =开启模块功能= #发送指令 AT+CFUN=1 #模块返回 OK 此时表示模块功能已打开,可以继续后续指令。注意在AT+CFUN未返回前请勿执行其他指令。{{Note|text=注意,若该指令返回错误ERROR,表示没有检测到SIM卡,多数是因为SIM卡未插入或者插反。NB200使用的是Micro类型的卡槽,SIM卡插入时,注意卡缺口朝外。|type=warning}} =查询SIM卡的ICCID码= ICCID是集成电路卡识别码:Integrate Circuit Card Identity的首字母缩写,该号码可以在SIM卡的背面看到。可以通过该识别码来查询NB物联网卡的号码。 #发送指令 AT+QCCID #模块返回 +NCCID:89860317492045357506 OK =查询当前频段= BC26支持多频段,查询当前频段设置的命令如下 #发送指令 AT+QBAND? #若模块返回: OK #则表示尚未附着到网络,无法查询当前工作频段。请先完成网络附着。 #若模块返回: +QBAND:5 OK #则表示已经附着到网络,当前频段为B5。 +QBAND格式如下:+QBAND:,字段的含义为: {| class=“wikitable” !参数 !说明 |- | |网络频段: 5:表示B5,中国电信使用该频段 8:表示B8,中国移动使用该频段 有关完整的频段说明,请阅读NB260硬件手册 |} =查询当前信号= 信号的强弱直接影响网络通信的质量,可以使用AT+CSQ来查询当前信号值。一般要求CSQ值大于5方可正常工作。 #发送指令: AT+CSQ #模块返回: +CSQ: 25,0 OK +CSQ格式如下:+CSQ:,,字段的含义为: {| class=“wikitable” !参数 !说明 |- | |99:表示网络未知,或者网络未附着。如果模块关闭了自动附着功能,需要激活模块网络。才能获取到正确的信号值。 0 :表示信号质量为-113dBm或者以下,信号非常差 1 :表示信号质量为-111dBm 2~30:对应信号值为-109dBm到-53dBm。 31:对应信号值为-51dBm或者更高。 |- | |RXQUAL取值:0~7,若等于99表示未未知或未附着到网络。 |} {{Note|text=Tips:CSQ中的rssi与dBm换算公式如下:dBm = rssi*2 – 113,例如,当rssi等于30时,对应dBm为-53dBm|type=tips}} =查询网络是否激活= 该功能类似手机上的打开或关闭4G网络功能,网络激活后后方可网络通信。 #发送指令 AT+CGATT? #模块返回: +CGATT:1 OK 参数: 0:表示网络未激活。 1:表示网络已激活,注意,等于1表示仅打开网络功能,但是否入网还要等待+CEREG指令的确认。 =激活网络= 打开模块的网络功能,为后面的socket网络通信做准备 #发送指令 AT+CGATT=1 #模块返回 OK 若该指令返回ERROR,表明模块刚开机,SIM卡尚未准备好,请等待片刻。若仍然ERROR,很可能是SIM卡有异常。 =查询网络是否已注册= #发送指令 AT+CEREG? #模块返回: +CEREG:0,1 OK 返回格式为:+CEREG:, {| class=“wikitable” !参数 !说明 |- | |该命令的URC通知设置。 0:表示网络注册状态变化时,不会主动发送+CEREG通知,需要用户主动发送查询命令。 1:表示网络注册状态变化时,模块会主动发送+CEREG通知。 |- | |网络注册状态 0:表示模块未注册到网络 1:表示模块已注册到网络 2:表示正在注册网络,请等待注册完成。 |}以上指令,我们已完成网络的附着操作,接下来可以使用CoAP和UDP协议收发数据了。 === IP地址通知 === 当模块已经附着到网络时,会主动上报分配到的IP地址,如下: #模块URC指令上报 +IP: 10.47.53.56 此时表明可以进行网络通信等操作。 == 设置网络变化通知 == 当模块网络发生变化时,我们需要模块主动上报当前的网络注册状态,发送以下指令实现该功能。 #发送指令 AT+CEREG=1 #模块返回: OK 此时,我们可以简单测试一下该功能。例如,关闭模块网络然后重新打开,如下: #发送指令关闭网络 AT+CGATT=0 #模块返回 OK #大概1s左右,模块主动通知 +CEREG=0 #再次打开网络 AT+CGATT=1 #模块立即返回 OK #然后随即主动通知正在注册网络: +CEREG:2 #最后再次通知注册成功(注册网络需要一定的时间,不同地区时间不同,从几秒到几分钟均有可能): +CEREG:1 ==禁止模块休眠== 休眠的目的是降低模块功耗,延长电池的供电时间,休眠时模块处于最低功耗状态,无法接收串口指令,影响测试模块功能,因此,可以临时禁止休眠。 #发送指令 AT+SM=LOCK #模块返回: OK 若恢复模块的休眠功能,执行以下操作: #发送指令 AT+SM=UNLOCK #模块返回: OK 使用UDP协议通信 BC26支持UDP协议通信,UDP协议具有资源开销小,速度快等特点,并且不需要维持链接,非常适合低功耗设备的数据传输。{{Note|text=在数据通信之前,务必使模块附着到网络,请发送查询命令确认网络附着状态:AT+CEREG? 应当返回 +CEREG:0,1 或 +CEREG:1,1|type=warning}} {{Note|text=由于电信公司政策(移动公司无此限制),使用电信NB卡若要访问私有服务器IP,必须将私有IP添加到SIM卡的白名单中(也就是绑定IP),例如从我们这购买的SIM卡已经绑定了我们的服务器IP:115.29.240.46|type=warning}}使用AT+NPING指令来测通,检查是否能够与目标服务器IP通信。 发送指令 AT+NPING=115.29.240.46 模块立刻返回: OK 然后随即返回: +NPING:115.29.240.46,53,488 返回格式为:+NPING:《remote_address》, {| class=“wikitable” !参数 !说明 |- |《remote_address》 !参数 !说明 |- | |错误码 1:远程主机有效时间内未响应。 2:发送PING请求失败。 |}所以当返回:+NPINGERR:1时,很可能是该IP地址未绑定到SIM卡(电信卡有这个限制)。无法进行后续通信测试。 另外值得注意的是,电信的SIM卡虽然已绑定了该某个IP地址,会仍然无法PING成功,但不影响通信。 =创建UDP通信Socket= 在使用模块网络收发数据之前,需要先创建一个socket,并且知道对方ip和端口号后才能发送数据。 发送如下命令创建UDP Socket AT+NSOCR=DGRAM,17,4587,1 模块返回: 0 OK 创建socket的指令格式为: AT+NSOCR=,,[,] {| class=“wikitable” !参数 !说明 |- | [tr]Socket类型,取值为DGRAM[/tr] Socket通信协议,UDP协议号是17,因此取值为17 - 本地监听端口,不是远程UDP-Server的端口。示例中取值4587。BC26模块支持创建7路UDP Socket,再次创建socket,注意本地端口取值不要重复,其他情况对本地端口的取值没有任何要求。 }返回格式为: OK 刚刚创建了第一个UDP Socket,因此socket-id为0,模块数据收发均要使用此处返回的socket-id,请牢记。 =UDP发送和接收数据= 我们需要在服务器(固定IP)上先创建一个UDP Server,指定一个端口来监听模块发来的消息。 为了快速测试,我们在谷雨服务器上,创建了一个UDP Server ,固定IP:115.29.240.46,端口号:5000,该Server收到UDP Client发来的数据时,会在已收到的数据加上前缀:“iotxx:”,然后延时5s后发回到UDP Client中。 例如客户端发送字符串“123”, 等待5s后,会收到字符串 “iotxx:123” 发送数据的命令如下: AT+NSOST=0,115.29.240.46,5000,3,313233 模块立刻返回: 0,3 OK 发送数据指令格式为:AT+NSOST=,《remote_addr》,《remote_port》, , {| class=“wikitable” !参数 !说明 |- | [tr]刚刚创建的UDP通信socket编号,从0开始,若创建了两个UDP的socket,则第一个为id编号0,第二个id编号为1[/tr]《remote_addr》,《remote_port》 远程服务器IP地址和端口,例如我们的NB云平台IP地址为:115.29.240.46,端口为:5000 - , 待发送的数据长度和数据内容,注意,data是以16进制形式的填写,例如要发送:123,则data为:313233,length为:3 }模块返回格式:, { !参数 !说明 |- | [tr]UDP通信socket编号[/tr] 是已发送的数据长度。 }例如返回:0,3,则表示,Socket 0通道发送了3个字节数据。此时表明,模块已经成功将数据发送了出去。 接下来演示模块接收来自服务器的数据(我们服务器5000端口收到客户端发送的数据后,等待5秒,然后原样回传)。等待大约5秒后,模块会异步命令通知: +NSONMI:0,9 格式为:+NSONMI:, +NSONMI:0,9 表示在通道0,接收到长度为9个字节的数据。 此时,我们需要把已模块已收到的数据读出来。 发送指令: AT+NSORF=0,9 模块返回: 0,115.29.240.46,5000,9,696F7478783A313233,0 指令格式为:AT+NSORF=,《req_length》 {| class=“wikitable” !参数 !说明 |- | [tr]UDP通信socket编号[/tr]《req_length》 要读取的数据长度,当req_length大于+NSONMI指令返回的长度时,返回+NSONMI的实际长度。若req_length小于+NSONMI指令返回的长度时,将只返回req_length长度的数据。 } 模块返回的数据格式为:,《remote_addr》,《remote_port》,,,《remaining_length》 {| class=“wikitable” !参数 !说明 |- | [tr]UDP通信socket编号[/tr]《ip_addr》, 数据发送方的ip地址和端口号。对应模块返回的字段:115.29.240.46,5000 - , AT+NSORF指令读取到的数据长度和数据内容。对应模块返回的字段:9,696F7478783A313233,由于返回的是HEX格式的数据,因此对应的字符串为:iotxx:123 - 《remaining_length》 未读取的剩余数据长度。对应模块返回的最后一个字段:0 } == 使用TCP协议通信 == NB260(BC26)和NB101(BC95)相比,额外支持TCP协议,TCP协议和UDP很相似,但是TCP可靠性更高。 首先创建TCP协议Socket AT+NSOCR=STREAM,6,56000,1 模块返回: 使用CoAP协议通信 CoAP是一种类似HTTP的极其轻量级的应用层协议,HTTP基于TCP协议,而CoAP基于UDP协议,最小数据包仅有4个字节。非常适合低功耗物联网设备的使用。 BC26模块中集成了CoAP服务端和客户端,封装了内部接口,提供简洁的数据收发指令给用户使用。因此使用CoAP协议通信比UDP更简单。 CoAP通信的使用流程: 模块附着网络》》设置CDP服务器地址和端口》》发送数据》》接收数据。 使用CoAP通信前,也建议测试测试远程IP地址是否可用。 {{Note|text=1、NB模块中使用的CoAP协议是在标准CoAP基础上又封装一层,过程较复杂,因此大家很难自己创建CoAP服务器来测试,如果要自建CoAP协议服务器,请参考电信的模块对接手册。 2、CoAP协议的通信需要对接电信/华为平台后进行,其他情况下很难正常测试。|type=info}} =配置CDP服务器= 配置远程CoAP服务器的IP地址和端口,类似UDP的IP和端口。 发送指令: AT+NCDP=115.29.240.46,5683 模块返回: OK 设置指令格式:AT+NCDP= 《ip_addr》[,] {| class=“wikitable” |+ !参数 !说明 |- |《ip_addr》 [tr]目标CDP服务器的IP地址,例如:115.29.240.46[/tr] 目标CDP服务器的端口,默认端口:5683 } 若想查询CDP设置情况,请发送指令:AT+NCDP? =配置新消息通知= 开启发送消息通知,配置后,若消息已发送,串口会返回异步命令+NSMI:SENT的提示。 发送指令: AT+NSMI=1 模块返回: OK 开启接收消息通知,配置后,若接收到服务器的数据下发,模块会主动向串口发送异步命令。 发送指令: AT+NNMI=1 模块返回: OK 指令格式:AT+NNMI= {| class=“wikitable” !参数 !说明 |- | |设置接收消息通知类型,取值如下: 0:不通知,默认设置 1:通知并携带数据, 2:仅通知 |} =CoAP发送和接收数据= 注意,本节内容仅解释演示CoAP协议收发指令。因为涉及服务器联调问题,所以本节内容大家可能无法正常测试。 发送字符串“123” 发送指令: AT+NMGS=3,313233 模块随即返回: OK 若数据已成功发送,并且服务器已收到,串口会打印: +NSMI:SENT 如果失败,会打印失败错误码。 指令格式:AT+NMGS=, {| class=“wikitable” !参数 !说明 |- | [tr]待发送数据的数据长度[/tr] 待发送的数据内容,注意,data是以16进制形式的填写,例如要发送:123,则data为:313233,对应长度为:3 } 当CoAP服务器有数据下发时,模块串口会打印: +NNMI:9,696F7478783A313233 指令格式为:+NNMI:,,参数解释,请参考指令AT+NMGS |
|
|
|
只有小组成员才能发言,加入小组>>
4484个成员聚集在这个小组
加入小组3327 浏览 0 评论
航顺(HK)联合电子发烧友推出“近距离体验高性能Cortex-M3,免费申请价值288元评估板
4260 浏览 1 评论
4287 浏览 0 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-18 15:16 , Processed in 0.557340 second(s), Total 46, Slave 40 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号