单片机毕业设计 NBIOT远程通信系统


1 简介

Hi,大家好,NBIOT是近几年不比较火的远程通信模块,是物联网的重要技术,今天学长向大家详细介绍什么是NBIOT,NBIOT模块能做什么,以及但单片机如何使用NBIOT模块

单片机与NBIOT通信模块

大家可用于 课程设计 或 毕业设计

2 NBIOT 简介

基于蜂窝的窄带物联网(Narrow Band Internet of Things, NB-IoT)成为万物互联网络的一个重要分支。NB-IoT构建于蜂窝网络,只消耗大约180KHz的带宽,可直接部署于GSM网络、UMTS网络或LTE网络,以降低部署成本、实现平滑升级。

NB-IoT是IoT领域一个新兴的技术,支持低功耗设备在广域网的蜂窝数据连接,也被叫作低功耗广域网(LPWAN)。NB-IoT支持待机时间长、对网络连接要求较高设备的高效连接。据说NB-IoT设备电池寿命可以提高至至少10年,同时还能提供非常全面的室内蜂窝数据连接覆盖。

重点:NBIOT是一种通信技术,是用于通信的!单片机通过该模块可以与外接互联网进行数据交互!

2.1 NBIOT 的特点

  • 频谱窄:200kHz;
  • 终端发射窄带信号提升了信号的功率谱密度,提升了信号的覆盖增益,并且提升了频谱利用效率;
  • 相同的数据包重复传输也可获得更好的覆盖增益;
  • 另外该技术降低了终端的激活比,降低了终端基带的复杂度。
  • NB-IOT四大能力:广覆盖,海量连接,更低功耗,更低芯片成本。
  • NB-IOT基于现有蜂窝网络的技术,可以通过升级现网来快速支持行业市场需求,成为GUL网络上的第四种模式。

2.2 NBIOT 的优点

  • NB-IOT与其他的LPWA技术LoRa,Sigfox的比较优势
  • 可以重用现网资源,支持广覆盖
  • 标准化技术,支持切换移动性好。产业链丰富
  • 20dB+增益(vs GSM)
  • 授权频谱,抗干扰性好

2.3 NBIOT能做什么

  • 智能水表
  • 智能停车
  • 宠物智能跟踪
  • 智能自行车
  • 智能烟雾检测器
  • 智能马桶
  • 智能售货机
  • 等等等等

NBIOT 模块使用

这里以市面上常见的NB260模块为例:
在这里插入图片描述
NB260是基于移远NB-IOT模块:BC26的小系统板,板载了IPEX射频天线座,5V转3.3V LDO稳压电源,MicroSIM卡座,ESD防护电路,开机电路等,即插即用。

NB260小系统板采用2.54标准间距排针,引出BC26模块的全部可用GPIO口,整板尺寸仅 25mm*33.02mm,便于嵌入到客户产品中。

支持的频段
在这里插入图片描述

引脚信号

NB260引脚排列如下图所示。

CON1(P1)右侧一列信号为:GND,VIN,TXD,RXD,PEN,RST,EINT,NRI(NRI电压域1.8V,若用作唤醒MCU,可以简单串联1K电阻然后上拉后与MCU的GPIO口相连。),该列信号还与NB101,NB200兼容,可以相互替换。

在这里插入图片描述

SIM卡槽

NB260采用自弹式MicroSIM卡槽,注意SIM卡插入方向为:卡缺口朝外。

工作模式

在这里插入图片描述

4 实现效果

(以下为学长作品)
stm32 + NBIOT模块构建的家庭烟雾报警系统(智能家居的一部分)
在这里插入图片描述

在这里插入图片描述

NBIOT指纹签到系统:

在这里插入图片描述

5 STM32 驱动NBIOT模块

#include"nbiot.h"
/***************************************************************************************
函数名:send_NB_IoT
功  能:发送数据到NB模块
参  数:cmd 要发送的数据或者命令
返回值:
例  子:
说  明: 
****************************************************************************************/
void send_NB_IoT(u8 *cmd)
{
	
	while(*cmd!='\0')
	{
	  USART_SendData(USART2,*cmd++);
	  while(USART_GetFlagStatus(USART2,USART_FLAG_TXE)==Bit_RESET);	//发送数据结束
	}
}

