一直没来得及写一个完整的NB-IOT BC95的UDP数据传输过程,这里用我们的开发板来演示一下,如何进行一次UDP数据收发。

硬件:

开发板:EVB_USB(点击购买)

软件:

串口助手:QCOM_V1.6(点击下载)

UDP Server:TCP/UDP Socket 调试工具 V2.5(点击下载)

—————————————————分割线————————————————

首先将开发板接入电脑的USB中,如果你电脑之前没有安装过CP2102的驱动,会提醒你安装驱动,可以用360驱动大师安装,安装完之后,

计算机》右键》管理》设备管理器 一栏,可以看到“端口”

带有 Silicon Labs CP210x USB to UART Bridge字样的,就是我们开发板所对应的串口,我们查看串口号是COM3.

这个时候可以打开串口助手:

选择COM Port 为 3(刚才在设备管理器看到的),Baudrate为9600(BC95默认值),然后点击Open Port,这个时候就可以对开发板发送AT指令了。

我们先验证一下:

有很多朋友写完AT,点击发送之后,模组没反应,这个时候就要看一下你是否勾选了 Send With Enter,因为模组将换行符作为AT指令的结束帧的,必须要勾选上,或者在输入框内敲入:Ctrl+Enter,点击发送(Send Command)这个时候在我们的返回框可以看到已经有返回OK,说明我们的模组已正常工作了。

我们可以看到在右侧,有1、2、3、4....28、29这些框,这个是很便捷的一个功能,直接把我们的AT指令输入进去,点击发送后,软件会自动保存我们的输入记录,以便于下次继续使用。下面我们开始进行模组信息检测:

我们先输入“AT+CFUN”,然后选择Enter所对应的勾选框,点击对应的数字1

这个时候看到模组有

——————————

+CFUN:1

OK

——————————

返回,有些朋友说返回的是+CFUN:0,这个就是个错误的返回结果了,CFUN的功能是射频开关,我们可以通过AT+CFUN=1来开启模组的射频开关,在B656版本之后,模组上电后默认是开启射频开关的,并不需要认为的设置AT+CFUN=1,如果你查询AT+CFUN?返回的结果是0,先等个几秒钟再查,如果依旧是0的话,就可能是以下几种情况:

1:模组频率设置不正确

2:模组SIM没有正常连接。

至于频率设的相关设置,大家可以点击:BC95频率设置 来查看如何设置。如果模组的SIM卡没有识别到的话,那么AT+CFUN?的结果必然是0,这个时候你要检查你的硬件电路是否有问题。

当AT+CFUN?返回结果为1的时候,这个时候我们才能进行下一步操作,

No1:首先我们检查一下卡的IMSI

对应AT指令是:AT+CIMI,返回结果为你卡片所对应的IMSI。

No2:查询当前信号质量CSQ

对应AT指令是:AT+CSQ,返回结果为+CSQ:16,99。前面这个16就是信号质量,这个取值范围是0-31的一个数值,当这个数位99的时候,就说明没有获取到信号,这个时候我们可能需要多等一会儿,根据不同的地点,所等待时间在1-60s内,如果超过这个时间依旧返回的结果是+CSQ:99,99的话,这个时候就要看一下卡是否是NB卡了,还有就是你的模组固件版本是否在657以下(之前版本没有开启扰码功能,不能成功接入基站)。

No3:查询当前模组网络注册连接状态CEREG

对应AT指令是:AT+CEREG?,很多朋友虽然都知道CEREG是查询网络状态的,但并不清楚返回的结果所代表着什么,这里详细的说一下:

+CEREG:0,0

+CEREG:0,1

+CEREG:0,2

前面一个0,是功能码,如果设置为0,只有我们请求的时候才会返回+CEREG这个结果,设为1,一旦网络状态发生改变的时候,会自动上报URC来通知我们。

后面的0,1,2,当为0的时候,说明网络还未注册,依旧在搜索信号,一般刚开机的时候,发送请求会返回为0,当为1的时候,这个时候表明网络已经注册成功了,可以正常使用了。如果为2的时候,这个是从0到2的转换,再次尝试入网,这个时候就说明网络质量或者线路并不是很流畅,模组在尝试入网。如果一直为2的话,建议重启模组或重启射频CFUN。直至返回结果为+CERGE:0,1。当然后面还有3,4,5等,这些目前都用不到,有兴趣的可以看我们的中文手册。

No4:查询当前模组当前的IP地址

对应AT指令:AT+CGPADDR。这步是多余的,但为什么讲这一步呢,因为很多人把这个IP地址当作寻呼模组的一个IP地址。我们先看一下返回结果

