NB-IOT BC28连接阿里云服务器发数据。

入坑俩月,收获就这么点,今天写写吧就当是笔记了。NB-IOT BC28连接阿里云服务器发数据。_第1张图片大家买到开发板后,一定要反复仔细读官方手册。

		第一步:BC28硬件板准备

准备一条 USB 转 RS232 的线接到板子上,注意要将板子上的 232_VCC 的跳线帽要跳接 上。这样是为了让 RS232 能够正常工作。注意一定要接,不然 RS232 是不工作的!
NB 卡可以在电信运营商 进行购买或者其他渠道获取。但是一定要注意所在地区是否已经有 NB 网络的覆盖。否则即 便有卡,也没法进行实际调试使用。移动的 NB 用普通的手机卡物联网都是可以的。电信的 必须是专用的。
打开提供的工具软件 QNavigator_NB-IoT_V1.0 来进行测试。下图就是我们已经插入 SIM 卡并且能够正常工作的。NB-IOT BC28连接阿里云服务器发数据。_第2张图片
打开QN软件后,设置端口(com3)、Connect to module。这里会出很多问题,如果顺利的话,你的模块信息还有卡状态都会出现,你也可以单独点击下面的Module information和Registration information。当然左边的信息都是可以通过AT指令查询到的,自己到AT指令手册上去找吧

       	 第二步:电信定向 IP 发数据 UDP

对于定向发 IP,就是用户可以任意发数据到公网服务器端,目前电信对于 IP 还是存在一 定的限制。所以这里的定向 IP 如果用户有自己的卡并绑定了对应的公网服务器即可使用。 对于移动联通目前并没有相关的限制,可以任意发到公网 IP。电信对 IP 的限制不光是 UDP 也会对 TCP 端发送进行限制。
我们要连接服务器,需要首先设置 APN。那么这里的 APN 就是需要连接 到华为的地址上来。所以首先第一步先去激活 PDP,让模块具备发数据的基础
NB-IOT BC28连接阿里云服务器发数据。_第3张图片
通过调节成功之后呢,图片上会出现模块注册到服务器所分配的 IP 地址,这个就是和调试 2G 模块是一个道理。所以熟悉 2G 模块, 再来调试 NB-IOT 其实并没那么复杂。

NB-IOT BC28连接阿里云服务器发数据。_第4张图片
在这里设置阿里云的IP地址和 端口号。 端口号这里需要大家在服务器上打开一个UDP端口,并设置开放状态,具体大家也是去看阿里云的手册=。=这里我已经在阿里云上部署了一个程序,在文章的最后分享给大家,当然这类转发程序网上有很多,这个并不是很好。

当然 UDP 是无连接模式。如果你服务器 不存在或者有问题,他也会显示连接 OK 的,既然无需连接那么建立一个UDP的通话很简单: 1. Create a socket 2.Send a message 反正我不管他连没连上,我就往这个IP地址发消息就是了,剩下的我就不管了,类似于写信。
NB-IOT BC28连接阿里云服务器发数据。_第5张图片
大家注意这里发送的都是十六进制的数据,并且我在测试的时候全部使用指令来发送,左边的Send不知为何不管用,还有一点我的AT+NSOST=1, 第一个<> 里不一定非得是1 0,1,2都可以的。

  第三步:数据在阿里云上显示

在阿里云上部署如下程序。

#include
#include
#include
#include
#include
#include
#include
#include

#define SERV_PORT 3001

int main()
{
int sock_fd;
int recv_num;
int send_num;
int client_len;
char recv_buf[20];
struct sockaddr_in addr_serv;
struct sockaddr_in addr_client;
sock_fd = socket(AF_INET,SOCK_DGRAM,0);
if(sock_fd < 0){
perror(“socket”);
exit(1);
}else{

printf(“sock successful\n”);
}
memset(&addr_serv,0,sizeof(struct sockaddr_in));
addr_serv.sin_family = AF_INET;
addr_serv.sin_port = htons(SERV_PORT);
addr_serv.sin_addr.s_addr = htonl(INADDR_ANY);
client_len = sizeof(struct sockaddr_in);

if(bind(sock_fd,(struct sockaddr *)&addr_serv,sizeof(struct sockaddr_in))<0 ){
perror(“bind”);
exit(1);
}else{

printf(“bind success\n”);
}
while(1){
printf(“begin recv:\n”);
recv_num = recvfrom(sock_fd,recv_buf,sizeof(recv_buf),0,(struct sockaddr *)&addr_client,&client_len);
if(recv_num < 0){
printf(“bad\n”);
perror(“again recvfrom”);
exit(1);
}else{
recv_buf[recv_num]=’\0’;
printf(“recv success:%s\n”,recv_buf);
}
printf(“begin send:\n”);
send_num = sendto(sock_fd,recv_buf,recv_num,0,(struct sockaddr *)&addr_client,client_len);
if(send_num < 0){
perror(“sendto”);
exit(1);
}else{
printf(“send successful\n”);
}
}
close(sock_fd);
return 0;
}

运行后是这样:NB-IOT BC28连接阿里云服务器发数据。_第6张图片
收到数据是这样:
NB-IOT BC28连接阿里云服务器发数据。_第7张图片

你可能感兴趣的:(NB-IOT)