/***************************************************************************************
函数名:NB_IoT_ack_chack
功  能://检查NB模块应答是否符合预期   
参  数:
返回值:
例  子:
说  明:  memset(a, 0, sizeof a);  //清空数组  
****************************************************************************************/
u8 NB_IoT_ack_chack(u8 *str)
{
	  delay_ms(10);
		if(USART2_RX_STA!=0)
		{
			 USART2_RX_STA=0;
			   
			 if(strstr((const char*)USART2_RX_BUF,(const char*)str))//符合预期
       { 
			     memset(USART2_RX_BUF,0, sizeof USART2_RX_BUF);    
  				 return 0;
			 }
			 else //不符合预期  
       { 
			     memset(USART2_RX_BUF,0, sizeof USART2_RX_BUF);    
			     return 1;
			 }                             	
		} 
		else 
		{ 
			  memset(USART2_RX_BUF,0, sizeof USART2_RX_BUF);  //清空数组  		 
		    return  1;
		}
}
u8 NB_IotConect()
{
	u8 x=1;
	cmd1:send_NB_IoT("AT\r\n");//  指令测试
	    if(!NB_IoT_ack_chack("OK"))  x=0;
	    else   goto cmd1;
	return x;
}
/***************************************************************************************
函数名:NB_IoT_ZDFW
功  能:自动附着网络
参  数:
返回值:
例  子:
说  明:
****************************************************************************************/
u8 NB_IoT_ZDFW()
{
	    u8  x=0;
cmd1: send_NB_IoT("AT+NCONFIG=AUTOCONNECT,TRUE\r\n") ;  
			if(!NB_IoT_ack_chack("OK"))  x++ ;
	    else   goto cmd1;
cmd2: send_NB_IoT("AT+CFUN=1\r\n") ;     
			if(!NB_IoT_ack_chack("OK"))  x++ ;
	    else   goto cmd2;		
cmd3: send_NB_IoT("AT+NRB\r\n") ; 
	    if(!NB_IoT_ack_chack("REBOOTING"))  x++ ;
	    else   goto cmd3;	
		//确认自动附网
cmd4:	send_NB_IoT("AT+NBAND?\r\n");  
			if(!NB_IoT_ack_chack("+NBAND:5"))  x++ ;
			else   goto cmd4;		
cmd5: send_NB_IoT("AT+CFUN?\r\n"); 
			if(!NB_IoT_ack_chack("+CFUN:1"))   x++ ;
			else   goto cmd5;		
cmd6: send_NB_IoT("AT+CIMI\r\n");
			if(!NB_IoT_ack_chack("460113007651563")) x++ ;
			else   goto cmd6;		
cmd7:send_NB_IoT("AT+CSQ\r\n");  //确认信号质量第一个参数应该 1-30 之间
			delay_ms(10);
			if(USART2_RX_BUF[7]>'0'&&USART2_RX_BUF[7]<'3')
			{
				memset(USART2_RX_BUF,0, sizeof USART2_RX_BUF); 
				USART2_RX_STA=0;
				
  			x++ ;
		  }
			else 
			{
				memset(USART2_RX_BUF,0, sizeof USART2_RX_BUF); 
				USART2_RX_STA=0;
				goto cmd7;
		  }	
cmd8: send_NB_IoT("AT+CGATT?\r\n");
			if(!NB_IoT_ack_chack("+CGATT:1")) x++ ;
			else   goto cmd8;
cmd9:send_NB_IoT("AT+CEREG?\r\n");
			if(!NB_IoT_ack_chack("+CEREG:0,1")) x++ ;
			else   goto cmd9;
cmd10:send_NB_IoT("AT+CSCON?\r\n");
		  if(!NB_IoT_ack_chack("+CSCON:0")) x++ ;
		  else   goto cmd10;  		 
cmd11:send_NB_IoT("AT+CGPADDR\r\n"); 
      if(!NB_IoT_ack_chack("+CGPADDR:0,10.")) x++ ;
	 	  else   goto cmd11; 
	    if(x==11)  return 0;//自动附着网络成功
	    else       return 1;//自动附网失败
	
}
/***************************************************************************************
函数名:NB_IoT_conect_COAP
功  能:COAP连接
参  数:
返回值:
例  子:
说  明:
****************************************************************************************/
u8 NB_IoT_conect_COAP()
{
	    u8  x=0;
cmd1: send_NB_IoT("AT+CGSN=1\r\n") ;  
			if(!NB_IoT_ack_chack("+CGSN:356566078248721"))  x++ ;
	    else   goto cmd1;
cmd2: send_NB_IoT("AT+NCDP=180.101.147.115,5683\r\n") ;     
			if(!NB_IoT_ack_chack("OK"))  x++ ;
	    else   goto cmd2;	
cmd3: send_NB_IoT("AT+NRB\r\n") ; 
	    if(!NB_IoT_ack_chack("REBOOTING"))  x++ ;
	    else   goto cmd3;	
cmd4:	send_NB_IoT("AT+NCDP?\r\n");  
			if(!NB_IoT_ack_chack("+NCDP:180.101.147.115,5683"))  x++ ;
			else   goto cmd4;			
cmd5: send_NB_IoT("AT+NSMI=1\r\n"); 
			if(!NB_IoT_ack_chack("OK"))   x++ ;
			else   goto cmd5;		
cmd6: send_NB_IoT("AT+NNMI=2\r\n");
			if(!NB_IoT_ack_chack("OK")) x++ ;
			else   goto cmd6;
cmd7:			send_NB_IoT("AT+NMGS=3,000102\r\n");  
      if(!NB_IoT_ack_chack("OK")) x++ ;
			else   goto cmd7;
	    if(x==7)  return 0;//COAP连接成功
	    else      return 1; //COAP连接失败
}
/***************************************************************************************
函数名:NBIoTInit
功  能:NBIoT初始化
参  数:
返回值:
例  子:
说  明:
****************************************************************************************/
void	NBIoTInit()
	
	{
		      NB_IotConect();
		      NB_IoT_ZDFW();
		      NB_IoT_conect_COAP();
//		      send_NB_IoT("AT+NMGS=10,53544d33325f4e423735\r\n"); //发送设备名字:STM32_NB75
//		    POINT_COLOR=BLUE;	//设置字体为蓝色 
//				LCD_ShowString(50,80 ,250,16,16,"NBIoT conecting...");
//				if (!NB_IotConect())           LCD_ShowString(50,80 ,250,16,16,"NB_IotConect success!");
//				else                          LCD_ShowString(50,80 ,250,16,16,"NB_IotConect error!!");
//				LCD_ShowString(50,100 ,250,16,16,"NBIoT Net conecting...");
//				if(!NB_IoT_ZDFW())     		    LCD_ShowString(50,100,250,16,16,"NBIoT ZDFW success!                  ");					 //自动附着网络
//				else                          LCD_ShowString(50,100,250,16,16,"NBIoT ZDFW error!                     "); 
//				LCD_ShowString(50,120 ,250,16,16,"NBIoT COAP conecting...");
//				if(!NB_IoT_conect_COAP())			LCD_ShowString(50,120,250,16,16,"NBIoT COAP success!        ");//COAP连接
//				else                          LCD_ShowString(50,120,250,16,16,"NBIoT COAP error!         ");
//		     send_NB_IoT("AT+NMGS=2,0005\r\n");  
	}

