初学阶段,这么大的代码量还是第一次遇到。写一点东西备忘
1.云平台的申请
2.小熊派硬件平台和NBIot模块的测试
3.NB Iot模块与云端的互联
以上三个步骤可以在小熊派附带资料中的HCIP实验手册中找到
4.代码分析
main.c中的create_work_tasks()中进入user_task.c中的creat_agenttiny_task();
user_task.c中的creat_agenttiny_task()中创建任务atiny_task_entry(void)
atiny_task_entry(void)中,由于define了USE_NB_NEUL95_NO_ATINY,即与集成好nbiot模块连接,不需要用agent tiny SDK(不同接入方式的区别详见https://support.huaweicloud.com/devg-IoT/iot_02_9997.html,此处使用第三种的OpenCPU模式:此模式下,设备只包含通信模组,模组集成 Agent Tiny SDK及运行产品逻辑。模组集成了,所以mcu不需要agent tiny)
tiny_task_entry(void)中运行nb_demo.c中demo_nbiot_only();由此进入nb_demo.c的独立逻辑。
demo_nbiot_only();
void demo_nbiot_only(void)
{
#if defined(WITH_AT_FRAMEWORK) && defined(USE_NB_NEUL95_NO_ATINY)
#define AT_DTLS 0
#if AT_DTLS
sec_param_s sec;
sec.setpsk = 1;
sec.pskid = DEV_PSKID;
sec.psk = DEV_PSK;
#endif
printf("\r\n=====================================================");
printf("\r\nSTEP1: Init NB Module( NB Init )");
printf("\r\n=====================================================\r\n");
#if AT_DTLS //是否加密,实际为否
los_nb_init((const int8_t *)OCEAN_IP, (const int8_t *)SECURITY_PORT, &sec);
LCD_Clear(WHITE);
POINT_COLOR = RED;
LCD_ShowString(40, 10, 200, 16, 24, "IoTCluB BearPi");
LCD_ShowString(50, 50, 200, 16, 24, "E53_IA1_Demo");
LCD_ShowString(10, 100, 200, 16, 16, "NCDP_IP:");
LCD_ShowString(80, 100, 200, 16, 16, OCEAN_IP);
LCD_ShowString(10, 150, 200, 16, 16, "NCDP_PORT:");
LCD_ShowString(100, 150, 200, 16, 16, SECURITY_PORT);
#else
los_nb_init((const int8_t *)OCEAN_IP, (const int8_t *)NON_SECURITY_PORT, NULL);
LCD_Clear(WHITE);
POINT_COLOR = RED;
LCD_ShowString(40, 10, 200, 16, 24, "IoTCluB BearPi");
LCD_ShowString(50, 50, 200, 16, 24, "E53_IA1_Demo");
LCD_ShowString(10, 100, 200, 16, 16, "NCDP_IP:");
LCD_ShowString(80, 100, 200, 16, 16, OCEAN_IP); //#define OCEAN_IP "49.4.85.232"
LCD_ShowString(10, 150, 200, 16, 16, "NCDP_PORT:");
LCD_ShowString(100, 150, 200, 16, 16, NON_SECURITY_PORT);
#endif
printf("\r\n=====================================================");
printf("\r\nSTEP2: Register Command( NB Notify )");
printf("\r\n=====================================================\r\n");
los_nb_notify("+NNMI:",strlen("+NNMI:"),nb_cmd_data_ioctl,OC_cmd_match); //此处还需要研究
// 注册下发命令回调函数 注册下发命令回调函数可实现对平台下发命令的快速相应并处理
// 第一个参数为要匹配数据字段,第二个参数为匹配字段的长度、第三个参数为命令回调的执行函数、第 四个为注册字段的匹配函数。
printf("\r\n=====================================================");
printf("\r\nSTEP3: Report Data to Server( NB Report )");
printf("\r\n=====================================================\r\n");
nb_iot_entry();
#else
printf("Please checkout if open WITH_AT_FRAMEWORK and USE_NB_NEUL95_NO_ATINY\n");
#endif
}
los_nb_init初始化nb模块
los_nb_notify("+NNMI:",strlen("+NNMI:"),nb_cmd_data_ioctl,OC_cmd_match);这个函数的功能需要进一步研究,下行命令的接收与此函数有关
nb_iot_entry此函数中创建了传感器数据收集,数据上报,命令响应等函数