NB-IoT使用笔记(4)在linux下使用搭建CoAP服务

本文介绍了CoAP协议的基本概念及特点,包括其轻量级的数据包格式、工作模式及支持的操作方式等。同时,文章详细记录了在Linux环境下安装配置CoAP服务器的过程,并提供了客户端访问测试的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

背景

NB-IoT模块有一个CoAP的功能,CoAP是基于UDP协议的一种带有重传机制的事务处理机制的应用层传输协议。关于CoAP的更多介绍,可以参照这个物联网学习笔记系列里面关于CoAP的文章,应该足够用了。 
今天主要是在linux平台上搭建一个CoAP并进行简答的测试,主要参考博客CoAP学习笔记——nodeJS node-coap安装和使用(Linux平台) - 物联网 IoT 经验分享小站 - 优快云博客CoAP协议学习——CoAP基础 - 物联网 IoT 经验分享小站 - 优快云博客


预备知识

关于CoAP的官方介绍(英文版)的可以移步RFC 7252 The Constrained Application Protocol (CoAP) 
以下是我认为的一些CoAP的重要特点:

  • 数据包长度小,最小可以达到4字节。
  • 采用请求响应的工作模式,共有4中消息类型: 
    • CON(Confirmable):需要被确认的请求,必须做出响应;
    • NON( Non-confirmable):无需确认的请求,不必做响应的消息;
    • ACK(Acknowledgement):应答消息,用于应答CON消息;
    • RST(Reset):复位消息,当接收方接收到有错误的CON或者NON消息后用于重置收发,或者是在接收方重启时发送。
  • 数据包结构: 
    数据包结构 
    • Ver(Version):版本信息,2bit,标明CoAP的版本;
    • T(Type):消息类型,2bit,从0到3分别是CON、NON、ACK和RST;
    • TKL(Token Length):标记长度,4bit,可变长度的token区域(0~8字节)长度;
    • Code:消息类型2,8bit,3bit指明几个大类,剩下的5bit是对细节的描述,详情可以看官方的说明;
    • Message ID:消息ID,16bit,匹配一次会话所有消息的唯一ID;
    • token:标记,由TKL指定长度,标记ID;
    • payload:有效载荷(可选项);
  • CoAP的URL,类似http,以coap开头,默认端口号5683;
  • CoAP观察者模式:CoAP客户端可以以观察者的身份连接到服务端,在客户端发送RST请求前,服务端会把最新的数据变化发送给客户端而不需要客户端不停地请求。
  • CoAP块传输:CoAP可以对数据进行分片和组装,以适应大规模数据的传输。
  • 支持4种请求方式:GET请求、POST请求、PUT请求和DELETE请求。

搭建与测试

通常的CoAP有node-coap和libcoap两种,这里安装的是node-coap。

安装nodeJS环境

查看机器类型

uname -a
  • 1

返回

Linux VM_127_26_centos 2.6.32-573.18.1.el6.x86_64 #1 SMP Tue Feb 9 22:46:17 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux
  • 1

可以看到我的是x86_64的CPU,将目录转到你想下载安装包的地方,这里直接下载已经编译好的安装包,然后下载https://nodejs.org/download/release/latest-v6.x/(当然也可以下载最新的版本v7、v8)中的对应你自己CPU的版本,并建立链接:

wget https://nodejs.org/download/release/latest-v6.x/node-v6.11.5-linux-x64.tar.gz
tar xvf node-v6.11.5-linux-x64.tar.gz
ln -s node-v6.11.5-linux-x64/bin/node /usr/local/bin/node
ln -s node-v6.11.5-linux-x64/bin/npm /usr/local/bin/npm
  • 1
  • 2
  • 3
  • 4

测试下运行:

node -v && npm -version
  • 1

返回

v6.11.5
3.10.10
  • 1
  • 2

安装node-coap

npm install coap --save
  • 1

已经装完了,没错~简单无脑,这里来写个JS测试下服务器:

vim server.js
  • 1

内容如下:

const coap    = require('../') // or coap
    , server  = coap.createServer()

server.on('request', function(req, res) {
  res.end('Hello ' + req.url.split('/')[1] + '\n')
})

server.listen(function() {
  console.log('server started')
})
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

然后执行:

node server.js &
  • 1

这样服务器就okay了,更多的应用可以去GitHub - mcollina/node-coap:CoAP - Node.js style

客户端访问测试

可以用coap客户端进行访问了,这里给出三种方法访问:Firefox浏览器的copper插件、coap-cli和js脚本。