6 最后

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 基于NBIOT的数据采集系统,使用MQTT协议,具体的设计和实现如下: 1. 系统设计 系统主要包括NBIOT模块、传感器、MQTT客户端和MQTT服务器。 NBIOT模块:用于与服务器建立连接,将采集的数据上传到服务器。 传感器:用于采集环境数据,如温度、湿度、光照强度等。 MQTT客户端:用于将采集的数据发送到MQTT服务器。 MQTT服务器:用于接收和存储采集的数据,并提供数据查询接口。 2. 系统实现 2.1. 硬件连接 将NBIOT模块和传感器连接到单片机上,通过单片机的IO口读取传感器数据,并通过NBIOT模块上传数据到MQTT服务器。 2.2. MQTT协议 MQTT协议是一种轻量级的消息传输协议,具有易于实现、低带宽、低功耗等特点,非常适合NBIOT数据采集系统使用。 2.3. MQTT客户端 在单片机上实现MQTT客户端,采用MQTT协议将采集的数据发送到MQTT服务器。 2.4. MQTT服务器 选择一款支持MQTT协议的服务器,如EMQX、Mosquitto等,接收和存储采集的数据,并提供数据查询接口。 3. 系统流程 系统的流程如下: 1. 初始化NBIOT模块和传感器。 2. 建立NBIOT连接。 3. 读取传感器数据。 4. 将采集的数据通过MQTT协议发送到MQTT服务器。 5. MQTT服务器接收并存储数据。 6. 提供数据查询接口。 4. 总结 本文介绍了基于NBIOT的数据采集系统的设计和实现,使用MQTT协议进行数据传输,具有易于实现、低带宽、低功耗等特点,非常适合NBIOT数据采集系统使用。 ### 回答2: 基于NBIoT的数据采集系统的设计与实现,使用MQTT协议,可以按照以下步骤进行: 1. 系统设计:首先确定需要采集的数据类型和传感器种类。根据实际需求,设计传感器节点的数量和位置;确定MQTT服务器的搭建方式和网络拓扑结构。 2. 硬件选择:根据采集要求和传感器类型选择合适的NBIoT模块和相应的传感器。确保模块支持MQTT协议,并与传感器相兼容。 3. 系统搭建:将NBIoT模块连接到MQTT服务器,并进行相应的配置。确保模块与服务器之间建立稳定的连接。 4. 数据采集:使用合适的传感器将环境数据采集到NBIoT模块中。根据传感器数据类型,采用相应的数据处理算法对数据进行处理和优化。 5. 数据传输:NBIoT模块将采集到的数据通过MQTT协议封装为消息,发送到MQTT服务器。确保数据传输的稳定和高效。 6. 数据存储和处理:MQTT服务器接收到数据后,可以将数据存储到数据库中,以便后续的数据分析和处理。根据实际需求,设计合适的数据处理算法,如实时监测、统计分析等。 7. 数据展示:通过前端界面或移动应用程序,将采集到的数据进行展示和分析。可以使用各种图表、表格等形式实现可视化效果,方便用户查看和分析数据。 8. 系统优化:根据实际应用中的问题和反馈,对系统进行优化和改进。例如,提升数据采集精度、减少能耗、增强系统安全性等方面进行优化。 综上所述,基于NBIoT的数据采集系统的设计与实现,使用MQTT协议,涉及硬件选择、系统搭建、数据采集、数据传输、数据存储和处理、数据展示等多个方面。通过合理的设计和优化,可以实现稳定、高效的数据采集与处理,满足用户的需求。 ### 回答3: 基于NBIoT的数据采集系统设计与实现使用MQTT协议能够实现高效、可靠的数据传输。首先,在设计系统时需要考虑到NBIoT的特点,如低能耗、广域覆盖等,以满足物联网应用的需求。 在系统设计方面,我们需要考虑以下几个方面: 1. 设备连接:选择合适的NB模块与传感器节点连接,确保节点能够通过NBIoT网络连接到云平台。 2. 数据采集:合理安排传感器节点的布局,确保覆盖范围内的数据能够准确采集。采集的数据可以包括温度、湿度、光照强度等环境参数,并将其转化为数字信号。 3. MQTT协议:选择使用MQTT协议实现设备与云平台之间的通信。该协议可以保证设备和云平台之间的高效、可靠地连接,并提供灵活的订阅发布机制。设备将采集到的数据通过MQTT协议上传到云平台,在云平台上进行数据处理、存储和分析。 4. 云平台:设计合适的云平台架构,能够接收、处理和存储设备上传的数据,并提供相关的服务接口。云平台可以根据应用需求,对数据进行实时分析、实时监控和数据可视化等处理。 5. 安全性和隐私保护:在数据采集和传输过程中,要确保数据的安全性和隐私保护。可以采用数据加密、身份验证等技术来保护数据的安全性。 在系统实现方面,需要完成以下几个步骤: 1. 硬件搭建:根据设计方案,搭建传感器节点和NB模块的硬件连接。 2. MQTT通信:调用相关的MQTT库或框架,来实现设备与云平台之间的MQTT通信。通过MQTT协议,设备可以向指定的主题发布数据,以及订阅云平台发布的命令和配置信息。 3. 云平台搭建:配置和部署云平台,包括消息代理、订阅发布机制、数据存储和处理模块等。确保云平台能够接收并处理设备上传的数据。 4. 数据处理与展示:根据应用需求,对云平台接收到的数据进行实时处理和展示。可以使用数据可视化工具,生成图表、报表等形式的数据展示,以方便用户分析和决策。 综上所述,基于NBIoT的数据采集系统设计与实现使用MQTT协议,可以实现设备与云平台之间的高效、可靠通信,满足物联网应用的需求。通过该系统,可以实现物联网设备数据的采集、传输、处理和展示,为用户提供更好的数据服务。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值