物联网中断设计学习1. 基于liteOS的华为云的智慧农业项目

初学阶段,这么大的代码量还是第一次遇到。写一点东西备忘

 

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此函数中创建了传感器数据收集,数据上报,命令响应等函数

 

你可能感兴趣的:(物联网中断设计学习1. 基于liteOS的华为云的智慧农业项目)