CGPADDR:0,10.162.113.26,从结果上看,10.162.113.26是我们模组的IP地址,这么说没错,但,这个地址并不是公网地址,只是运营商网络给分配的一个内网地址,10段IP一直都是用在内网上的,所以不要想了,即使你有回天之术,也不能在外网通过10段IP访问到模组。有兴趣的可以看我的一个帖子:《内网如何数据穿透》

No5:PING服务器

对应AT指令:AT+NPING=X.X.X.X,我个人觉得这步很关键,为什么呢?因为现在电信的NB是定向卡,如果你的服务器IP没有和NB卡进行绑定的话,是没法访问到服务器的,测试卡和服务器是否绑定,只需要发送一个PING命令,如果返回:+NPING:x.x.x.x,115,1042字样字段,说明你可以拿这个服务器测试,如果不行,多试几次,还是不行的话,那就是你的NB卡并没有绑定这个服务器。注意如果你发送完直接就返回+NPINGERR:1,那就说明你的NB卡和服务器真没绑定

No6:创建UDP Socket NSOCR

对应AT指令:AT+NSOCR=DGRAM,17,8888,1。前面两个参数可以忽略,按照这个来写就行,第三个8888是指模组所需要监听的UDP PORT端口,当然你也不需要记住,因为一旦通过运营商网络运营商会NAT转发,公网中就不是这个端口了。不过如果你要创建多个socket的话,注意这个参数不能重复。

返回:

0

OK

前面一个0就是socket id号,socket id最多只能创建0~6,也就是7个,如果超过了,就会返回ERROR。这个id号也是我们后面发送数据及接收数据要用的,前期的话我们可以只创建一个试试。

No7:发送UDP数据 NSOST

对应指令:AT+NSOST=0,x.x.x.x,60001,2,AB30。前面做那么多铺垫终于到了重头戏了,第一个参数0,就是我们上面创建的socket id返回的id号,我们可以把它称为0号场景。x.x.x.x是我们的服务器IP地址,60001是端口,根据自己服务器开的端口而定,2是我们要发送的数据长度,AB30是我们要发送的数据,因为数据是16进制的,所以就是 0xAB 0x30这两个数据。

返回的结果:0,2  OK,其中0是socket id,2是发送的数据长度,这个时候我们的服务器应该就可以收到我们发送的数据了。

和我们发送的数据一模一样的。

No8:接收UDP数据 (第一步NSONMI)

这步没有对应的AT指令,当我们通过No7向服务器发送数据后,这个时候运营商为模组和服务器开通了一个短暂通道,模组的地址就是我们接收数据时候的地址,我的这个是:117.61.135.23,端口:40548,这个地址是临时的,正常有效时间不会超过1分钟,所以你最好在30秒内通过这个地址将数据发送给模组,一旦超过这个时间,链路就会失效,你必须再次用模组向服务器发送一个数据,请求新的链路。

我们在UDP调试工具中十六进制输入:010203,点击发送:

此时模组URC上报一个消息:+NSONMI:0,3,这个是告诉我们,socket id为0的场景中收到一个字节长度为3的数据,此时我们并不能查看数据,必须通过下个步骤No9。

No9:接收UDP数据 (第二步NSORF)

对应AT指令:AT+NSORF=0,3。实际上当我们在No8的步骤中的时候,数据已经到了我们的模组中,但华为为了让大家知晓有多少数据过来,方便开启Ram缓冲,所以分为两步走,这一步的作用就是把数据从模组中取出来。第一个参数0代表着socket id,用来识别内容来自哪个id的,第一给3是长度,当然,你也可以大于3,只要不小于No8得到的长度。在下个数据或重启之前,都是可以取出这个数据的,和时间没有关系。发送AT+NSORF=0,3,返回:0,x.x.x.x,60001,3,010203,0,这就好理解了,x.x.x.x是服务器地址,60001是我开启的端口,3是收到的数据长度,010203是我刚才从服务器发送的十六进制数据。最后一个0是还没有读取的数据长度,因为我这里读取的是3,把所有的数据读完了,所以显示为0.

好了,9个步骤,很安全的把NB-IoT 的UDP演示一遍,如果做产品的话,其中一些可以省略。

作者:iotclub
连接:https://blog.csdn.net/iotclub/article/details/78128589?locationNum=7&fps=1

