资讯详情

NB-IOT联网通信

概述:

1.了解NB-IOT

2.掌握NB-IOT模块AT组网指令

3.掌握NB-IOT数据传输方法

4.掌握Flash Programmer使用代码烧写工具

5.上报云平台连接数据

NB-IOT技术简介

NB-IoT窄带物联网的全称(Narrow Band IOT),建在蜂窝网络上,只消耗180左右KHz可直接部署的带宽GSM网络、UMTS网络或LTE降低部署成本,实现网络平稳升级。

NB-IoT是IoT支持广域网蜂窝数据连接的新兴技术领域。NB-IoT支持待机时间长、网络连接要求高的设备的高效连接。

LPWAN与NB-IOT

物联网通信有很多种,从传输距离可以分为两类。

一种是短距离通信技术,如zigbee、Wi-FI、Bluetooth、Z-wave目前各自领域的应用非常成熟。

一种是长距离无线通信技术和宽带广域网,如电信CDMA、移动联通3G4G无线蜂窝通信和低功耗广域网LPWAN

目前主流LPWAN可分为两类:一类是在非授权频段工作的技术,如:lora、sigfox等,自定义实现。lora美国有技术标准Semtech研发,sigfox技术标准由法国开发。由于授权频段与中国的冲突,我没有获得授权。一是授权频段,如NB-IOT、eMTC等。

NB-IOT、eMTC与lora对比技术参数

NB-IOT的14个频段

NB-IOT网络体系架构

(1)NB-IoT终端UE(UserEquipment):应用层采用CoAP,通过空口Uu连接到基站。Uu口是终端UE与eNodeB基站之间的接口可支持1.4MHz至20MHz可变带宽。 (2)eNodeB(evolvedNodeB,E-UTRAN基站):主要承担空口接入处理、社区管理等相关功能S1-lite接口与IoT连接核心网络,将非接入层数据转发给高层网元。 (3)EPC核心网(EvolvedPacketCorenetwork):承担与终端非接入层交互的功能,并将IoT转发业务相关数据IoT处理平台。同样,它也可以在这里使用NB独立组网,也可以和LTE共享核心网络。 (4)IoT平台:汇聚各种接人网获得的平台:IoT数据,并根据不同类型转发到相应的业务应用程序进行处理。 (5)应用服务器AP(AppServer):是IoT数据的最终收集点,根据客户的需要进行数据处理。应用程序服务器通过HTTP/HTTPs和平台通信,通过调用平台开放API控制设备。平台将设备报告的数据推送到应用服务器。 终端UE一般用于物联网云平台之间CoAP通信物联网专用应用层协议主要考虑UE硬件资源配置一般很低,不适合使用HTTP/HTTPs等待复杂协议。 物联网云平台和第三方应用服务器AP两者之间,由于性能强,应考虑代管、安全等因素,一般使用HTTP/HTTPs应用层协议。

实验芯片

利尔达NB基于86系列模块HISILICONHi2110的Boudica该模块是世界领先的芯片开发商NB-IoT符合3的无线通信模块GPP标准,支持Band1、Band3、Band5、Band8、Band20、Band不同频段的模块具有体积小、功耗低、传输距离长、抗干扰能力强等特点。

NB86-G模块工作模式及相关技术

1.模块工作时默认模式 (1)连接态(Connected) 在这种状态下,数据可以发送和接收,模块注册到网络后处于这种状态。无数据交互超过这一点 不活动定时器计数时间后会进入Idle时间由核心网络确定,范围为1~30m (2)空闲态(Idle) 在这种状态下,下行数据可以接收,无数据交互将进入一段时间以上PSM模式(Activetimer)T3324控制0~1160s。 (3)节能模式(PSM) 在这种状态下,终端处于休眠模式,几乎关机,功耗很低。PSM在此期间,终端不需要寻呼,但终端仍在网络中注册,但信令无法到达,无法收到下行数据。默认情况下,功率很小m核心网配置时间,TAU(扩展)定时器T3412控制范围最大320h.默认为54m。

NB-IOT AT命令

AT命令用于控制TE(Terminal Equipment,终端设备)和 NB-IOT 模块之间的交互规则。

首先,打开串口助手,选择正确的COM设置波特率9600,数据位8None,停止位1,无流控,无输入"AT"点击发送返回OK说明模块正常.

二、查询IMEI号码(设备识别)AT CIMI

三、查询当前信号质量 AT CSQ

四、查询制造商 AT CGMI、查询模块型号 AT CGMM、查询固件版本 AT CGMR、

开启NB-IOT AT CFUN=1.查询连接状态 AT CSCON=0; 网络注册 AT CEREG=2 ;打开下行数据;通知 AT NNMI=一、连接核心网 AT CGATT=1.目前中国电信运营商NB-IOT云平台只 支持coap接入。

NB-IOT对接流程

NB-IOT案例智能路灯系统

任务要求:将NB-IOT接入云平台,将光传感器数据上传到云平台

一、main.c 中间,系统时钟已经初始化,GPIO 初始化、ADC采集初始化,USART1 和USART2两个串口的初始化用了串口中断同时移值了oled 显示屏和按键初始化和事件处理代码,重写了USART1的printf重定向代码,写好了 control_light()方法用于控制灯,automatic_mode()方法用于按照预设好的光照度阀值自动控制灯的开与关。

//用于实现USART1 printf()输出
int fputc(int ch, FILE *f)
{ 
  HAL_UART_Transmit(&huart1, (uint8_t*)&ch, 1, 10);
  return(ch);
}

