您可以捐助,支持我们的公益事业。

1元 10元 50元





认证码:  验证码,看不清楚?请点击刷新验证码 必填



  求知 文章 文库 Lib 视频 iPerson 课程 认证 咨询 工具 讲座 Model Center   Code  
会员   
   
 
     
   
 订阅
  捐助
利用NB-IoT技术实现数据上传至阿里云
 
作者:云上笛暮
   次浏览      
2020-4-7
 
编辑推荐:
本文主要介绍如何实现利用NB-IoT技术实现基于UDP协议的数据传输,希望对您能有所帮助。
本文来自于CSDN,由火龙果软件Alice编辑推荐。

硬件平台:BC95-B5 ,在淘宝上购买即可,可以直接购买模块,然后自己利用USB转串口接到PC上。也可以购买有MCU地板的,本人购买的是基于MSP430地板的开发板,不需要自己接USB转串口工具,当然价格会贵一些。

软件平台:由于本文只是实现简单的数据收发,不需要跑MCU程序,所以主要用的工具是NB-IoT QNavigator 工具,读者可去网上自行下载。之前我使用串口直接发AT指令,比较麻烦,因为在正式使用nb模块发数据之前,需要一些指令进行配置。使用?NB-IoT QNavigator ,该软件内置了很多指令,比如创建套接字这些指令,都是自动配置好的,相当方便。

云平台:阿里云。去阿里云官网购买一个最便宜的ECS,预装ubuntu14,当然也可以选择其他系统。使用云服务器的一个好处就是只要购买看ECS,以后可以随便更换系统,几分钟就可以搞定。主要在购买的时候,选择专有网络,不要选择经典网络,这是方便后面安全组的设置。

NB专用卡:可以通过电信运营商购买,移动也有。

在上面的条件都满足下来后,可以进行下面的操作:

SP1:在阿里云上运行一个UDP服务器程序(参见博客后面),主要实现接受数据并将数据返回的功能,需要设置服务端的UDP端口号,我这里设置为3001,然后使用gcc指令编译程序。在运行程序之前,需要先在阿里云的ECS的安全组中将3001端口放行(参见图1),如何添加安全组规则可以参考阿里云的安全组相关文档。设置好安全组之后,运行UDP服务器程序。这里可以先使用tcp/udp socket调试工具,建立一个UDP客户端(参见图2),选择ECS的IP地址和你所设置的端口号,进行数据测试,如果通信成功,说明服务器运行正常,可进行下一步操作。

图1安全组设置

图2udp调试

SP2:将开发板通过USB线插入PC,打开?NB-IoT QNavigator ,点击Connect to module.就会自动连接。这一步会出现很多问题,这些问题多数与你的模块所在地有没有信号覆盖有关,如果你所在地没有基站,你的模块就无法附着,也就无法通信。初始化完成之后,可以看到模块的相关信息和卡的相关信息。如图3。如果一直无法注册到网络,试一试换一个位置,或者将开发板举高一点,因为这一步需要有NB信覆盖。

SP3:点击?NB-IoT QNavigator左侧的UDP,将阿里云服务器的IP地址和dup服务器的端口号填入,点击连接。如图4.

连接成功后,发送数据123456789,在接收端会收到313233343536373839.数据通过NB模块将发送到阿里云服务器,然后服务器将数据发回来。

图5为实物图

至此,利用NBIoT技术完成了数据传输。

后续可以利用MCU底板设计采集数据的程序,设计云服务的数据库,提供移动开发分API接口,以及数据展现等功能。以后采用基于UDP协议的CoAP协议进行数据传输。

问题1:以后使用电信的NB卡,都需要走电信的统一平台,也就是数据不能之间发送到自己的服务器。

问题2:NB的信号目前不稳定,对NB来说,如果20秒之内没有连接成功,就进入睡眠状态,后续就无法连接。据说可以更改这个时间,具体需要去查阅资料。

附:UDP服务端程序

#include<stdio.h>
#include<sys/types.h>
#include<sys/socket.h>
#include<netinet/in.h>
#include<unistd.h>
#include<errno.h>
#include<string.h>
#include<stdlib.h>
#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 sucessful\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 sucess\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 sucess:%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 sucessful\n");
}
}
close(sock_fd);
return 0;
}

 

   
次浏览       
????

HTTP????
nginx??????
SD-WAN???
5G?????
 
????

??????????
IPv6???????
??????????
???????
????

????????
????????
???????????????
??????????
最新活动计划
LLM大模型应用与项目构建 12-26[特惠]
QT应用开发 11-21[线上]
C++高级编程 11-27[北京]
业务建模&领域驱动设计 11-15[北京]
用户研究与用户建模 11-21[北京]
SysML和EA进行系统设计建模 11-28[北京]
 
最新文章
云原生架构概述
K8S高可用集群架构实现
容器云管理之K8S集群概述
k8s-整体概述和架构
十分钟学会用docker部署微服务
最新课程
云计算、微服务与分布式架构
企业私有云原理与构建
基于Kubernetes的DevOps实践
云平台架构与应用(阿里云)
Docker部署被测系统与自动化框架实践
更多...   
成功案例
北京 云平台与微服务架构设计
通用公司GE Docker原理与实践培训
某军工研究单位 MDA(模型驱动架构)
知名消费金融公司 领域驱动设计
深圳某汽车企业 模型驱动的分析设计
更多...