我是靠谱客的博主 安静外套,最近开发中收集的这篇文章主要介绍NB-IOT开发笔记,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

NB-IOT开发笔记

名词解释:

南向设备:开发者自行开发的终端硬件设备(包含多个传感器和MCU)。

北向应用:开发者自行开发的服务端应用(基于华为OceanConnect物联网平台提供的RESTful接口)。

NB-IoT:窄带物联网,华为等公司主推的物联网通讯用蜂巢网络。

NB芯片/模组:类似于3G/4G通信模组,将设备端数据打包发送到指定平台的硬件模块。

SoftRadio:用于模拟NB模组、基站、核心网的PC端软件,可用于在缺乏NB模组和NB实网环境时的设备对接调试。
OceanConnect:华为物联网全联接平台,南向设备和北向应用通过该平台交换数据和信令。

设备Profile文件:描述设备“是什么”、“能干什么”的json格式文件,上传到OceanConnect平台(上传时是zip包格式),设备绑定平台和提供服务的关键配置文件。

编解码插件:用来对NB设备上报的数据进行解码,同时对下发给NB设备的信令进行编码的插件,对接前需上传到OceanConnect平台。

测试环境

华为云平台,NB-iot,EVB-m1开发板,智慧路灯项目

出现的问题

  1. 华为IoT平台北向JAVA API Demo导入

    导入src包后,没有消失报错
    在这里插入图片描述
    使用JAVA 1.8 新建工程即可解决
    在这里插入图片描述

  2. Keil5编译失败

    超出内存

    破解程序不完全导致使用受限制

    破解时,注册机和keil5都要用管理员权限打开


开发笔记

工程目录 在这里插入图片描述

下面介绍用到的主要文件:

main.c 地球人都知道啥意思

bc95.c bc95的AT操作函数,封装好的,直接用

los_nb_api.c NB做好的api ,可以调用bc95.c函数,使用更方便

nb_iot_demo.c 接收数据,控制硬件

nb_iot_cmd_ioctl.c 采集数据,发送数据

主要函数:

main.c

creat_main_task()   //调用初始化

VOID main_task(VOID)  //执行初始化
{	
	
		user_hw_init(); //用户设备初始化
#if defined USE_NB_NEUL95
	#define AT_DTLS 0
#if AT_DTLS
    sec_param_s sec;
    sec.pskid = "8677250300xxxxx";   你自己的
    sec.psk = "d1e1be0c05ac5b8c78ce1xxxxxxxxxx";    你自己的
#endif
    printf("rn=====================================================");
    printf("rnSTEP1: Init NB Module( NB Init )");
    printf("rn=====================================================rn");
#if AT_DTLS
    los_nb_init((const int8_t*)"49.4.85.xxx",(const int8_t*)"5684",&sec);    你自己的平台
#else
    los_nb_init((const int8_t*)"49.4.85.xxx",(const int8_t*)"5683",NULL);    你自己的平台
#endif
    los_nb_notify("+NNMI:",strlen("+NNMI:"),nb_cmd_data_ioctl,OC_cmd_match);   接受数据的函数
    LOS_TaskDelay(3000);    接受时延
    printf("rn=====================================================");
    printf("rnSTEP3: Report Data to Server( NB Report )");
    printf("rn=====================================================rn");
		
    nb_iot_entry();//   开始采集数据,上传数据
		
#endif
}

los_nb_api.c

int los_nb_notify(char* featurestr,int cmdlen, oob_callback callback, oob_cmd_match cmd_match)  
    //接受数据
{
    if(featurestr == NULL ||cmdlen <= 0 || cmdlen >= OOB_CMD_LEN - 1)
        return -1;
    return at.oob_register(featurestr,cmdlen, callback,cmd_match);
}

nb_iot_cmd_ioctl.c

int32_t nb_cmd_data_ioctl(void* arg, int8_t  * buf, int32_t len)   //控制灯
{
		int readlen = 0;
		char tmpbuf[1064] = {0};
    if (NULL == buf || len <= 0)
    {
        AT_LOG("param invailed!");
        return -1;
    }
				sscanf((char *)buf,"rn+NNMI:%d,%srn",&readlen,tmpbuf);
				memset(bc95_net_data.net_nmgr, 0, 30);
    if (readlen > 0)
    {  
				HexStrToStr((const unsigned char *)tmpbuf, (unsigned char *)bc95_net_data.net_nmgr,readlen*2);
    }
				AT_LOG("cmd is:%sn",bc95_net_data.net_nmgr);
		if(strcmp(bc95_net_data.net_nmgr,"ON")==0) //开灯
			{	
					HAL_GPIO_WritePin(Light_GPIO_Port,Light_Pin,GPIO_PIN_RESET);    //输出低电平
			}
		if(strcmp(bc95_net_data.net_nmgr,"OFF")==0) //关灯
			{	
					HAL_GPIO_WritePin(Light_GPIO_Port,Light_Pin,GPIO_PIN_SET);  // 输出高电平
			}
}

nb_iot_demo.c

VOID data_collection_task(VOID)
{
	UINT32 uwRet = LOS_OK;
	
	short int Lux;   
	Init_BH1750();									//初始化传感器
	OLED_ShowString(30,2,"Lux:",16);
	while (1)
  {

		printf("This is data_collection_task !rn");
		Lux=(int)Convert_BH1750();		//采集传感器信息
	  printf("rn******************************BH1750 Value is  %drn",Lux);
		
		sprintf(BH1750_send.Lux, "%5d", Lux);	  //把数据放到结构体
		
		OLED_ShowString(60,2,(uint8_t*)BH1750_send.Lux,16);

		uwRet=LOS_TaskDelay(1000);
		if(uwRet !=LOS_OK)
		return;
	
  }
}

VOID data_report_task(VOID)
{
	UINT32 uwRet = LOS_OK;

		while(1)
	{

		if(los_nb_report((const char*)(&BH1750_send),sizeof(BH1750_send))>=0)
            //发送数据到平台
				printf("ocean_send_data OK!n");    
		else 
			{
				printf("ocean_send_data Fail!n"); 
			}

	  uwRet=LOS_TaskDelay(1000);
		if(uwRet !=LOS_OK)
		return;
	}
}

void nb_iot_entry(void)   //调用采集数据
{
    UINT32 uwRet = LOS_OK;

    uwRet = creat_data_collection_task();
    if (uwRet != LOS_OK)
    {
        return ;
    }
		uwRet = creat_data_report_task();
    if (uwRet != LOS_OK)
    {
        return ;
    }
}

最后

以上就是安静外套为你收集整理的NB-IOT开发笔记的全部内容,希望文章能够帮你解决NB-IOT开发笔记所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(94)

评论列表共有 0 条评论

立即
投稿
返回
顶部