float get_illumination_value()//获取光照强度数值
{
	float adcValue;
	float illumination_value;

	
	//启动ADC
	HAL_ADC_Start(&hadc);  
	
	//等待采集完成
	HAL_ADC_PollForConversion(&hadc,10); 
	
	//获取ADC采集的数据
	adcValue = HAL_ADC_GetValue(&hadc);

	//将采集到的数据转换为电压值(单位:v)
	adcValue = adcValue * 3.3 / 4096.0;

	//将电压值转换为光照强度
	illumination_value = pow(10,((1.78-log10(33/adcValue -10))/0.6));
	
	//在OLED上显示数据
	oled_display_illumination(illumination_value);
	
	//停止ADC
	HAL_ADC_Stop(&hadc); 
	
	return illumination_value;
}

void control_light(uint8_t status)//控制灯的亮灭
{
	if(status == LIGHT_OPEN)
	{
		HAL_GPIO_WritePin(Light_GPIO_Port, Light_Pin, GPIO_PIN_SET);
		oled_display_light_status(LIGHT_OPEN);
	}
	else
	{
		HAL_GPIO_WritePin(Light_GPIO_Port, Light_Pin, GPIO_PIN_RESET);
		oled_display_light_status(LIGHT_CLOSE);
	}
}

void int main()
{
	//等待NB模块启动
	wait_nbiot_start();

	//NB模块配置
	nbiot_config();

    //连接服务器
	link_server();
    while(1)
    {
		//1.5S采集并发送一次数据
		if(i++ > 14)
		{
			i = 0;
			//获取光照值
			ill_value = (int)get_illumination_value();
			
			//自动模式下,光照强度小于3会自动开灯
			if(mod_flag == 1)
			{
				automatic_mode(ill_value, &lightStatus);
			}
			
			if(link_flag < 2)
			{
				//获取时间
				get_time_from_server();

			}
			else if(link_flag == 2)
			{
				//发送数据到云平台
				send_data_to_cloud( ill_value, lightStatus);
				send_count++;
			}	
		}
    }
}

        NB-IOT相关配置代码

void wait_nbiot_start(void)//等待NB模块启动
{
	int timeOut = 0;
	printf("waite NBIOT Start\r\n");
	while(1)
	{
		HAL_Delay(1000);
		if(wait_answer("OK") == 0)//启动会返回OK 接收到有效字符串
		{
			printf("NBIOT Start\r\n");
			break;
		}
		if(timeOut > 10)//计数值大于10超时
		{
			timeOut = 0;
			nb_reset();//复位
			printf("waite NBIOT Start\r\n");
		}
		timeOut++;//执行计数
	}
	
}

void nbiot_config(void)  //NB模块配置
{  //开启NB-IoT芯片所有功能    
    send_AT_command("AT+CFUN=%d\r\n",1);   
    wait_answer("OK");//注意:每一步AT指令配置要等待配置成功的反馈之后再进行下一步配置!       
    //查询信号连接状态
    send_AT_command("AT+CSCON=%d\r\n", 0);  
    wait_answer("OK");  //注意:每一步AT指令配置要等待配置成功的反馈之后再进行下一步配置!      
    //打开网络注册和位置信息的主动上报结果码 0关闭 1 注册并上报 2 注册并上报位置信息
    send_AT_command("AT+CEREG=%d\r\n", 2);  
    wait_answer("OK");   //注意:每一步AT指令配置要等待配置成功的反馈之后再进行下一步配置!     
    //开启下行数据通知
    send_AT_command("AT+NNMI=%d\r\n", 1);  
    wait_answer("OK");    //注意:每一步AT指令配置要等待配置成功的反馈之后再进行下一步配置!    
    //打开与核心网的连接  1是打开  0是关闭
    send_AT_command("AT+CGATT=%d\r\n", 1);  
    wait_answer("OK");  //注意:每一步AT指令配置要等待配置成功的反馈之后再进行下一步配置!
}

void link_server(void)// NB模块连接服务器
{
	//link sever
 send_AT_command("AT+NCDP=%s,%d\r\n", "117.60.157.137", 5683);  
    wait_answer("OK"); 

	//wait OK

}

void send_data_to_cloud(int illumination,uint8_t light_status)//NB模块发送数据到云平台
{
	uint8_t send_buf[128] = {0};
	
	RTC_TimeTypeDef gTime;
	RTC_DateTypeDef gDate;
	
	//时间校准
	HAL_RTC_GetTime(&hrtc, &gTime, RTC_FORMAT_BIN);
	HAL_RTC_GetDate(&hrtc, &gDate, RTC_FORMAT_BIN);
	//time_cal(1, &gDate.Year, &gDate.Month, &gDate.Date, &gTime.Hours);
	
	
	
	sprintf((char *)send_buf, "\
%02X%02X%02X\
%02X%02X%02X\
%02X%02X\
%02X%02X%02X%02X%02X%02X%02X%02X\
",
	0x4a,0x00,0x00,//固定0x4a 固定值 0 没有后续消息 0 
	0x01,(illumination & 0xff00) >> 4, (illumination & 0x00ff),//数据服务 光照度0x01 serviceid 
	0x02, light_status,//0x02 光照度值
	0x04,20, gDate.Year, gDate.Month, gDate.Date, gTime.Hours, gTime.Minutes, gTime.Seconds);
//报告时间 serviceid 0x40 20时间参数  年 月 日 时 分 秒 
	printf("send sensors data:AT+NMGS=%d,%s\r\n", (strlen((char *)send_buf)/2), send_buf);
	send_AT_command("AT+NMGS=%d,%s\r\n", (strlen((char *)send_buf)/2), send_buf);

}

二、使用Flash Programmer烧写工具进行hex烧写,选择串口和波特率。

 

 

 模块上电:

 

标签: lot连接器nb无线传输压力变送器

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台