NB-IOT之一个完整的BC95 UDP从开机到数据发送接收过程相关推荐

  1. 4G模组工作笔记001---NB-IOT之一个完整的BC95 UDP从开机到数据发送接收过程

    技术交流QQ群[JAVA,C++,Python,.NET,BigData,AI]:170933152 一直没来得及写一个完整的NB-IOT BC95的UDP数据传输过程,这里用我们的开发板来演示一下, ...

  2. java UDP通信程序DatagramSocket数据发送

    首先 我们先来了解一下 UDP 首先 他是一种不可靠的网络协议 他在通信的两端 各建立一个 Socke对象 但是他们只是 发送和接收数据的对象 发送端只管发送 不会顾及接收端是否接到 接收到只负责接收 ...

  3. Verilog 实现千兆网UDP协议 基于88E1111--数据发送

    Verilog 实现千兆网UDP协议 基于88E1111–数据发送 注:此版本没有添加ARP PING 等,未完待续. 注:项目采用Verilog开发,基于Vivado编译器. UDP(User Da ...

  4. NB IoT LWM2M Object or/and Resource Identifier: (Object ID) or (ResourceID)

    NB IoT LWM2M Object or/and Resource Identifier: (Object ID) or (ResourceID)      LWM2M协议中Object ID-对 ...

  5. 深入浅出TCP/UDP 原理-UDP篇(2)及完整MATLAB实现UDP通信

    目录 调试代码在文末 写在前面 3. UDP疑难杂症 3.1 UDP的传输方式:面向报文 3.2 UDP数据包的发送和接收问题 3.3 UDP丢包问题 3.4 UDP冗余传输 4 UDP真的比TCP要 ...

  6. nb信号和4g信号_三大运营商NB—IoT技术对比

    龙源期刊网 http://www.qikan.com.cn 三大运营商 NB - IoT 技术对比 作者:通信世界网 来源:<物联网技术> 2018 年第 02 期 摘 要: NB-IoT ...

  7. 产品 电信nb接口调用_艾礼安NB—IoT产品通过中国电信物联网开放平台接入认证...

    原标题:艾礼安NB-IoT产品通过中国电信物联网开放平台接入认证 近日,从电信部门传来好消息,艾礼安NB-IoT系列产品成功通过了中国电信物联网开放平台接入认证. 艾礼安NB-IoT产品通过电信认证 ...

  8. linux内核协议栈 UDP之数据报接收过程

    UDP报文接收概述 UDP数据报的接收要分两部分来看: 网络层接收完数据包后递交给UDP后,UDP的处理过程.该过程UDP需要做的工作就是接收数据包并对其进行校验,校验成功后将其放入接收队列 sk_r ...

  9. 1.1 大数据简介-hadoop-最全最完整的保姆级的java大数据学习资料

    文章目录 1 hadoop-最全最完整的保姆级的java大数据学习资料 1.1 大数据简介 1.1.1 大数据的定义 1.1.2 大数据的特点 1.1.3 大数据的应用场景 1.1.4 大数据的发展趋 ...

  10. java dtls server_DTLS协议(基于UDP)中client/server的认证过程和密钥协商过程

    我的总结:DTLS的握手就是协商出一个对称加密的秘钥(每个客户端的秘钥都会不一样),之后的通信就要这个秘钥进行加密通信.协商的过程要么使用非对称加密算法进行签名校验身份,要么通过客户端和服务器各自存对 ...

最新文章

  1. 推荐8个可以显著提高工作效率的办公神器
  2. iOS App与iTunes文件传输的方法和对iOS App文件结构的说明
  3. Android版本介绍
  4. python 列表推导式 结构解析
  5. 数据可视化,需要遵循的几条核心原则
  6. ubuntu16.04終端補全忽略大小寫
  7. 02 掌握实现数据导入导出的方法 1214
  8. Web development mistakes
  9. lamp mysql数据库设置_LAMP环境搭建图形界面配置MySQL数据库
  10. CentOS搭建全功能服务器(Nginx+Tomcat+PHP+SSL)
  11. 使用 matlab 数字图像处理(五)—— 双线性插值(Bilinear Interpolation)
  12. emq与mysql_EMQ X 插件持久化系列 (五)MySQL MQTT 数据存储
  13. [Django学习] Django基础(8)_富文本编辑器
  14. ADMM随堂笔记(3):一致和协同
  15. 关于移动端H5获取微信非静默授权被拦截进入【微信快照页】问题及解决方案
  16. 获取linux时间 毫秒级,Linux获取毫秒级时间
  17. 【软件需求工程】北理的恶龙们01——需求获取阶段准备工作
  18. 解决C#WinForm在设置FormBorderStyle属性=None时出现的窗口大小变化问题
  19. 关于存储器中的地址与数据的对应关系
  20. 下载Intell IDea

热门文章

  1. Java实现生成二维码(含logo)
  2. 12864液晶显示c语言程序,单片机+lcd12864液晶万年历C程序
  3. 【云计算学习教程】云计算终端技术详解
  4. 以过来人身份给新手博主站长的几点小建议
  5. 硕士研究生毕业论文书写格式总结
  6. 2013年度最强AngularJS资源合集
  7. 57、RapidJson存储Base64数据和空间释放
  8. gentoo linux 内核,Gentoo编译内核
  9. 测试渗透前置知识-行业术语
  10. Microsoft Visual C++ 2008 SP1 Redistributable Package (VC2008运行库)