实验六
步骤一;移植光敏传感器代码,通过传感器采集光照亮度
右击“IoT-Demo”选择“Manage project Items…”;
在“project Items”标签下的“Groups”中添加“Hardware”,并在该group下添加光敏传感器代码;
添加“IoT-Demo-LiteOS\targets\ Hardware\BH1750”目录下的“BH1750.c”文件,点击“OK”;
添加光敏感传感器代码的头文件路径
添加引用光敏传感器头文件的代码BH1750数据的全局变量并添加光敏传感器数据上报是携带的messageld的代码
“main.h” /*USER CODE BEGIN Private defines/与 /USER CODE END Private defines */之间添加全局变量“msg_for_BH1750”与“BH1750_send”定义的代码
在main.c的/USER CODE BEGIN 2/与/USER CODE BEGIN 2/之间生成的代码,添加创建光敏传感器任务的代码,并注释task1与task的代码
点击Download,下载程序至开发板
打开QCOM串口调试助手
步骤2移植NB入网代码,通过NB模组将数据上报至平台
登录Ocean Connect平台,参照实验三的方式注册设备(设备名称自定义,设备验证码为NB模组的IMEI号);打开Keil,在Keil中右击Lot-Demo选择Manage Project Items...在Project Items标签下的Application/User中添加Iot-Demo-LiteOS/targets/Src目录下的at_hal.c文件
在“project Items”便签下的“Groups”中添加“at_device”,并在该group下添加基于LiteOS的NB模组代码;添加“IoT-Demo-LiteOS\components\net\at_device\nb_bc95”目录下的“bc95.c”文件
在Project Items标签下Groups中添加at_framework,并在该group下添加LitsOS AT框架实现的代码,添加Iot-Demo-LiteOS\components\net\at_frame目录下的全部.c文件
Project Items标签下Groups中添加nb-iot-api,并在该group下添加基于LitsOS的NB-IOT API的代码,添加Iot-Demo-LiteOS\components\connectivity\nb_iot目录下的ios_nb_api.c文件
在Option for Target‘Iot-Demo’界面下选择C/C++,在Define中添加全局宏定义标识符:WITH_AT_FRAMEWORK,USE_NB_NEUL95
在Incude Paths栏添加相应文件的头文件路径
头文件路径分别为:
Iot-Demo-LiteOS\components\connectivity\lwm2m\core\er-coap-13
Iot-Demo-LiteOS\components\net\at_device\nb_bc95
在main.c的/USER CODE BEGIN Include/与/USER CODE BEGIN Include/之间添加调用AT框架与BC95头文件的代码,并声明BC95入网的全局变量
在“main.h”的 /*USER CODE BEGIN Private defines/与 /USER CODE END Private defines */之间添加调用“msg_sys_type bc95_net_data”定义的代码;
在“main.c”的 /*USER CODE BEGIN 0/与 /USER CODE END 0 */之间添加BC95模组入网连接平台发送数据任务代码;定义该任务名为“data_send_task”,优先级为1;通过该任务,MCU向BC95发送平台ip及port信息和光敏传感器数据并通过串口打印发送结果;
基于步骤1在“main.c”的 /*USER CODE BEGIN 2 /与 /USER CODE END 2 */之间生成的代码,添加创建BC95模组入网连接平台发送数据任务的代码;
点击Rebuild,编译工程
点击“Download”,下载程序至开发板
打开QCOM串口调试助手,根据对应的串口号,配置对应信息,通过跳线帽将开发板的UART1的RX和TX与CH340的TX和RX连接,将开发板上的UART2的RX和TX与NB-IOT的TX和RX连接,点击MCU_RST,开发板运行程序。此时在QCOM上可以看到打印任务的信息
登录平台,可以查看到注册的设备处于在线状态,通过“历史数据”可以查看开发板上报的数据;
平台层
完成实验一中所有Profile的设计,同时完成编解码插件开发,同时设定地址域。为了区别多个消息,每个消息必须有地址域。地址域为标识此消息的唯一的字段。这样做的原因是为了识别各种消息,同时保证每个消息具有正确性,提高了效率。此次实验我们接受到的是一串二进制码流,通过平台的编解码插件开发的实现,以及Profile的设计,以及每个消息有唯一的地址域,导致最后我们收到的是通过二进制转化而来的我们所需要的信息。
设备层
我们需要通过keil5 软件完成相应的设置,让设备能够与平台相互能够实现通信。
首先完成所有的初始化,如图所示;