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开发板,智慧路灯项目
出现的问题
-
华为IoT平台北向JAVA API Demo导入
导入src包后,没有消失报错
使用JAVA 1.8 新建工程即可解决
-
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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32creat_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
1
2
3
4
5
6
7
8int 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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26int32_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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62VOID 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开发笔记内容请搜索靠谱客的其他文章。
发表评论 取消回复