Firefox浏览器

安装了Firefox后可以去Copper(Cu)::Adds-ons for Firefox ,点Adds to Firefox就安装好了。 
这里写图片描述 
安装成功后浏览器地址栏输入 about::addons可以看到Copper已经安装成功了。 
这里写图片描述 
最后在地址栏输入 coap:://(服务器的IP地址):5683/ ,点击GET可以看到服务器返回了Hello。 
这里写图片描述

coap-cli

coap-cli这个可以在服务器上或者linux环境下使用命令行工具coap以客户端的身份连接到服务端 
安装coap-cli,并设置软链接:

npm install coap-cli -g
ln -s ln -s node-v6.11.5-linux-x64/lib/node_modules/coap-cli/index.js /usr/local/bin/coap
  • 1
  • 2
  • 3

发送测试GET数据:

coap get coap://localhost/a166865995
  • 1

返回:

(2.05)  Hello a166865995

  • 1
  • 2
  • 3

(2.05)可理解为HTTP中的200 OK。关于coap-cli的更多细节可以移步GitHub - mcollina/coap-cli: A command line interface for CoAP built on node-coap

js脚本

编辑客户端脚本:

vim client.js
  • 1

内容:

const coap  = require('coap') 
    , req   = coap.request('coap://localhost/a1668659995')

req.on('response', function(res) {
  res.pipe(process.stdout)
})

req.end()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

执行并返回结果:

node client.js
Hello a1668659995
  • 1
  • 2

初入CoAP,欢迎小伙伴们一起评论区交流,一起学习~


转载请注明出处

转自:https://blog.youkuaiyun.com/a1668659995/article/details/78385427

NB-IoT现阶段访问一个服务器只能通过IP地址加端口的方式,省去了DNS解析,如果产品以后的IP变化或者改变了服务端的IP地址,就需要一个DNS解析的功能。 通过DNS解析某个域名的IP地址,获取到IP地址后再进行通信。 如果NB-IoT模块只能绑定一个IP,则可以通过这个IP先获取其他IP列表,然后统一经过这个IP进行转发。 参考: 1.1.2 NB卡准备 模组使用的SIM卡为中国电信物联网专用NB卡,如下图正面(留意NB字样,无此字样的均为不合法的NB卡): 背面(留意其ICCID号,在让运营商开放IP白名单时可能需要此号码,相当于手机卡的手机号): 重要:收到卡后,需要致电背面的客服电话, 使其将您自己的IP地址加入访问白名单,此一步完成后,方能进行下面的步骤,切记切记 。 如何判定服务器IP已被加入访问白名单,使用如下两种方式: 1. AT+NPING 指令,通过PING自己的服务器地址,如返回ERROR,则多半(尚需继续排除防火墙因素)未就绪; 2. UDP通讯,如能与自己的服务器直接连接UDP通讯,那可以证明一定就绪; 1.1.3 服务器准备  首先您需要有一个固定IP的公网服务器,由于目前BC95暂不支持域名解析,故必须使用IP地址配置方式。  服务器可以使用阿里云服务器,目前本CoAP端暂未开源,有Windows 32位、Windows 64位、Linux CentOS 6、CentOS 7的可执行文件,请暂时选择以上指定系统;  CoAP标准协议使用 UDP 5683 端口,当然您也可以自定义此端口,必须让防火墙放通UDP 的指定端口;  CoAP网关需要使用WEB方式进行设备管理、用户管理等,默认使用 TCP 8080 端口,同 理,防火墙必须放通此端口; 1.1.4 模组准备 推荐使用 串口调试助手 sscom 来调试NB模组,如下,首先将您的NB模组上电使其启动,使用AT指令能收到OK的回复,证明已启动完毕,按如下步骤进行: 基础配置 1. 配置 NCDP 服务器,使用的指令序列为 AT+CFUN=0 +NCDP=103.37.149.19,5683 AT+NRB 留意 IP 地址必须为您自己指定的IP地址,如果暂时没有,也可以用 如上 地址临时使用(但 WEB 设备管理地址也需换成这个IP),完成后重启了设备; 2. 等待设备附着网络后,使用 AT+NPING=103.37.149.19 尝试PING自己的服务器,当返回ERROR时,极有可能是 IP 白名单未成功配置的缘故; 3. 使用 AT+CGSN=1 查询设备 IMEI 号,并将设备的 IMEI 注册到 WEB 平台,如果在上面操作 过,可忽略。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值